Использование AVAudioEngine с AVAudioPlayersNodes обеспечивает гораздо лучшую производительность, хотя и за счет небольшой сложности кода. Я смог легко увеличить скорость воспроизведения в пять раз, с лучшим контролем буфера.
Основным недостатком перехода на этот подход было то, что документация Apple менее звездна. Несколько дополнений к документации Apple сделали бы эту задачу намного проще:
Узлы микшера задокументированы как способные преобразовывать частоты дискретизации и количество каналов, поэтому я попытался настроить audioEngine.mainMixerNode для преобразования монобуферов в Настройки выходного узла. Настройка вывода узла основного микшера в формат узла вывода, по-видимому, была принята, но вызвала непрозрачные ошибки во время выполнения, которые жаловались на несоответствие числа каналов.
Похоже, что основной узел микшера на самом деле не является полностью функциональным узлом микшера. Чтобы заставить это работать, мне пришлось вставить другой узел микшера, который выполнил преобразование канала, и подключить его к основному узлу микшера. Если бы документация Apple действительно упоминала об этом, это избавило бы меня от многих экспериментов.
Кроме того, простое планирование буфера ничего не вызывает для воспроизведения. Вам нужно вызвать play () на узле игрока, прежде чем что-либо произойдет. Документация Apple здесь сбивает с толку - она говорит, что вызов play () без аргументов приведет к немедленному воспроизведению, а это не то, что я хотел. Потребовались некоторые эксперименты, чтобы определить, что play () просто указывает узлу игрока на пробуждение, и что запланированные буферы будут фактически воспроизводиться в запланированное время, а не сразу.
Было бы чрезвычайно полезно, если бы Apple предоставила не только автоматически сгенерированную документацию по классам. Немного сгенерированной человеком документации спасло бы меня от огромного количества разочаровывающих экспериментов.
Хорошо написанный Крисом Адамсоном "Learning Core Audio" был очень полезен, когда я работал с Core Audio - это позор, что новые функции AVAudioEngine также не документированы.