Аудио, записанное с использованием Audio Queue Services для данных - PullRequest
5 голосов
/ 10 декабря 2011

Я хочу передавать голос с одного iPhone на другой. Я установил соединение между двумя iPhone по протоколу TCP, и мне удалось записать голос на iPhone и воспроизвести его с помощью Audio Queue Services. Мне также удалось отправить данные между двумя iPhone. Я делаю это, отправляя пакеты NSData.

Мой следующий шаг - отправка аудиоданных на другой iPhone во время записи. Я считаю, что я должен сделать это в AudioInputCallback. Мой AudioQueueBufferRef называется inBuffer, и кажется, что я хочу преобразовать inBuffer->mAudioData в NSData, а затем отправить NSData на другое устройство и затем распаковать его.

Кто-нибудь знает, будет ли это способ сделать это и как я могу конвертировать inBuffer->mAudioData в NSData? Другие подходы также приветствуются.

Это мой метод обратного вызова, в котором я считаю, что я должен «захватить» данные и отправить их на другой iPhone:

void AudioInputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, const AudioStreamPacketDescription *inPacketDescs)
{
    RecordState *recordState = (RecordState *)inUserData;
    if(!recordState->recording)
        return;

    OSStatus status = AudioFileWritePackets(recordState->audioFile,
                                            false,
                                            inBuffer->mAudioDataByteSize,
                                            inPacketDescs,
                                            recordState->currentPacket,
                                            &inNumberPacketDescriptions,
                                            inBuffer->mAudioData);
    if(status == 0)
    {
        recordState->currentPacket += inNumberPacketDescriptions;
    }

    AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}

1 Ответ

2 голосов
/ 10 декабря 2011

Возможно, вы захотите сохранить аудиоданные (в вашем примере показаны указатель аудиосэмпла и количество байтов) из звукового обратного вызова в другую очередь или FIFO, а затем с помощью отдельного сетевого потока создать NSData из аудиобайтов и отправить их. .

...