Настройка
В рассматриваемой игре используется CoreAudio и один AudioGraph для воспроизведения звуков.
График выглядит следующим образом:
входные обратные вызовы -> 3DMixer ->DefaultOutputDevice
У BusMount 3DMixer's установлено максимум 50 звуков.
Все сэмплы преобразуются в формат потока устройства вывода по умолчанию перед подачей во входные обратные вызовы.Неиспользованные обратные вызовы не установлены (NULL).Большинство звуков 3D, поэтому азимут, панорамирование, расстояние и усиление обычно устанавливаются для каждого входа микшера, а не в одиночку.Они проверены, чтобы убедиться, что установлены только допустимые значения.Скорость воспроизведения на входе микшера также иногда немного изменяется, чтобы имитировать высоту звука, но для большинства звуков он сохраняется с настройками по умолчанию.
Проблема
Допустим, я запускаю игру и запускаю уровень, заполненный многимизвуки, много действий.
Я запускаю окно HALLab -> IO Cycle Telemetry, чтобы увидеть, сколько времени занимает обработка каждого звукового цикла - это не займет больше 4 мс из 10 доступныхмс в каждом цикле, и я не могу определить ни одного пика, который заставил бы его пройти за отведенное время.
В какой-то момент во время игры, когда одновременно звучит много звуков (менее 50, но не менее 20), я слышу пуф, и с тех пор только тишина.Никакие звуки Mac не могут быть сгенерированы из любого приложения на Mac.В окне IO Telemetry отображаются мои звуковые тики, которые все еще работают, все еще требуют времени, все еще предоставляя сэмплы для устройства вывода.
- Это состояние сохраняется, даже если в моей игре меньше звуков, а в моей игре нет звуков.*
- Даже если я полностью выйду из игры, звуки Mac, генерируемые другими приложениями, не возвращаются.
- Перевод Mac в спящий режим и его пробуждение тоже ничего не помогает.
- Только полная перезагрузка приводит к возвращению звуков.После его возвращения первые несколько звуков потрескивают.
Что я могу сделать, чтобы избежать проблемы?Игра большая, сложная, и я не могу изменить то, что играет, но, похоже, она не перегружает поток ввода-вывода, поэтому я не уверен, стоит ли мне это делать.Проблема не может быть вызвана какими-либо конкретными звуковыми данными, потому что все звуковые образцы воспроизводятся много раз, прежде чем возникнет проблема.Я думаю, что любой звук, поступающий в физические колонки, будет экранирован, чтобы избежать их физической перегрузки, и звук вовсе не должен быть громким, чтобы вызвать ошибку.
У меня нет идей.