ios - 从各种乐器的 MIDI 音符生成音频文件

标签 ios audio core-audio coremidi

我有一个要求,我需要在用户操作上播放连续的 MIDI 声音。我只需要使用 midi,因为我有大量需要演奏的乐器/声音。这是我能够实现的应用程序的一部分。我使用音频图等来实现这一点。现在的问题是记录这些笔记。正如我提到的,我有很多乐器,我需要分别录制每个乐器的声音。因此,我尝试将 midi 音符编号保存到每个乐器的数组中。现在的问题是我必须混合所有这些声音(最好不要通过混音器重放它们)并用它们创建一个音乐文件。我能想到的一种乏味的方法是在播放 MIDI 音调时将每个乐器单独录制到一个音乐文件中,最后通过加起来混合所有乐器音乐文件。但是用户可能会延迟一些乐器曲调等,然后我发现它很难混合。此外,我无法找到一种合适的方法来混合各种长度的音频文件,以及它们之前的延迟。谁能告诉我是否有一种方法可以从各种乐器的 MIDI 音符编号生成音频文件,而无需通过多 channel 混音器播放它们并等到所有声音都通过混音器播放完成后再录制他们?如果您有其他似乎可行的方法,请您也告诉我吗?

最佳答案

我不完全理解你想要达到的目标,但我会试一试。

如果您要在 Core Audio 中使用音乐播放器 API,您可以设置一个包含任意数量轨道的音乐序列,每个音乐轨道一个乐器,然后在每个轨道发生时将 midi 数据写入每个轨道。这将为您提供所有已播放内容的同步记录。同步取决于您:实时添加音符(同步所有轨道)或在每个轨道的开头添加音符。

音乐播放器可以让你导出一个 .midi 文件,但你没有得到自定义的 AUSampler 声音字体——所以这对你来说并不是很有用。我不知道在不实际渲染(播放)的情况下生成音频文件的方法。可能是混音器输出上的渲染回调 - 并且混音器未连接到 remoteIO(不知道这是否可能)。

关于ios - 从各种乐器的 MIDI 音符生成音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013438/

相关文章:

ios - UIcollectionView scrollToitemAtIndexPath 不适用于不可见的单元格

ios - FFT的大小实际上意味着什么

android - 如何在android上实现实时音频处理?

ios - IPCAUClient : bundle display name is nil

macos - 使用 Xamarin (C#) 在 MacOS 上编写音频设备环回

ios - AudioFileWriteBytes 完成其工作所需的时间太长

iOS Swift 3 存在 MFMailComposeViewController 导致崩溃

ios - UITableView 单元格中没有出现任何内容

ios - 在不删除粗体/下划线/斜体格式的情况下更改 UITextView 字体

java - 在java中加载音频时出错(在接口(interface)Clip中非法调用open())