# 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 | previous | next