Использование тумблера (вкл / выкл) на AKPlayer - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь включить / выключить проигрыватель при воспроизведении нескольких AKPlayer. Сначала я назвал два AKPlayers, вызванных AKCallbackInstruments в AKSequencer.

Когда я включаю переключатель, 1) два AKPlayers назначены на AKMixer, 2) Audiokit запускается, 3) Два трека добавляются в AKSequencer, 4) Sequencer запускается.

А при выключении: 1) два AKPlayers.stop(), 2) sequencer.stop() 3) sequencer.deleteTrack(trackIndex: 0), sequencer.deleteTrack(trackIndex:1) 4) AudioKit.stop().

Сначала включается и выключается успешно. Но когда я включаю переключатель во второй раз, музыка становится все громче и громче, возможно, потому, что некоторые треки миди / секвенсора не удаляются полностью. Кто-нибудь может сказать мне, что мне здесь не хватает? Очень признателен. <3 </p>

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Это признак того, что игрок продолжает добавлять все больше и больше каналов микшера, не удаляя предыдущих игроков. То, что вы также хотите сделать, это player.disconnectOutput () при остановке, если вы действительно хотите повторно подключить его при запуске.

Я не знаю, какое это имеет отношение к вашему секвенсору.

Тем не менее, я не понимаю, почему вы вообще заново добавляете плеер на старте. Было бы лучше установить звуковую цепочку на init и разорвать, когда вы закончите.

0 голосов
/ 29 октября 2018

Чтобы узнать, что на самом деле здесь происходит, вы можете регистрировать содержимое треков после каждого удаления. Например:

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

Одна из возможностей заключается в том, что при удалении дорожки 0 сами дорожки переиндексируются, что означает, что второй вызов удаления не будет иметь эффекта.

Возможно, более безопасный и предсказуемый способ справиться с этим - использовать track.clear() вместо delete. Вы можете создать треки, которые вам понадобятся в начале, и назначить их вывод на AKCallbackInstrument только один раз на этапе настройки. Затем вы можете безопасно добавлять заметки к трекам или удалять события из треков по мере необходимости. Опять же, регистрация содержимого дорожки с помощью track.getMIDINoteData() будет полезна для отладки.

Кроме того, я бы не рекомендовал останавливать и запускать AudioKit больше, чем нужно. Запустите AudioKit при инициализации приложения и оставьте его включенным, если у вас нет веских причин для его остановки.

...