我开始了一个小项目,其中包括使用MIDI文件。我一直在想,是否有任何C#或VB.Net代码可以实现MIDI和WAV文件之间的转换?
答案 0 :(得分:8)
MIDI files仅包含音符和控制器信息,而不包含声音。为了从MIDI文件中获取声音,您必须通过音乐合成器或采样器传递文件,这将把音符和控制器信息转换为实际声音。
实际上,这意味着任何给定的MIDI文件都没有特定的声音。将MIDI文件转换为音频所产生的声音将根据合成器或样本库的质量以及为执行转换而选择的声音而有所不同。
许多声卡都能够从MIDI文件中产生声音。他们可以这样做,因为许多MIDI文件都遵循一个名为General MIDI specification的标准。通用MIDI规范提供了映射特定仪器分配的标准化方法。如果您的MIDI文件符合此标准,您可以通过通用MIDI声音发生器播放它,并期望小鼓听起来像军鼓,而不是像小号。
如果你有一个复杂的音乐制作软件包,如Cakewalk,你可以加载一个MIDI文件,它将使用它的板载声音库为你渲染一个声音文件,这实际上可以是比实时更快(即它不必通过声卡播放声音并捕获输出)。
我想我想说的是这里有很多活动部分。没有一段代码或类模块可以为您执行此操作。
答案 1 :(得分:8)
您可以尝试以某种方式与Timidity进行交互,这是开源:
TiMidity ++是一款软件合成器。它可以通过将MIDI文件转换为PCM波形数据来播放MIDI文件;给它一个MIDI数据和数字乐器数据文件,然后实时合成它们并播放。它不仅可以播放声音,还可以将生成的波形保存为各种音频文件格式的硬盘。
FluidSynth是一个最新更新的开源项目,类似地:
FluidSynth是一款基于SoundFont 2规格的实时软件合成器。
您可以从this list上的网站下载一些免费的SoundFonts(这些合成器使用的实际PCM数据来“渲染”MIDI文件)。
答案 2 :(得分:0)
您可以购买许多程序来执行此操作(谷歌“将midi转换为WAV”),但我从未遇到过这样做的公开可用的.Net代码(我认为其中一些程序是以.Net编写,但源代码不可用。)
我有一个在线朋友正在研究商用MIDI-to-WAV转换器,但它不在.Net中,它不会是开源的。正如罗伯特哈维所提到的,这根本不是一项简单的任务,因为它基本上涉及编写自己的软件合成器(我心中的任务)。