我有一个需要在用户操作上连续播放Midi声音的要求。我需要使用Midi,因为我需要演奏很多乐器/声音。那是我能够实现的应用程序的一部分。我使用音频图等来实现这一目标。现在的问题是这些笔记的录音。正如我提到的,我有很多乐器,我需要分别录制每个乐器的声音。因此,我尝试将Midi音符编号保存到每种乐器的数组中。现在的问题是我必须混合所有这些声音(理想情况下不通过调音台重放它们)并从中创建音乐文件。我可以想到的一种单调乏味的方法是,在自己演奏Midi音调时将每个乐器分别录制到一个音乐文件中,最后通过累加来混合所有乐器音乐文件。但是用户可能会延迟某些乐器的音调等,然后,我发现很难混音。而且,我找不到合适的方法来混合各种长度的音频文件,并在它们之前进行延迟。任何人都可以让我知道是否有一种方法可以从各种乐器的Midi音符编号生成音频文件,而不必通过多通道混音器播放它们,而等到所有声音都通过混音器播放后再录制他们?如果您有其他可能的方法,也可以让我知道吗?
最佳答案
我不完全了解您要达到的目标,但我会尝试一下。
如果要在Core Audio中使用Music Player API,则可以设置一个音乐序列,其中包含所需数量的曲目,每个Music Track包含一台乐器,然后将Midi数据写入每个曲目。这将为您提供所有已播放内容的同步记录。同步由您决定:实时添加音符(所有音轨均已同步)或在每个音轨的开头开始添加音符。
音乐播放器将允许您导出.midi文件,但您无法获得带有该文件的自定义AUSampler声音字体-因此,这对您并不是真正有用的。我不知道一种无需实际渲染(播放)音频文件的方法。也许是混音器输出上的渲染回调-混音器未连接到remoteIO(不知道是否可行)。
关于ios - 从各种乐器的Midi音符中生成音频文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13013438/