Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

2年前关闭。



Improve this question




我有40万个MIDI,它们需要自动转换为MP3。我知道MIDI不会定义波形。我也知道我可以将MIDI导入DAW并将合成器映射到单个轨道,因此显然可以自动执行此操作。我一直在寻找一种方法来做到这一点。每个MIDI应该有一个随机生成的合成器映射到每个音轨。

我看过SoundFonts,但是我不知道如何创建它们或自动生成它们或将它们自动应用于MIDI。

有谁知道存在用于创建可以映射到MIDI轨道的合成器的工具或SDK,或者以编程方式生成和应用SoundFonts的方法?如果不是,是否有人理解允许我执行此工具的低级步骤?我一直在寻找无法成功实现这一目标的工具。也许如果我了解其中涉及的部分,我可以写一些东西来做到这一点,但是我什至不知道要查找什么。

任何帮助,将不胜感激,谢谢。

最佳答案

好的,这里有几个不同的问题,每个问题都有自己的困难。

MIDI到MP3的转换

假设您要进入MIDI-> SF2-> MP3,Timidity++源代码将是一个很好的起点。 Timidity++“可以通过将MIDI文件转换为PCM波形数据来播放”。 A recent fork of Timidity++可以在Github上找到。

要转换为 MP3 ,您需要其他工具。 LAME将是一个不错的起点。将Timidity和LAME拼接在一起,您可以通过SF2从MIDI到MP3。该脚本说明了如何在不编写自己的应用程序的情况下实现这一目标。

for file in *.mid do
    timidity $file -Ow -o - | lame - $file.mp3
done

随机合成

您问题的其他要素,涉及随机生成的合成器,实际上无法通过上述方法轻松解决。如果我正确理解了该问题,则需要执行以下操作:
  • Synthesise某些声音,其中合成的某些方面是随机的
  • 随机选择要分配给每个MIDI channel 的声音以播放

  • SF2 is a primarily sample-based format,如果您本质上想通过MIDI播放随机合成器并将输出保存到音频文件,则会引入不必要的复杂性。

    为了解决您的问题,因此我建议跳过SF2步骤,并查看像Synthesis ToolKit(STK)这样的音频处理框架。 STK能够读取MIDI文件和声音合成。然后,您可以将LAME用于音频缓冲区到MP3的转换。

    关于mp3 - MIDI到MP3的自动转换以及随机生成的合成器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8108672/

    10-14 10:07