【发布时间】:2011-03-04 11:06:20
【问题描述】:
我有一个相当有趣的问题要解决。
我想获取一个非常简单的声音(钢琴上弹奏的一个音符)并尝试以这样的方式处理它,以便我可以打印出最有可能弹奏的音符。
通过一些谷歌搜索和搜索,我发现了快速傅立叶变换,但我不完全确定如何使用它来分析 wav 文件中的数据。
我的另一个想法是,每次播放的音符都应该或多或少相同。如果是这种情况,将两个 wav 文件转换为字节数组的百分比匹配是否有用?
我们将不胜感激。
【问题讨论】:
我有一个相当有趣的问题要解决。
我想获取一个非常简单的声音(钢琴上弹奏的一个音符)并尝试以这样的方式处理它,以便我可以打印出最有可能弹奏的音符。
通过一些谷歌搜索和搜索,我发现了快速傅立叶变换,但我不完全确定如何使用它来分析 wav 文件中的数据。
我的另一个想法是,每次播放的音符都应该或多或少相同。如果是这种情况,将两个 wav 文件转换为字节数组的百分比匹配是否有用?
我们将不胜感激。
【问题讨论】:
FFT 是比比较两个 WAV 更好的选择。 FFT 将产生一个频谱,并且由于钢琴产生相对纯净的音调,当您绘制它时,您会观察到非常明显的尖峰。每个尖峰的位置表示波形的组成频率之一,最大的尖峰代表音符。
【讨论】:
您应该分析正在播放的音符的频率。我有点生疏,但我认为 FFT 应该这样做,因为它将波形分解为频谱。
您不想将 wav 文件与已存储的文件进行比较,因为周期幅度等可能不同。 “百分比匹配”会产生错误的结果。
一旦你有了波形的频率,你就可以设计正在播放的音符。
【讨论】:
我会开始阅读数字信号处理 (DSP) 和频谱分析。听起来您正试图找到钢琴音符的基频。
要对 WAV 或其他文件格式进行任何有意义的工作,您需要提取和解释音频样本。如果不想手动这样做,我建议查看大量现有的 DSP 库。我不确定存在哪些好的 c# 库。
快速傅立叶变换 (FFT) 实质上会将您在时域上的功率转换为频域,实质上是为您的音频添加一个 z 轴。
【讨论】: