Запись в реальном времени AudioQueue Record-Playback

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

1 ответ

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

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

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

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

Другие вопросы по тегам