使用 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的主要内容,如果未能解决你的问题,请参考以下文章