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.