2010-11-22 2 views
0

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

Я видел там 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*/ 

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

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

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

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

Спасибо.

ответ

1

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

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

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

+0

Как бы вы написали «простую функцию обратного вызова»? Я righlty хотел бы закодировать его (прослушивание звука во время его записи). благодаря –