【发布时间】:2021-01-10 00:38:05
【问题描述】:
我正在制作一个 Java 个人项目,您可以在其中录制自己演唱的歌曲,该程序将加载一首与该旋律最匹配的歌曲(从预先选择的小选择中)。到目前为止,我已经实现了用户使用 Java Sound API 将音频文件录制为 WAVE 文件的功能。我已经看到,对于音频相似性,可以在音频文件之间进行相关性,并通过测量相关性图中是否存在高幅度峰值,可以确定音频文件是否相似。
我在信号处理堆栈交换中阅读了以下帖子 https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar 谈到使用快速傅里叶变换来完成卷积(适用于延时音频的相关性)。我已经在 Github 上导入了 JTransforms 项目以使用 FFT,但我不确定如何将 WAVE 文件转换为可用于执行相关或卷积的数字表示(类似于大型值数组)。非常感谢任何有关如何解决此问题的建议!
【问题讨论】:
-
你好,这个网站不是这样工作的:D 你必须向我们展示一些细节/代码以获得帮助,这将表明你正在尝试解决问题。
-
音频存在于时域中,您有一条上下摆动的曲线,但平坦到零交叉线,通常为零表示静音。摆动范围从有符号整数上的最大负数到最大正数..对于初学者来说,忽略 FFT 只需同时遍历两个音频源并求和为一个总值,因为您将从每个源记录中获取的每个样本对相乘......如果两个输入源文件匹配这个总和会很大...要及时对齐两个记录,您可能需要在上面重复整个文件,同时引入时间偏移
-
google 上的第一个链接:
how to compare two .wav files:audiophilestyle.com/forums/topic/20872-comparing-two-wav-files
标签: java audio signal-processing fft waveform