我有400,000个MIDI需要自动转换为MP3。我知道MIDI没有定义波形。我也知道我可以将MIDI导入DAW并将合成器映射到单个轨道,所以显然可以自动执行此操作。我一直在寻找一种方法来做到这一点。每个MIDI应该有一个随机生成的合成器映射到每个轨道。
我看过SoundFonts,但我不知道如何创建它们或自动生成它们或自动将它们应用到MIDI。
有没有人知道用于创建可以映射到MIDI轨道的合成器的工具或SDK,还是以编程方式生成和应用SoundFonts的方法?如果没有,是否有人理解允许我这样做的工具中涉及的低级步骤?我找了工具来做到这一点但没有成功。也许如果我理解了所涉及的部分,我可以写一些东西来做这件事,但我甚至不知道该怎么查。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:5)
好的,这里有几个不同的问题,每个都有自己的困难。
假设你想要MIDI - > SF2 - > MP3,Timidity++源代码将是一个很好的起点。 Timidity ++“可以通过将MIDI文件转换为PCM波形数据来播放MIDI文件”。可以在Github上找到A recent fork of Timidity++。
要转换为 MP3 ,您需要一个额外的工具。 LAME将是一个很好的起点。将Timidity和LAME拼接在一起,你可以通过SF2从MIDI转到MP3。这个脚本说明了如何在不编写自己的应用程序的情况下实现这一目标。
for file in *.mid do
timidity $file -Ow -o - | lame - $file.mp3
done
您的问题的另一个元素,涉及随机生成的合成器,无法通过上述方法轻松解决。如果我正确理解了这个问题,您需要执行以下操作:
SF2 is a primarily sample-based format,如果您基本上想要通过MIDI播放随机合成器并将输出保存到音频文件,则会引入不必要的复杂性。
为了解决您的问题,我建议跳过SF2步骤,并查看像Synthesis ToolKit(STK)这样的音频处理框架。 STK能够读取MIDI文件和声音合成。然后,您可以使用LAME将音频缓冲区转换为MP3。