PortAudio Tutorial

Querying for Available Devices

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

To determine the number of devices:

numDevices = Pa_CountDevices();
You can then query each device in turn by calling Pa_GetDeviceInfo() with an index.
for( i=0; i<numDevices; i++ ) {
     pdi = Pa_GetDeviceInfo( i );
It will return a pointer to a PaDeviceInfo structure which is defined as:
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;
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.

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().

home | contents | previousnext