Запись в реальном времени AudioQueue Record-Playback - PullRequest
2 голосов
/ 09 января 2011

Эй, ребята, Я пытаюсь создать приложение для обмена голоса в реальном времени. На первом этапе мне удалось записать аудиоданные в указанный файл и воспроизвести их после записи. Теперь я пытаюсь изменить код для воспроизведения аудиобуферов сразу после их записи в цикле. У меня вопрос, как можно прочитать аудиоданные непосредственно из записи Audioqueue, а не (как показано в документации) из файла. Я благодарен за любые идеи и мог показать части кода при необходимости. Заранее спасибо, Лукас (из Германии)

1 Ответ

1 голос
/ 17 января 2012

Посмотрите на пример SpeakHere.Эта строка содержит аудиоданные:

OSStatus result = AudioFileReadPackets(THIS->GetAudioFileID(), false, &numBytes,     inCompleteAQBuffer->mPacketDescriptions, THIS->GetCurrentPacket(), &nPackets, 
                                       inCompleteAQBuffer->mAudioData);

Таким образом, вместо вызова AudioFileReadPackets, вы можете просто использовать memcpy для копирования в буфер записанных данных.Или, альтернативно, подайте на воспроизведение AudioQueue указатель на буфер аудиоданных.Когда воспроизведение продолжается, продвиньте указатель mCurrentPacket через буфер.

Для записи вы сделаете что-то очень похожее.Вместо записи в файл вы будете записывать в буфер в памяти.Сначала вам нужно выделить это с malloc.Затем ваш входящий AudioQueue захватывает записанные данные, вы копируете эти данные в буфер.По мере копирования дополнительных данных вы перемещаете записывающую головку или mCurrentPacket в новое положение.

...