微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从Java中的.WAV文件识别声音频率

如何解决如何从Java中的.WAV文件识别声音频率

AudioInputStream stream = AudioSystem.getAudioInputStream(new File("file_a4.wav"));

我正在寻找一种方法来识别记录在.wav文件中的音阶声音的频率(例如A4 = 440 Hz)。我已经阅读了很多有关FFT的文章,但有人建议音阶上的频率与FFT不匹配。

我也听说过DTFT。我应该使用什么来识别声音文件中的频率?

解决方法

我从您的问题中了解到,您想识别乐器在wav文件中正在演奏的音符。如果是这种情况,那么有几种算法可以做到这一点,您也可以随时训练神经网络来做到这一点。
需要考虑的一些重要事项是:

  1. 任何一种乐器(由人声产生的音乐声音也会发生这种情况)在产生音符时具有其自己的特定“颜色”。这种颜色称为音色(https://en.wikipedia.org/wiki/Timbre),由谐波和非谐频率组成,这些频率围绕您在听特定音符时心理听觉所感知的频率。这就是为什么您不能只寻找FFT的峰值来检测音符的原因,这也是为什么弹奏相同音符时钢琴的声音与吉他声音不同的原因。

  2. 通常通过对信号加窗并计算信号加窗部分的DFT来进行音频信号的分析。然后,每个窗口都会产生自己的光谱,它来自对每个光谱的分析和/或对它们之间相互作用的分析,您(例如您的CNN)将获得您的结论/结果。窗口化信号并计算DFT的过程会产生一个频谱图(https://en.wikipedia.org/wiki/Spectrogram#:~:text=A%20spectrogram%20is%20a%20visual,sonographs%2C%20voiceprints%2C%20or%20voicegrams.

简短介绍之后,下面是一些用于识别wav文件中单个音符的简单算法。您将能够在Internet上以及其他许多网络上找到这些算法的实现。对和弦产生的音符的检测更为复杂,但可以使用其他算法或神经网络来完成。

  1. 关于使用自相关分析进行音高检测:https://ieeexplore.ieee.org/document/1162905
  2. YIN算法:http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。