2024年Python最全听歌识曲--用python实现一个音乐检索器_自建曲库 音乐识别

我们把他按照索引值为横轴画出来,就是我们常常看见的音频的形式。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


音频处理部分

我们在这里要写我们的核心代码。关键的“如何识别歌曲”。想想我们人类如何区分歌曲? 是靠想上面那样的一维数组吗?是靠歌曲的响度吗?都不是。
我们是通过耳朵所听到的特有的频率组成的序列来记忆歌曲的,所以我们想要写听歌识曲的话,就得在音频的频率序列上做文章。
复习一下什么是傅里叶变换。博主的《信号与系统》的课上的挺水,不过在课上虽然没有记下来具体的变换形式,但是感性的理解还是有的。
傅里叶变换的实质就是把时域信号变换成了频域信号。也就是原本X,Y轴分别是我们的数组下标和数组元素,现在变成了频率(这么说不准确,但在这里这样理解没错)和在这个频率上的分量大小。

image4
image5

上面两幅图来自知乎,非常感谢Heinrich写的文章,原文链接:点我跳转

怎么理解频域这个事情呢?对于我们信号处理不是很懂的人来说,最重要的就是改变对音频的构成的理解。我们原来认为音频就是如我们开始给出的波形那样,在每一个时间有一个幅值,不同的幅值序列构成了我们特定的声音。而现在,我们认为声音是不同的频率信号混合而成的,他们每一个信号都自始至终存在着。并且他们按照他们的投影分量做贡献。

让我们看看把一首歌曲转化到频域是什么样子?
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以观察到这些频率的分量并不是平均的,差异是非常大的。我们可以在一定程度上认为在图中明显凸起的峰值是输出能量大的频率信号,代表着在这个音频中,这个信号占有很高的地位。于是我们就选择这样的信号来提取歌曲的特征。

但是别忘了,我们之前说的可是频率序列,傅里叶变换一套上,我们就只能知道整首歌曲的频率信息,那么我们就损失了时间的关系,我们说的“序列”也就无从谈起。所以我们采用的比较折中的方法,将音频按照时间分成一个个小块,在这里我每秒分出了40个块。
在这里留个问题:为什么要采用小块,而不是每秒一块这样的大块?

我们对每一个块进行傅里叶变换,然后对其求模,得到一个个数组。我们在下标值为(0,40),(40,80),(80,120),(120,180)这四个区间分别取其模长最大的下标,合成一个四元组,这就是我们最核心的音频“指纹”。

我们提取出来的“指纹”类似下面这样

(39, 65, 110, 131), (15, 66, 108, 161), (3, 63, 118, 146), (11, 62, 82, 158), (15, 41, 95, 140), (2, 71, 106, 143), (15, 44, 80, 133), (36, 43, 80, 135), (22, 58, 80, 120), (29, 52, 89, 126), (15, 59, 89, 126), (37, 59, 89, 126), (37, 59, 89, 126), (37, 67, 119, 126)

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值