Как я могу измерить / измерить средний пиковый уровень мощности в OpenAL?

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


person Thaurin    schedule 02.04.2010    source источник


Ответы (1)


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

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

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

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

Удачи и удачного кодирования!

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

person Zack    schedule 02.04.2010
comment
Ух, я надеялся избежать AudioQueues. Никогда не мог этого понять. Но спасибо за ответ, информации, которую я смог найти, очень мало! - person Thaurin; 03.04.2010