簡體   English   中英

使用AKPlayer上的切換(開-關)開關

[英]Using toggle (on-off) switch on AKPlayer

我正在嘗試在播放多個AKPlayers時實現通斷開關。 首先,我調用了兩個AKPlayers ,它們由AKCallbackInstruments中的AKSequencer觸發。

當我打開開關時,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()

首先開和關工作成功。 但是,當我第二次打開開關時,音樂越來越響,可能是因為某些中音軌/音序器音軌沒有完全刪除。 誰能告訴我我在這里想念的東西嗎? 非常感激。 <3

要發現此處實際發生的情況,您可以在每次刪除后記錄曲目的內容。 例如:

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

一種可能是,當刪除軌道0時,軌道會自行重新索引,這意味着第二個刪除調用將無效。

解決此問題的一種更安全,更可預測的方法是使用track.clear()而不是delete 您可以在開始時創建所需的軌道,並在設置階段僅將其輸出分配給AKCallbackInstrument 然后,您可以安全地向軌道添加注釋,或根據需要清除軌道中的事件。 同樣,使用track.getMIDINoteData()記錄軌道內容將有助於調試。

另外,我不建議您停止和啟動AudioKit的次數超過您的需要。 初始化應用程序時啟動AudioKit,除非有充分理由停止它,否則請保持打開狀態。

這是不斷將播放器添加到越來越多的混音器通道中而不刪除先前播放器的症狀。 如果您實際上想在啟動時重新連接它,那么您還想在停止時執行player.disconnectOutput()。

我不知道這與您的音序器有任何關系。

就是說,我不明白為什么在開始時就完全重新添加了播放器。 最好在init上建立音頻鏈,並在完全完成后將其拆除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM