12

我开始了一个小项目,其中包括处理 MIDI 文件。我一直在想,是否有任何 C# 或 VB.Net 代码可以在 MIDI 和 WAV 文件之间进行转换?

4

3 回答 3

9

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

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

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

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

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

于 2009-07-26T20:23:21.797 回答
8

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

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

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

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

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

于 2009-07-26T20:16:14.243 回答
0

您可以购买许多可以执行此操作的程序(谷歌“将 midi 转换为 WAV”),但我从未遇到过执行此操作的公开可用的 .Net 代码(我认为其中一些程序是用 . NET,但源代码不可用)。

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

于 2009-07-26T20:21:45.170 回答