Open Sound System |
Do you have problems with sound/audio application development? Don't panic! Click here for help! |
int rate=The required sampling rate;
ioctl(fd, SNDCTL_DSP_SPEED, &rate);
The above code fragment lacks all error checks for clarity. Real world applications must always check for the errors and handle them as described below. Also most OSS ioctl calls will return information in the argument variable and it's usually necessary to check it too.
It's very important that applications accept up to 10% differences between the requested and the granted sampling rates. OSS tries to return the real sampling rate as precisely as possible. For example if the requested rate is 22050 Hz the granted value may be something like 22024 Hz. This means just that the nearest rate supported by the the device is 22024 instead of 22050. It's better to tolerate this error instead of refusing to work with the device.
If the application is designed to support just one sampling rate then it's recommended to use 48000 Hz. This is the "native" sampling rate used by most computer sound cards. If any other rate is selected that means that OSS will have to waste some CPU time in sample rate conversions. However most devices support multiple sampling rates so this is not an issue with them.
Please see the description of Return information about an audio device for more information about the possible parameters.
This call is supported by all OSS versions and implementations. However some freeware implementations may incorrectly return an error if the device doesn't support the requested value. This is clearly a driver bug and there is no need to be prepared to this in the application.
The OSS API doesn't have any sample rate limitations. The possible sampling rates depend on the capabilities of the device. At this moment the possible sampling rates of existing devices vary between 4 kHz and 200 kHz. Some devices support just one fixed sampling rate. Some other may support all rates between certain limits. It's usually possible to use any imaginable sampling rate with all devices because OSS will automatically convert between the rates.
Some professional audio devices use sophisticated sample rate management which permits the user to lock the sampling rate to certain value(s). While this is not an API issue it might be necessary to mention this here. It's possible to change the sample rate management parameters using the ossmix and ossxmix programs. This is intended to be "manually" by the user and audio applications must not try to change such control panel settings automatically. For example the application must not try to switch from external to internal clock to make the sampling rate changeable.
Please look at the When OSS audio ioctl calls can be made section for information about DSP ioctl call ordering.
The return value from the OSS ioctl calls will be -1 if a fatal error occurred. Other values mean that the ioctl call was more or less successful. However in most cases the application must check the value returned in the argument to see what was the accepted value.
Please see the Possible error codes (errno) returned by OSS calls section for more info about the error codes returned by OSS.
osstest.c | The osstest program shipped with OSS |
ossplay.c | Sources for the ossplay audio player and for the ossrecord |
fulldup.c | Full duplex sample program using the single device approach. |
mmap_duplex.c | A simple sample program for doing dull duplex using mmap |
mmap_test.c | A sample program for using mmap() |
singen.c | A simple audio playback program that plays continuous 1 kHz sine wave. |
audiolevel.c | A simple program that does audio recording. |
dsp_geterror_demo.c | A simple demonstration of |
morse.c | Simple audio programming example that plays morse code. |
morse3.c | Yet another morse code program that uses select |
morse2.c | Another morse code program that uses select |
seltest2.c | This program has been used to verify that the select() call works |
iosync.c | Measuring the hardware level latencies. |
sweepdown.c | Plays a funny synthetic engine stop sound |
multich32.c | Source file oss-testing/tutorials/sndkit/tests/multich32.c |
sweepup.c | A simple program that plays frequency sweep from 10 Hz to fs/2. |
multich16.c | Source file oss-testing/tutorials/sndkit/tests/multich16.c |
ioctl_test.c | This program has been used to verify that some of the ioctl calls work |
spdif_in_debug.c | A program that prints the S/PDIF receiver status. |
softsynth_gtk.c | A simple software MIDI synthesizer program with GTK GUI. |
softsynth.c | A simple software MIDI synthesizer program. |