Использование kAudioUnitSubType_PeakLimiter для предотвращения потрескивания при смешивании образцов - PullRequest
0 голосов
/ 10 сентября 2018

Я пишу игру.В игре в фоновом режиме воспроизводится фоновая музыка, которая отлично работает.Естественно, игра также воспроизводит звуковые эффекты, когда игрок взаимодействует.Эти взаимодействия могут происходить быстро, и поэтому определенные звуковые эффекты могут воспроизводиться много раз.

В моей текущей реализации я использую график AVAudioEngine и создаю AVAudioPlaybackNode каждый раз, когда мне нужно воспроизвести семпл.После запуска обработчика завершения воспроизведения я планирую удаление узла на некоторое время позже.

Пока все хорошо.Звук воспроизводится великолепно, за исключением того, что я испытывал артефакты отсечения и вывода, когда несколько семплов воспроизводились более или менее в унисон.Кроме того, необъяснимый белый шум появится на выходе, поскольку все больше и больше сэмплов воспроизводятся одновременно.В самих сэмплах нет белого шума, каждый из них затухает, чтобы завершить тишину перед окончанием.

Я добавил узел kAudioUnitSubType_PeakLimiter на выходе, который изгнал шум ( почему? ), и сократил возникновение отсечения (при условии, что это отсечение).

Мне кажется, что добавление и удаление узлов каждый раз, когда я хочу воспроизвести семпл, является неправильным подходом - но яне могу найти способ определить, действительно ли узел воспроизводит семпл (isPlaying всегда возвращает true).Я попытался создать пул узлов, но вывод стал громче - как будто AVAudioMixerNode ведет себя по-разному, так как к нему подключено больше узлов.

Поэтому мой вопрос таков:

Добавляет иудаление узлов воспроизведения каждый раз, когда возникает звуковой эффект, - хорошая идея (думаю, что нет), и если нет, то какой метод рекомендуется?Известно, что ограничитель пиков работает отлично и всегда ограничивает пики без слышимого ограничения (как настоящий ограничитель).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...