是否有一个程序可以确定音频文件中的最高音调?

是否有一个程序可以确定音频文件中的最高音调?

是否有一个 Windows 程序可以确定音频文件(例如 mp3 文件)中的“最高声波频率”?

例如,它应该能够分析文件狗哨-0并确定文件内的最高频率大约为~12000 Hz。

此外,它应该能够分析钢琴.mp3并确定最高音符。

答案1

R是跨平台的并且免费/开源。

加载它,并加载tuneRseewave库(如果尚未安装,请从包管理器安装它们)。

library(tuneR)
library(seewave)

然后,加载您的 MP3 或 WAV 文件:

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

现在,让我们绘制频谱及其峰值:

fpeaks(meanspec(w), nmax=1)

结果:

数值结果:

fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859

以上仅适用于非音乐数据。当您分析音乐频率时,您会发现最高频率始终在 12-20 kHz 左右,具体取决于所涉及的乐器。但是,这个最高频率不会让您估算出正在演奏的音符,因为乐器演奏的音符将由多个频率组成。

这就是所谓的乐器的“音色”,你会发现长笛演奏的 440 Hz 的 A 和电吉他演奏的 A 包含不同的频率成分。

最好的办法是通过查看滑动时间窗口内的频率峰值来运行主频率分析,并检查最高频率出现的位置。

但是没有“频率随时间变化”这样的东西。你只能绘制特定滑动时间内的平均(或主导)频率视窗。Seewave 提供了不少关于选择时间窗口的功能,但是相当复杂。

你可以使用

s = specprop(meanspec(w, from=10, to=11)) 

获取从 10 到 11 秒的频谱属性,然后调用s$centroids$mean获取该特定时间窗口的质心或平均频率(尽管 1 秒对于音频分析来说相当大)。

如果您的 Wave 文件使用 44.1 kHz 采样,您可以对其进行下采样以减少计算工作量,例如下采样到 16 kHz。

w = downsample(w, 16000)

但请记住,根据奈奎斯特定理,目前能够表示的最大频率为8kHz。

你也可以寻找音高检测软件。例如这个,但这需要 MATLAB。

答案2

你有没有尝试过大胆? 这是一个免费软件工具,具有一些相当复杂的分析工具,包括绘制频谱命令访问自分析 -> 绘制频谱...

截屏

请注意,与 WAV 版本相比,MP3 版本的文件会获得不同的结果,因为 MP3 压缩改变了波形并引入了伪影/混叠。

编辑:您链接的那些声音文件并不是很好的例子。较高频率的文件仅以 44.1KHz 采样,这是针对人类听觉量身定制的(最高约为 20KHz)。如果不增加采样率,就无法表示超声波频率。

相关内容