gpt4 book ai didi

swift - 在 AKPlayer 上使用切换(开-关)开关

转载 作者:可可西里 更新时间:2023-11-01 00:38:47 24 4
gpt4 key购买 nike

我正在尝试在播放多个 AKPlayer 时实现开关。首先,我调用了两个 AKPlayer,由 AKSequencer 中的 AKCallbackInstruments 触发。

当我打开开关时,1) 两个 AKPlayer 被分配给 AKMixer,2) Audiokit 启动,3) 两个音轨被添加到 AKSequencer,4) 音序器启动。

关闭时,1) 两个 AKPlayers.stop(),2) sequencer.stop() 3) sequencer.deleteTrack(trackIndex: 0 ), sequencer.deleteTrack(trackIndex:1) 4) AudioKit.stop().

首次开启和关闭成功。但是当我第二次打开开关时,音乐越来越响,可能是因为一些midi音轨/音序器音轨没有完全删除。谁能告诉我我在这里缺少什么?非常感激。 <3

最佳答案

要了解此处真正发生的情况,您可以在每次删除后记录轨道的内容。例如:

for (i, track) in sequencer.tracks.enumerated() {
print("track: \(i)")
print(track.getMIDINoteData())
}

一种可能性是,当您删除轨道 0 时,轨道会重新索引自己,这意味着第二次删除调用将无效。

也许更安全、更可预测的处理方法是使用 track.clear() 而不是 delete。您可以在开始时创建所需的轨道,并在设置阶段将它们的输出分配给 AKCallbackInstrument 一次。然后,您可以根据需要安全地向轨道添加注释或清除轨道中的事件。同样,使用 track.getMIDINoteData() 记录轨道内容将有助于调试。

此外,我不建议停止和启动 AudioKit 的次数超出您的需要。在您初始化应用程序时启动 AudioKit,并保持开启状态,除非您有令人信服的理由停止它。

关于swift - 在 AKPlayer 上使用切换(开-关)开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53039683/

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