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.

È stato utile?

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à.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top