Come aprire un flusso da paquets UPD?
Domanda
Vorrei utilizzare libreria PortAudio per riprodurre i dati audio. Questi dati audio proviene da paquets UDP.
Ho visto c'è Pa_OpenDefaultStream () (e Pa_OpenStream (), che è abbastanza simile) la funzione di aprire un flusso:
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*/
Credo che devo usarlo per giocare le mie paquets ma non so come usarlo:
- Qual è il primo parametro?
- Perché devo definire una funzione di call-back?
Questo è il link alla documentazione PortAudio: http://www.portaudio.com/trac/
Qualsiasi aiuto sarebbe molto apprezzato:)
Grazie.
Soluzione
Il primo parametro è un puntatore a un flusso di ingresso / uscita, di tipo PaStream. I dati audio verranno lette da / scritto a questo flusso.
È necessario scrivere una funzione di callback che la biblioteca PortAudio chiamerà quando è necessario leggere o audio scrittura a / dal PC. Qualsiasi altra elaborazione audio che si vuole fare (per esempio DSP) sarà fatto anche qui. Una semplice funzione di callback avrebbe basta copiare l'input per l'uscita, per lo streaming di I / O. Se hai problemi con le richiamate, utilizzare l'API di blocco, invece, può essere più facile da capire.
Compilare ed eseguire gli esempi per i dettagli (ad esempio patest_read_record.c), c'è un sacco di informazioni là.