使用 MATLAB 将 .mid 转换为 .wav

Posted

技术标签:

【中文标题】使用 MATLAB 将 .mid 转换为 .wav【英文标题】:Convert .mid to .wav using MATLAB 【发布时间】:2016-10-27 03:38:29 【问题描述】:

我一直在使用这个库 (http://kenschutte.com/midi) 来处理 midi 文件,这里的函数非常有用。然而,midi2audio() 方法只会产生乱码的 .wav 文件,无论我放入什么 midi(尽管音符是可识别的并且正在播放正确的 midi)。有没有其他人使用过这个函数库并遇到同样的问题,如果是这样,我该如何解决这个问题?或者有没有我可以在网上使用的另一个功能做同样的事情?

以下是用于生成 .wav 文件的代码(从上面的链接复制并粘贴)

[y,Fs] = midi2audio(midi); % save to file: % (normalize so as not clipped in writing to wav) y = .95.*y./max(abs(y)); wavwrite(y, Fs, 'out.wav');

【问题讨论】:

【参考方案1】:

midi2audio 似乎只包含非常基本的声音合成,默认为调频合成。如果换成简单的正弦波合成,会不会更好听?

[y,Fs] = midi2audio(midi, 'sine')

如果仍然不能解决问题,您可能需要使用更复杂的软件工具。

最简单的跨平台方法可能是FluidSynth(也可以通过各种存储库获得,例如 MacPorts、Homebrew、apt-get、GitHub……) FluidSynth 使用基于样本的声音合成将 MIDI 指令转换为音频,并且需要 SoundFont2 格式的样本库才能工作。一个这样的可以找到here。

整理好之后,您只需在终端/控制台中输入 WAVE 文件即可从 MIDI 文件中生成 WAVE 文件:

fluidsynth -F out.wav path-to-fm2-file in.mid

【讨论】:

不幸的是,我尝试将“fm”参数更改为“sine”,但声音质量仍然不是很高。我能否以某种方式在 MATLAB 代码中运行 FluidSynth,还是只需在终端中输入您提到的命令? @pdrum 我对 matlab 不熟悉,但很可能有一种方法可以从内部调用系统命令并捕获输出。但根据您的使用情况,最简单的方法可能是直接从终端(osx、linux)或控制台(windows)进行。

以上是关于使用 MATLAB 将 .mid 转换为 .wav的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android 中将 .mid 转换为 .wav 文件?

FluidSynth() 输出音量太低

如何将wav格式声音文件转换为文本文件

如何把matlab里的音频文件转换为wav格式

Matlab中wav文件怎么转换成mat文件

将 wav 文件转换为没有标头的原始二进制文件