【发布时间】:2021-01-23 08:30:48
【问题描述】:
AudioInputStream stream = AudioSystem.getAudioInputStream(new File("file_a4.wav"));
我正在寻找一种方法来识别记录在 .wav 文件中的音阶声音(例如 A4 = 440 Hz)的频率。我读过很多关于 FFT 的文章,但有人建议音阶上的频率与 FFT 不匹配。
我也听说过 DTFT。我应该使用什么来识别声音文件中的频率?
【问题讨论】:
-
您可以使用Discrete-time Fourier transform。如果您的 WAV 文件包含一个频率,您将获得一个峰值。如果您的 WAV 文件包含乐谱,您将获得多个峰值,每个音符对应一个正在播放的音符。
-
事实上,即使是一个音符,你也可能会得到多个峰值,除非它是一种产生纯正弦波的乐器。您可能需要从 DFT 输出中搜索出基频。
-
请注意,Java-FX 的播放器会提供音频信号的频谱分析。当我放弃 Java Sound 不可靠(跨平台和版本)并开始使用 Java-FX 播放器时,很高兴我可以用频谱替换声波轨迹。
标签: java javasound frequency-analysis