Как открыть поток из пакетов UPD? - PullRequest
0 голосов
/ 22 ноября 2010

Я хотел бы использовать библиотеку PortAudio для воспроизведения аудиоданных. Эти аудиоданные получены от UDP-пакетов.

Я видел функцию Pa_OpenDefaultStream () (и Pa_OpenStream (), которая очень похожа) для открытия потока:

PaStream *stream;
PaError err;
/* Open an audio I/O stream. */
err = Pa_OpenDefaultStream( &stream,
                            0,          /* no input channels */
                            2,          /* stereo output */
                            paFloat32,  /* 32 bit floating point output */
                            SAMPLE_RATE,
                            256,        /* frames per buffer, i.e. the number
                                               of sample frames that PortAudio will
                                               request from the callback. Many apps
                                               may want to use
                                               paFramesPerBufferUnspecified, which
                                               tells PortAudio to pick the best,
                                               possibly changing, buffer size.*/
                            patestCallback, /* this is your callback function */
                            &data ); /*This is a pointer that will be passed to
                                               your callback*/

Полагаю, я должен использовать его для игры на своих пакетах, но я не знаю, как его использовать:

  • Какой первый параметр?
  • Почему я должен определить функцию обратного вызова?

Вот ссылка на документацию PortAudio: http://www.portaudio.com/trac/

Любая помощь будет принята с благодарностью:)

Спасибо.

1 Ответ

1 голос
/ 22 ноября 2010

Первый параметр - это указатель на поток ввода / вывода типа PaStream. Аудиоданные будут считываться / записываться в этот поток.

Вам необходимо написать функцию обратного вызова, которую библиотека PortAudio будет вызывать, когда ей нужно будет прочитать или записать звук на / с вашего ПК. Любая другая обработка звука, которую вы хотите выполнить (например, DSP), также будет выполнена здесь. Простая функция обратного вызова просто скопирует ввод в вывод для потокового ввода-вывода. Если у вас возникают проблемы с использованием обратных вызовов, используйте блокирующий API, это может быть проще для понимания.

Скомпилируйте и запустите примеры для деталей (например, patest_read_record.c), там много информации.

...