Запись в реальном времени 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
на новую должность.