Как ограничить потребление памяти при использовании аудиоустройства - PullRequest
0 голосов
/ 05 августа 2011

Для моего приложения мне нужно проигрывать музыку в фоновом режиме, когда пользователь перемещается внутри него.Итак, начиная с MixerHost, я разработал аудио-микшер, который способен воспроизводить 8 треков одновременно.Тем не менее, он потребляет много памяти, поскольку файлы из 8 дорожек полностью загружены в 8 буферов.

Чтобы ограничить потребление памяти, я загружаю вначале только небольшой кусок данных и добавляю новые данныеобратный вызов подобен этому

result = ExtAudioFileRead ( audioFileObject, &numberOfPacketsToRead, bufferList );

. Он работает довольно хорошо, но иногда воспроизведение приостанавливается.Я знаю причину проблемы: сделать доступ FS в обратном вызове.

Но есть ли другое решение для ограничения потребления памяти?

1 Ответ

1 голос
/ 05 августа 2011

Обычно это выполняется с помощью общего кольцевого буфера. Кольцевой буфер действует как амортизатор между потоком рендеринга в реальном времени и медленным доступом к диску. Создайте новый поток, который делает только чтение аудио из файла и сохраняет его в кольцевом буфере. Затем в вашем обратном вызове рендеринга просто прочитайте из кольцевого буфера.

Apple предоставила реализацию кольцевого буфера, подходящего для использования с аудиоустройствами, под названием CARingBuffer. Он доступен в /Developer/Extras/CoreAudio/PublicUtility/CARingBuffer.

...