是否有Windows程序可以确定在音频文件(例如mp3文件)中找到的“最高声波频率”?
例如,它应该能够分析文件Dog-Whistle-0并确定在文件中找到的最高频率大约为〜12000 Hz。
另外,它应该能够分析Piano.mp3并确定最高音符。
是否有Windows程序可以确定在音频文件(例如mp3文件)中找到的“最高声波频率”?
例如,它应该能够分析文件Dog-Whistle-0并确定在文件中找到的最高频率大约为〜12000 Hz。
另外,它应该能够分析Piano.mp3并确定最高音符。
Answers:
R是跨平台且免费/开源的。
加载它,然后加载tuneR
和seewave
库(如果尚未安装,请从软件包管理器安装它们)。
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左右,具体取决于所涉及的乐器。但是,此最高频率不会给您估计正在播放的音符,因为当乐器演奏时,一个音符将由多个频率组成。
这就是所谓的乐器“音色”,与电吉他演奏的A相比,长笛在440 Hz处的A将包含不同的频率分量。
最好的选择是通过查看滑动时间窗口上的频率峰值来进行主导频率分析,并检查最高频率出现在哪里。
但是,没有“频率随时间推移”这样的东西。您只能在某些滑动时间窗口上绘制平均(或主导)频率。Seewave提供了许多有关选择时间窗口的功能,但是它变得相当复杂。
你可以用
s = specprop(meanspec(w, from=10, to=11))
以获得10到11秒之间的频谱属性,然后调用s$centroid
或s$mean
获得该特定时间窗口的质心或平均频率(尽管1秒对于音频分析而言相当大)。
如果您的Wave文件使用44.1 kHz采样,则可以对其进行下采样以减少计算量,例如减少到16 kHz。
w = downsample(w, 16000)
但是请记住,根据Nyquist定理,现在可以表示的最大频率为8 kHz。
您也可以寻找音高检测软件。像这样,尽管需要MATLAB。
您尝试过Audacity吗?这是一个免费软件工具,具有一些相当复杂的分析工具,其中包括从Analyze-> Plot Spectrum ...访问的Plot Spectrum命令。
请注意,与MP3版本相比,使用MP3版本的文件可获得不同的结果,因为MP3压缩改变了波形并引入了失真/混叠。
编辑:您链接到的那些声音文件不是一个很好的例子。较高频率的文件仅以44.1KHz采样,这是为人耳量身定制的(最大20KHz)。不增加采样率就无法表示超声频率。
fpeaks
,您是否知道是否有一个函数绘制频率与时间的关系图?