Заявление об ограничении ответственности: многое из этого было обнаружено методом проб и ошибок, у меня могут быть серьезные ложные предположения:
Вам нужно будет использовать структуру AudioUnits. При инициализации воспроизведения вы можете создать AURenderCallbackStruct. Вы можете указать в этой структуре функцию обратного вызова воспроизведения, которая предоставляет вам несколько аргументов, которые будут содержать необходимую информацию.
функция обратного вызова будет иметь такую подпись:
static OSStatus recordingCallback (void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
Здесь есть массив аудиоданных, которые можно использовать для получения амплитуды звукового буфера для каждого частотного бина или для вычисления значения DB для частотного бина.
Я не знаю, что показывает этот график, но мне он кажется сглаженным отображением амплитуд каждой из выборок.
Аудиоустройства не просты, но с ними стоит поиграть, пока вы не освоитесь.
Вот скелет моей функции обратного вызова, чтобы вы могли лучше понять, что я имею в виду:
РЕДАКТИРОВАТЬ: удалена мертвая ссылка, я потерял этот код, извините
person
JConway
schedule
10.11.2013