Вопрос

Я хотел бы использовать библиотеку Portaudio для воспроизведения аудиоданных. Эти аудиоданные поступают из Pquets 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*/

Я думаю, я должен использовать его, чтобы играть в моих пакетов, но я не знаю, как его использовать:

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

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

Любая помощь будет очень оценена :)

Спасибо.

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top