PortAudio Tutorial |
There are often several different audio devices available in a computer with different capabilities. They can differ in the sample rates supported, bit widths, etc. PortAudio provides a simple way to query for the available devices, and then pass the selected device to Pa_OpenStream(). For an example, see the file "pa_tests/pa_devs.c".home | contents | previous | nextTo determine the number of devices:
You can then query each device in turn by calling Pa_GetDeviceInfo() with an index.numDevices = Pa_CountDevices();It will return a pointer to a PaDeviceInfo structure which is defined as:for( i=0; i<numDevices; i++ ) { pdi = Pa_GetDeviceInfo( i );If the device supports a continuous range of sample rates, then numSampleRates will equal -1, and the sampleRates array will have two values, the minimum and maximum rate.typedef struct{ int structVersion; const char *name; int maxInputChannels; int maxOutputChannels; /* Number of discrete rates, or -1 if range supported. */ int numSampleRates; /* Array of supported sample rates, or {min,max} if range supported. */ const double *sampleRates; PaSampleFormat nativeSampleFormat; }PaDeviceInfo;The device information is allocated by Pa_Initialize() and freed by Pa_Terminate() so you do not have to free() the structure returned by Pa_GetDeviceInfo().