Отредактировал вопрос из-за прогрессивного понимания: -)
Я создаю приложение, которое прослушивает аудиовход.Я хочу, чтобы он считал пики.(пики будут на максимальной частоте около 10 Гц.)
После долгих поисков я в конечном итоге воспользовался сервисом AudioQueue, так как он сможет дать мне необработанные входные данные.Я использую урезанную версию (без воспроизведения) примера SpeakHere, но вместо того, чтобы просто записывать буфер в файловую систему, я хочу посмотреть на отдельные примеры данных.
Думаю, я на правильном путисейчас, но я не понимаю, как работать с буферами.Я пытаюсь выделить данные одного образца.Так что для цикла for в следующей функции, имеет ли это смысл, и что я должен добавить туда, чтобы получить один образец?
void AQRecorder::MyInputBufferHandler( void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription* inPacketDesc)
{
// AudioQueue callback function, called when an input buffers has been filled.
AQRecorder *aqr = (AQRecorder *)inUserData;
try {
if (inNumPackets > 0) {
/* // write packets to file
XThrowIfError(AudioFileWritePackets(aqr->mRecordFile,FALSE,inBuffer->mAudioDataByteSize,inPacketDesc,aqr->mRecordPacket,&inNumPackets,inBuffer->mAudioData),
"AudioFileWritePackets failed");*/
SInt16 sample;
for (UInt32 sampleIndex=0; sampleIndex < inNumPackets; ++sampleIndex) {
// What do I put here to look at one sample at index sampleIndex ??
}
aqr->mRecordPacket += inNumPackets;
}
// if we're not stopping, re-enqueue the buffe so that it gets filled again
if (aqr->IsRunning())
XThrowIfError(AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL),
"AudioQueueEnqueueBuffer failed");
} catch (CAXException e) {
char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
}
(возможно, мне не следовало удалять так много исходного вопроса... что такое политика?)
Изначально я думал об использовании примера AurioTouch, но, как было отмечено в комментарии, он использует пропускную способность, и мне нужен только ввод данных.Это также гораздо более сложный пример, чем SpeakHere.