gpt4 book ai didi

ios - 使用 AVAudioSequencer 将 MIDI 发送到第三方 AUv3 乐器

转载 作者:行者123 更新时间:2023-12-05 07:25:30 24 4
gpt4 key购买 nike

我在使用 AVAudioSequencer(iOS 12.1.4、Swift 4.2、Xcode 10.1)通过 MIDI 控制第三方 AUv3 乐器时遇到问题,非常感谢您的帮助。

我目前在做什么:

  • 获取类型为 kAudioUnitType_MusicDevice 的所有 AU。

  • 实例化一个并将其连接到 AVAudioEngine

  • 创建一些笔记,并将它们放在 MusicTrack 上。

  • 将音轨数据交给连接到引擎的 AVAudioSequencer

  • 将轨道的 destinationAudioUnit 设置为我选择的音频单元。

到目前为止,还不错,但是......

当我使用 AVAudioSequencer 播放序列时,第一次播放时效果很好,使用的是选定的音频单元。第二次时,我得到的不是静音,就是正弦波声音(我想知道是谁发出的)。我认为音频单元不应在序列回放之间超出范围,但我确实停止了引擎并为新一轮重新启动它。 (但甚至应该可以在引擎运行时交换 AU,所以我认为这没问题。)

我是否遗漏了某些步骤?我很想包含代码,但是很难从一大堆文字中将其浓缩为本质。但如果你想问具体情况,我可以回答。或者,如果您能给我指出一个工作示例,说明如何使用 AVAudioSequencer 可靠地将 MIDI 发送到 AUv3,那就太好了。

AVAudioSequencer 是否应该与 Apple 以外的其他音频单元一起工作?或者我应该开始寻找其他方法将 MIDI 发送到 AUv3?

我应该补充一点,我可以使用 Apple 的 AUv3Host 示例中的 InstrumentPlayer 方法始终如一地将 MIDI 发送到 AUv3,但这涉及并发线程,并会导致各种 UI 同步和计时问题。

编辑:我向 GitHub 添加了一个示例项目: https://github.com/jerekapyaho/so54753738

它现在似乎可以在 iPadOS 13.7 中运行,但我认为我所做的与以前没有什么不同,除了它从包中加载 MIDI 文件,而不是从数据中动态生成它。

如果有人仍然使用 iOS 12,那么知道它是否已损坏但在 iOS 13.x (x = ?) 上工作会很有趣

最佳答案

如果您使用 AVAudioUnitSampler 作为音频单元乐器,当您停止并启动音频引擎而不重新加载预设时,会出现正弦音调。无论何时启动引擎,您都需要将任何乐器加载回采样器(例如 SoundFont),否则您可能会听到正弦波。这是 Apple AUSampler 的问题,而不是第 3 方仪器的问题。

顺便说一句,您可以使用模拟器在 iOS 12 下对其进行测试。

关于ios - 使用 AVAudioSequencer 将 MIDI 发送到第三方 AUv3 乐器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com