如何在c#中将midi转换为wav / mp3?

我开始了一个小项目,包括使用MIDI文件。 我一直在想,是否有任何C#或VB.Net代码可以实现MIDI和WAV文件之间的转换?

你可以尝试以某种方式与Timidity接口,这是开源的:

TiMidity ++是一个软件合成器。 它可以通过将MIDI文件转换为PCM波形数据来播放MIDI文件; 给它一个MIDI数据和数字乐器数据文件,然后实时合成它们并播放。 它不仅可以播放声音,还可以将生成的波形保存为各种音频文件格式的硬盘。

FluidSynth是一个类似的最近更新的开源项目:

FluidSynth是基于SoundFont 2规范的实时软件合成器。

您可以从此列表中的站点下载一些免费的SoundFonts(这些合成器使用的实际PCM数据来“渲染”MIDI文件)。

MIDI文件仅包含音符和控制器信息,而不包含声音。 为了从MIDI文件中获取声音,您必须通过音乐合成器或采样器传递文件,音乐合成器或采样器会将音符和控制器信息转换为实际声音。

实际上,这意味着任何给定的MIDI文件都没有特定的声音。 将MIDI文件转换为音频所产生的声音将根据合成器或样本库的质量以及为执行转换而选择的声音而有所不同。

许多声卡都能够从MIDI文件中产生声音。 他们可以这样做,因为许多MIDI文件都遵循一般称为通用MIDI规范的标准。 通用MIDI规范提供了映射特定仪器分配的标准化方法。 如果您的MIDI文件符合此标准,您可以通过通用MIDI声音发生器播放它,并期望小鼓听起来像军鼓,而不是像小号。

如果你有一个像Cakewalk这样复杂的音乐制作软件包,你可以加载一个MIDI文件,它会使用它的板载声音库为你渲染一个声音文件,这实际上可以比实时更快地完成(即它不必通过声卡播放声音并捕获输出)。

我想我想说的是这里有很多活动部分。 没有一段代码或类模块可以为您执行此操作。

你可以购买许多程序来执行此操作(google“将midi转换为WAV”),但我从来没有遇到过这样做的公共可用的.Net代码(我认为其中一些程序是用这些程序编写的)。网,但源代码不可用)。

我有一个在线朋友正在研究商用MIDI-to-WAV转换器,但它不在.Net中,它不会是开源的。 正如罗伯特哈维所提到的,这根本不是一项简单的任务,因为它基本上涉及编写自己的软件合成器(我心中的任务)。