Изменение состояния кнопки UIKit прерывает звук - PullRequest
1 голос
/ 11 марта 2011

У меня есть приложение для iPhone, которое использует 140 кнопок UIB (изображения PNG), каждый из которых запускает синтезированные тоны синуса (максимум 10 тонов).Тоны синуса генерируются с использованием высокооптимизированного кода C (с использованием AudioToolbox API).10 синусоидальных тонов потребляют около 50% ЦП (при 44100 Гц).

У меня есть пресеты, которые отключают 10 тонов и включают 10 новых различных тонов.Это также приводит к тому, что кнопки UIB меняют состояние с выбранного на нормальное.

Моя проблема заключается в том, что когда 10 (из 140) кнопок UIB меняют состояние (все одновременно), это вызывает сбой в звуке (даже еслиаудио только жует 50% процессора).Таким образом, при изменении

в процессоре наблюдается резкий скачок. Есть ли способ справиться с этим?Могу ли я установить приоритет AudioQueue над GUI?Это потому, что у меня есть 140 изображений PNG в виде кнопок?Можно ли создать мультитач зоны, которые не являются кнопками?Я просто ищу любой совет, чтобы уменьшить влияние GUI на обработку звука.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Если вы разрабатываете приложения для синтеза аудио, то рекомендация от Apple состоит в том, чтобы использовать API AudioUnit вместо слоя AudioToolbox. Apple утверждает, что одной из причин использования AudioUnit API является:

Отзывчивое воспроизведение синтезированных звуков, например, для музыкальных игр или синтезированных музыкальных инструментов

Его потоки имеют очень высокий приоритет по умолчанию. Потоки AudioToolbox имеют низкий приоритет. Было бы лучше перейти на использование AudioUnit API, а не навязывать приоритеты потоков для AudioToolbox.

0 голосов
/ 11 марта 2011

Вы должны выполнить воспроизведение звука в отдельном потоке.Вы можете установить приоритет для вновь созданного потока, используя setThreadPriority: .

...