xref: /illumos-gate/usr/src/man/man4i/audio.4i (revision 20a7641f9918de8574b8b3b47dbe35c4bfc78df1)
1.\"  Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
2.\" Copyright 2018, Joyent, Inc.
3.\" The contents of this file are subject to the terms of the
4.\" Common Development and Distribution License (the "License").
5.\" You may not use this file except in compliance with the License.
6.\"
7.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8.\" or http://www.opensolaris.org/os/licensing.
9.\" See the License for the specific language governing permissions
10.\" and limitations under the License.
11.\"
12.\" When distributing Covered Code, include this CDDL HEADER in each
13.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
14.\" If applicable, add the following below this CDDL HEADER, with the
15.\" fields enclosed by brackets "[]" replaced with your own identifying
16.\" information: Portions Copyright [yyyy] [name of copyright owner]
17.Dd July 8, 2018
18.Dt AUDIO 4I
19.Os
20.Sh NAME
21.Nm audio
22.Nd generic audio device interface
23.Sh SYNOPSIS
24.In sys/audio.h
25.Sh OVERVIEW
26An audio device is used to play and/or record a stream of audio data.
27Since a
28specific audio device may not support all functionality described below, refer
29to the device-specific manual pages for a complete description of each hardware
30device.
31An application can use the
32.Dv AUDIO_GETDEV
33.Xr ioctl 2
34to determine the current audio hardware associated with
35.Pa /dev/audio .
36.Pp
37The audio framework provides a software mixing engine (audio mixer) for all
38audio devices, allowing more than one process to play or record audio at the
39same time.
40.Ss "Backward Compatibility"
41It is no longer possible to disable the mixing function.
42Applications must not
43assume that they have exclusive access to the audio device.
44.Ss "Multi-Stream Codecs"
45The audio mixer supports multi-stream Codecs.
46These devices have DSP engines
47that provide sample rate conversion, hardware mixing, and other features.
48The use of such hardware features is opaque to applications.
49.Sh AUDIO FORMATS
50Digital audio data represents a quantized approximation of an analog audio
51signal waveform.
52In the simplest case, these quantized numbers represent the
53amplitude of the input waveform at particular sampling intervals.
54To achieve the best approximation of an input signal, the highest possible sampling
55frequency and precision should be used.
56However, increased accuracy comes at a cost of increased data storage requirements.
57For instance, one minute of
58monaural audio recorded in \(*m-Law format (pronounced
59.Em mew-law )
60at 8 KHz requires nearly 0.5 megabytes of storage, while the standard Compact Disc
61audio format (stereo 16-bit linear
62.Sy PCM
63data sampled at 44.1 KHz) requires approximately 10 megabytes per minute.
64.Pp
65Audio data may be represented in several different formats.
66An audio device's
67current audio data format can be determined by using the
68.Dv AUDIO_GETINFO
69.Xr ioctl 2
70described below.
71.Pp
72An audio data format is characterized in the audio driver by four parameters:
73Sample Rate, Encoding, Precision, and Channels.
74Refer to the device-specific
75manual pages for a list of the audio formats that each device supports.
76In addition to the formats that the audio device supports directly, other formats
77provide higher data compression.
78Applications may convert audio data to and
79from these formats when playing or recording.
80.Ss "Sample Rate"
81Sample rate is a number that represents the sampling frequency (in samples per
82second) of the audio data.
83.Pp
84The audio mixer always configures the hardware for the highest possible sample
85rate for both play and record.
86This ensures that none of the audio streams
87require compute-intensive low pass filtering.
88The result is that high sample rate audio streams are not degraded by filtering.
89.Pp
90Sample rate conversion can be a compute-intensive operation, depending on the
91number of channels and a device's sample rate.
92For example, an 8KHz signal can
93be easily converted to 48KHz, requiring a low cost up sampling by 6.
94However,
95converting from 44.1KHz to 48KHz is compute intensive because it must be up
96sampled by 160 and then down sampled by 147.
97This is only done using integer multipliers.
98.Pp
99Applications can greatly reduce the impact of sample rate conversion by
100carefully picking the sample rate.
101Applications should always use the highest
102sample rate the device supports.
103An application can also do its own sample rate
104conversion (to take advantage of floating point and accelerated instruction or
105use small integers for up and down sampling.
106.Pp
107All modern audio devices run at 48 kHz or a multiple thereof, hence just using
10848 kHz may be a reasonable compromise if the application is not prepared to
109select higher sample rates.
110.Ss "Encodings"
111An encoding parameter specifies the audio data representation.
112\(*m-Law
113encoding corresponds to
114.Em CCITT G.711 ,
115and is the standard for voice data
116used by telephone companies in the United States, Canada, and Japan.
117A-Law encoding is also part of
118.Em CCITT G.711
119and is the standard encoding for telephony elsewhere in the world.
120A-Law and \(*m-Law audio data are sampled at
121a rate of 8000 samples per second with 12-bit precision, with the data
122compressed to 8-bit samples.
123The resulting audio data quality is equivalent to
124that of standard analog telephone service.
125.Pp
126Linear Pulse Code Modulation (PCM) is an uncompressed, signed audio format in
127which sample values are directly proportional to audio signal voltages.
128Each sample is a 2's complement number that represents a positive or negative
129amplitude.
130.Ss "Precision"
131Precision indicates the number of bits used to store each audio sample.
132For instance, \(*m-Law and A-Law data are stored with 8-bit precision.
133.Sy PCM
134data may be stored at various precisions, though 16-bit is the most common.
135.Ss "Channels"
136Multiple channels of audio may be interleaved at sample boundaries.
137A sample frame consists of a single sample from each active channel.
138For example, a sample frame of stereo 16-bit
139.Sy PCM
140data consists of two 16-bit samples,
141corresponding to the left and right channel data.
142.Pp
143The audio mixer sets the hardware to the maximum number of channels supported.
144If a mono signal is played or recorded, it is mixed on the first two (usually
145the left and right) channels only.
146Silence is mixed on the remaining channels
147.Ss "Supported Formats"
148The audio mixer supports the following audio formats:
149.Bl -column "Signed Linear PCM" "Precision" "Mono or Stereo" -offset 2n
150.It Encoding Ta Precision Ta Channels
151.It "Signed Linear PCM" Ta "32-bit" Ta "Mono or Stereo"
152.It "Signed Linear PCM" Ta "16-bit" Ta "Mono or Stereo"
153.It "Signed Linear PCM" Ta "8-bit" Ta "Mono or Stereo"
154.It "\(*m-Law" Ta "8-bit" Ta "Mono or Stereo"
155.It "A-Law" Ta "8-bit" Ta "Mono or Stereo"
156.El
157.Pp
158The audio mixer converts all audio streams to 24-bit Linear PCM before mixing.
159After mixing, conversion is made to the best possible Codec format.
160The
161conversion process is not compute intensive and audio applications can choose
162the encoding format that best meets their needs.
163.Pp
164Note that the mixer discards the low order 8 bits of 32-bit Signed Linear PCM
165in order to perform mixing.
166(This is done to allow for possible overflows to
167fit into 32-bits when mixing multiple streams together.)
168Hence, the maximum effective precision is 24-bits.
169.Sh DESCRIPTION
170The device
171.Pa /dev/audio
172is a device driver that dispatches audio requests
173to the appropriate underlying audio hardware.
174The audio driver is implemented as a
175.Sy STREAMS
176driver.
177In order to record audio input, applications
178.Xr open 2
179the
180.Pa /dev/audio
181device and read data from it using the
182.Xr read 2
183system call.
184Similarly, sound data is queued to the audio output port by using the
185.Xr write 2
186system call.
187Device configuration is performed using the
188.Xr ioctl 2
189interface.
190.Pp
191Because some systems may contain more than one audio device, application
192writers are encouraged to query the
193.Ev AUDIODEV
194environment variable.
195If this variable is present in the environment, its value should identify the
196path name of the default audio device.
197.Ss "Opening the Audio Device"
198The audio device is not treated as an exclusive resource.
199Each process may open the audio device once.
200.Pp
201Each
202.Xr open 2
203completes as long as there are channels available to be allocated.
204If no channels are available to be allocated:
205.Bl -bullet -offset indent
206.It
207if either the
208.Dv O_NDELAY
209or
210.Dv O_NONBLOCK
211flags are set in the
212.Xr open 2
213.Fa oflag
214argument, then -1 is immediately returned, with
215.Va errno
216set to
217.Er EBUSY .
218.It
219if neither the
220.Dv O_NDELAY
221nor the
222.Dv O_NONBLOCK
223flag are set, then
224.Xr open 2
225hangs until the device is available or a signal is delivered to
226the process, in which case a -1 is returned with
227.Va errno
228set to
229.Er EINTR .
230.El
231.Pp
232Upon the initial
233.Xr open 2
234of the audio channel, the audio mixer sets the data
235format of the audio channel to the default state of 8-bit, 8Khz, mono \(*m-Law
236data.
237.Pp
238If the audio device does not support this configuration, it informs the
239audio mixer of the initial configuration.
240Audio applications should explicitly set the encoding characteristics to match the
241audio data requirements, and not depend on the default configuration.
242.Ss "Recording Audio Data"
243The
244.Xr read 2
245system call copies data from the system's buffers to the application.
246Ordinarily,
247.Xr read 2
248blocks until the user buffer is filled.
249The
250.Dv I_NREAD
251.Sy ioctl
252(see
253.Xr streamio 4I )
254may be used to determine the amount of data that may be read without blocking.
255The device may alternatively be set to a non-blocking mode, in which case
256.Xr read 2
257completes immediately, but may return fewer bytes than requested.
258Refer to the
259.Xr read 2
260manual page for a complete description of this behavior.
261.Pp
262When the audio device is opened with read access, the device driver immediately
263starts buffering audio input data.
264Since this consumes system resources,
265processes that do not record audio data should open the device write-only
266.Pq Dv O_WRONLY .
267.Pp
268The transfer of input data to
269.Sy STREAMS
270buffers may be paused (or resumed) by using the
271.Dv AUDIO_SETINFO
272.Sy ioctl
273to set (or clear) the
274.Fa record.pause
275flag in the audio information structure (see below).
276All unread input data in the
277.Sy STREAMS
278queue may be discarded by using the
279.Dv I_FLUSH
280.Sy STREAMS
281ioctl.
282See
283.Xr streamio 4I .
284When changing record parameters, the input stream should be paused and flushed
285before the change, and resumed afterward.
286Otherwise, subsequent reads may return samples
287in the old format followed by samples in the new format.
288This is particularly important when new parameters result in a changed sample size.
289.Pp
290Input data can accumulate in
291.Sy STREAMS
292buffers very quickly.
293At a minimum,
294it will accumulate at 8000 bytes per second for 8-bit, 8 KHz, mono, \(*m-Law data.
295If the device is configured for 16-bit linear or higher sample rates, it will
296accumulate even faster.
297If the application that consumes the data cannot keep
298up with this data rate, the
299.Sy STREAMS
300queue may become full.
301When this occurs, the
302.Fa record.error
303flag is set in the audio information structure and input sampling ceases until
304there is room in the input queue for additional data.
305In such cases, the input data stream contains a discontinuity.
306For this reason, audio recording applications should open the audio device when
307they are prepared to begin reading data, rather than at the start of extensive
308initialization.
309.Ss "Playing Audio Data"
310The
311.Xr write 2
312system call copies data from an application's buffer to the
313.Sy STREAMS
314output queue.
315Ordinarily,
316.Xr write 2
317blocks until the entire user buffer is transferred.
318The device may alternatively be set to a non-blocking mode, in which case
319.Xr write 2
320completes immediately, but may have transferred fewer bytes than requested.
321See
322.Xr write 2 .
323.Pp
324Although
325.Xr write 2
326returns when the data is successfully queued, the actual
327completion of audio output may take considerably longer.
328The
329.Dv AUDIO_DRAIN
330ioctl may be issued to allow an application to block until all of the
331queued output data has been played.
332Alternatively, a process may request
333asynchronous notification of output completion by writing a zero-length buffer
334(end-of-file record) to the output stream.
335When such a buffer has been
336processed, the
337.Fa play.eof
338flag in the audio information structure is incremented.
339.Pp
340The final
341.Xr close 2
342of the file descriptor hangs until all of the audio
343output has drained.
344If a signal interrupts the
345.Xr close 2 ,
346or if the process exits without closing the device, any remaining data queued
347for audio output is flushed and the device is closed immediately.
348.Pp
349The consumption of output data may be paused (or resumed) by using the
350.Dv AUDIO_SETINFO
351ioctl to set (or clear) the
352.Fa play.pause
353flag in the audio information structure.
354Queued output data may be discarded by using
355the
356.Dv I_FLUSH
357.Sy STREAMS
358ioctl.
359(See
360.Xr streamio 4I ) .
361.Pp
362Output data is played from the
363.Sy STREAMS
364buffers at a default rate of at
365least 8000 bytes per second for \(*m-Law, A-Law or 8-bit PCM data (faster for
36616-bit linear data or higher sampling rates).
367If the output queue becomes
368empty, the
369.Fa play.error
370flag is set in the audio information structure and
371output is stopped until additional data is written.
372If an application attempts
373to write a number of bytes that is not a multiple of the current sample frame
374size, an error is generated and the bad data is thrown away.
375Additional writes are allowed.
376.Ss "Asynchronous I/O"
377The
378.Dv I_SETSIG
379.Sy STREAMS
380ioctl
381enables asynchronous notification, through the
382.Dv SIGPOLL
383signal, of input and output ready condition changes.
384The
385.Dv O_NONBLOCK
386flag may be set using the
387.Dv F_SETFL
388.Xr fcntl 2
389to
390enable non-blocking
391.Xr read 2
392and
393.Xr write 2
394requests.
395This is normally
396sufficient for applications to maintain an audio stream in the background.
397.Ss "Audio Control Pseudo-Device"
398It is sometimes convenient to have an application, such as a volume control
399panel, modify certain characteristics of the audio device while it is being
400used by an unrelated process.
401.Pp
402The
403.Pa /dev/audioctl
404pseudo-device is provided for this purpose.
405Any number of processes may open
406.Pa /dev/audioctl
407simultaneously.
408However,
409.Xr read 2
410and
411.Xr write 2
412system calls are ignored by
413.Pa /dev/audioctl .
414The
415.Dv AUDIO_GETINFO
416and
417.Dv AUDIO_SETINFO
418ioctl commands may be issued to
419.Pa /dev/audioctl
420to determine the status or alter the behavior of
421.Pa /dev/audio .
422Note: In general, the audio control device name is
423constructed by appending the letters
424.Qq Sy ctl
425to the path name of the audio device.
426.Ss "Audio Status Change Notification"
427Applications that open the audio control pseudo-device may request asynchronous
428notification of changes in the state of the audio device by setting the
429.Dv S_MSG
430flag in an
431.Dv I_SETSIG
432.Sy STREAMS
433ioctl.
434Such processes receive a
435.Dv SIGPOLL
436signal when any of the following events occur:
437.Bl -bullet -offset indent
438.It
439An
440.Dv AUDIO_SETINFO
441ioctl has altered the device state.
442.It
443An input overflow or output underflow has occurred.
444.It
445An end-of-file record (zero-length buffer) has been processed on output.
446.It
447An
448.Xr open 2
449or
450.Xr close 2
451of
452.Pa /dev/audio
453has altered the device state.
454.It
455An external event (such as speakerbox's volume control) has altered the device
456state.
457.El
458.Sh IOCTLS
459.Ss "Audio Information Structure"
460The state of the audio device may be polled or modified using the
461.Dv AUDIO_GETINFO
462and
463.Dv AUDIO_SETINFO
464ioctl commands.
465These commands operate on the
466.Vt audio_info
467structure as defined, in
468.In sys/audio.h ,
469as follows:
470.Bd -literal -offset 2n
471/*
472 * This structure contains state information for audio device
473 * IO streams
474 */
475
476struct audio_prinfo {
477     /*
478      * The following values describe the
479      * audio data encoding
480      */
481      uint_t sample_rate; /* samples per second */
482      uint_t channels;    /* number of interleaved channels */
483      uint_t precision;   /* number of bits per sample */
484      uint_t encoding;    /* data encoding method */
485
486      /*
487       * The following values control audio device
488       * configuration
489       */
490      uint_t gain; /* volume level */
491      uint_t port; /* selected I/O port */
492      uint_t buffer_size; /* I/O buffer size */
493
494     /*
495      * The following values describe the current device
496      * state
497      */
498     uint_t samples; /* number of samples converted */
499     uint_t eof;     /* End Of File counter (play only) */
500     uchar_t pause;  /* non-zero if paused, zero to resume */
501     uchar_t error;  /* non-zero if overflow/underflow */
502     uchar_t waiting; /* non-zero if a process wants access */
503     uchar_t balance; /* stereo channel balance */
504
505     /*
506      * The following values are read-only device state
507      * information
508      */
509      uchar_t open;   /* non-zero if open access granted */
510      uchar_t active; /* non-zero if I/O active */
511      uint_t avail_ports; /* available I/O ports */
512      uint_t mod_ports; /* modifiable I/O ports */
513};
514typedef struct audio_prinfo audio_prinfo_t;
515
516/*
517 * This structure is used in AUDIO_GETINFO and AUDIO_SETINFO ioctl
518 * commands
519 */
520struct audio_info {
521    audio_prinfo_t record;/* input status info */
522    audio_prinfo_t play; /* output status info */
523    uint_t monitor_gain; /* input to output mix */
524    uchar_toutput_muted; /* non-zero if output muted */
525    uint_t hw_features;  /* supported H/W features */
526    uint_t sw_features;  /* supported S/W features */
527    uint_t sw_features_enabled;
528                /* supported S/W features enabled */
529};
530typedef struct audio_info audio_info_t;
531
532/* Audio encoding types */
533#define AUDIO_ENCODING_ULAW (1) /* u-Law encoding */
534#define AUDIO_ENCODING_ALAW (2) /* A-Law encoding */
535#define AUDIO_ENCODING_LINEAR (3) /* Signed Linear PCM encoding */
536
537/*
538 * These ranges apply to record, play, and
539 * monitor gain values
540 */
541#define AUDIO_MIN_GAIN (0)/* minimum gain value */
542#define AUDIO_MAX_GAIN (255) /* maximum gain value */
543
544/*
545 * These values apply to the balance field to adjust channel
546 * gain values
547 */
548#define AUDIO_LEFT_BALANCE   (0) /* left channel only */
549#define AUDIO_MID_BALANCE   (32) /* equal left/right balance */
550#define AUDIO_RIGHT_BALANCE (64) /* right channel only */
551
552/*
553 * Define some convenient audio port names
554 * (for port, avail_ports and mod_ports)
555 */
556
557/* output ports (several might be enabled at once) */
558#define AUDIO_SPEAKER   (0x01) /* built-in speaker */
559#define AUDIO_HEADPHONE (0x02) /* headphone jack */
560#define AUDIO_LINE_OUT  (0x04) /* line out */
561#define AUDIO_SPDIF_OUT (0x08) /* SPDIF port */
562#define AUDIO_AUX1_OUT  (0x10) /* aux1 out */
563#define AUDIO_AUX2_OUT  (0x20) /* aux2 out */
564
565/*
566 * input ports (usually only one may be enabled at a time)
567 */
568#define AUDIO_MICROPHONE (0x01) /* microphone */
569#define AUDIO_LINE_IN  (0x02) /* line in */
570#define AUDIO_CD       (0x04) /* on-board CD inputs */
571#define AUDIO_SPDIF_IN (0x08) /* SPDIF port */
572#define AUDIO_AUX1_IN  (0x10) /* aux1 in */
573#define AUDIO_AUX2_IN  (0x20) /* aux2 in */
574#define AUDIO_CODEC_LOOPB_IN (0x40) /* Codec inter. loopback */
575
576/* These defines are for hardware features */
577#define AUDIO_HWFEATURE_DUPLEX (0x00000001u)
578/* simult. play & cap. supported */
579
580#define AUDIO_HWFEATURE_MSCODEC (0x00000002u)
581/* multi-stream Codec */
582
583/* These defines are for software features *
584#define AUDIO_SWFEATURE_MIXER (0x00000001u)
585/* audio mixer audio pers. mod. */
586
587/*
588 * Parameter for the AUDIO_GETDEV ioctl
589 * to determine current audio devices
590 */
591#define MAX_AUDIO_DEV_LEN (16)
592struct audio_device {
593    char name[MAX_AUDIO_DEV_LEN];
594    char version[MAX_AUDIO_DEV_LEN];
595    char config[MAX_AUDIO_DEV_LEN];
596};
597typedef struct audio_device audio_device_t;
598.Ed
599.Pp
600The
601.Fa play.gain
602and
603.Fa record.gain
604fields specify the output and input volume levels.
605A value of
606.Dv AUDIO_MAX_GAIN
607indicates maximum volume.
608Audio output may also be temporarily muted by setting a non-zero value in the
609.Fa output_muted
610field.
611Clearing this field restores audio output to the normal state.
612.Pp
613The
614.Va monitor_gain
615field is present for compatibility, and is no longer supported.
616See
617.Xr dsp 4I
618for more detail.
619.Pp
620Likewise, the
621.Fa play.port ,
622.Fa play.ports ,
623.Fa play.mod_ports ,
624.Fa record.port ,
625.Fa record.ports ,
626and
627.Fa record.mod_ports
628are no longer supported.
629See
630.Xr dsp 4I
631for more detail.
632.Pp
633The
634.Fa play.balance
635and
636.Fa record.balance
637fields are fixed to
638.Dv AUDIO_MID_BALANCE .
639Changes to volume levels for different channels can be
640made using the interfaces in
641.Xr dsp 4I .
642.Pp
643The
644.Fa play.pause
645and
646.Fa record.pause
647flags may be used to pause and
648resume the transfer of data between the audio device and the
649.Sy STREAMS
650buffers.
651The
652.Fa play.error
653and
654.Fa record.error
655flags indicate that data underflow or overflow has occurred.
656The
657.Fa play.active
658and
659.Fa record.active
660flags indicate that data transfer is currently active in the corresponding
661direction.
662.Pp
663The
664.Fa play.open
665and
666.Fa record.open
667flags indicate that the device is
668currently open with the corresponding access permission.
669The
670.Fa play.waiting
671and
672.Fa record.waiting
673flags provide an indication that a process may be waiting to access the device.
674These flags are set automatically when a process blocks on
675.Xr open 2 ,
676though they may also be set using the
677.Dv AUDIO_SETINFO
678ioctl command.
679They are cleared only when a process relinquishes access by closing the device.
680.Pp
681The
682.Fa play.samples
683and
684.Fa record.samples
685fields are zeroed at
686.Xr open 2
687and are incremented each time a data sample is copied to or from
688the associated
689.Sy STREAMS
690queue.
691Some audio drivers may be limited to counting
692buffers of samples, instead of single samples for their samples accounting.
693For this reason, applications should not assume that the samples fields contain a
694perfectly accurate count.
695The
696.Fa play.eof
697field increments whenever a zero-length output buffer is synchronously processed.
698Applications may use this
699field to detect the completion of particular segments of audio output.
700.Pp
701The
702.Fa record.buffer_size
703field controls the amount of input data that is
704buffered in the device driver during record operations.
705Applications that have
706particular requirements for low latency should set the value appropriately.
707Note however that smaller input buffer sizes may result in higher system
708overhead.
709The value of this field is specified in bytes and drivers will
710constrain it to be a multiple of the current sample frame size.
711Some drivers may place other requirements on the value of this field.
712Refer to the audio device-specific manual page for more details.
713If an application changes the
714format of the audio device and does not modify the
715.Fa record.buffer_size
716field, the device driver may use a default value to compensate for the new data
717rate.
718Therefore, if an application is going to modify this field, it should
719modify it during or after the format change itself, not before.
720When changing
721the
722.Fa record.buffer_size
723parameters, the input stream should be paused and
724flushed before the change, and resumed afterward.
725Otherwise, subsequent reads
726may return samples in the old format followed by samples in the new format.
727This is particularly important when new parameters result in a changed sample
728size.
729If you change the
730.Fa record.buffer_size
731for the first packet, this protocol must be followed or the first buffer will
732be the default buffer size for the device, followed by packets of the requested
733change size.
734.Pp
735The
736.Fa record.buffer_size
737field may be modified only on the
738.Pa /dev/audio
739device by processes that have it opened for reading.
740.Pp
741The
742.Fa play.buffer_size
743field is currently not supported.
744.Pp
745The audio data format is indicated by the
746.Fa sample_rate ,
747.Fa channels ,
748.Fa precision ,
749and
750.Fa encoding
751fields.
752The values of these fields correspond to the
753descriptions in the
754.Sx "AUDIO FORMATS"
755section of this man page.
756Refer to the
757audio device-specific manual pages for a list of supported data format
758combinations.
759.Pp
760The data format fields can be modified only on the
761.Pa /dev/audio
762device.
763.Pp
764If the parameter changes requested by an
765.Dv AUDIO_SETINFO
766ioctl cannot all be accommodated,
767.Xr ioctl 2
768returns with
769.Va errno
770set to
771.Er EINVAL
772and no changes are made to the device state.
773.Ss "Streamio IOCTLS"
774All of the
775.Xr streamio 4I
776.Xr ioctl 2
777commands may be issued for the
778.Pa /dev/audio
779device.
780Because the
781.Pa /dev/audioctl
782device has its own
783.Sy STREAMS
784queues, most of these commands neither modify nor report the
785state of
786.Pa /dev/audio
787if issued for the
788.Pa /dev/audioctl
789device.
790The
791.Dv I_SETSIG
792ioctl may be issued for
793.Pa /dev/audioctl
794to enable the notification of audio status changes, as described above.
795.Ss "Audio IOCTLS"
796The audio device additionally supports the following
797.Xr ioctl 2
798commands:
799.Bl -tag -width "AUDIO_GETINFO"
800.It Dv AUDIO_DRAIN
801The argument is ignored.
802This command suspends the calling process until the
803output STREAMS queue is empty and all queued samples have been played, or until
804a signal is delivered to the calling process.
805It may not be issued for the
806.Pa /dev/audioctl
807device.
808An implicit
809.Dv AUDIO_DRAIN
810is performed on the final
811.Xr close 2
812of
813.Pa /dev/audio .
814.It Dv AUDIO_GETDEV
815The argument is a pointer to an
816.Vt audio_device_t
817structure.
818This command may be issued for either
819.Pa /dev/audio
820or
821.Pa /dev/audioctl .
822The returned
823value in the name field will be a string that will identify the current
824.Pa /dev/audio
825hardware device, the value in version will be a string
826indicating the current version of the hardware, and
827.Fa config
828will be a device-specific string identifying the properties of the audio stream
829associated with that file descriptor.
830Refer to the audio device-specific manual
831pages to determine the actual strings returned by the device driver.
832.It Dv AUDIO_GETINFO
833The argument is a pointer to an
834.Vt audio_info_t
835structure.
836This command may be issued for either
837.Pa /dev/audio
838or
839.Pa /dev/audioctl .
840The current state of the
841.Pa /dev/audio
842device is returned in the structure.
843Values return pertain to a logical view of the device as seen by and private to
844the process, and do not necessarily reflect the actual hardware device itself.
845.It Dv AUDIO_SETINFO
846The argument is a pointer to an
847.Vt audio_info_t
848structure.
849This command may be issued for either the
850.Pa /dev/audio
851or the
852.Pa /dev/audioctl
853device with some restrictions.
854This command configures the audio device according to
855the supplied structure and overwrites the existing structure with the new state
856of the device.
857Note: The
858.Fa play.samples ,
859.Fa record.samples ,
860.Fa play.error ,
861.Fa record.error ,
862and
863.Fa play.eof
864fields are modified to reflect the state of the device when the
865.Dv AUDIO_SETINFO
866is issued.
867This allows programs to automatically modify these fields while retrieving the
868previous value.
869.Pp
870As with
871.Dv AUDIO_SETINFO ,
872the settings managed by this ioctl deal with a
873logical view of the device which is private to the process, and don't
874necessarily have any impact on the hardware device itself.
875.El
876.Pp
877Certain fields in the audio information structure, such as the pause flags, are
878treated as read-only when
879.Pa /dev/audio
880is not open with the corresponding access permission.
881Other fields, such as the gain levels and encoding
882information, may have a restricted set of acceptable values.
883Applications that
884attempt to modify such fields should check the returned values to be sure that
885the corresponding change took effect.
886The
887.Fa sample_rate ,
888.Fa channels ,
889.Fa precision ,
890and
891.Fa encoding
892fields treated as read-only for
893.Pa /dev/audioctl ,
894so that applications can be guaranteed that the existing
895audio format will stay in place until they relinquish the audio device.
896.Dv AUDIO_SETINFO
897will return
898.Er EINVAL
899when the desired configuration is not possible, or
900.Er EBUSY
901when another process has control of the audio device.
902.Pp
903All of the logical device state is reset when the corresponding I/O stream of
904.Pa /dev/audio
905is closed.
906.Pp
907The
908.Vt audio_info_t
909structure may be initialized through the use of the
910.Dv AUDIO_INITINFO
911macro.
912This macro sets all fields in the structure to
913values that are ignored by the
914.Dv AUDIO_SETINFO
915command.
916For instance, the following code switches the output port from the built-in
917speaker to the headphone jack without modifying any other audio parameters:
918.Bd -literal -offset 2n
919audio_info_t info;
920AUDIO_INITINFO();
921info.play.port = AUDIO_HEADPHONE;
922err = ioctl(audio_fd, AUDIO_SETINFO, );
923.Ed
924.Pp
925This technique eliminates problems associated with using a sequence of
926.Dv AUDIO_GETINFO
927followed by
928.Dv AUDIO_SETINFO .
929.Sh FILES
930The physical audio device names are system dependent and are rarely used by
931programmers.
932Programmers should use the following generic device names:
933.Bl -tag -width "/usr/share/audio/samples"
934.It Pa /dev/audio
935Symbolic link to the system's primary audio device
936.It Pa /dev/audioctl
937Symbolic link to the control device for
938.Pa /dev/audio
939.It Pa /dev/sound/0
940First audio device in the system
941.It Pa /dev/sound/0ctl
942Audio control device for
943.Pa /dev/sound/0
944.It Pa /usr/share/audio/samples
945Audio files
946.El
947.Sh ERRORS
948An
949.Xr open 2
950call will fail if:
951.Bl -tag -width "EINTR"
952.It Er EBUSY
953The requested play or record access is busy and either the
954.Dv O_NDELAY
955or
956.Dv O_NONBLOCK
957flag was set in the
958.Xr open 2
959request.
960.It Er EINTR
961The requested play or record access is busy and a signal interrupted the
962.Xr open 2
963request.
964.El
965.Pp
966An
967.Xr ioctl 2
968call will fail if:
969.Bl -tag -width "EINVAL"
970.It Er EINVAL
971The parameter changes requested in the
972.Dv AUDIO_SETINFO
973ioctl are invalid or are not supported by the device.
974.El
975.Sh ARCHITECTURE
976SPARC
977X86
978.Sh INTERFACE STABILITY
979Obsolete Uncommitted
980.Sh SEE ALSO
981.Xr close 2 ,
982.Xr fcntl 2 ,
983.Xr ioctl 2 ,
984.Xr open 2 ,
985.Xr poll 2 ,
986.Xr read 2 ,
987.Xr write 2 ,
988.Xr dsp 4I ,
989.Xr streamio 4I ,
990.Xr attributes 7
991.Sh BUGS
992Due to a feature of the
993.Sy STREAMS
994implementation, programs that are terminated or
995exit without closing the audio device may hang for a short period while audio
996output drains.
997In general, programs that produce audio output should catch the
998.Dv SIGINT
999signal and flush the output stream before exiting.
1000