Как получить массив аудиоданных float из AudioQueueRef в iOS?

Я работаю над получением аудио в 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;
}

13
задан buildsucceeded 24 October 2011 в 19:18
поделиться