Я работаю над получением аудио в iPhone в форме, в которой я могу передать его алгоритму анализа (C++). Есть, конечно, много вариантов: учебник AudioQueue на trailsinthesand начинает работу.
Обратный вызов аудио, однако, дает AudioQueueRef
, и я нахожу документацию Apple скудной по этой части. Встроенные методы для записи в файл, но ничего, где бы вы действительно заглянули внутрь пакетов, чтобы увидеть данные.
Мне нужны данные. Я не хочу ничего записывать в файл, а именно на это нацелены все учебники - и даже удобные объекты ввода-вывода Apple. AVAudioRecorder
от Apple (как это ни обидно) даст вам уровни и запишет данные, но не даст к ним доступа. Если только я ничего не упустил...
Как это сделать? В приведенном ниже коде есть inBuffer->mAudioData
, что дразняще близко, но я не могу найти никакой информации о том, в каком формате эти "данные" или как получить к ним доступ.
Обратный вызов AudioQueue:
void AudioInputCallback(void *inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs)
{
static int count = 0;
RecordState* recordState = (RecordState*)inUserData;
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
++count;
printf("Got buffer %d\n", count);
}
И код для записи аудио в файл:
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData); // THIS! This is what I want to look inside of.
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}