iPhone AudioQueue - чтение входящих аудиоданных для определения BPM - PullRequest
2 голосов
/ 05 мая 2011

Я пытаюсь определить удары в минуту (BPM) от микрофона, используя звуковую энергию, я думаю, что выяснил часть, определяющую BPM, но у меня возникли небольшие проблемы с получением данных RAW.

Пример основан на приложении Apples SpeakHere - на функции обратного вызова AudioQueue, которую я использую:

SInt16 *buffer = (SInt16*)inBuffer->mAudioData;   
for (int i = 0; i < (inBuffer->mAudioDataByteSize)/sizeof(SInt16); i++)
{      
  printf("before modification %d\n", (int)*buffer); 
  buffer++;
}  

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

Настройка формата аудио:

mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;

Приветствия,

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Решено ...

Настройка формата аудио:

mRecordFormat.mFormatID = kAudioFormatLinearPCM;
mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;
mRecordFormat.mBytesPerPacket = 2 * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mBytesPerFrame = 2 * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;
mRecordFormat.mReserved = 0;

А теперь перебрать его:

int sampleCount = inBuffer->mAudioDataBytesCapacity / sizeof (SInt16);
SInt16 *p = (SInt16*)inBuffer->mAudioData;
for (int i = 0; i < sampleCount; i++) {    
 SInt16 val = p[i];
}
0 голосов
/ 05 мая 2011

В каком формате (AudioStreamBasicDescription: порядковый номер, биты на канал, канал на кадр и т. Д.) Вы настраивали аудио-очередь?Возможно, что конфигурация будет сильно отличаться от массива Си SInt16.

...