1 /* $OpenBSD: audioio.h,v 1.15 2004/01/31 17:00:50 jmc Exp $ */ 2 /* $NetBSD: audioio.h,v 1.24 1998/08/13 06:28:41 mrg Exp $ */ 3 4 /* 5 * Copyright (c) 1991-1993 Regents of the University of California. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the Computer Systems 19 * Engineering Group at Lawrence Berkeley Laboratory. 20 * 4. Neither the name of the University nor of the Laboratory may be used 21 * to endorse or promote products derived from this software without 22 * specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 */ 37 38 #ifndef _SYS_AUDIOIO_H_ 39 #define _SYS_AUDIOIO_H_ 40 41 /* 42 * Audio device 43 */ 44 struct audio_prinfo { 45 u_int sample_rate; /* sample rate in bit/s */ 46 u_int channels; /* number of channels, usually 1 or 2 */ 47 u_int precision; /* number of bits/sample */ 48 u_int encoding; /* data encoding (AUDIO_ENCODING_* below) */ 49 u_int gain; /* volume level */ 50 u_int port; /* selected I/O port */ 51 u_int seek; /* BSD extension */ 52 u_int avail_ports; /* available I/O ports */ 53 u_int buffer_size; /* total size audio buffer */ 54 u_int _ispare[1]; 55 /* Current state of device: */ 56 u_int samples; /* number of samples */ 57 u_int eof; /* End Of File (zero-size writes) counter */ 58 u_char pause; /* non-zero if paused, zero to resume */ 59 u_char error; /* non-zero if underflow/overflow occurred */ 60 u_char waiting; /* non-zero if another process hangs in open */ 61 u_char balance; /* stereo channel balance */ 62 u_char cspare[2]; 63 u_char open; /* non-zero if currently open */ 64 u_char active; /* non-zero if I/O is currently active */ 65 }; 66 typedef struct audio_prinfo audio_prinfo_t; 67 68 struct audio_info { 69 struct audio_prinfo play; /* Info for play (output) side */ 70 struct audio_prinfo record; /* Info for record (input) side */ 71 72 u_int monitor_gain; /* input to output mix */ 73 /* BSD extensions */ 74 u_int blocksize; /* H/W read/write block size */ 75 u_int hiwat; /* output high water mark */ 76 u_int lowat; /* output low water mark */ 77 u_int _ispare1; 78 u_int mode; /* current device mode */ 79 #define AUMODE_PLAY 0x01 80 #define AUMODE_RECORD 0x02 81 #define AUMODE_PLAY_ALL 0x04 /* don't do real-time correction */ 82 }; 83 typedef struct audio_info audio_info_t; 84 85 #define AUDIO_INITINFO(p) \ 86 (void)memset((void *)(p), 0xff, sizeof(struct audio_info)) 87 88 /* 89 * Parameter for the AUDIO_GETDEV ioctl to determine current 90 * audio devices. 91 */ 92 #define MAX_AUDIO_DEV_LEN 16 93 typedef struct audio_device { 94 char name[MAX_AUDIO_DEV_LEN]; 95 char version[MAX_AUDIO_DEV_LEN]; 96 char config[MAX_AUDIO_DEV_LEN]; 97 } audio_device_t; 98 99 typedef struct audio_offset { 100 u_int samples; /* Total number of bytes transferred */ 101 u_int deltablks; /* Blocks transferred since last checked */ 102 u_int offset; /* Physical transfer offset in buffer */ 103 } audio_offset_t; 104 105 /* 106 * Supported audio encodings 107 */ 108 /* Encoding ID's */ 109 #define AUDIO_ENCODING_NONE 0 /* no encoding assigned */ 110 #define AUDIO_ENCODING_ULAW 1 /* ITU G.711 mu-law */ 111 #define AUDIO_ENCODING_ALAW 2 /* ITU G.711 A-law */ 112 #define AUDIO_ENCODING_PCM16 3 /* signed linear PCM, obsolete */ 113 #define AUDIO_ENCODING_LINEAR AUDIO_ENCODING_PCM16 /* SunOS compat */ 114 #define AUDIO_ENCODING_PCM8 4 /* unsigned linear PCM, obsolete */ 115 #define AUDIO_ENCODING_LINEAR8 AUDIO_ENCODING_PCM8 /* SunOS compat */ 116 #define AUDIO_ENCODING_ADPCM 5 /* adaptive differential PCM */ 117 #define AUDIO_ENCODING_SLINEAR_LE 6 118 #define AUDIO_ENCODING_SLINEAR_BE 7 119 #define AUDIO_ENCODING_ULINEAR_LE 8 120 #define AUDIO_ENCODING_ULINEAR_BE 9 121 #define AUDIO_ENCODING_SLINEAR 10 122 #define AUDIO_ENCODING_ULINEAR 11 123 #define AUDIO_ENCODING_MPEG_L1_STREAM 12 124 #define AUDIO_ENCODING_MPEG_L1_PACKETS 13 125 #define AUDIO_ENCODING_MPEG_L1_SYSTEM 14 126 #define AUDIO_ENCODING_MPEG_L2_STREAM 15 127 #define AUDIO_ENCODING_MPEG_L2_PACKETS 16 128 #define AUDIO_ENCODING_MPEG_L2_SYSTEM 17 129 #define AUDIO_ENCODING_MPEG_L3_STREAM 18 130 #define AUDIO_ENCODING_MPEG_L3_PACKETS 19 131 #define AUDIO_ENCODING_MPEG_L3_SYSTEM 20 132 133 typedef struct audio_encoding { 134 int index; 135 char name[MAX_AUDIO_DEV_LEN]; 136 int encoding; 137 int precision; 138 int flags; 139 #define AUDIO_ENCODINGFLAG_EMULATED 1 /* software emulation mode */ 140 } audio_encoding_t; 141 142 /* 143 * Balance settings. 144 */ 145 #define AUDIO_LEFT_BALANCE 0 /* left channel only */ 146 #define AUDIO_MID_BALANCE 32 /* equal left/right channel */ 147 #define AUDIO_RIGHT_BALANCE 64 /* right channel only */ 148 #define AUDIO_BALANCE_SHIFT 3 149 150 /* 151 * Output ports 152 */ 153 #define AUDIO_SPEAKER 0x01 /* built-in speaker */ 154 #define AUDIO_HEADPHONE 0x02 /* headphone jack */ 155 #define AUDIO_LINE_OUT 0x04 /* line out */ 156 157 /* 158 * Input ports 159 */ 160 #define AUDIO_MICROPHONE 0x01 /* microphone */ 161 #define AUDIO_LINE_IN 0x02 /* line in */ 162 #define AUDIO_CD 0x04 /* on-board CD inputs */ 163 #define AUDIO_INTERNAL_CD_IN AUDIO_CD /* internal CDROM */ 164 165 /* 166 * Audio device operations 167 */ 168 #define AUDIO_GETINFO _IOR('A', 21, struct audio_info) 169 #define AUDIO_SETINFO _IOWR('A', 22, struct audio_info) 170 #define AUDIO_DRAIN _IO('A', 23) 171 #define AUDIO_FLUSH _IO('A', 24) 172 #define AUDIO_WSEEK _IOR('A', 25, u_long) 173 #define AUDIO_RERROR _IOR('A', 26, int) 174 #define AUDIO_GETDEV _IOR('A', 27, struct audio_device) 175 #define AUDIO_GETENC _IOWR('A', 28, struct audio_encoding) 176 #define AUDIO_GETFD _IOR('A', 29, int) 177 #define AUDIO_SETFD _IOWR('A', 30, int) 178 #define AUDIO_PERROR _IOR('A', 31, int) 179 #define AUDIO_GETIOFFS _IOR('A', 32, struct audio_offset) 180 #define AUDIO_GETOOFFS _IOR('A', 33, struct audio_offset) 181 #define AUDIO_GETPROPS _IOR('A', 34, int) 182 #define AUDIO_PROP_FULLDUPLEX 0x01 183 #define AUDIO_PROP_MMAP 0x02 184 #define AUDIO_PROP_INDEPENDENT 0x04 185 186 /* 187 * Mixer device 188 */ 189 #define AUDIO_MIN_GAIN 0 190 #define AUDIO_MAX_GAIN 255 191 192 typedef struct mixer_level { 193 int num_channels; 194 u_char level[8]; /* [num_channels] */ 195 } mixer_level_t; 196 #define AUDIO_MIXER_LEVEL_MONO 0 197 #define AUDIO_MIXER_LEVEL_LEFT 0 198 #define AUDIO_MIXER_LEVEL_RIGHT 1 199 200 /* 201 * Device operations 202 */ 203 204 typedef struct audio_mixer_name { 205 char name[MAX_AUDIO_DEV_LEN]; 206 int msg_id; 207 } audio_mixer_name_t; 208 209 typedef struct mixer_devinfo { 210 int index; 211 audio_mixer_name_t label; 212 int type; 213 #define AUDIO_MIXER_CLASS 0 214 #define AUDIO_MIXER_ENUM 1 215 #define AUDIO_MIXER_SET 2 216 #define AUDIO_MIXER_VALUE 3 217 int mixer_class; 218 int next, prev; 219 #define AUDIO_MIXER_LAST -1 220 union { 221 struct audio_mixer_enum { 222 int num_mem; 223 struct { 224 audio_mixer_name_t label; 225 int ord; 226 } member[32]; 227 } e; 228 struct audio_mixer_set { 229 int num_mem; 230 struct { 231 audio_mixer_name_t label; 232 int mask; 233 } member[32]; 234 } s; 235 struct audio_mixer_value { 236 audio_mixer_name_t units; 237 int num_channels; 238 int delta; 239 } v; 240 } un; 241 } mixer_devinfo_t; 242 243 244 typedef struct mixer_ctrl { 245 int dev; 246 int type; 247 union { 248 int ord; /* enum */ 249 int mask; /* set */ 250 mixer_level_t value; /* value */ 251 } un; 252 } mixer_ctrl_t; 253 254 /* 255 * Mixer operations 256 */ 257 #define AUDIO_MIXER_READ _IOWR('M', 0, mixer_ctrl_t) 258 #define AUDIO_MIXER_WRITE _IOWR('M', 1, mixer_ctrl_t) 259 #define AUDIO_MIXER_DEVINFO _IOWR('M', 2, mixer_devinfo_t) 260 261 /* 262 * Well known device names 263 */ 264 #define AudioNmicrophone "mic" 265 #define AudioNline "line" 266 #define AudioNcd "cd" 267 #define AudioNdac "dac" 268 #define AudioNaux "aux" 269 #define AudioNrecord "record" 270 #define AudioNvolume "volume" 271 #define AudioNmonitor "monitor" 272 #define AudioNtreble "treble" 273 #define AudioNmid "mid" 274 #define AudioNbass "bass" 275 #define AudioNbassboost "bassboost" 276 #define AudioNspeaker "speaker" 277 #define AudioNheadphone "headphones" 278 #define AudioNoutput "output" 279 #define AudioNinput "input" 280 #define AudioNmaster "master" 281 #define AudioNstereo "stereo" 282 #define AudioNmono "mono" 283 #define AudioNloudness "loudness" 284 #define AudioNspatial "spatial" 285 #define AudioNsurround "surround" 286 #define AudioNpseudo "pseudo" 287 #define AudioNmute "mute" 288 #define AudioNenhanced "enhanced" 289 #define AudioNpreamp "preamp" 290 #define AudioNon "on" 291 #define AudioNoff "off" 292 #define AudioNmode "mode" 293 #define AudioNsource "source" 294 #define AudioNfmsynth "fmsynth" 295 #define AudioNwave "wave" 296 #define AudioNmidi "midi" 297 #define AudioNmixerout "mixerout" 298 #define AudioNswap "swap" /* swap left and right channels */ 299 #define AudioNagc "agc" 300 #define AudioNdelay "delay" 301 #define AudioNselect "select" /* select destination */ 302 #define AudioNvideo "video" 303 #define AudioNcenter "center" 304 #define AudioNdepth "depth" 305 #define AudioNlfe "lfe" 306 307 #define AudioEmulaw "mulaw" 308 #define AudioEalaw "alaw" 309 #define AudioEadpcm "adpcm" 310 #define AudioEslinear "slinear" 311 #define AudioEslinear_le "slinear_le" 312 #define AudioEslinear_be "slinear_be" 313 #define AudioEulinear "ulinear" 314 #define AudioEulinear_le "ulinear_le" 315 #define AudioEulinear_be "ulinear_be" 316 #define AudioEmpeg_l1_stream "mpeg_l1_stream" 317 #define AudioEmpeg_l1_packets "mpeg_l1_packets" 318 #define AudioEmpeg_l1_system "mpeg_l1_system" 319 #define AudioEmpeg_l2_stream "mpeg_l2_stream" 320 #define AudioEmpeg_l2_packets "mpeg_l2_packets" 321 #define AudioEmpeg_l2_system "mpeg_l2_system" 322 323 #define AudioCinputs "inputs" 324 #define AudioCoutputs "outputs" 325 #define AudioCrecord "record" 326 #define AudioCmonitor "monitor" 327 #define AudioCequalization "equalization" 328 329 #endif /* !_SYS_AUDIOIO_H_ */ 330