API AVAudioEngine: AVAudioUnitTimePitch слишком много загрузки процессора

Я пытаюсь реализовать простое приложение машины барабанных колодок с фильтром смещения высоты тона. Я использую AVAudioEngine API.

В приложении 12 пэдов. Каждый пэд имеет собственный класс со своим собственным AVAudioPlayerNode. Когда другие фильтры не подключены, приложение работает довольно быстро. Почти без задержек.
Но когда я пытаюсь присоединить AVAudioUnitTimePitch к цепочке, загрузка ЦП возрастает до 100%, и приложение зависает после инициализации. Был протестирован на iPad3.

Этот код идет для каждой инициализации Pad.

_playerNode = [[AVAudioPlayerNode alloc] init];
_pitchFilter = [[AVAudioUnitTimePitch alloc] init];

[_audioEngine attachNode:_playerNode];
[_audioEngine attachNode:_pitchFilter];

[_audioEngine connect:_playerNode to:_pitchFilter format:_buffer.format];
[_audioEngine connect:_pitchFilter to:_audioEngine.mainMixerNode format: _buffer.format];

Есть ли способ как-то уменьшить загрузку процессора?

PS Также я тестировал это приложение на iPad Air. И это работает. Но загрузка процессора все еще довольно высока: 25-30% после инициализации. И около 50% во время воспроизведения аудио.

1 ответ

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

Другие вопросы по тегам