/* $OpenBSD: audioio.h,v 1.27 2016/09/14 06:12:20 ratchov Exp $ */ /* $NetBSD: audioio.h,v 1.24 1998/08/13 06:28:41 mrg Exp $ */ /* * Copyright (c) 1991-1993 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Computer Systems * Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #ifndef _SYS_AUDIOIO_H_ #define _SYS_AUDIOIO_H_ #define AUMODE_PLAY 0x01 #define AUMODE_RECORD 0x02 #define AUDIO_INITPAR(p) \ (void)memset((void *)(p), 0xff, sizeof(struct audio_swpar)) /* * argument to AUDIO_SETPAR and AUDIO_GETPAR ioctls */ struct audio_swpar { unsigned int sig; /* if 1, encoding is signed */ unsigned int le; /* if 1, encoding is little-endian */ unsigned int bits; /* bits per sample */ unsigned int bps; /* bytes per sample */ unsigned int msb; /* if 1, bits are msb-aligned */ unsigned int rate; /* common play & rec sample rate */ unsigned int pchan; /* play channels */ unsigned int rchan; /* rec channels */ unsigned int nblks; /* number of blocks in play buffer */ unsigned int round; /* common frames per block */ unsigned int _spare[6]; }; /* * argument to AUDIO_GETSTATUS */ struct audio_status { int mode; int pause; int active; int _spare[5]; }; /* * Parameter for the AUDIO_GETDEV ioctl to determine current * audio devices. */ #define MAX_AUDIO_DEV_LEN 16 typedef struct audio_device { char name[MAX_AUDIO_DEV_LEN]; char version[MAX_AUDIO_DEV_LEN]; char config[MAX_AUDIO_DEV_LEN]; } audio_device_t; struct audio_pos { unsigned int play_pos; /* total bytes played */ unsigned int play_xrun; /* bytes of silence inserted */ unsigned int rec_pos; /* total bytes recorded */ unsigned int rec_xrun; /* bytes dropped */ }; /* * Audio device operations */ #define AUDIO_GETDEV _IOR('A', 27, struct audio_device) #define AUDIO_GETPOS _IOR('A', 35, struct audio_pos) #define AUDIO_GETPAR _IOR('A', 36, struct audio_swpar) #define AUDIO_SETPAR _IOWR('A', 37, struct audio_swpar) #define AUDIO_START _IO('A', 38) #define AUDIO_STOP _IO('A', 39) #define AUDIO_GETSTATUS _IOR('A', 40, struct audio_status) /* * Mixer device */ #define AUDIO_MIN_GAIN 0 #define AUDIO_MAX_GAIN 255 typedef struct mixer_level { int num_channels; u_char level[8]; /* [num_channels] */ } mixer_level_t; #define AUDIO_MIXER_LEVEL_MONO 0 #define AUDIO_MIXER_LEVEL_LEFT 0 #define AUDIO_MIXER_LEVEL_RIGHT 1 /* * Device operations */ typedef struct audio_mixer_name { char name[MAX_AUDIO_DEV_LEN]; int msg_id; } audio_mixer_name_t; typedef struct mixer_devinfo { int index; audio_mixer_name_t label; int type; #define AUDIO_MIXER_CLASS 0 #define AUDIO_MIXER_ENUM 1 #define AUDIO_MIXER_SET 2 #define AUDIO_MIXER_VALUE 3 int mixer_class; int next, prev; #define AUDIO_MIXER_LAST -1 union { struct audio_mixer_enum { int num_mem; struct { audio_mixer_name_t label; int ord; } member[32]; } e; struct audio_mixer_set { int num_mem; struct { audio_mixer_name_t label; int mask; } member[32]; } s; struct audio_mixer_value { audio_mixer_name_t units; int num_channels; int delta; } v; } un; } mixer_devinfo_t; typedef struct mixer_ctrl { int dev; int type; union { int ord; /* enum */ int mask; /* set */ mixer_level_t value; /* value */ } un; } mixer_ctrl_t; /* * Mixer operations */ #define AUDIO_MIXER_READ _IOWR('M', 0, mixer_ctrl_t) #define AUDIO_MIXER_WRITE _IOWR('M', 1, mixer_ctrl_t) #define AUDIO_MIXER_DEVINFO _IOWR('M', 2, mixer_devinfo_t) /* * Well known device names */ #define AudioNmicrophone "mic" #define AudioNline "line" #define AudioNcd "cd" #define AudioNdac "dac" #define AudioNaux "aux" #define AudioNrecord "record" #define AudioNvolume "volume" #define AudioNmonitor "monitor" #define AudioNtreble "treble" #define AudioNmid "mid" #define AudioNbass "bass" #define AudioNbassboost "bassboost" #define AudioNspeaker "spkr" #define AudioNheadphone "hp" #define AudioNoutput "output" #define AudioNinput "input" #define AudioNmaster "master" #define AudioNstereo "stereo" #define AudioNmono "mono" #define AudioNloudness "loudness" #define AudioNspatial "spatial" #define AudioNsurround "surround" #define AudioNpseudo "pseudo" #define AudioNmute "mute" #define AudioNenhanced "enhanced" #define AudioNpreamp "preamp" #define AudioNon "on" #define AudioNoff "off" #define AudioNmode "mode" #define AudioNsource "source" #define AudioNfmsynth "fmsynth" #define AudioNwave "wave" #define AudioNmidi "midi" #define AudioNmixerout "mixerout" #define AudioNswap "swap" /* swap left and right channels */ #define AudioNagc "agc" #define AudioNdelay "delay" #define AudioNselect "select" /* select destination */ #define AudioNvideo "video" #define AudioNcenter "center" #define AudioNdepth "depth" #define AudioNlfe "lfe" #define AudioNextamp "extamp" #define AudioCinputs "inputs" #define AudioCoutputs "outputs" #define AudioCrecord "record" #define AudioCmonitor "monitor" #define AudioCequalization "equalization" #endif /* !_SYS_AUDIOIO_H_ */