summaryrefslogtreecommitdiff
path: root/usr/src/man/man7i/dsp.7i
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7i/dsp.7i')
-rw-r--r--usr/src/man/man7i/dsp.7i602
1 files changed, 0 insertions, 602 deletions
diff --git a/usr/src/man/man7i/dsp.7i b/usr/src/man/man7i/dsp.7i
deleted file mode 100644
index 1c0fa9fc07..0000000000
--- a/usr/src/man/man7i/dsp.7i
+++ /dev/null
@@ -1,602 +0,0 @@
-.\" Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
-.\" Copyright 2018, Joyent, Inc.
-.\" The contents of this file are subject to the terms of the
-.\" Common Development and Distribution License (the "License").
-.\" You may not use this file except in compliance with the License.
-.\"
-.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-.\" or http://www.opensolaris.org/os/licensing.
-.\" See the License for the specific language governing permissions
-.\" and limitations under the License.
-.\"
-.\" When distributing Covered Code, include this CDDL HEADER in each
-.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-.\" If applicable, add the following below this CDDL HEADER, with the
-.\" fields enclosed by brackets "[]" replaced with your own identifying
-.\" information: Portions Copyright [yyyy] [name of copyright owner]
-.Dd July 9, 2018
-.Dt DSP 7I
-.Os
-.Sh NAME
-.Nm dsp
-.Nd generic audio device interface
-.Sh SYNOPSIS
-.In sys/soundcard.h
-.Sh DESCRIPTION
-To record audio input, applications
-.Xr open 2
-the appropriate device and
-read data from it using the
-.Xr read 2
-system call.
-Similarly, sound data is queued to the audio output port by using the
-.Xr write 2
-system call.
-Device configuration is performed using the
-.Xr ioctl 2
-interface.
-.Pp
-Because some systems can contain more than one audio device, application
-writers are encouraged to open the
-.Pa /dev/mixer
-device and determine the
-physical devices present on the system using the
-.Dv SNDCTL_SYSINFO
-and
-.Dv SNDCTL_AUDIOINFO
-ioctls.
-See
-.Xr mixer 7I .
-The user should be provided
-wth the ability to select a different audio device, or alternatively, an
-environment variable such as
-.Ev AUDIODSP
-can be used.
-In the absence of any
-specific configuration from the user, the generic device file,
-.Pa /dev/dsp ,
-can be used.
-This normally points to a reasonably appropriate default audio
-device for the system.
-.Ss "Opening the Audio Device"
-The audio device is not treated as an exclusive resource.
-.Pp
-Each
-.Xr open 2
-completes as long as there are channels available to be allocated.
-If no channels are available to be allocated, the call returns
-.Sy -1
-with the
-.Va errno
-set to
-.Er EBUSY .
-.Pp
-Audio applications should explicitly set the encoding characteristics to match
-the audio data requirements after opening the device, and not depend on any
-default configuration.
-.Ss "Recording Audio Data"
-The
-.Xr read 2
-system call copies data from the system's buffers to the application.
-Ordinarily,
-.Xr read 2
-blocks until the user buffer is filled.
-The
-.Xr poll 2
-system call can be used to determine the presence of data
-that can be read without blocking.
-The device can alternatively be set to a
-non-blocking mode, in which case
-.Xr read 2
-completes immediately, but can return fewer bytes than requested.
-Refer to the
-.Xr read 2
-manual page for a complete description of this behavior.
-.Pp
-When the audio device is opened with read access, the device driver allocates
-resources for recording.
-Since this consumes system resources, processes that
-do not record audio data should open the device write-only
-.Pq Dv O_WRONLY .
-.Pp
-The recording process can be stopped by using the
-.Dv SNDCTL_DSP_HALT_INPUT
-ioctl, which also discards all pending record data in underlying device FIFOs.
-.Pp
-Before changing record parameters, the input should be stopped using the
-.Dv SNDCTL_DSP_HALT_INPUT
-ioctl, which also flushes the any underlying device input FIFOs.
-(This is not necessary if the process never started recording by calling
-.Xr read 2 .
-Otherwise, subsequent reads can return samples in the
-old format followed by samples in the new format.
-This is particularly
-important when new parameters result in a changed sample size.
-.Pp
-Input data can accumulate in device buffers very quickly.
-At a minimum, it accumulates at 8000 bytes per second for 8-bit, 8 KHz, mono,
-.Sy \(*m-Law
-data.
-If the device is configured for more channels, higher sample resolution, or
-higher sample rates, it accumulates even faster.
-If the application that consumes the data cannot keep up with this data rate,
-the underlying FIFOs can become full.
-When this occurs, any new incoming data is lost until the
-application makes room available by consuming data.
-Additionally, a record overrun is noted, which can be retrieved using the
-.Dv SNDCTL_DSP_GETERROR
-ioctl.
-.Pp
-Record volume for a stream can be adjusted by issuing the
-.Dv SNDCTL_DSP_SETRECVOL
-ioctl.
-The volume can also be retrieved using the
-.Dv SNDCTL_DSP_GETRECVOL .
-.Ss "Playing Audio Data"
-The
-.Xr write 1
-system call copies data from an application's buffer to the device output FIFO.
-Ordinarily,
-.Xr write 2
-blocks until the entire user
-buffer is transferred.
-The device can alternatively be set to a non-blocking
-mode, in which case
-.Xr write 2
-completes immediately, but might have
-transferred fewer bytes than requested.
-See
-.Xr write 2 .
-.Pp
-Although
-.Xr write 2
-returns when the data is successfully queued, the actual
-completion of audio output might take considerably longer.
-The
-.Dv SNDCTL_DSP_SYNC
-ioctl can be issued to allow an application to block
-until all of the queued output data has been played.
-.Pp
-The final
-.Xr close 2
-of the file descriptor waits until all of the audio output has drained.
-If a signal interrupts the
-.Xr close 2 ,
-or if the process
-exits without closing the device, any remaining data queued for audio output is
-flushed and the device is closed immediately.
-.Pp
-The output of playback data can be halted entirely, by calling the
-.Dv SNDCTL_DSP_HALT_OUTPUT
-ioctl.
-This also discards any data that is queued for playback in device FIFOs.
-.Pp
-Before changing playback parameters, the output should be drained using the
-.Dv SNDCTL_DSP_SYNC
-ioctl, and then stopped using the
-.Dv SNDCTL_DSP_HALT_OUTPUT
-ioctl, which also flushes the any underlying device output FIFOs.
-This is not necessary if the process never started playback, such as by calling
-.Xr write 2 .
-This is particularly important
-when new parameters result in a changed sample size.
-.Pp
-Output data is played from the playback buffers at a default rate of at least
-8000 bytes per second for \(*m-Law, A-Law or 8-bit PCM data (faster for 16-bit
-linear data or higher sampling rates).
-If the output FIFO becomes empty, the
-framework plays silence, resulting in audible stall or click in the output,
-until more data is supplied by the application.
-The condition is also noted as
-a play underrun, which can be determined using the
-.Dv SNDCTL_DSP_GETERROR
-ioctl.
-.Pp
-Playback volume for a stream can be adjusted by issuing the
-.Dv SNDCTL_DSP_SETPLAYVOL
-ioctl.
-The volume can also be retrieved using the
-.Dv SNDCTL_DSP_GETPLAYVOL .
-.Ss "Asynchronous I/O"
-The
-.Dv O_NONBLOCK
-flag can be set using the
-.Dv F_SETFL
-.Xr fcntl 2
-to enable non-blocking
-.Xr read 2
-and
-.Xr write 2
-requests.
-This is normally
-sufficient for applications to maintain an audio stream in the background.
-.Pp
-It is also possible to determine the amount of data that can be transferred for
-playback or recording without blocking using the
-.Dv SNDCTL_DSP_GETOSPACE
-or
-.Dv SNDCTL_DSP_GETISPACE
-ioctls, respectively.
-.Ss "Mixer Pseudo-Device"
-The
-.Pa /dev/mixer
-provides access to global hardware settings such as master volume settings, etc.
-It is also the interface used for determining the
-hardware configuration on the system.
-.Pp
-Applications should
-.Xr open 2
-.Pa /dev/mixer ,
-and use the
-.Dv SNDCTL_SYSINFO
-and
-.Dv SNDCTL_AUDIOINFO
-ioctls to determine the device node names of audio devices on the system.
-See
-.Xr mixer 7I
-for additional details.
-.Sh IOCTLS
-.Ss "Information IOCTLs"
-The following ioctls are supported on the audio device, as well as the mixer
-device.
-See
-.Xr mixer 7I
-for details.
-.Bd -literal -offset 2n
-.Dv OSS_GETVERSION
-.Dv SNDCTL_SYSINFO
-.Dv SNDCTL_AUDIOINFO
-.Dv SNDCTL_MIXERINFO
-.Dv SNDCTL_CARDINFO
-.Ed
-.Ss "Audio IOCTLs"
-The
-.Nm
-device supports the following ioctl commands:
-.Pp
-.\" A compact list is used so that items with multiple tags don't have
-.\" vertical whitespace. However that means explicit .Pp statements must
-.\" be added.
-.Bl -tag -width "SNDCTL_DSP_CURRENT_IPTR" -compact
-.It Dv SNDCTL_DSP_SYNC
-The argument is ignored.
-This command suspends the calling process until the
-output FIFOs are empty and all queued samples have been played, or until a
-signal is delivered to the calling process.
-An implicit
-.Dv SNDCTL_DSP_SYNC
-is performed on the final
-.Xr close 2
-of the
-.Nm
-device.
-.Pp
-This ioctl should not be used unnecessarily, as if it is used in the middle of
-playback it causes a small click or pause, as the FIFOs are drained.
-The correct use of this ioctl is just before changing sample formats.
-.Pp
-.It Dv SNDCTL_DSP_HALT
-.It Dv SNDCTL_DSP_HALT_INPUT
-.It Dv SNDCTL_DSP_HALT_OUTPUT
-The argument is ignored.
-All input or output (or both) associated with the file
-is halted, and any pending data is discarded.
-.Pp
-.It Dv SNDCTL_DSP_SPEED
-The argument is a pointer to an integer, indicating the sample rate (in Hz) to
-be used.
-The rate applies to both input and output for the file descriptor.
-On return the actual rate, which can differ from that requested, is stored in
-the integer pointed to by the argument.
-To query the configured speed without
-changing it the value 0 can be used by the application.
-.Pp
-.It Dv SNDCTL_DSP_GETFMTS
-The argument is a pointer to an integer, which receives a bit mask of encodings
-supported by the device.
-Possible values are:
-.Pp
-.Bl -tag -width "AFMT_S24_PACKED" -compact -offset 2n
-.It Dv AFMT_MU_LAW
-8-bit unsigned \(*m-Law
-.It Dv AFMT_A_LAW
-8-bit unsigned a-Law
-.It Dv AFMT_U8
-8-bit unsigned linear PCM
-.It Dv AFMT_S16_LE
-16-bit signed little-endian linear PCM
-.It Dv AFMT_S16_BE
-16-bit signed big-endian linear PCM
-.It Dv AFMT_S16_NE
-16-bit signed native-endian linear PCM
-.It Dv AFMT_U16_LE
-16-bit unsigned little-endian linear PCM
-.It Dv AFMT_U16_BE
-16-bit unsigned big-endian linear PCM
-.It Dv AFMT_U16_NE
-16-bit unsigned native-endian linear PCM
-.It Dv AFMT_S24_LE
-24-bit signed little-endian linear PCM, 32-bit aligned
-.It Dv AFMT_S24_BE
-24-bit signed big-endian linear PCM, 32-bit aligned
-.It Dv AFMT_S24_NE
-24-bit signed native-endian linear PCM, 32-bit aligned
-.It Dv AFMT_S32_LE
-32-bit signed little-endian linear PCM
-.It Dv AFMT_S32_BE
-32-bit signed big-endian linear PCM
-.It Dv AFMT_S32_NE
-32-bit signed native-endian linear PCM
-.It Dv AFMT_S24_PACKED
-24-bit signed little-endian packed linear PCM
-.El
-.Pp
-Not all devices support all of these encodings.
-This implementation uses
-.Dv AFMT_S24_LE
-or
-.Dv AFMT_S24_BE ,
-whichever is native, internally.
-.Pp
-.It Dv SNDCTL_DSP_SETFMT
-The argument is a pointer to an integer, which indicates the encoding to be
-used.
-The same values as for
-.Dv SNDCTL_DSP_GETFMT
-can be used, but the caller can only specify a single option.
-The encoding is used for both input
-and output performed on the file descriptor.
-.Pp
-.It Dv SNDCTL_DSP_CHANNELS
-The argument is a pointer to an integer, indicating the number of channels to
-be used (1 for mono, 2 for stereo, etc.)
-The value applies to both input and output for the file descriptor.
-On return the actual channel configuration (which can differ from that
-requested) is stored in the integer pointed to by the argument.
-To query the configured channels without changing it the value 0
-can be used by the application.
-.Pp
-.It Dv SNDDCTL_DSP_GETCAPS
-The argument is a pointer to an integer bit mask, which indicates the
-capabilities of the device.
-The bits returned can include:
-.Pp
-.Bl -tag -width "PCM_CAP_DUPLEX" -compact -offset 2n
-.It Dv PCM_CAP_OUTPUT
-Device supports playback
-.It Dv PCM_CAP_INPUT
-Device supports recording
-.It Dv PCM_CAP_DUPLEX
-Device supports simultaneous playback and recording
-.El
-.Pp
-.It Dv SNDCTL_DSP_GETPLAYVOL
-.It Dv SNDCTL_DSP_GETRECVOL
-The argument is a pointer to an integer to receive the volume level for either
-playback or record.
-The value is encoded as a stereo value with the values for
-two channels in the least significant two bytes.
-The value for each channel thus has a range of 0-100.
-In this implementation, only the low order byte is
-used, as the value is treated as a monophonic value, but a stereo value (with
-both channel levels being identical) is returned for compatibility.
-.Pp
-.It Dv SNDCTL_DSP_SETPLAYVOL
-.It Dv SNDCTL_DSP_SETRECVOL
-The argument is a pointer to an integer indicating volume level for either
-playback or record.
-The value is encoded as a stereo value with the values for
-two channels in the least significant two bytes.
-The value for each channel has a range of 0-100.
-Note that in this implementation, only the low order byte is
-used, as the value is treated as a monophonic value.
-Portable applications should assign the same value to both bytes.
-.Pp
-.It Dv SNDCTL_DSP_GETISPACE
-.It Dv SNDCTL_DSP_GETOSPACE
-The argument is a pointer to a
-.Vt struct audio_buf_info ,
-which has the following structure:
-.Bd -literal -offset 2n
-typedef struct audio_buf_info {
- int fragments; /* # of available fragments */
- int fragstotal;
- /* Total # of fragments allocated */
- int fragsize;
- /* Size of a fragment in bytes */
- int bytes;
- /* Available space in bytes */
- /*
- * Note! 'bytes' could be more than
- * fragments*fragsize
- */
-} audio_buf_info;
-.Ed
-.Pp
-The fields
-.Fa fragments ,
-.Fa fragstotal ,
-and
-.Fa fragsize
-are intended for use with compatible applications (and in the future with
-.Xr mmap 2 )
-only, and need not be used by typical applications.
-On successful return the bytes member
-contains the number of bytes that can be transferred without blocking.
-.Pp
-.It Dv SNDCTL_DSP_CURRENT_IPTR
-.It Dv SNDCTL_DSP_CURRENT_OPTR
-The argument is a pointer to an
-.Vt oss_count_t ,
-which has the following definition:
-.Bd -literal -offset 2n
-typedef struct {
- long long samples;
- /* Total # of samples */
- int fifo_samples;
- /* Samples in device FIFO */
- int filler[32]; /* For future use */
-} oss_count_t;
-.Ed
-.Pp
-The
-.Fa samples
-field contains the total number of samples transferred by the
-device so far.
-The
-.Fa fifo_samples
-is the depth of any hardware FIFO.
-This structure can be useful for accurate stream positioning and latency
-calculations.
-.Pp
-.It Dv SNDCTL_DSP_GETIPTR
-.It Dv SNDCTL_DSP_GETOPTR
-The argument is a pointer to a
-.Vt struct count_info ,
-which has the following definition:
-.Bd -literal -offset 2n
-typedef struct count_info {
- unsigned int bytes;
- /* Total # of bytes processed */
- int blocks;
- /*
- * # of fragment transitions since
- * last time
- */
- int ptr; /* Current DMA pointer value */
-} count_info;
-.Ed
-.Pp
-These ioctls are primarily supplied for compatibility, and should not be used
-by most applications.
-.Pp
-.It Dv SNDCTL_DSP_GETODELAY
-The argument is a pointer to an integer.
-On return, the integer contains the
-number of bytes still to be played before the next byte written are played.
-This can be used for accurate determination of device latency.
-The result can differ from actual value by up the depth of the internal device
-FIFO, which is typically 64 bytes.
-.Pp
-.It Dv SNDCTL_DSP_GETERROR
-The argument is a pointer to a
-.Vt struct audio_errinfo ,
-defined as follows:
-.Bd -literal -offset 2n
-typedef struct audio_errinfo {
- int play_underruns;
- int rec_overruns;
- unsigned int play_ptradjust;
- unsigned int rec_ptradjust;
- int play_errorcount;
- int rec_errorcount;
- int play_lasterror;
- int rec_lasterror;
- int play_errorparm;
- int rec_errorparm;
- int filler[16];
-} audio_errinfo;
-.Ed
-.Pp
-For this implementation, only the
-.Fa play_underruns
-and
-.Fa rec_overruns
-values are significant.
-No other fields are used in this implementation.
-.Pp
-These fields are reset to zero each time their value is retrieved using this
-ioctl.
-.El
-.Ss "Compatibility IOCTLS"
-These ioctls are supplied exclusively for compatibility with existing
-applications.
-Their use is not recommended, and they are not documented here.
-Many of these are implemented as simple no-ops.
-.Pp
-.Bl -tag -width "Dv" -offset 2n -compact
-.It Dv SNDCTL_DSP_POST
-.It Dv SNDCTL_DSP_STEREO
-.It Dv SNDCTL_DSP_SETDUPLEX
-.It Dv SNDCTL_DSP_LOW_WATER
-.It Dv SNDCTL_DSP_PROFILE
-.It Dv SNDCTL_DSP_GETBLKSIZE
-.It Dv SNDCTL_DSP_SUBDIVIDE
-.It Dv SNDCTL_DSP_SETFRAGMENT
-.It Dv SNDCTL_DSP_COOKEDMODE
-.It Dv SNDCTL_DSP_READCTL
-.It Dv SNDCTL_DSP_WRITECTL
-.It Dv SNDCTL_DSP_SILENCE
-.It Dv SNDCTL_DSP_SKIP
-.It Dv SNDCTL_DSP_POST
-.It Dv SNDCTL_DSP_GET_RECSRC
-.It Dv SNDCTL_DSP_SET_RECSRC
-.It Dv SNDCTL_DSP_SET_RECSRC_NAMES
-.It Dv SNDCTL_DSP_GET_PLAYTGT
-.It Dv SNDCTL_DSP_SET_PLAYTGT
-.It Dv SNDCTL_DSP_SET_PLAYTGT_NAMES
-.It Dv SNDCTL_DSP_GETTRIGGER
-.It Dv SNDCTL_DSP_SETTRIGGER
-.It Dv SNDCTL_AUDIOINFO_EX
-.It Dv SNDCTL_ENGINEINFO
-.El
-.Sh FILES
-The physical audio device names are system dependent and are rarely used by
-programmers.
-Programmers should use the generic device names listed below.
-.Bl -tag -width "/usr/share/audio/samples"
-.It Pa /dev/dsp
-Symbolic link to the system's primary audio device
-.It Pa /dev/mixer
-Symbolic link to the pseudo mixer device for the system
-.It Pa /dev/sndstat
-Symbolic link to the pseudo mixer device for the system
-.It Pa /usr/share/audio/samples
-Audio files
-.El
-.Sh ERRORS
-An
-.Xr open 2
-call fails if:
-.Bl -tag -width "EINVAL"
-.It Er EBUSY
-The requested play or record access is busy and either the
-.Dv O_NDELAY
-or
-.Dv O_NONBLOCK
-flag was set in the
-.Xr open 2
-request.
-.It Er EINTR
-The requested play or record access is busy and a signal interrupted the
-.Xr open 2
-request.
-.It Er EINVAL
-The device cannot support the requested play or record access.
-.El
-.Pp
-An
-.Xr ioctl 2
-call fails if:
-.Bl -tag -width "EINVAL"
-.It Er EINVAL
-The parameter changes requested in the ioctl are invalid or are not supported
-by the device.
-.El
-.Sh ARCHITECTURE
-SPARC
-X86
-.Sh INTERFACE STABILITY
-Uncommitted
-.Sh SEE ALSO
-.Xr close 2 ,
-.Xr fcntl 2 ,
-.Xr ioctl 2 ,
-.Xr mmap 2 ,
-.Xr open 2 ,
-.Xr poll 2 ,
-.Xr read 2 ,
-.Xr write 2 ,
-.Xr attributes 5 ,
-.Xr audio 7D ,
-.Xr mixer 7I