2010-04-02 2 views
1

Я в процессе переключения с AVAudioPlayer на OpenAL с использованием звукового движка Finch. Мне нужно делать измерения, т. Е. Получать средние пиковые уровни. Звуковой движок Finch не дает этого, и я полностью новичок в OpenAL. Как я могу это сделать? Любые примеры будут действительно оценены.Как я могу выполнить измерение/средний пиковый уровень мощности в OpenAL?

ответ

2

Я предполагаю, что вы ищете замену метода peakPowerForChannel: AVAudioPlayer. К сожалению, их нет. Вам придется сворачивать самостоятельно.

OpenAL «звуки» представляют собой комбинацию «буфера» (ваши выборочные данные, загруженные в память) и «источник», который представляет что-то вроде свойств, которые вы хотите применить к вашим данным образца.

Простой подход к воспроизведению OpenAL - загрузить весь файл в память и просто воспроизвести все это за один вызов. Тем не менее, вы можете использовать NSInputStream для чтения в куске данных образца PCM из файла в буфер OpenAL, использовать alBufferData() для вычисления максимальной мощности с помощью вашей собственной функции, воспроизведения фрагмента с использованием вашего источника, а затем повторения до EOF ,

Я знаю, что вы намерены использовать Finch, но вы должны дать AudioQueues реальный близкий поиск (если измерение является важной особенностью для вас). Он гораздо лучше разработан для такого типа приложений. В частности, свойство kAudioQueueProperty_CurrentLevelMeterDB предоставит вам либо пиковый RMS (mPeakPower), либо средний уровень RMS (mAveragePower), который вы можете читать так часто, как вам нравится.

Удачи и счастливой кодировки!

Некоторые ресурсы, которые могут быть полезны:

+1

Тьфу, я надеялся избежать AudioQueues. Никогда не мог это понять. Но спасибо за ответ, очень мало информации, которую я мог найти! – Thaurin