我正在尝试在玩多个AKplayer时实现一个开关。首先,我调用了两个由AKPlayers中的AKCallbackInstruments触发的AKSequencer。当我打开开关时,1)两个AK播放器被分配给AKMIXER,2)音频工具包启动,3)两个音轨被添加到AkSequencer,4)音序器启动。当关闭时,1)两个AKPlayers.stop(),2)sequencer.stop()3)sequencer.deleteTrack(trackIndex: 0),sequencer.deleteTrack(trackIndex:1)4)AudioKit.stop()。先开后关成功。但是当我第二次打开开关时,音乐变得越来越大,可能是因为有些MIDI音轨/音序器音轨没有完全移除。有人能告诉我这里缺少什么吗?非常感谢。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 为了发现这里真正发生的事情,您可以在每次删除之后记录这些曲目的内容。例如:for (i, track) in sequencer.tracks.enumerated() { print("track: \(i)") print(track.getMIDINoteData())}一种可能是,当删除轨迹0时,轨迹会重新索引自身,这意味着第二个删除调用将不会产生任何效果。也许一种更安全、更可预测的处理方法是使用track.clear()而不是delete。您可以在开始时创建所需的轨迹,并在设置阶段仅将其输出分配给AKCallbackInstrument一次。然后,您可以根据需要安全地向轨迹添加注释或清除轨迹中的事件。同样,用track.getMIDINoteData()记录跟踪内容将有助于调试。此外,我不建议停止和启动音频套件超过你需要的。在初始化应用程序时启动audiokit,并保持其开启状态,除非您有令人信服的理由停止它。关于swift - 使用AKPlayer上的切换(开 - 关)开关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53039683/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 04:48