Python音频分析:查找每米中最强拍子的实时值

时间:2019-02-16 00:37:39

标签: python audio-processing librosa

我有一首歌,我想用Python来分析它。

我需要在歌曲中找到“主要声音” 。 我用这个术语是因为我不知道它的技术术语,但这是我的意思:

https://www.youtube.com/watch?v=TYYyMu3pzL4

如果您只播放歌曲的第一秒,我会算出大约4种主要声音。

通常,这些声音与一个人在哼唱歌曲时会发出的嗡嗡声一样。

这些叫什么? librosa(或任何其他库/编程语言)中是否有功能可以帮助我确定它们在歌曲中的出现?

我可以根据需要提供更多信息/示例。

更新: 经过更多研究,我相信我正在寻找所谓的“最强节奏”。 Librosa已经具有beat_track函数,但是我认为这可以为您提供每首歌曲中可以被称为节拍的东西。我并不是真的想要每个节拍,而是最突出的节拍。这里的首要目标是创建一个音乐视频,使屏幕上发生的主要动作与最强烈的节奏完美地对齐。这样可以在视频中产生协同效应-一切都感觉很紧密。

1 个答案:

答案 0 :(得分:1)

解析音频以识别其声音原型的过程可以称为acoustic fingerprinting

音频具有时间维度,因此要见证您的“主要声音”,需要在一系列瞬时音频样本中收听一段时间。可以将音频视为时间序列曲线,在该时间序列中,每个时间点您都可以记录数字化为PCM格式的音频曲线的高度。听到给定的“主要声音”需要花费墙上时钟的时间。在这里,您的音频在时域中处于自然状态。但是,可以通过将音频样本的窗口馈入fft api调用(进行傅里叶变换),将一段音频的信息负载转换成其频域对应部分。

进行FFT的一个非常有力的微妙方面是,它从输入数据中删除了时间维度,并用精馏取代了它,同时保留了输入信息负载。顺便说一句,如果通过应用傅立叶变换将音频从时域周期性地转换成其频域表示形式,则可以通过应用逆傅立叶变换将其重构回相同的时域音频曲线。最初以随着时间上下波动的曲线开始的数据现在被转换为频率的分布,每个频率都有强度和相位偏移,但严格来说没有时间概念。现在,您可以奢侈地从此静态频率数组中提取一组属性,这些属性可以由平凡的struct数据结构表示,但仍可以被其基础的时间起源所灌输。

在这里您可以找到“主要声音”。初步近似,您只需将最高的X频率及其强度值一起存放起来,这就是对捕获为“主要声音”的输入音频的给定时间范围的度量。收集到“主要声音”后,您可以通过在预先存储的“主要声音”集与FFT的FFT之间进行差异匹配测试,来使用此标记来识别任何后续音频何时包含“主要声音”。音频样本的当前窗口。当与每个预存储的“主要声音”相比,当前FFT结果的前X个频率的每个频率强度值之间几乎没有差异时,您会找到匹配项

我可以通过讲解如何坐下来弹钢琴来对那些白色和黑色的小频率键进行傅立叶逆变换,或者说在春雨溶胀的牧场上浑浊的马车轨迹是所有这些数量不菲的重载市场货车在前进时留下了印有每辆货车轴宽的不断加深的痕迹,但我不会。

这里有一些指向音频指纹的链接

Python中的音频指纹识别和识别 https://github.com/worldveil/dejavu

使用Python和Numpy http://willdrevo.com/fingerprinting-and-audio-recognition-with-python/

进行音频指纹识别

连续音频流的类似Shazam的声学指纹(github.com)https://news.ycombinator.com/item?id=15809291

https://github.com/dest4/stream-audio-fingerprint

作为节点流模块的音频界标指纹-nodejs将PCM音频信号转换为一系列音频指纹。 https://github.com/adblockradio/stream-audio-fingerprint

https://stackoverflow.com/questions/26357841/audio-matching-audio-fingerprinting

相关问题