summaryrefslogtreecommitdiff
path: root/usr/src/man/man7i/audio.7i
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7i/audio.7i')
-rw-r--r--usr/src/man/man7i/audio.7i999
1 files changed, 0 insertions, 999 deletions
diff --git a/usr/src/man/man7i/audio.7i b/usr/src/man/man7i/audio.7i
deleted file mode 100644
index fcee1683f8..0000000000
--- a/usr/src/man/man7i/audio.7i
+++ /dev/null
@@ -1,999 +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 8, 2018
-.Dt AUDIO 7I
-.Os
-.Sh NAME
-.Nm audio
-.Nd generic audio device interface
-.Sh SYNOPSIS
-.In sys/audio.h
-.Sh OVERVIEW
-An audio device is used to play and/or record a stream of audio data.
-Since a
-specific audio device may not support all functionality described below, refer
-to the device-specific manual pages for a complete description of each hardware
-device.
-An application can use the
-.Dv AUDIO_GETDEV
-.Xr ioctl 2
-to determine the current audio hardware associated with
-.Pa /dev/audio .
-.Pp
-The audio framework provides a software mixing engine (audio mixer) for all
-audio devices, allowing more than one process to play or record audio at the
-same time.
-.Ss "Backward Compatibility"
-It is no longer possible to disable the mixing function.
-Applications must not
-assume that they have exclusive access to the audio device.
-.Ss "Multi-Stream Codecs"
-The audio mixer supports multi-stream Codecs.
-These devices have DSP engines
-that provide sample rate conversion, hardware mixing, and other features.
-The use of such hardware features is opaque to applications.
-.Sh AUDIO FORMATS
-Digital audio data represents a quantized approximation of an analog audio
-signal waveform.
-In the simplest case, these quantized numbers represent the
-amplitude of the input waveform at particular sampling intervals.
-To achieve the best approximation of an input signal, the highest possible sampling
-frequency and precision should be used.
-However, increased accuracy comes at a cost of increased data storage requirements.
-For instance, one minute of
-monaural audio recorded in \(*m-Law format (pronounced
-.Em mew-law )
-at 8 KHz requires nearly 0.5 megabytes of storage, while the standard Compact Disc
-audio format (stereo 16-bit linear
-.Sy PCM
-data sampled at 44.1 KHz) requires approximately 10 megabytes per minute.
-.Pp
-Audio data may be represented in several different formats.
-An audio device's
-current audio data format can be determined by using the
-.Dv AUDIO_GETINFO
-.Xr ioctl 2
-described below.
-.Pp
-An audio data format is characterized in the audio driver by four parameters:
-Sample Rate, Encoding, Precision, and Channels.
-Refer to the device-specific
-manual pages for a list of the audio formats that each device supports.
-In addition to the formats that the audio device supports directly, other formats
-provide higher data compression.
-Applications may convert audio data to and
-from these formats when playing or recording.
-.Ss "Sample Rate"
-Sample rate is a number that represents the sampling frequency (in samples per
-second) of the audio data.
-.Pp
-The audio mixer always configures the hardware for the highest possible sample
-rate for both play and record.
-This ensures that none of the audio streams
-require compute-intensive low pass filtering.
-The result is that high sample rate audio streams are not degraded by filtering.
-.Pp
-Sample rate conversion can be a compute-intensive operation, depending on the
-number of channels and a device's sample rate.
-For example, an 8KHz signal can
-be easily converted to 48KHz, requiring a low cost up sampling by 6.
-However,
-converting from 44.1KHz to 48KHz is compute intensive because it must be up
-sampled by 160 and then down sampled by 147.
-This is only done using integer multipliers.
-.Pp
-Applications can greatly reduce the impact of sample rate conversion by
-carefully picking the sample rate.
-Applications should always use the highest
-sample rate the device supports.
-An application can also do its own sample rate
-conversion (to take advantage of floating point and accelerated instruction or
-use small integers for up and down sampling.
-.Pp
-All modern audio devices run at 48 kHz or a multiple thereof, hence just using
-48 kHz may be a reasonable compromise if the application is not prepared to
-select higher sample rates.
-.Ss "Encodings"
-An encoding parameter specifies the audio data representation.
-\(*m-Law
-encoding corresponds to
-.Em CCITT G.711 ,
-and is the standard for voice data
-used by telephone companies in the United States, Canada, and Japan.
-A-Law encoding is also part of
-.Em CCITT G.711
-and is the standard encoding for telephony elsewhere in the world.
-A-Law and \(*m-Law audio data are sampled at
-a rate of 8000 samples per second with 12-bit precision, with the data
-compressed to 8-bit samples.
-The resulting audio data quality is equivalent to
-that of standard analog telephone service.
-.Pp
-Linear Pulse Code Modulation (PCM) is an uncompressed, signed audio format in
-which sample values are directly proportional to audio signal voltages.
-Each sample is a 2's complement number that represents a positive or negative
-amplitude.
-.Ss "Precision"
-Precision indicates the number of bits used to store each audio sample.
-For instance, \(*m-Law and A-Law data are stored with 8-bit precision.
-.Sy PCM
-data may be stored at various precisions, though 16-bit is the most common.
-.Ss "Channels"
-Multiple channels of audio may be interleaved at sample boundaries.
-A sample frame consists of a single sample from each active channel.
-For example, a sample frame of stereo 16-bit
-.Sy PCM
-data consists of two 16-bit samples,
-corresponding to the left and right channel data.
-.Pp
-The audio mixer sets the hardware to the maximum number of channels supported.
-If a mono signal is played or recorded, it is mixed on the first two (usually
-the left and right) channels only.
-Silence is mixed on the remaining channels
-.Ss "Supported Formats"
-The audio mixer supports the following audio formats:
-.Bl -column "Signed Linear PCM" "Precision" "Mono or Stereo" -offset 2n
-.It Encoding Ta Precision Ta Channels
-.It "Signed Linear PCM" Ta "32-bit" Ta "Mono or Stereo"
-.It "Signed Linear PCM" Ta "16-bit" Ta "Mono or Stereo"
-.It "Signed Linear PCM" Ta "8-bit" Ta "Mono or Stereo"
-.It "\(*m-Law" Ta "8-bit" Ta "Mono or Stereo"
-.It "A-Law" Ta "8-bit" Ta "Mono or Stereo"
-.El
-.Pp
-The audio mixer converts all audio streams to 24-bit Linear PCM before mixing.
-After mixing, conversion is made to the best possible Codec format.
-The
-conversion process is not compute intensive and audio applications can choose
-the encoding format that best meets their needs.
-.Pp
-Note that the mixer discards the low order 8 bits of 32-bit Signed Linear PCM
-in order to perform mixing.
-(This is done to allow for possible overflows to
-fit into 32-bits when mixing multiple streams together.)
-Hence, the maximum effective precision is 24-bits.
-.Sh DESCRIPTION
-The device
-.Pa /dev/audio
-is a device driver that dispatches audio requests
-to the appropriate underlying audio hardware.
-The audio driver is implemented as a
-.Sy STREAMS
-driver.
-In order to record audio input, applications
-.Xr open 2
-the
-.Pa /dev/audio
-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 may contain more than one audio device, application
-writers are encouraged to query the
-.Ev AUDIODEV
-environment variable.
-If this variable is present in the environment, its value should identify the
-path name of the default audio device.
-.Ss "Opening the Audio Device"
-The audio device is not treated as an exclusive resource.
-Each process may open the audio device once.
-.Pp
-Each
-.Xr open 2
-completes as long as there are channels available to be allocated.
-If no channels are available to be allocated:
-.Bl -bullet -offset indent
-.It
-if either the
-.Dv O_NDELAY
-or
-.Dv O_NONBLOCK
-flags are set in the
-.Xr open 2
-.Fa oflag
-argument, then -1 is immediately returned, with
-.Va errno
-set to
-.Er EBUSY .
-.It
-if neither the
-.Dv O_NDELAY
-nor the
-.Dv O_NONBLOCK
-flag are set, then
-.Xr open 2
-hangs until the device is available or a signal is delivered to
-the process, in which case a -1 is returned with
-.Va errno
-set to
-.Er EINTR .
-.El
-.Pp
-Upon the initial
-.Xr open 2
-of the audio channel, the audio mixer sets the data
-format of the audio channel to the default state of 8-bit, 8Khz, mono \(*m-Law
-data.
-.Pp
-If the audio device does not support this configuration, it informs the
-audio mixer of the initial configuration.
-Audio applications should explicitly set the encoding characteristics to match the
-audio data requirements, and not depend on the 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
-.Dv I_NREAD
-.Sy ioctl
-(see
-.Xr streamio 7I )
-may be used to determine the amount of data that may be read without blocking.
-The device may alternatively be set to a non-blocking mode, in which case
-.Xr read 2
-completes immediately, but may 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 immediately
-starts buffering audio input data.
-Since this consumes system resources,
-processes that do not record audio data should open the device write-only
-.Pq Dv O_WRONLY .
-.Pp
-The transfer of input data to
-.Sy STREAMS
-buffers may be paused (or resumed) by using the
-.Dv AUDIO_SETINFO
-.Sy ioctl
-to set (or clear) the
-.Fa record.pause
-flag in the audio information structure (see below).
-All unread input data in the
-.Sy STREAMS
-queue may be discarded by using the
-.Dv I_FLUSH
-.Sy STREAMS
-ioctl.
-See
-.Xr streamio 7I .
-When changing record parameters, the input stream should be paused and flushed
-before the change, and resumed afterward.
-Otherwise, subsequent reads may 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
-.Sy STREAMS
-buffers very quickly.
-At a minimum,
-it will accumulate at 8000 bytes per second for 8-bit, 8 KHz, mono, \(*m-Law data.
-If the device is configured for 16-bit linear or higher sample rates, it will
-accumulate even faster.
-If the application that consumes the data cannot keep
-up with this data rate, the
-.Sy STREAMS
-queue may become full.
-When this occurs, the
-.Fa record.error
-flag is set in the audio information structure and input sampling ceases until
-there is room in the input queue for additional data.
-In such cases, the input data stream contains a discontinuity.
-For this reason, audio recording applications should open the audio device when
-they are prepared to begin reading data, rather than at the start of extensive
-initialization.
-.Ss "Playing Audio Data"
-The
-.Xr write 2
-system call copies data from an application's buffer to the
-.Sy STREAMS
-output queue.
-Ordinarily,
-.Xr write 2
-blocks until the entire user buffer is transferred.
-The device may alternatively be set to a non-blocking mode, in which case
-.Xr write 2
-completes immediately, but may 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 may take considerably longer.
-The
-.Dv AUDIO_DRAIN
-ioctl may be issued to allow an application to block until all of the
-queued output data has been played.
-Alternatively, a process may request
-asynchronous notification of output completion by writing a zero-length buffer
-(end-of-file record) to the output stream.
-When such a buffer has been
-processed, the
-.Fa play.eof
-flag in the audio information structure is incremented.
-.Pp
-The final
-.Xr close 2
-of the file descriptor hangs 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 consumption of output data may be paused (or resumed) by using the
-.Dv AUDIO_SETINFO
-ioctl to set (or clear) the
-.Fa play.pause
-flag in the audio information structure.
-Queued output data may be discarded by using
-the
-.Dv I_FLUSH
-.Sy STREAMS
-ioctl.
-(See
-.Xr streamio 7I ) .
-.Pp
-Output data is played from the
-.Sy STREAMS
-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 queue becomes
-empty, the
-.Fa play.error
-flag is set in the audio information structure and
-output is stopped until additional data is written.
-If an application attempts
-to write a number of bytes that is not a multiple of the current sample frame
-size, an error is generated and the bad data is thrown away.
-Additional writes are allowed.
-.Ss "Asynchronous I/O"
-The
-.Dv I_SETSIG
-.Sy STREAMS
-ioctl
-enables asynchronous notification, through the
-.Dv SIGPOLL
-signal, of input and output ready condition changes.
-The
-.Dv O_NONBLOCK
-flag may 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.
-.Ss "Audio Control Pseudo-Device"
-It is sometimes convenient to have an application, such as a volume control
-panel, modify certain characteristics of the audio device while it is being
-used by an unrelated process.
-.Pp
-The
-.Pa /dev/audioctl
-pseudo-device is provided for this purpose.
-Any number of processes may open
-.Pa /dev/audioctl
-simultaneously.
-However,
-.Xr read 2
-and
-.Xr write 2
-system calls are ignored by
-.Pa /dev/audioctl .
-The
-.Dv AUDIO_GETINFO
-and
-.Dv AUDIO_SETINFO
-ioctl commands may be issued to
-.Pa /dev/audioctl
-to determine the status or alter the behavior of
-.Pa /dev/audio .
-Note: In general, the audio control device name is
-constructed by appending the letters
-.Qq Sy ctl
-to the path name of the audio device.
-.Ss "Audio Status Change Notification"
-Applications that open the audio control pseudo-device may request asynchronous
-notification of changes in the state of the audio device by setting the
-.Dv S_MSG
-flag in an
-.Dv I_SETSIG
-.Sy STREAMS
-ioctl.
-Such processes receive a
-.Dv SIGPOLL
-signal when any of the following events occur:
-.Bl -bullet -offset indent
-.It
-An
-.Dv AUDIO_SETINFO
-ioctl has altered the device state.
-.It
-An input overflow or output underflow has occurred.
-.It
-An end-of-file record (zero-length buffer) has been processed on output.
-.It
-An
-.Xr open 2
-or
-.Xr close 2
-of
-.Pa /dev/audio
-has altered the device state.
-.It
-An external event (such as speakerbox's volume control) has altered the device
-state.
-.El
-.Sh IOCTLS
-.Ss "Audio Information Structure"
-The state of the audio device may be polled or modified using the
-.Dv AUDIO_GETINFO
-and
-.Dv AUDIO_SETINFO
-ioctl commands.
-These commands operate on the
-.Vt audio_info
-structure as defined, in
-.In sys/audio.h ,
-as follows:
-.Bd -literal -offset 2n
-/*
- * This structure contains state information for audio device
- * IO streams
- */
-
-struct audio_prinfo {
- /*
- * The following values describe the
- * audio data encoding
- */
- uint_t sample_rate; /* samples per second */
- uint_t channels; /* number of interleaved channels */
- uint_t precision; /* number of bits per sample */
- uint_t encoding; /* data encoding method */
-
- /*
- * The following values control audio device
- * configuration
- */
- uint_t gain; /* volume level */
- uint_t port; /* selected I/O port */
- uint_t buffer_size; /* I/O buffer size */
-
- /*
- * The following values describe the current device
- * state
- */
- uint_t samples; /* number of samples converted */
- uint_t eof; /* End Of File counter (play only) */
- uchar_t pause; /* non-zero if paused, zero to resume */
- uchar_t error; /* non-zero if overflow/underflow */
- uchar_t waiting; /* non-zero if a process wants access */
- uchar_t balance; /* stereo channel balance */
-
- /*
- * The following values are read-only device state
- * information
- */
- uchar_t open; /* non-zero if open access granted */
- uchar_t active; /* non-zero if I/O active */
- uint_t avail_ports; /* available I/O ports */
- uint_t mod_ports; /* modifiable I/O ports */
-};
-typedef struct audio_prinfo audio_prinfo_t;
-
-/*
- * This structure is used in AUDIO_GETINFO and AUDIO_SETINFO ioctl
- * commands
- */
-struct audio_info {
- audio_prinfo_t record;/* input status info */
- audio_prinfo_t play; /* output status info */
- uint_t monitor_gain; /* input to output mix */
- uchar_toutput_muted; /* non-zero if output muted */
- uint_t hw_features; /* supported H/W features */
- uint_t sw_features; /* supported S/W features */
- uint_t sw_features_enabled;
- /* supported S/W features enabled */
-};
-typedef struct audio_info audio_info_t;
-
-/* Audio encoding types */
-#define AUDIO_ENCODING_ULAW (1) /* u-Law encoding */
-#define AUDIO_ENCODING_ALAW (2) /* A-Law encoding */
-#define AUDIO_ENCODING_LINEAR (3) /* Signed Linear PCM encoding */
-
-/*
- * These ranges apply to record, play, and
- * monitor gain values
- */
-#define AUDIO_MIN_GAIN (0)/* minimum gain value */
-#define AUDIO_MAX_GAIN (255) /* maximum gain value */
-
-/*
- * These values apply to the balance field to adjust channel
- * gain values
- */
-#define AUDIO_LEFT_BALANCE (0) /* left channel only */
-#define AUDIO_MID_BALANCE (32) /* equal left/right balance */
-#define AUDIO_RIGHT_BALANCE (64) /* right channel only */
-
-/*
- * Define some convenient audio port names
- * (for port, avail_ports and mod_ports)
- */
-
-/* output ports (several might be enabled at once) */
-#define AUDIO_SPEAKER (0x01) /* built-in speaker */
-#define AUDIO_HEADPHONE (0x02) /* headphone jack */
-#define AUDIO_LINE_OUT (0x04) /* line out */
-#define AUDIO_SPDIF_OUT (0x08) /* SPDIF port */
-#define AUDIO_AUX1_OUT (0x10) /* aux1 out */
-#define AUDIO_AUX2_OUT (0x20) /* aux2 out */
-
-/*
- * input ports (usually only one may be enabled at a time)
- */
-#define AUDIO_MICROPHONE (0x01) /* microphone */
-#define AUDIO_LINE_IN (0x02) /* line in */
-#define AUDIO_CD (0x04) /* on-board CD inputs */
-#define AUDIO_SPDIF_IN (0x08) /* SPDIF port */
-#define AUDIO_AUX1_IN (0x10) /* aux1 in */
-#define AUDIO_AUX2_IN (0x20) /* aux2 in */
-#define AUDIO_CODEC_LOOPB_IN (0x40) /* Codec inter. loopback */
-
-/* These defines are for hardware features */
-#define AUDIO_HWFEATURE_DUPLEX (0x00000001u)
-/* simult. play & cap. supported */
-
-#define AUDIO_HWFEATURE_MSCODEC (0x00000002u)
-/* multi-stream Codec */
-
-/* These defines are for software features *
-#define AUDIO_SWFEATURE_MIXER (0x00000001u)
-/* audio mixer audio pers. mod. */
-
-/*
- * Parameter for the AUDIO_GETDEV ioctl
- * to determine current audio devices
- */
-#define MAX_AUDIO_DEV_LEN (16)
-struct audio_device {
- char name[MAX_AUDIO_DEV_LEN];
- char version[MAX_AUDIO_DEV_LEN];
- char config[MAX_AUDIO_DEV_LEN];
-};
-typedef struct audio_device audio_device_t;
-.Ed
-.Pp
-The
-.Fa play.gain
-and
-.Fa record.gain
-fields specify the output and input volume levels.
-A value of
-.Dv AUDIO_MAX_GAIN
-indicates maximum volume.
-Audio output may also be temporarily muted by setting a non-zero value in the
-.Fa output_muted
-field.
-Clearing this field restores audio output to the normal state.
-.Pp
-The
-.Va monitor_gain
-field is present for compatibility, and is no longer supported.
-See
-.Xr dsp 7I
-for more detail.
-.Pp
-Likewise, the
-.Fa play.port ,
-.Fa play.ports ,
-.Fa play.mod_ports ,
-.Fa record.port ,
-.Fa record.ports ,
-and
-.Fa record.mod_ports
-are no longer supported.
-See
-.Xr dsp 7I
-for more detail.
-.Pp
-The
-.Fa play.balance
-and
-.Fa record.balance
-fields are fixed to
-.Dv AUDIO_MID_BALANCE .
-Changes to volume levels for different channels can be
-made using the interfaces in
-.Xr dsp 7I .
-.Pp
-The
-.Fa play.pause
-and
-.Fa record.pause
-flags may be used to pause and
-resume the transfer of data between the audio device and the
-.Sy STREAMS
-buffers.
-The
-.Fa play.error
-and
-.Fa record.error
-flags indicate that data underflow or overflow has occurred.
-The
-.Fa play.active
-and
-.Fa record.active
-flags indicate that data transfer is currently active in the corresponding
-direction.
-.Pp
-The
-.Fa play.open
-and
-.Fa record.open
-flags indicate that the device is
-currently open with the corresponding access permission.
-The
-.Fa play.waiting
-and
-.Fa record.waiting
-flags provide an indication that a process may be waiting to access the device.
-These flags are set automatically when a process blocks on
-.Xr open 2 ,
-though they may also be set using the
-.Dv AUDIO_SETINFO
-ioctl command.
-They are cleared only when a process relinquishes access by closing the device.
-.Pp
-The
-.Fa play.samples
-and
-.Fa record.samples
-fields are zeroed at
-.Xr open 2
-and are incremented each time a data sample is copied to or from
-the associated
-.Sy STREAMS
-queue.
-Some audio drivers may be limited to counting
-buffers of samples, instead of single samples for their samples accounting.
-For this reason, applications should not assume that the samples fields contain a
-perfectly accurate count.
-The
-.Fa play.eof
-field increments whenever a zero-length output buffer is synchronously processed.
-Applications may use this
-field to detect the completion of particular segments of audio output.
-.Pp
-The
-.Fa record.buffer_size
-field controls the amount of input data that is
-buffered in the device driver during record operations.
-Applications that have
-particular requirements for low latency should set the value appropriately.
-Note however that smaller input buffer sizes may result in higher system
-overhead.
-The value of this field is specified in bytes and drivers will
-constrain it to be a multiple of the current sample frame size.
-Some drivers may place other requirements on the value of this field.
-Refer to the audio device-specific manual page for more details.
-If an application changes the
-format of the audio device and does not modify the
-.Fa record.buffer_size
-field, the device driver may use a default value to compensate for the new data
-rate.
-Therefore, if an application is going to modify this field, it should
-modify it during or after the format change itself, not before.
-When changing
-the
-.Fa record.buffer_size
-parameters, the input stream should be paused and
-flushed before the change, and resumed afterward.
-Otherwise, subsequent reads
-may 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.
-If you change the
-.Fa record.buffer_size
-for the first packet, this protocol must be followed or the first buffer will
-be the default buffer size for the device, followed by packets of the requested
-change size.
-.Pp
-The
-.Fa record.buffer_size
-field may be modified only on the
-.Pa /dev/audio
-device by processes that have it opened for reading.
-.Pp
-The
-.Fa play.buffer_size
-field is currently not supported.
-.Pp
-The audio data format is indicated by the
-.Fa sample_rate ,
-.Fa channels ,
-.Fa precision ,
-and
-.Fa encoding
-fields.
-The values of these fields correspond to the
-descriptions in the
-.Sx "AUDIO FORMATS"
-section of this man page.
-Refer to the
-audio device-specific manual pages for a list of supported data format
-combinations.
-.Pp
-The data format fields can be modified only on the
-.Pa /dev/audio
-device.
-.Pp
-If the parameter changes requested by an
-.Dv AUDIO_SETINFO
-ioctl cannot all be accommodated,
-.Xr ioctl 2
-returns with
-.Va errno
-set to
-.Er EINVAL
-and no changes are made to the device state.
-.Ss "Streamio IOCTLS"
-All of the
-.Xr streamio 7I
-.Xr ioctl 2
-commands may be issued for the
-.Pa /dev/audio
-device.
-Because the
-.Pa /dev/audioctl
-device has its own
-.Sy STREAMS
-queues, most of these commands neither modify nor report the
-state of
-.Pa /dev/audio
-if issued for the
-.Pa /dev/audioctl
-device.
-The
-.Dv I_SETSIG
-ioctl may be issued for
-.Pa /dev/audioctl
-to enable the notification of audio status changes, as described above.
-.Ss "Audio IOCTLS"
-The audio device additionally supports the following
-.Xr ioctl 2
-commands:
-.Bl -tag -width "AUDIO_GETINFO"
-.It Dv AUDIO_DRAIN
-The argument is ignored.
-This command suspends the calling process until the
-output STREAMS queue is empty and all queued samples have been played, or until
-a signal is delivered to the calling process.
-It may not be issued for the
-.Pa /dev/audioctl
-device.
-An implicit
-.Dv AUDIO_DRAIN
-is performed on the final
-.Xr close 2
-of
-.Pa /dev/audio .
-.It Dv AUDIO_GETDEV
-The argument is a pointer to an
-.Vt audio_device_t
-structure.
-This command may be issued for either
-.Pa /dev/audio
-or
-.Pa /dev/audioctl .
-The returned
-value in the name field will be a string that will identify the current
-.Pa /dev/audio
-hardware device, the value in version will be a string
-indicating the current version of the hardware, and
-.Fa config
-will be a device-specific string identifying the properties of the audio stream
-associated with that file descriptor.
-Refer to the audio device-specific manual
-pages to determine the actual strings returned by the device driver.
-.It Dv AUDIO_GETINFO
-The argument is a pointer to an
-.Vt audio_info_t
-structure.
-This command may be issued for either
-.Pa /dev/audio
-or
-.Pa /dev/audioctl .
-The current state of the
-.Pa /dev/audio
-device is returned in the structure.
-Values return pertain to a logical view of the device as seen by and private to
-the process, and do not necessarily reflect the actual hardware device itself.
-.It Dv AUDIO_SETINFO
-The argument is a pointer to an
-.Vt audio_info_t
-structure.
-This command may be issued for either the
-.Pa /dev/audio
-or the
-.Pa /dev/audioctl
-device with some restrictions.
-This command configures the audio device according to
-the supplied structure and overwrites the existing structure with the new state
-of the device.
-Note: The
-.Fa play.samples ,
-.Fa record.samples ,
-.Fa play.error ,
-.Fa record.error ,
-and
-.Fa play.eof
-fields are modified to reflect the state of the device when the
-.Dv AUDIO_SETINFO
-is issued.
-This allows programs to automatically modify these fields while retrieving the
-previous value.
-.Pp
-As with
-.Dv AUDIO_SETINFO ,
-the settings managed by this ioctl deal with a
-logical view of the device which is private to the process, and don't
-necessarily have any impact on the hardware device itself.
-.El
-.Pp
-Certain fields in the audio information structure, such as the pause flags, are
-treated as read-only when
-.Pa /dev/audio
-is not open with the corresponding access permission.
-Other fields, such as the gain levels and encoding
-information, may have a restricted set of acceptable values.
-Applications that
-attempt to modify such fields should check the returned values to be sure that
-the corresponding change took effect.
-The
-.Fa sample_rate ,
-.Fa channels ,
-.Fa precision ,
-and
-.Fa encoding
-fields treated as read-only for
-.Pa /dev/audioctl ,
-so that applications can be guaranteed that the existing
-audio format will stay in place until they relinquish the audio device.
-.Dv AUDIO_SETINFO
-will return
-.Er EINVAL
-when the desired configuration is not possible, or
-.Er EBUSY
-when another process has control of the audio device.
-.Pp
-All of the logical device state is reset when the corresponding I/O stream of
-.Pa /dev/audio
-is closed.
-.Pp
-The
-.Vt audio_info_t
-structure may be initialized through the use of the
-.Dv AUDIO_INITINFO
-macro.
-This macro sets all fields in the structure to
-values that are ignored by the
-.Dv AUDIO_SETINFO
-command.
-For instance, the following code switches the output port from the built-in
-speaker to the headphone jack without modifying any other audio parameters:
-.Bd -literal -offset 2n
-audio_info_t info;
-AUDIO_INITINFO();
-info.play.port = AUDIO_HEADPHONE;
-err = ioctl(audio_fd, AUDIO_SETINFO, );
-.Ed
-.Pp
-This technique eliminates problems associated with using a sequence of
-.Dv AUDIO_GETINFO
-followed by
-.Dv AUDIO_SETINFO .
-.Sh FILES
-The physical audio device names are system dependent and are rarely used by
-programmers.
-Programmers should use the following generic device names:
-.Bl -tag -width "/usr/share/audio/samples"
-.It Pa /dev/audio
-Symbolic link to the system's primary audio device
-.It Pa /dev/audioctl
-Symbolic link to the control device for
-.Pa /dev/audio
-.It Pa /dev/sound/0
-First audio device in the system
-.It Pa /dev/sound/0ctl
-Audio control device for
-.Pa /dev/sound/0
-.It Pa /usr/share/audio/samples
-Audio files
-.El
-.Sh ERRORS
-An
-.Xr open 2
-call will fail if:
-.Bl -tag -width "EINTR"
-.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.
-.El
-.Pp
-An
-.Xr ioctl 2
-call will fail if:
-.Bl -tag -width "EINVAL"
-.It Er EINVAL
-The parameter changes requested in the
-.Dv AUDIO_SETINFO
-ioctl are invalid or are not supported by the device.
-.El
-.Sh ARCHITECTURE
-SPARC
-X86
-.Sh INTERFACE STABILITY
-Obsolete Uncommitted
-.Sh SEE ALSO
-.Xr close 2 ,
-.Xr fcntl 2 ,
-.Xr ioctl 2 ,
-.Xr open 2 ,
-.Xr poll 2 ,
-.Xr read 2 ,
-.Xr write 2 ,
-.Xr attributes 5 ,
-.Xr dsp 7I ,
-.Xr streamio 7I
-.Sh BUGS
-Due to a feature of the
-.Sy STREAMS
-implementation, programs that are terminated or
-exit without closing the audio device may hang for a short period while audio
-output drains.
-In general, programs that produce audio output should catch the
-.Dv SIGINT
-signal and flush the output stream before exiting.