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

Python音频分析:找到每米中最强拍的实时值,python,audio-processing,librosa,Python,Audio Processing,Librosa,我有一首歌,我想用Python来分析它 我需要在歌曲中找到“主要声音”。 我使用这个术语是因为我不知道它的技术术语,但我的意思是: 如果你只播放歌曲的第一秒,我会计算出大约4种主要的声音 一般来说,这些声音与一个人哼唱歌曲时发出的声音相同 这些叫什么?在librosa(或任何其他库/编程语言)中是否有一个函数可以帮助我确定它们在歌曲中的出现 我可以根据需要提供更多信息/示例 更新:在做了更多的研究之后,我相信我正在寻找所谓的“最强节奏”。Librosa已经有了一个beat_track功能,但我

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

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

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

一般来说,这些声音与一个人哼唱歌曲时发出的声音相同

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

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


更新:在做了更多的研究之后,我相信我正在寻找所谓的“最强节奏”。Librosa已经有了一个beat_track功能,但我认为这会给你歌曲中每一个可以称为beat的东西。我不是真的想要每一个节拍,只是那些最突出的。这里的首要目标是创建一个音乐视频,其中屏幕上发生的主要动作与最强的节拍完美地对齐。这在视频中产生了一种协同效应,让人感觉一切都是相互关联的。

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

音频有一个时间维度,所以要观看你的“主要声音”,需要听一段时间的音频。。。跨越一系列瞬时音频样本。音频可以被认为是一条时间序列曲线,在该曲线中,您可以记录音频曲线的高度,并将其数字化为PCM格式。听到一个给定的“主要声音”需要挂钟时间。在这里,您的音频在时域中处于自然状态。然而,一段音频的信息负载可以通过向fft api调用提供一个音频样本窗口(进行傅里叶变换)来转换为其频域对应项

采用FFT的一个非常微妙的方面是,它从输入数据中删除了时间维度,并用蒸馏代替它,同时保留了输入信息负载。另一方面,如果音频通过应用傅里叶变换从时域转换为其频域表示,则可以通过应用逆傅里叶变换将其重构回相同的时域音频曲线。这些数据最初是一条随时间上下摆动的曲线,现在被转换成频率分布,每个频率都有强度和相位偏移,但没有任何时间概念。现在,您可以从这个静态频率数组中提取一组属性,这些属性可以由一个普通的struct数据结构表示,但也可以被其潜在的时间来源所浸透

在这里你可以找到你的“主要声音”。对于第一个近似值,您只需将顶部的X频率及其强度值存储起来,这是对作为“主要声音”捕获的输入音频的给定时间段的度量。一旦有了“主要声音”的集合,您就可以通过在预存储的“主要声音”集合和当前音频样本窗口的FFT之间执行差异匹配测试来识别任何后续音频何时包含“主要声音”的出现。当当前FFT结果的每个前X频率的频率强度值与每个预先存储的“主要声音”相比几乎没有差异或没有差异时,您发现了匹配

我可以离题解释一下,坐下来弹钢琴,你是如何对那些小的黑白频率键进行傅里叶逆变换的,或者说,春雨肆虐的牧场上泥泞的车辙是无数满载的市场货车的傅里叶变换,它们向前滚动,留下了一条不断加深的车辙,上面印着每辆货车的车轴宽度,但我不会这么说

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

Python中的音频指纹识别

使用Python和Numpy进行音频指纹识别

连续音频流的类似沙扎姆的声音指纹(github.com)

音频地标指纹作为节点流模块-nodejs将PCM音频信号转换为一系列音频指纹


我并不是真的想通过指纹识别一首歌,我只是想选一首歌,找出每一米中最强拍的时间值。因此,最终结果应该是某种数组,比如
a=[0.25,0.5,0.70,1.10…]
,其中每个数值都是一个时间值(以秒为单位),用于精确定位米中最强的拍。