root/sys/audioio.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. audio_device_t
  2. audio_offset_t
  3. audio_encoding_t
  4. mixer_level_t
  5. audio_mixer_name_t
  6. mixer_devinfo_t
  7. mixer_ctrl_t

    1 /*      $OpenBSD: audioio.h,v 1.16 2005/12/14 13:59:04 fgsch 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 #define AudioNextamp    "extamp"
  307 
  308 #define AudioEmulaw             "mulaw"
  309 #define AudioEalaw              "alaw"
  310 #define AudioEadpcm             "adpcm"
  311 #define AudioEslinear           "slinear"
  312 #define AudioEslinear_le        "slinear_le"
  313 #define AudioEslinear_be        "slinear_be"
  314 #define AudioEulinear           "ulinear"
  315 #define AudioEulinear_le        "ulinear_le"
  316 #define AudioEulinear_be        "ulinear_be"
  317 #define AudioEmpeg_l1_stream    "mpeg_l1_stream"
  318 #define AudioEmpeg_l1_packets   "mpeg_l1_packets"
  319 #define AudioEmpeg_l1_system    "mpeg_l1_system"
  320 #define AudioEmpeg_l2_stream    "mpeg_l2_stream"
  321 #define AudioEmpeg_l2_packets   "mpeg_l2_packets"
  322 #define AudioEmpeg_l2_system    "mpeg_l2_system"
  323 
  324 #define AudioCinputs    "inputs"
  325 #define AudioCoutputs   "outputs"
  326 #define AudioCrecord    "record"
  327 #define AudioCmonitor   "monitor"
  328 #define AudioCequalization      "equalization"
  329 
  330 #endif /* !_SYS_AUDIOIO_H_ */

/* [<][>][^][v][top][bottom][index][help] */