2011-01-09 2 views
2

Hey fellows, Iam пытается создать приложение для озвучивания в реальном времени. На первом этапе мне удалось записать аудиоданные в указанный файл и воспроизвести его после записи. Теперь я пытаюсь изменить код для воспроизведения аудиобуферов сразу после записи их в цикле. Мой вопрос в том, как можно прочитать Audiodata непосредственно из записи Audioqueue, а не (как показано в документации) из файла. Ям благодарен за любые идеи и мог при необходимости показывать коды. Заранее спасибо, Lukas (from Germany)Realtime AudioQueue Record-Playback

+0

Какую платформу/язык вы планируете использовать? (Трудно сказать по вашему вопросу.) –

+0

Программа предназначена для работы на IPhone. Используемый язык - Objective-C. До сих пор большая часть моего кода взята из руководства AudioQueueReference. – Lukas

+0

Я перемаркировал ваш вопрос более значимыми тегами - вы, надеюсь, получите больше ответа. –

ответ

1

Посмотрите пример SpeakHere. Эта линия источники аудио данных:

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^