Open Sound System
|Do you have problems with sound/audio application development? Don't panic! Click here for help!|
ioctl(fd, SNDCTL_DSP_GETIPEAKS, peaks);
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.
This ioctl call returns the peak levels as an array of short integers (one for each channel). The number of channels can be as high as 128. The number of channels currently in use is set with SNDCTL_DSP_CHANNELS.
The value returned simply the largest sample value seen on the input since the previous time this call was made (the values will be set to zero after each call). The samples are scaled so that the maximum is 32767 and the minimum is 0. The scale is linear (NOT dB).
This information is measured as real time as possible.
This call is only supported by some drivers of OSS 4.0 and later. It is not supported by all devices. Error (errno==EINVAL) will be returned when this information is not available.
Some devices may always report some signal. However most devices will show any signal activity only when recording is active.
The mixer interface also supports peak meter functionality which may be based on the same counters than this ioctl call. Use this ioctl call in audio applications and the mixer interface from mixer programs.
If multiple applications are reading the same counters it's possible that some of the highest peaks may get undetected (the other applications may have read and reset the peak counter.
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.