]> Zhao Yanbai Git Server - minix.git/commitdiff
support for OSS.
authorBen Gras <ben@minix3.org>
Thu, 1 Oct 2009 16:36:14 +0000 (16:36 +0000)
committerBen Gras <ben@minix3.org>
Thu, 1 Oct 2009 16:36:14 +0000 (16:36 +0000)
39 files changed:
commands/scripts/MAKEDEV.sh
drivers/memory/ramdisk/proto.sh
etc/drivers.conf
include/midiparser.h [new file with mode: 0644]
include/sys/soundcard.h [new file with mode: 0644]
man/man1/ossinfo.1 [new file with mode: 0644]
man/man1/ossmix.1 [new file with mode: 0644]
man/man1/ossplay.1 [new file with mode: 0644]
man/man1/ossrecord.1 [new file with mode: 0644]
man/man1/osstest.1 [new file with mode: 0644]
man/man1/soundoff.1 [new file with mode: 0644]
man/man1/soundon.1 [new file with mode: 0644]
man/man7/oss_atiaudio.7 [new file with mode: 0644]
man/man7/oss_audigyls.7 [new file with mode: 0644]
man/man7/oss_audiopci.7 [new file with mode: 0644]
man/man7/oss_cmi878x.7 [new file with mode: 0644]
man/man7/oss_cmpci.7 [new file with mode: 0644]
man/man7/oss_cs4281.7 [new file with mode: 0644]
man/man7/oss_cs461x.7 [new file with mode: 0644]
man/man7/oss_digi96.7 [new file with mode: 0644]
man/man7/oss_emu10k1x.7 [new file with mode: 0644]
man/man7/oss_envy24.7 [new file with mode: 0644]
man/man7/oss_envy24ht.7 [new file with mode: 0644]
man/man7/oss_fmedia.7 [new file with mode: 0644]
man/man7/oss_geode.7 [new file with mode: 0644]
man/man7/oss_hdaudio.7 [new file with mode: 0644]
man/man7/oss_ich.7 [new file with mode: 0644]
man/man7/oss_sblive.7 [new file with mode: 0644]
man/man7/oss_sbpci.7 [new file with mode: 0644]
man/man7/oss_sbxfi.7 [new file with mode: 0644]
man/man7/oss_solo.7 [new file with mode: 0644]
man/man7/oss_trident.7 [new file with mode: 0644]
man/man7/oss_via823x.7 [new file with mode: 0644]
man/man7/oss_via97.7 [new file with mode: 0644]
man/man7/oss_ymf7xx.7 [new file with mode: 0644]
man/man7/osscore.7 [new file with mode: 0644]
man/man8/ossdevlinks.8 [new file with mode: 0644]
man/man8/savemixer.8 [new file with mode: 0644]
man/man8/vmixctl.8 [new file with mode: 0644]

index d25c351ef9bbd93e632a0390afc43918d0555364..66b2c785bc57a13d048ba6a70d98bf127976497b 100755 (executable)
@@ -240,9 +240,8 @@ do
        # Audio devices.
        #
    $e mknod audio c 13 0
-   $e mknod rec c 13 1
-   $e mknod mixer c 13 2
-   $e chmod 666 audio rec mixer
+   $e mknod mixer c 13 1
+   $e chmod 666 audio mixer
        ;;
     random|urandom)
        # random data generator.
index cab7fc8417d18202dbae32693cbb9bef64d2eb3c..1a8f9e56e7ffdb293939a1604b68b8e4f4819107 100644 (file)
@@ -3,7 +3,7 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin
 sed -n '1,/@DEV/p' <proto  | grep -v @DEV@
 (
 cd /dev
-ls -aln | grep '^[bc]' | egrep -v ' (fd1|fd0p|tcp|eth|ip|udp|tty[pq]|pty)' | \
+ls -aln | grep '^[bc]' | egrep -v ' (fd1|fd0p|tcp|eth|ip|udp|tty[pq]|pty)' | grep -v 13, | \
 sed    -e 's/^[bc]/& /' -e 's/rw-/6/g' -e 's/r--/4/g' \
        -e 's/-w-/2/g'  -e 's/---/0/g' | \
 awk '{ printf "\t\t%s %s--%s %d %d %d %d \n", $11, $1, $2, $4, $5, $6, $7; }'
index 06fce3c3852dd5cc4479b51502cb8fa1cf49a176..8ea061535cf47ecdcd216bd46c82e709ec205248 100644 (file)
@@ -421,3 +421,30 @@ driver ipc
                ;
 };
 
+driver osscore
+{
+       system
+               PRIVCTL         #  4
+               DEVIO           # 21
+               UMAP            # 14
+               IRQCTL          # 19
+               DEVIO           # 21
+               SDEVIO          # 22
+               SETALARM        # 24
+               TIMES           # 25
+               GETINFO         # 26
+               SAFECOPYFROM    # 31
+               SAFECOPYTO      # 32
+               SETGRANT        # 34
+               PROFBUF         # 38
+               SYSCTL
+       ;
+       pci class       
+               4/1             # Multimedia / Audio device
+       ;
+       ipc
+               SYSTEM PM RS LOG TTY DS VFS VM
+               pci inet amddev 
+               ;
+       uid     0;
+};
diff --git a/include/midiparser.h b/include/midiparser.h
new file mode 100644 (file)
index 0000000..e797682
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Purpose: Definitions for the MIDI message parser
+ */
+/*
+ * This file is part of Open Sound System
+ *
+ * Copyright (C) 4Front Technologies 1996-2008.
+ *
+ * This software is released under the BSD license.
+ * See the COPYING file included in the main directory of this source
+ * distribution for the license terms and conditions
+ */
+
+
+typedef struct midiparser_common midiparser_common_t, *midiparser_common_p;
+
+#define CAT_VOICE      0
+#define CAT_MTC                1
+#define CAT_SYSEX      2
+#define CAT_CHN                3
+#define CAT_REALTIME   4
+
+typedef void (*midiparser_callback_t) (void *context, int category,
+                                      unsigned char msg, unsigned char ch,
+                                      unsigned char *parms, int len);
+typedef void (*midiparser_mtc_callback_t) (void *context,
+                                          oss_mtc_data_t * mtc);
+
+extern midiparser_common_p midiparser_create (midiparser_callback_t callback,
+                                             void *comntext);
+extern void midiparser_unalloc (midiparser_common_p common);
+extern void midiparser_mtc_callback (midiparser_common_p common,
+                                    midiparser_mtc_callback_t callback);
+
+extern void midiparser_input (midiparser_common_p common, unsigned char data);
+extern void midiparser_input_buf (midiparser_common_p common,
+                                 unsigned char *data, int len);
diff --git a/include/sys/soundcard.h b/include/sys/soundcard.h
new file mode 100644 (file)
index 0000000..dac5c59
--- /dev/null
@@ -0,0 +1,2140 @@
+/*
+ * Purpose: The C/C++ header file that defines the OSS API.
+ * Description:
+ * This header file contains all the declarations required to compile OSS
+ * programs. The latest version is always installed together with OSS
+ * use of the latest version is strongly recommended.
+ *
+ * {!notice This header file contains many obsolete definitions
+ * (for compatibility with older applications that still ned them).
+ * Do not use this file as a reference manual of OSS.
+ * Please check the OSS Programmer's guide for descriptions
+ * of the supported API details (http://manuals.opensound.com/developer).} 
+ */
+
+#ifndef SOUNDCARD_H
+#define SOUNDCARD_H
+
+/*
+ * This file is part of Open Sound System
+ *
+ * Copyright (C) 4Front Technologies 1996-2008.
+ *
+ * This software is released under the BSD license.
+ * See the COPYING file included in the main directory of this source
+ * distribution for the license terms and conditions
+ */
+
+
+#if defined(__cplusplus)
+#define EXTERNC extern "C"
+#else
+#define EXTERNC extern
+#endif /* EXTERN_C_WRAPPERS */
+
+#define OSS_VERSION    0x040100 /* 4.1 */
+
+#define SOUND_VERSION  OSS_VERSION
+#define OPEN_SOUND_SYSTEM
+
+#if defined(__hpux) && !defined(_HPUX_SOURCE)
+#      error "-D_HPUX_SOURCE must be used when compiling OSS applications"
+#endif
+
+#ifdef __hpux
+#include <sys/ioctl.h>
+#endif
+
+#ifdef linux
+/* In Linux we need to be prepared for cross compiling */
+#include <linux/ioctl.h>
+#else
+# ifdef __FreeBSD__
+#    include <sys/ioccom.h>
+# else
+#    include <sys/ioctl.h>
+# endif
+#endif
+
+#ifndef __SIOWR
+#if defined(__hpux) || (defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__INCioctlh) && !defined(__Lynx__))))
+
+/* 
+ * Make sure the ioctl macros are compatible with the ones already used
+ * by this operating system.
+ */
+#define        SIOCPARM_MASK   IOCPARM_MASK
+#define        SIOC_VOID       IOC_VOID
+#define        SIOC_OUT        IOC_OUT
+#define        SIOC_IN         IOC_IN
+#define        SIOC_INOUT      IOC_INOUT
+#define __SIOC_SIZE    _IOC_SIZE
+#define __SIOC_DIR     _IOC_DIR
+#define __SIOC_NONE    _IOC_NONE
+#define __SIOC_READ    _IOC_READ
+#define __SIOC_WRITE   _IOC_WRITE
+#define        __SIO           _IO
+#define        __SIOR          _IOR
+#define        __SIOW          _IOW
+#define        __SIOWR         _IOWR
+
+
+#elif defined(__minix)
+
+#define        SIOCPARM_MASK   _IOCPARM_MASK
+#define        SIOC_VOID       _IOC_VOID
+#define        SIOC_OUT        _IOC_OUT
+#define        SIOC_IN         _IOC_IN
+#define        SIOC_INOUT      _IOC_INOUT
+#define __SIOC_SIZE    _MINIX_IOCTL_SIZE
+#define __SIOC_DIR(x)  (x & 0xf0000000)
+#define __SIOC_NONE    _IOC_VOID
+#define __SIOC_READ            _IOC_READ
+#define __SIOC_WRITE   _IOC_WRITE
+#define        __SIO           _IO
+#define        __SIOR          _IOR
+#define        __SIOW          _IOW
+#define        __SIOWR         _IORW
+
+
+#else
+
+/* #define     SIOCTYPE                (0xff<<8) */
+#define        SIOCPARM_MASK   0x1fff  /* parameters must be < 8192 bytes */
+#define        SIOC_VOID       0x00000000      /* no parameters */
+#define        SIOC_OUT        0x20000000      /* copy out parameters */
+#define        SIOC_IN         0x40000000      /* copy in parameters */
+#define        SIOC_INOUT      (SIOC_IN|SIOC_OUT)
+
+#define        __SIO(x,y)      ((int)(SIOC_VOID|(x<<8)|y))
+#define        __SIOR(x,y,t)   ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define        __SIOW(x,y,t)   ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define        __SIOWR(x,y,t)  ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
+#define __SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
+#define __SIOC_DIR(x)  (x & 0xf0000000)
+#define __SIOC_NONE    SIOC_VOID
+#define __SIOC_READ    SIOC_OUT
+#define __SIOC_WRITE   SIOC_IN
+#  endif /* _IOWR */
+#endif /* !__SIOWR */
+
+#define OSS_LONGNAME_SIZE      64
+#define OSS_LABEL_SIZE         16
+#define OSS_DEVNODE_SIZE       32
+#define OSS_DEVNAME_SIZE       64
+#define OSS_CMD_SIZE           64
+#define OSS_ID_SIZE            16
+#define OSS_HANDLE_SIZE                32
+typedef char oss_longname_t[OSS_LONGNAME_SIZE];
+typedef char oss_label_t[OSS_LABEL_SIZE];
+typedef char oss_devnode_t[OSS_DEVNODE_SIZE];
+typedef char oss_devname_t[OSS_DEVNAME_SIZE];
+typedef char oss_cmd_t[OSS_CMD_SIZE];
+typedef char oss_id_t[OSS_ID_SIZE];
+typedef char oss_handle_t[OSS_HANDLE_SIZE];
+
+#ifndef DISABLE_SEQUENCER
+/*
+ ****************************************************************************
+ * IOCTL Commands for /dev/sequencer and /dev/music (AKA /dev/sequencer2)
+ *
+ * Note that this interface is obsolete and no longer developed. New
+ * applications should use /dev/midi instead.
+ ****************************************************************************/
+#define SNDCTL_SEQ_RESET               __SIO  ('Q', 0)
+#define SNDCTL_SEQ_SYNC                        __SIO  ('Q', 1)
+#define SNDCTL_SYNTH_INFO              __SIOWR('Q', 2, struct synth_info)
+#define SNDCTL_SEQ_CTRLRATE            __SIOWR('Q', 3, int)    /* Set/get timer resolution (HZ) */
+#define SNDCTL_SEQ_GETOUTCOUNT         __SIOR ('Q', 4, int)
+#define SNDCTL_SEQ_GETINCOUNT          __SIOR ('Q', 5, int)
+#define SNDCTL_SEQ_PERCMODE            __SIOW ('Q', 6, int)
+#define SNDCTL_FM_LOAD_INSTR           __SIOW ('Q', 7, struct sbi_instrument)  /* Obsolete. Don't use!!!!!! */
+#define SNDCTL_SEQ_TESTMIDI            __SIOW ('Q', 8, int)
+#define SNDCTL_SEQ_RESETSAMPLES                __SIOW ('Q', 9, int)
+#define SNDCTL_SEQ_NRSYNTHS            __SIOR ('Q',10, int)
+#define SNDCTL_SEQ_NRMIDIS             __SIOR ('Q',11, int)
+#define SNDCTL_MIDI_INFO               __SIOWR('Q',12, struct midi_info)       /* OBSOLETE - use SNDCTL_MIDIINFO instead */
+#define SNDCTL_SEQ_THRESHOLD           __SIOW ('Q',13, int)
+#define SNDCTL_SYNTH_MEMAVL            __SIOWR('Q',14, int)    /* in=dev#, out=memsize */
+#define SNDCTL_FM_4OP_ENABLE           __SIOW ('Q',15, int)    /* in=dev# */
+#define SNDCTL_SEQ_PANIC               __SIO  ('Q',17)
+#define SNDCTL_SEQ_OUTOFBAND           __SIOW ('Q',18, struct seq_event_rec)
+#define SNDCTL_SEQ_GETTIME             __SIOR ('Q',19, int)
+#define SNDCTL_SYNTH_ID                        __SIOWR('Q',20, struct synth_info)
+#define SNDCTL_SYNTH_CONTROL           __SIOWR('Q',21, struct synth_control)
+#define SNDCTL_SYNTH_REMOVESAMPLE      __SIOWR('Q',22, struct remove_sample)   /* Reserved for future use */
+#define SNDCTL_SEQ_TIMING_ENABLE       __SIO  ('Q', 23)        /* Enable incoming MIDI timing messages */
+#define SNDCTL_SEQ_ACTSENSE_ENABLE     __SIO  ('Q', 24)        /* Enable incoming active sensing messages */
+#define SNDCTL_SEQ_RT_ENABLE           __SIO  ('Q', 25)        /* Enable other incoming realtime messages */
+
+typedef struct synth_control
+{
+  int devno;                   /* Synthesizer # */
+  char data[4000];             /* Device spesific command/data record */
+} synth_control;
+
+typedef struct remove_sample
+{
+  int devno;                   /* Synthesizer # */
+  int bankno;                  /* MIDI bank # (0=General MIDI) */
+  int instrno;                 /* MIDI instrument number */
+} remove_sample;
+
+typedef struct seq_event_rec
+{
+  unsigned char arr[8];
+} seq_event_rec;
+
+#define SNDCTL_TMR_TIMEBASE            __SIOWR('T', 1, int)
+#define SNDCTL_TMR_START               __SIO  ('T', 2)
+#define SNDCTL_TMR_STOP                        __SIO  ('T', 3)
+#define SNDCTL_TMR_CONTINUE            __SIO  ('T', 4)
+#define SNDCTL_TMR_TEMPO               __SIOWR('T', 5, int)
+#define SNDCTL_TMR_SOURCE              __SIOWR('T', 6, int)
+#      define TMR_INTERNAL             0x00000001
+#      define TMR_EXTERNAL             0x00000002
+#              define TMR_MODE_MIDI    0x00000010
+#              define TMR_MODE_FSK     0x00000020
+#              define TMR_MODE_CLS     0x00000040
+#              define TMR_MODE_SMPTE   0x00000080
+#define SNDCTL_TMR_METRONOME           __SIOW ('T', 7, int)
+#define SNDCTL_TMR_SELECT              __SIOW ('T', 8, int)
+
+/*
+ * Sample loading mechanism for internal synthesizers (/dev/sequencer)
+ * (for the .PAT format).
+ */
+
+struct patch_info
+{
+  unsigned short key;          /* Use WAVE_PATCH here */
+#define WAVE_PATCH     _PATCHKEY(0x04)
+#define GUS_PATCH      WAVE_PATCH
+#define WAVEFRONT_PATCH _PATCHKEY(0x06)
+
+  short device_no;             /* Synthesizer number */
+  short instr_no;              /* Midi pgm# */
+
+  unsigned int mode;
+/*
+ * The least significant byte has the same format than the GUS .PAT
+ * files
+ */
+#define WAVE_16_BITS   0x01    /* bit 0 = 8 or 16 bit wave data. */
+#define WAVE_UNSIGNED  0x02    /* bit 1 = Signed - Unsigned data. */
+#define WAVE_LOOPING   0x04    /* bit 2 = looping enabled-1. */
+#define WAVE_BIDIR_LOOP        0x08    /* bit 3 = Set is bidirectional looping. */
+#define WAVE_LOOP_BACK 0x10    /* bit 4 = Set is looping backward. */
+#define WAVE_SUSTAIN_ON        0x20    /* bit 5 = Turn sustaining on. (Env. pts. 3) */
+#define WAVE_ENVELOPES 0x40    /* bit 6 = Enable envelopes - 1 */
+#define WAVE_FAST_RELEASE 0x80 /* bit 7 = Shut off immediately after note off */
+  /*  (use the env_rate/env_offs fields). */
+/* Linux specific bits */
+#define WAVE_VIBRATO   0x00010000      /* The vibrato info is valid */
+#define WAVE_TREMOLO   0x00020000      /* The tremolo info is valid */
+#define WAVE_SCALE     0x00040000      /* The scaling info is valid */
+#define WAVE_FRACTIONS 0x00080000      /* Fraction information is valid */
+/* Reserved bits */
+#define WAVE_ROM       0x40000000      /* For future use */
+#define WAVE_MULAW     0x20000000      /* For future use */
+/* Other bits must be zeroed */
+
+  int len;                     /* Size of the wave data in bytes */
+  int loop_start, loop_end;    /* Byte offsets from the beginning */
+
+/* 
+ * The base_freq and base_note fields are used when computing the
+ * playback speed for a note. The base_note defines the tone frequency
+ * which is heard if the sample is played using the base_freq as the
+ * playback speed.
+ *
+ * The low_note and high_note fields define the minimum and maximum note
+ * frequencies for which this sample is valid. It is possible to define
+ * more than one samples for an instrument number at the same time. The
+ * low_note and high_note fields are used to select the most suitable one.
+ *
+ * The fields base_note, high_note and low_note should contain
+ * the note frequency multiplied by 1000. For example value for the
+ * middle A is 440*1000.
+ */
+
+  unsigned int base_freq;
+  unsigned int base_note;
+  unsigned int high_note;
+  unsigned int low_note;
+  int panning;                 /* -128=left, 127=right */
+  int detuning;
+
+  /* Envelope. Enabled by mode bit WAVE_ENVELOPES  */
+  unsigned char env_rate[6];   /* GUS HW ramping rate */
+  unsigned char env_offset[6]; /* 255 == 100% */
+
+  /* 
+   * The tremolo, vibrato and scale info are not supported yet.
+   * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or
+   * WAVE_SCALE
+   */
+
+  unsigned char tremolo_sweep;
+  unsigned char tremolo_rate;
+  unsigned char tremolo_depth;
+
+  unsigned char vibrato_sweep;
+  unsigned char vibrato_rate;
+  unsigned char vibrato_depth;
+
+  int scale_frequency;
+  unsigned int scale_factor;   /* from 0 to 2048 or 0 to 2 */
+
+  int volume;
+  int fractions;
+  int reserved1;
+  int spare[2];
+  char data[1];                        /* The waveform data starts here */
+};
+
+struct sysex_info
+{
+  short key;                   /* Use SYSEX_PATCH or MAUI_PATCH here */
+#define SYSEX_PATCH    _PATCHKEY(0x05)
+#define MAUI_PATCH     _PATCHKEY(0x06)
+  short device_no;             /* Synthesizer number */
+  int len;                     /* Size of the sysex data in bytes */
+  unsigned char data[1];       /* Sysex data starts here */
+};
+
+/*
+ * /dev/sequencer input events.
+ *
+ * The data written to the /dev/sequencer is a stream of events. Events
+ * are records of 4 or 8 bytes. The first byte defines the size. 
+ * Any number of events can be written with a write call. There
+ * is a set of macros for sending these events. Use these macros if you
+ * want to maximize portability of your program.
+ *
+ * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events.
+ * (All input events are currently 4 bytes long. Be prepared to support
+ * 8 byte events also. If you receive any event having first byte >= 128,
+ * it's a 8 byte event.
+ *
+ * The events are documented at the end of this file.
+ *
+ * Normal events (4 bytes)
+ * There is also a 8 byte version of most of the 4 byte events. The
+ * 8 byte one is recommended.
+ *
+ * NOTE! All 4 byte events are now obsolete. Applications should not write
+ *       them. However 4 byte events are still used as inputs from
+ *       /dev/sequencer (/dev/music uses only 8 byte ones).
+ */
+#define SEQ_NOTEOFF            0
+#define SEQ_FMNOTEOFF          SEQ_NOTEOFF     /* Just old name */
+#define SEQ_NOTEON             1
+#define        SEQ_FMNOTEON            SEQ_NOTEON
+#define SEQ_WAIT               TMR_WAIT_ABS
+#define SEQ_PGMCHANGE          3
+#define SEQ_FMPGMCHANGE                SEQ_PGMCHANGE
+#define SEQ_SYNCTIMER          TMR_START
+#define SEQ_MIDIPUTC           5
+#define SEQ_DRUMON             6               /*** OBSOLETE ***/
+#define SEQ_DRUMOFF            7               /*** OBSOLETE ***/
+#define SEQ_ECHO               TMR_ECHO        /* For synching programs with output */
+#define SEQ_AFTERTOUCH         9
+#define SEQ_CONTROLLER         10
+#define SEQ_BALANCE            11
+#define SEQ_VOLMODE             12
+
+/************************************
+ *     Midi controller numbers     *
+ ************************************/
+/*
+ * Controllers 0 to 31 (0x00 to 0x1f) and
+ * 32 to 63 (0x20 to 0x3f) are continuous
+ * controllers.
+ * In the MIDI 1.0 these controllers are sent using
+ * two messages. Controller numbers 0 to 31 are used
+ * to send the MSB and the controller numbers 32 to 63
+ * are for the LSB. Note that just 7 bits are used in MIDI bytes.
+ */
+
+#define           CTL_BANK_SELECT              0x00
+#define           CTL_MODWHEEL                 0x01
+#define    CTL_BREATH                  0x02
+/*             undefined               0x03 */
+#define    CTL_FOOT                    0x04
+#define    CTL_PORTAMENTO_TIME         0x05
+#define    CTL_DATA_ENTRY              0x06
+#define    CTL_MAIN_VOLUME             0x07
+#define    CTL_BALANCE                 0x08
+/*             undefined               0x09 */
+#define    CTL_PAN                     0x0a
+#define    CTL_EXPRESSION              0x0b
+/*             undefined               0x0c */
+/*             undefined               0x0d */
+/*             undefined               0x0e */
+/*             undefined               0x0f */
+#define    CTL_GENERAL_PURPOSE1                0x10
+#define    CTL_GENERAL_PURPOSE2                0x11
+#define    CTL_GENERAL_PURPOSE3                0x12
+#define    CTL_GENERAL_PURPOSE4                0x13
+/*             undefined               0x14 - 0x1f */
+
+/*             undefined               0x20 */
+/* The controller numbers 0x21 to 0x3f are reserved for the */
+/* least significant bytes of the controllers 0x00 to 0x1f. */
+/* These controllers are not recognised by the driver. */
+
+/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */
+/* 0=OFF and 127=ON (intermediate values are possible) */
+#define    CTL_DAMPER_PEDAL            0x40
+#define    CTL_SUSTAIN                 0x40    /* Alias */
+#define    CTL_HOLD                    0x40    /* Alias */
+#define    CTL_PORTAMENTO              0x41
+#define    CTL_SOSTENUTO               0x42
+#define    CTL_SOFT_PEDAL              0x43
+/*             undefined               0x44 */
+#define    CTL_HOLD2                   0x45
+/*             undefined               0x46 - 0x4f */
+
+#define    CTL_GENERAL_PURPOSE5                0x50
+#define    CTL_GENERAL_PURPOSE6                0x51
+#define    CTL_GENERAL_PURPOSE7                0x52
+#define    CTL_GENERAL_PURPOSE8                0x53
+/*             undefined               0x54 - 0x5a */
+#define    CTL_EXT_EFF_DEPTH           0x5b
+#define    CTL_TREMOLO_DEPTH           0x5c
+#define    CTL_CHORUS_DEPTH            0x5d
+#define    CTL_DETUNE_DEPTH            0x5e
+#define    CTL_CELESTE_DEPTH           0x5e    /* Alias for the above one */
+#define    CTL_PHASER_DEPTH            0x5f
+#define    CTL_DATA_INCREMENT          0x60
+#define    CTL_DATA_DECREMENT          0x61
+#define    CTL_NONREG_PARM_NUM_LSB     0x62
+#define    CTL_NONREG_PARM_NUM_MSB     0x63
+#define    CTL_REGIST_PARM_NUM_LSB     0x64
+#define    CTL_REGIST_PARM_NUM_MSB     0x65
+/*             undefined               0x66 - 0x78 */
+/*             reserved                0x79 - 0x7f */
+
+/* Pseudo controllers (not midi compatible) */
+#define    CTRL_PITCH_BENDER           255
+#define    CTRL_PITCH_BENDER_RANGE     254
+#define    CTRL_EXPRESSION             253     /* Obsolete */
+#define    CTRL_MAIN_VOLUME            252     /* Obsolete */
+
+/*
+ * Volume mode defines how volumes are used
+ */
+
+#define VOL_METHOD_ADAGIO      1
+#define VOL_METHOD_LINEAR      2
+
+/*
+ * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as
+ *      input events.
+ */
+
+/*
+ * Event codes 0xf0 to 0xfc are reserved for future extensions.
+ */
+
+#define SEQ_FULLSIZE           0xfd    /* Long events */
+/*
+ * SEQ_FULLSIZE events are used for loading patches/samples to the
+ * synthesizer devices. These events are passed directly to the driver
+ * of the associated synthesizer device. There is no limit to the size
+ * of the extended events. These events are not queued but executed
+ * immediately when the write() is called (execution can take several
+ * seconds of time). 
+ *
+ * When a SEQ_FULLSIZE message is written to the device, it must
+ * be written using exactly one write() call. Other events cannot
+ * be mixed to the same write.
+ *     
+ * For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the 
+ * /dev/sequencer. Don't write other data together with the instrument structure
+ * Set the key field of the structure to FM_PATCH. The device field is used to
+ * route the patch to the corresponding device.
+ *
+ * For wave table use struct patch_info. Initialize the key field
+ * to WAVE_PATCH.
+ */
+#define SEQ_PRIVATE            0xfe    /* Low level HW dependent events (8 bytes) */
+#define SEQ_EXTENDED           0xff    /* Extended events (8 bytes) OBSOLETE */
+
+/*
+ * Record for FM patches
+ */
+
+typedef unsigned char sbi_instr_data[32];
+
+struct sbi_instrument
+{
+  unsigned short key;          /* FM_PATCH or OPL3_PATCH */
+#define FM_PATCH       _PATCHKEY(0x01)
+#define OPL3_PATCH     _PATCHKEY(0x03)
+  short device;                        /*  Synth# (0-4)    */
+  int channel;                 /*  Program# to be initialized  */
+  sbi_instr_data operators;    /*  Register settings for operator cells (.SBI format)  */
+};
+
+struct synth_info
+{                              /* Read only */
+  char name[30];
+  int device;                  /* 0-N. INITIALIZE BEFORE CALLING */
+  int synth_type;
+#define SYNTH_TYPE_FM                  0
+#define SYNTH_TYPE_SAMPLE              1
+#define SYNTH_TYPE_MIDI                        2       /* Midi interface */
+
+  int synth_subtype;
+#define FM_TYPE_ADLIB                  0x00
+#define FM_TYPE_OPL3                   0x01
+#define MIDI_TYPE_MPU401               0x401
+
+#define SAMPLE_TYPE_BASIC              0x10
+#define SAMPLE_TYPE_GUS                        SAMPLE_TYPE_BASIC
+#define SAMPLE_TYPE_WAVEFRONT          0x11
+
+  int perc_mode;               /* No longer supported */
+  int nr_voices;
+  int nr_drums;                        /* Obsolete field */
+  int instr_bank_size;
+  unsigned int capabilities;
+#define SYNTH_CAP_PERCMODE     0x00000001      /* No longer used */
+#define SYNTH_CAP_OPL3         0x00000002      /* Set if OPL3 supported */
+#define SYNTH_CAP_INPUT                0x00000004      /* Input (MIDI) device */
+  int dummies[19];             /* Reserve space */
+};
+
+struct sound_timer_info
+{
+  char name[32];
+  int caps;
+};
+
+struct midi_info               /* OBSOLETE */
+{
+  char name[30];
+  int device;                  /* 0-N. INITIALIZE BEFORE CALLING */
+  unsigned int capabilities;   /* To be defined later */
+  int dev_type;
+  int dummies[18];             /* Reserve space */
+};
+
+/*
+ * Level 2 event types for /dev/sequencer
+ */
+
+/*
+ * The 4 most significant bits of byte 0 specify the class of
+ * the event: 
+ *
+ *     0x8X = system level events,
+ *     0x9X = device/port specific events, event[1] = device/port,
+ *             The last 4 bits give the subtype:
+ *                     0x02    = Channel event (event[3] = chn).
+ *                     0x01    = note event (event[4] = note).
+ *                     (0x01 is not used alone but always with bit 0x02).
+ *            event[2] = MIDI message code (0x80=note off etc.)
+ *
+ */
+
+#define EV_SEQ_LOCAL           0x80
+#define EV_TIMING              0x81
+#define EV_CHN_COMMON          0x92
+#define EV_CHN_VOICE           0x93
+#define EV_SYSEX               0x94
+#define EV_SYSTEM              0x95    /* MIDI system and real time messages (input only) */
+/*
+ * Event types 200 to 220 are reserved for application use.
+ * These numbers will not be used by the driver.
+ */
+
+/*
+ * Events for event type EV_CHN_VOICE
+ */
+
+#define MIDI_NOTEOFF           0x80
+#define MIDI_NOTEON            0x90
+#define MIDI_KEY_PRESSURE      0xA0
+
+/*
+ * Events for event type EV_CHN_COMMON
+ */
+
+#define MIDI_CTL_CHANGE                0xB0
+#define MIDI_PGM_CHANGE                0xC0
+#define MIDI_CHN_PRESSURE      0xD0
+#define MIDI_PITCH_BEND                0xE0
+
+#define MIDI_SYSTEM_PREFIX     0xF0
+
+/*
+ * Timer event types
+ */
+#define TMR_WAIT_REL           1       /* Time relative to the prev time */
+#define TMR_WAIT_ABS           2       /* Absolute time since TMR_START */
+#define TMR_STOP               3
+#define TMR_START              4
+#define TMR_CONTINUE           5
+#define TMR_TEMPO              6
+#define TMR_ECHO               8
+#define TMR_CLOCK              9       /* MIDI clock */
+#define TMR_SPP                        10      /* Song position pointer */
+#define TMR_TIMESIG            11      /* Time signature */
+
+/*
+ *     Local event types
+ */
+#define LOCL_STARTAUDIO                1
+#define LOCL_STARTAUDIO2       2
+#define LOCL_STARTAUDIO3       3
+#define LOCL_STARTAUDIO4       4
+
+#if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS)
+/*
+ * Some convenience macros to simplify programming of the
+ * /dev/sequencer interface
+ *
+ * These macros define the API which should be used when possible.
+ */
+#define SEQ_DECLAREBUF()               SEQ_USE_EXTBUF()
+
+void seqbuf_dump (void);       /* This function must be provided by programs */
+
+EXTERNC int OSS_init (int seqfd, int buflen);
+EXTERNC void OSS_seqbuf_dump (int fd, unsigned char *buf, int buflen);
+EXTERNC void OSS_seq_advbuf (int len, int fd, unsigned char *buf, int buflen);
+EXTERNC void OSS_seq_needbuf (int len, int fd, unsigned char *buf,
+                             int buflen);
+EXTERNC void OSS_patch_caching (int dev, int chn, int patch, int fd,
+                               unsigned char *buf, int buflen);
+EXTERNC void OSS_drum_caching (int dev, int chn, int patch, int fd,
+                              unsigned char *buf, int buflen);
+EXTERNC void OSS_write_patch (int fd, unsigned char *buf, int len);
+EXTERNC int OSS_write_patch2 (int fd, unsigned char *buf, int len);
+
+#define SEQ_PM_DEFINES int __foo_bar___
+#ifdef OSSLIB
+#  define SEQ_USE_EXTBUF() \
+               EXTERNC unsigned char *_seqbuf; \
+               EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
+#  define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len
+#  define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen)
+#  define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen)
+#  define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen)
+
+#  define SEQ_LOAD_GMINSTR(dev, instr) \
+               OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen)
+#  define SEQ_LOAD_GMDRUM(dev, drum) \
+               OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen)
+#else /* !OSSLIB */
+
+#  define SEQ_LOAD_GMINSTR(dev, instr)
+#  define SEQ_LOAD_GMDRUM(dev, drum)
+
+#  define SEQ_USE_EXTBUF() \
+               EXTERNC unsigned char _seqbuf[]; \
+               EXTERNC int _seqbuflen;EXTERNC int _seqbufptr
+
+#ifndef USE_SIMPLE_MACROS
+/* Sample seqbuf_dump() implementation:
+ *
+ *     SEQ_DEFINEBUF (2048);   -- Defines a buffer for 2048 bytes
+ *
+ *     int seqfd;              -- The file descriptor for /dev/sequencer.
+ *
+ *     void
+ *     seqbuf_dump ()
+ *     {
+ *       if (_seqbufptr)
+ *         if (write (seqfd, _seqbuf, _seqbufptr) == -1)
+ *           {
+ *             perror ("write /dev/sequencer");
+ *             exit (-1);
+ *           }
+ *       _seqbufptr = 0;
+ *     }
+ */
+
+#define SEQ_DEFINEBUF(len) \
+       unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
+#define _SEQ_NEEDBUF(len) \
+       if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
+#define _SEQ_ADVBUF(len) _seqbufptr += len
+#define SEQ_DUMPBUF seqbuf_dump
+#else
+/*
+ * This variation of the sequencer macros is used just to format one event
+ * using fixed buffer.
+ * 
+ * The program using the macro library must define the following macros before
+ * using this library.
+ *
+ * #define _seqbuf              name of the buffer (unsigned char[]) 
+ * #define _SEQ_ADVBUF(len)     If the applic needs to know the exact
+ *                              size of the event, this macro can be used.
+ *                              Otherwise this must be defined as empty.
+ * #define _seqbufptr           Define the name of index variable or 0 if
+ *                              not required. 
+ */
+#define _SEQ_NEEDBUF(len)      /* empty */
+#endif
+#endif /* !OSSLIB */
+
+#define SEQ_VOLUME_MODE(dev, mode) \
+                               {_SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                               _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
+                               _seqbuf[_seqbufptr+2] = (dev);\
+                               _seqbuf[_seqbufptr+3] = (mode);\
+                               _seqbuf[_seqbufptr+4] = 0;\
+                               _seqbuf[_seqbufptr+5] = 0;\
+                               _seqbuf[_seqbufptr+6] = 0;\
+                               _seqbuf[_seqbufptr+7] = 0;\
+                               _SEQ_ADVBUF(8);}
+
+/*
+ * Midi voice messages
+ */
+
+#define _CHN_VOICE(dev, event, chn, note, parm) \
+                               {_SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
+                               _seqbuf[_seqbufptr+1] = (dev);\
+                               _seqbuf[_seqbufptr+2] = (event);\
+                               _seqbuf[_seqbufptr+3] = (chn);\
+                               _seqbuf[_seqbufptr+4] = (note);\
+                               _seqbuf[_seqbufptr+5] = (parm);\
+                               _seqbuf[_seqbufptr+6] = (0);\
+                               _seqbuf[_seqbufptr+7] = 0;\
+                               _SEQ_ADVBUF(8);}
+
+#define SEQ_START_NOTE(dev, chn, note, vol) \
+                       _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
+
+#define SEQ_STOP_NOTE(dev, chn, note, vol) \
+                       _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
+
+#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
+                       _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
+
+/*
+ * Midi channel messages
+ */
+
+#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
+                               {_SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
+                               _seqbuf[_seqbufptr+1] = (dev);\
+                               _seqbuf[_seqbufptr+2] = (event);\
+                               _seqbuf[_seqbufptr+3] = (chn);\
+                               _seqbuf[_seqbufptr+4] = (p1);\
+                               _seqbuf[_seqbufptr+5] = (p2);\
+                               *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
+                               _SEQ_ADVBUF(8);}
+/*
+ * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits
+ * sending any MIDI bytes but it's absolutely not possible. Trying to do
+ * so _will_ cause problems with MPU401 intelligent mode).
+ *
+ * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be 
+ * sent by calling SEQ_SYSEX() several times (there must be no other events
+ * between them). First sysex fragment must have 0xf0 in the first byte
+ * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte
+ * between these sysex start and end markers cannot be larger than 0x7f. Also
+ * lengths of each fragments (except the last one) must be 6.
+ *
+ * Breaking the above rules may work with some MIDI ports but is likely to
+ * cause fatal problems with some other devices (such as MPU401).
+ */
+#define SEQ_SYSEX(dev, buf, len) \
+                               {int ii, ll=(len); \
+                                unsigned char *bufp=buf;\
+                                if (ll>6)ll=6;\
+                               _SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr] = EV_SYSEX;\
+                               _seqbuf[_seqbufptr+1] = (dev);\
+                               for(ii=0;ii<ll;ii++)\
+                                  _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
+                               for(ii=ll;ii<6;ii++)\
+                                  _seqbuf[_seqbufptr+ii+2] = 0xff;\
+                               _SEQ_ADVBUF(8);}
+
+#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
+               _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
+
+#define SEQ_SET_PATCH SEQ_PGM_CHANGE
+#ifdef OSSLIB
+#   define SEQ_PGM_CHANGE(dev, chn, patch) \
+               {OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \
+                _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);}
+#else
+#   define SEQ_PGM_CHANGE(dev, chn, patch) \
+               _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
+#endif
+
+#define SEQ_CONTROL(dev, chn, controller, value) \
+               _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
+
+#define SEQ_BENDER(dev, chn, value) \
+               _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
+
+#define SEQ_V2_X_CONTROL(dev, voice, controller, value)        \
+                               {_SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+                               _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
+                               _seqbuf[_seqbufptr+2] = (dev);\
+                               _seqbuf[_seqbufptr+3] = (voice);\
+                               _seqbuf[_seqbufptr+4] = (controller);\
+                               _seqbuf[_seqbufptr+5] = ((value)&0xff);\
+                               _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
+                               _seqbuf[_seqbufptr+7] = 0;\
+                               _SEQ_ADVBUF(8);}
+/*
+ * The following 5 macros are incorrectly implemented and obsolete.
+ * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead.
+ */
+#define SEQ_PITCHBEND(dev, voice, value) \
+       SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
+#define SEQ_BENDER_RANGE(dev, voice, value) \
+       SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
+#define SEQ_EXPRESSION(dev, voice, value) \
+       SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
+#define SEQ_MAIN_VOLUME(dev, voice, value) \
+       SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
+#define SEQ_PANNING(dev, voice, pos) \
+       SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
+
+/*
+ * Timing and syncronization macros
+ */
+
+#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
+                               _seqbuf[_seqbufptr+0] = EV_TIMING; \
+                               _seqbuf[_seqbufptr+1] = (ev); \
+                               _seqbuf[_seqbufptr+2] = 0;\
+                               _seqbuf[_seqbufptr+3] = 0;\
+                               *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                               _SEQ_ADVBUF(8);}
+
+#define SEQ_START_TIMER()              _TIMER_EVENT(TMR_START, 0)
+#define SEQ_STOP_TIMER()               _TIMER_EVENT(TMR_STOP, 0)
+#define SEQ_CONTINUE_TIMER()           _TIMER_EVENT(TMR_CONTINUE, 0)
+#define SEQ_WAIT_TIME(ticks)           _TIMER_EVENT(TMR_WAIT_ABS, ticks)
+#define SEQ_DELTA_TIME(ticks)          _TIMER_EVENT(TMR_WAIT_REL, ticks)
+#define SEQ_ECHO_BACK(key)             _TIMER_EVENT(TMR_ECHO, key)
+#define SEQ_SET_TEMPO(value)           _TIMER_EVENT(TMR_TEMPO, value)
+#define SEQ_SONGPOS(pos)               _TIMER_EVENT(TMR_SPP, pos)
+#define SEQ_TIME_SIGNATURE(sig)                _TIMER_EVENT(TMR_TIMESIG, sig)
+
+/*
+ * Local control events
+ */
+
+#define _LOCAL_EVENT(ev, parm)         {_SEQ_NEEDBUF(8);\
+                                       _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
+                                       _seqbuf[_seqbufptr+1] = (ev); \
+                                       _seqbuf[_seqbufptr+2] = 0;\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+                                       _SEQ_ADVBUF(8);}
+
+#define SEQ_PLAYAUDIO(devmask)         _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
+#define SEQ_PLAYAUDIO2(devmask)                _LOCAL_EVENT(LOCL_STARTAUDIO2, devmask)
+#define SEQ_PLAYAUDIO3(devmask)                _LOCAL_EVENT(LOCL_STARTAUDIO3, devmask)
+#define SEQ_PLAYAUDIO4(devmask)                _LOCAL_EVENT(LOCL_STARTAUDIO4, devmask)
+/*
+ * Events for the level 1 interface only 
+ */
+
+#define SEQ_MIDIOUT(device, byte)      {_SEQ_NEEDBUF(4);\
+                                       _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
+                                       _seqbuf[_seqbufptr+1] = (byte);\
+                                       _seqbuf[_seqbufptr+2] = (device);\
+                                       _seqbuf[_seqbufptr+3] = 0;\
+                                       _SEQ_ADVBUF(4);}
+
+/*
+ * Patch loading.
+ */
+#ifdef OSSLIB
+#   define SEQ_WRPATCH(patchx, len) \
+               OSS_write_patch(seqfd, (char*)(patchx), len)
+#   define SEQ_WRPATCH2(patchx, len) \
+               OSS_write_patch2(seqfd, (char*)(patchx), len)
+#else
+#   define SEQ_WRPATCH(patchx, len) \
+               {if (_seqbufptr) SEQ_DUMPBUF();\
+                if (write(seqfd, (char*)(patchx), len)==-1) \
+                   perror("Write patch: /dev/sequencer");}
+#   define SEQ_WRPATCH2(patchx, len) \
+               (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
+#endif
+
+#endif
+#endif /* ifndef DISABLE_SEQUENCER */
+
+/*
+ ****************************************************************************
+ * ioctl commands for the /dev/midi## 
+ ****************************************************************************/
+#define SNDCTL_MIDI_PRETIME    __SIOWR('m', 0, int)
+
+#if 0
+/*
+ * The SNDCTL_MIDI_MPUMODE and SNDCTL_MIDI_MPUCMD calls
+ * are completely obsolete. The hardware device (MPU-401 "intelligent mode"
+ * and compatibles) has disappeared from the market 10 years ago so there 
+ * is no need for this stuff. The MPU-401 "UART" mode devices don't support
+ * this stuff.
+ */
+typedef struct
+{
+  unsigned char cmd;
+  char nr_args, nr_returns;
+  unsigned char data[30];
+} mpu_command_rec;
+
+#define SNDCTL_MIDI_MPUMODE    __SIOWR('m', 1, int)
+#define SNDCTL_MIDI_MPUCMD     __SIOWR('m', 2, mpu_command_rec)
+#endif
+
+/*
+ * SNDCTL_MIDI_MTCINPUT turns on a mode where OSS automatically inserts
+ * MTC quarter frame messages (F1 xx) to the input.
+ * The argument is the MTC mode:
+ *
+ *     -1 = Turn MTC messages OFF (default)
+ *     24 = 24 FPS 
+ *     25 = 25 FPS 
+ *     29 = 30 FPS drop frame
+ *     30 = 30 FPS 
+ *
+ * Note that 25 FPS mode is probably the only mode that is supported. Other
+ * modes may be supported in the future versions of OSS, 25 FPS is handy 
+ * because it generates 25*4=100 quarter frame messages per second which
+ * matches the usual 100 HZ system timer rate).
+ *
+ * The quarter frame timer will be reset to 0:00:00:00.0 at the moment this
+ * ioctl is made.
+ */
+#define SNDCTL_MIDI_MTCINPUT   __SIOWR('m', 3, int)
+
+/*
+ * MTC/SMPTE time code record (for future use)
+ */
+typedef struct
+{
+  unsigned char hours, minutes, seconds, frames, qframes;
+  char direction;
+#define MTC_DIR_STOPPED                 0
+#define MTC_DIR_FORWARD                 1
+#define MTC_DIR_BACKWARD       -1
+  unsigned char time_code_type;
+  unsigned int flags;
+} oss_mtc_data_t;
+
+#define SNDCTL_MIDI_SETMODE    __SIOWR('m', 6, int)
+#      define MIDI_MODE_TRADITIONAL    0
+#      define MIDI_MODE_TIMED          1       /* Input times are in MIDI ticks */
+#      define MIDI_MODE_TIMED_ABS      2       /* Input times are absolute (usecs) */
+
+/*
+ * Packet header for MIDI_MODE_TIMED and MIDI_MODE_TIMED_ABS
+ */
+#ifdef OSS_NO_LONG_LONG
+  typedef unsigned long oss_midi_time_t;       /* This will not be enough but anyway */
+#else
+  typedef unsigned long long oss_midi_time_t;  /* Variable type for MIDI time (clock ticks) */
+#endif
+
+typedef struct
+{
+  int magic;                   /* Initialize to MIDI_HDR_MAGIC */
+#define MIDI_HDR_MAGIC -1
+  unsigned short event_type;
+#define MIDI_EV_WRITE                  0       /* Write or read (with payload) */
+#define MIDI_EV_TEMPO                  1
+#define MIDI_EV_ECHO                   2
+#define MIDI_EV_START                  3
+#define MIDI_EV_STOP                   4
+#define MIDI_EV_CONTINUE               5
+#define MIDI_EV_XPRESSWRITE            6
+#define MIDI_EV_TIMEBASE               7
+#define MIDI_EV_DEVCTL                 8       /* Device control read/write */
+  unsigned short options;
+#define MIDI_OPT_NONE                  0x0000
+#define MIDI_OPT_TIMED                 0x0001
+#define MIDI_OPT_CONTINUATION          0x0002
+#define MIDI_OPT_USECTIME              0x0004  /* Time is absolute (in usecs) */
+#define MIDI_OPT_BUSY                  0x0008  /* Reserved for internal use */
+  oss_midi_time_t time;
+#ifdef OSS_NO_LONG_LONG
+  /* oss_midi_time_t is just 32 bits instead of 64. Use a padding word to compensate this */
+  int budding;
+#endif
+  int parm;
+  int filler[4];               /* Fur future expansion - init to zeros */
+} midi_packet_header_t;
+/* 
+ * MIDI_PAYLOAD_SIZE is the maximum size of one MIDI input chunk. It must be
+ * less (or equal) than 1024 which is the read size recommended in the 
+ * documentation. TODO: Explain this better.
+ */
+#define MIDI_PAYLOAD_SIZE              1000
+
+typedef struct
+{
+  midi_packet_header_t hdr;
+  unsigned char payload[MIDI_PAYLOAD_SIZE];
+} midi_packet_t;
+
+#define SNDCTL_MIDI_TIMEBASE           __SIOWR('m', 7, int)
+#define SNDCTL_MIDI_TEMPO              __SIOWR('m', 8, int)
+/*
+ * User land MIDI servers (synths) can use SNDCTL_MIDI_SET_LATENCY
+ * to request MIDI events to be sent to them in advance. The parameter
+ * (in microseconds) tells how much before the events are submitted.
+ *
+ * This feature is only valid for loopback devices and possibly some other
+ * types of virtual devices.
+ */
+#define SNDCTL_MIDI_SET_LATENCY                __SIOW ('m', 9, int)
+/*
+ ****************************************************************************
+ * IOCTL commands for /dev/dsp
+ ****************************************************************************/
+
+#define SNDCTL_DSP_HALT                        __SIO  ('P', 0)
+#define SNDCTL_DSP_RESET               SNDCTL_DSP_HALT /* Old name */
+#define SNDCTL_DSP_SYNC                        __SIO  ('P', 1)
+#define SNDCTL_DSP_SPEED               __SIOWR('P', 2, int)
+
+/* SNDCTL_DSP_STEREO is obsolete - use SNDCTL_DSP_CHANNELS instead */
+#define SNDCTL_DSP_STEREO              __SIOWR('P', 3, int)
+/* SNDCTL_DSP_STEREO is obsolete - use SNDCTL_DSP_CHANNELS instead */
+
+#define SNDCTL_DSP_GETBLKSIZE          __SIOWR('P', 4, int)
+#define SNDCTL_DSP_SAMPLESIZE          SNDCTL_DSP_SETFMT
+#define SNDCTL_DSP_CHANNELS            __SIOWR('P', 6, int)
+#define SNDCTL_DSP_POST                        __SIO  ('P', 8)
+#define SNDCTL_DSP_SUBDIVIDE           __SIOWR('P', 9, int)
+#define SNDCTL_DSP_SETFRAGMENT         __SIOWR('P',10, int)
+
+/* Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */
+#define SNDCTL_DSP_GETFMTS             __SIOR ('P',11, int)    /* Returns a mask */
+#define SNDCTL_DSP_SETFMT              __SIOWR('P',5, int)     /* Selects ONE fmt */
+#      define AFMT_QUERY       0x00000000      /* Return current fmt */
+#      define AFMT_MU_LAW      0x00000001
+#      define AFMT_A_LAW       0x00000002
+#      define AFMT_IMA_ADPCM   0x00000004
+#      define AFMT_U8          0x00000008
+#      define AFMT_S16_LE      0x00000010      /* Little endian signed 16 */
+#      define AFMT_S16_BE      0x00000020      /* Big endian signed 16 */
+#      define AFMT_S8          0x00000040
+#      define AFMT_U16_LE      0x00000080      /* Little endian U16 */
+#      define AFMT_U16_BE      0x00000100      /* Big endian U16 */
+#      define AFMT_MPEG        0x00000200      /* MPEG (2) audio */
+
+/* AC3 _compressed_ bitstreams (See Programmer's Guide for details). */
+#      define AFMT_AC3         0x00000400
+/* Ogg Vorbis _compressed_ bit streams */
+#      define AFMT_VORBIS      0x00000800
+
+/* 32 bit formats (MSB aligned) formats */
+#      define AFMT_S32_LE      0x00001000
+#      define AFMT_S32_BE      0x00002000
+
+/* Reserved for _native_ endian double precision IEEE floating point */
+#      define AFMT_FLOAT       0x00004000
+
+/* 24 bit formats (LSB aligned in 32 bit word) formats */
+#      define AFMT_S24_LE      0x00008000
+#      define AFMT_S24_BE      0x00010000
+
+/*
+ * S/PDIF raw format. In this format the S/PDIF frames (including all
+ * control and user bits) are included in the data stream. Each sample
+ * is stored in a 32 bit frame (see IEC-958 for more info). This format
+ * is supported by very few devices and it's only usable for purposes
+ * where full access to the control/user bits is required (real time control).
+ */
+#      define AFMT_SPDIF_RAW   0x00020000
+
+/* 24 bit packed (3 byte) little endian format (USB compatibility) */
+#      define AFMT_S24_PACKED  0x00040000
+
+
+/*
+ * Some big endian/little endian handling macros (native endian and opposite
+ * endian formats). The usage of these macros is described in the OSS
+ * Programmer's Manual.
+ */
+
+#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__hppa) || defined(PPC) || defined(__powerpc__) && !defined(i386) && !defined(__i386) && !defined(__i386__)
+
+/* Big endian machines */
+#  define _PATCHKEY(id) (0xfd00|id)
+#  define AFMT_S16_NE AFMT_S16_BE
+#  define AFMT_U16_NE AFMT_U16_BE
+#  define AFMT_S32_NE AFMT_S32_BE
+#  define AFMT_S24_NE AFMT_S24_BE
+#  define AFMT_S16_OE AFMT_S16_LE
+#  define AFMT_S32_OE AFMT_S32_LE
+#  define AFMT_S24_OE AFMT_S24_LE
+#else
+#  define _PATCHKEY(id) ((id<<8)|0xfd)
+#  define AFMT_S16_NE AFMT_S16_LE
+#  define AFMT_U16_NE AFMT_U16_LE
+#  define AFMT_S32_NE AFMT_S32_LE
+#  define AFMT_S24_NE AFMT_S24_LE
+#  define AFMT_S16_OE AFMT_S16_BE
+#  define AFMT_S32_OE AFMT_S32_BE
+#  define AFMT_S24_OE AFMT_S24_BE
+#endif
+/*
+ * Buffer status queries.
+ */
+typedef struct audio_buf_info
+{
+  int fragments;               /* # of available fragments (partially usend ones not counted) */
+  int fragstotal;              /* Total # of fragments allocated */
+  int fragsize;                        /* Size of a fragment in bytes */
+  int bytes;                   /* Available space in bytes (includes partially used fragments) */
+  /* Note! 'bytes' could be more than fragments*fragsize */
+} audio_buf_info;
+
+#define SNDCTL_DSP_GETOSPACE           __SIOR ('P',12, audio_buf_info)
+#define SNDCTL_DSP_GETISPACE           __SIOR ('P',13, audio_buf_info)
+#define SNDCTL_DSP_GETCAPS             __SIOR ('P',15, int)
+#      define PCM_CAP_REVISION         0x000000ff      /* Bits for revision level (0 to 255) */
+#      define PCM_CAP_DUPLEX           0x00000100      /* Full duplex record/playback */
+#      define PCM_CAP_REALTIME         0x00000200      /* Not in use */
+#      define PCM_CAP_BATCH            0x00000400      /* Device has some kind of */
+                                                       /* internal buffers which may */
+                                                       /* cause some delays and */
+                                                       /* decrease precision of timing */
+#      define PCM_CAP_COPROC           0x00000800      /* Has a coprocessor */
+                                                       /* Sometimes it's a DSP */
+                                                       /* but usually not */
+#      define PCM_CAP_TRIGGER          0x00001000      /* Supports SETTRIGGER */
+#      define PCM_CAP_MMAP             0x00002000      /* Supports mmap() */
+#      define PCM_CAP_MULTI            0x00004000      /* Supports multiple open */
+#      define PCM_CAP_BIND             0x00008000      /* Supports binding to front/rear/center/lfe */
+#      define PCM_CAP_INPUT            0x00010000      /* Supports recording */
+#      define PCM_CAP_OUTPUT           0x00020000      /* Supports playback */
+#      define PCM_CAP_VIRTUAL          0x00040000      /* Virtual device */
+/* 0x00040000 and 0x00080000 reserved for future use */
+
+/* Analog/digital control capabilities */
+#      define PCM_CAP_ANALOGOUT        0x00100000
+#      define PCM_CAP_ANALOGIN         0x00200000
+#      define PCM_CAP_DIGITALOUT       0x00400000
+#      define PCM_CAP_DIGITALIN        0x00800000
+#      define PCM_CAP_ADMASK           0x00f00000
+/*
+ * NOTE! (capabilities & PCM_CAP_ADMASK)==0 means just that the
+ * digital/analog interface control features are not supported by the 
+ * device/driver. However the device still supports analog, digital or
+ * both inputs/outputs (depending on the device). See the OSS Programmer's
+ * Guide for full details.
+ */
+#      define PCM_CAP_SPECIAL          0x01000000      /* Not for ordinary "multimedia" use */
+#      define PCM_CAP_SHADOW           0x00000000      /* OBSOLETE */
+
+/*
+ * Preferred channel usage. These bits can be used to
+ * give recommendations to the application. Used by few drivers.
+ * For example if ((caps & DSP_CH_MASK) == DSP_CH_MONO) means that
+ * the device works best in mono mode. However it doesn't necessarily mean
+ * that the device cannot be used in stereo. These bits should only be used
+ * by special applications such as multi track hard disk recorders to find
+ * out the initial setup. However the user should be able to override this
+ * selection.
+ *
+ * To find out which modes are actually supported the application should 
+ * try to select them using SNDCTL_DSP_CHANNELS.
+ */
+#      define DSP_CH_MASK              0x06000000      /* Mask */
+#      define DSP_CH_ANY               0x00000000      /* No preferred mode */
+#      define DSP_CH_MONO              0x02000000
+#      define DSP_CH_STEREO            0x04000000
+#      define DSP_CH_MULTI             0x06000000      /* More than two channels */
+
+#      define PCM_CAP_HIDDEN           0x08000000      /* Hidden device */
+#      define PCM_CAP_FREERATE         0x10000000
+#      define PCM_CAP_MODEM            0x20000000      /* Modem device */
+#      define PCM_CAP_DEFAULT          0x40000000      /* "Default" device */
+
+/*
+ * The PCM_CAP_* capability names were known as DSP_CAP_* prior OSS 4.0
+ * so it's necessary to define the older names too.
+ */
+#define DSP_CAP_ADMASK         PCM_CAP_ADMASK
+#define DSP_CAP_ANALOGIN       PCM_CAP_ANALOGIN
+#define DSP_CAP_ANALOGOUT      PCM_CAP_ANALOGOUT
+#define DSP_CAP_BATCH          PCM_CAP_BATCH
+#define DSP_CAP_BIND           PCM_CAP_BIND
+#define DSP_CAP_COPROC         PCM_CAP_COPROC
+#define DSP_CAP_DEFAULT                PCM_CAP_DEFAULT
+#define DSP_CAP_DIGITALIN      PCM_CAP_DIGITALIN
+#define DSP_CAP_DIGITALOUT     PCM_CAP_DIGITALOUT
+#define DSP_CAP_DUPLEX         PCM_CAP_DUPLEX
+#define DSP_CAP_FREERATE       PCM_CAP_FREERATE
+#define DSP_CAP_HIDDEN         PCM_CAP_HIDDEN
+#define DSP_CAP_INPUT          PCM_CAP_INPUT
+#define DSP_CAP_MMAP           PCM_CAP_MMAP
+#define DSP_CAP_MODEM          PCM_CAP_MODEM
+#define DSP_CAP_MULTI          PCM_CAP_MULTI
+#define DSP_CAP_OUTPUT         PCM_CAP_OUTPUT
+#define DSP_CAP_REALTIME       PCM_CAP_REALTIME
+#define DSP_CAP_REVISION       PCM_CAP_REVISION
+#define DSP_CAP_SHADOW         PCM_CAP_SHADOW
+#define DSP_CAP_TRIGGER                PCM_CAP_TRIGGER
+#define DSP_CAP_VIRTUAL                PCM_CAP_VIRTUAL
+
+#define SNDCTL_DSP_GETTRIGGER          __SIOR ('P',16, int)
+#define SNDCTL_DSP_SETTRIGGER          __SIOW ('P',16, int)
+#      define PCM_ENABLE_INPUT         0x00000001
+#      define PCM_ENABLE_OUTPUT        0x00000002
+
+typedef struct count_info
+{
+  unsigned int bytes;          /* Total # of bytes processed */
+  int blocks;                  /* # of fragment transitions since last time */
+  int ptr;                     /* Current DMA pointer value */
+} count_info;
+
+#define SNDCTL_DSP_GETIPTR             __SIOR ('P',17, count_info)
+#define SNDCTL_DSP_GETOPTR             __SIOR ('P',18, count_info)
+
+typedef struct buffmem_desc
+{
+  unsigned *buffer;
+  int size;
+} buffmem_desc;
+#define SNDCTL_DSP_SETSYNCRO           __SIO  ('P', 21)
+#define SNDCTL_DSP_SETDUPLEX           __SIO  ('P', 22)
+
+#define SNDCTL_DSP_PROFILE             __SIOW ('P', 23, int)   /* OBSOLETE */
+#define          APF_NORMAL    0       /* Normal applications */
+#define          APF_NETWORK   1       /* Underruns probably caused by an "external" delay */
+#define   APF_CPUINTENS 2      /* Underruns probably caused by "overheating" the CPU */
+
+#define SNDCTL_DSP_GETODELAY           __SIOR ('P', 23, int)
+
+typedef struct audio_errinfo
+{
+  int play_underruns;
+  int rec_overruns;
+  unsigned int play_ptradjust;
+  unsigned int rec_ptradjust;
+  int play_errorcount;
+  int rec_errorcount;
+  int play_lasterror;
+  int rec_lasterror;
+  int play_errorparm;
+  int rec_errorparm;
+  int filler[16];
+} audio_errinfo;
+
+#define SNDCTL_DSP_GETPLAYVOL          __SIOR ('P', 24, int)
+#define SNDCTL_DSP_SETPLAYVOL          __SIOWR('P', 24, int)
+#define SNDCTL_DSP_GETERROR            __SIOR ('P', 25, audio_errinfo)
+/*
+ ****************************************************************************
+ * Digital interface (S/PDIF) control interface
+ */
+
+typedef struct oss_digital_control
+{
+  unsigned int caps;
+#define DIG_CBITIN_NONE                        0x00000000
+#define DIG_CBITIN_LIMITED             0x00000001
+#define DIG_CBITIN_DATA                0x00000002
+#define DIG_CBITIN_BYTE0               0x00000004
+#define DIG_CBITIN_FULL                0x00000008
+#define DIG_CBITIN_MASK                0x0000000f
+#define DIG_CBITOUT_NONE               0x00000000
+#define DIG_CBITOUT_LIMITED            0x00000010
+#define DIG_CBITOUT_BYTE0              0x00000020
+#define DIG_CBITOUT_FULL               0x00000040
+#define DIG_CBITOUT_DATA               0x00000080
+#define DIG_CBITOUT_MASK               0x000000f0
+#define DIG_UBITIN                     0x00000100
+#define DIG_UBITOUT                    0x00000200
+#define DIG_VBITOUT                    0x00000400
+#define DIG_OUTRATE                    0x00000800
+#define DIG_INRATE                     0x00001000
+#define DIG_INBITS                     0x00002000
+#define DIG_OUTBITS                    0x00004000
+#define DIG_EXACT                      0x00010000
+#define DIG_PRO                                0x00020000
+#define DIG_CONSUMER                   0x00040000
+#define DIG_PASSTHROUGH                        0x00080000
+#define DIG_OUTSEL                     0x00100000
+
+  unsigned int valid;
+#define VAL_CBITIN                     0x00000001
+#define VAL_UBITIN                     0x00000002
+#define VAL_CBITOUT                    0x00000004
+#define VAL_UBITOUT                    0x00000008
+#define VAL_ISTATUS                    0x00000010
+#define VAL_IRATE                      0x00000020
+#define VAL_ORATE                      0x00000040
+#define VAL_INBITS                     0x00000080
+#define VAL_OUTBITS                    0x00000100
+#define VAL_REQUEST                    0x00000200
+#define VAL_OUTSEL                     0x00000400
+
+#define VAL_OUTMASK (VAL_CBITOUT|VAL_UBITOUT|VAL_ORATE|VAL_OUTBITS|VAL_OUTSEL)
+
+  unsigned int request, param;
+#define SPD_RQ_PASSTHROUGH                             1
+
+  unsigned char cbitin[24];
+  unsigned char ubitin[24];
+  unsigned char cbitout[24];
+  unsigned char ubitout[24];
+
+  unsigned int outsel;
+#define OUTSEL_DIGITAL         1
+#define OUTSEL_ANALOG          2
+#define OUTSEL_BOTH            (OUTSEL_DIGITAL|OUTSEL_ANALOG)
+
+  int in_data;                 /* Audio/data if autodetectable by the receiver */
+#define IND_UNKNOWN            0
+#define IND_AUDIO              1
+#define IND_DATA               2
+
+  int in_locked;               /* Receiver locked */
+#define LOCK_NOT_INDICATED     0
+#define LOCK_UNLOCKED          1
+#define LOCK_LOCKED            2
+
+  int in_quality;              /* Input signal quality */
+#define IN_QUAL_NOT_INDICATED  0
+#define IN_QUAL_POOR           1
+#define IN_QUAL_GOOD           2
+
+  int in_vbit, out_vbit;       /* V bits */
+#define VBIT_NOT_INDICATED     0
+#define VBIT_OFF               1
+#define VBIT_ON                        2
+
+  unsigned int in_errors;      /* Various input error conditions */
+#define INERR_CRC              0x0001
+#define INERR_QCODE_CRC                0x0002
+#define INERR_PARITY           0x0004
+#define INERR_BIPHASE          0x0008
+
+  int srate_in, srate_out;
+  int bits_in, bits_out;
+
+  int filler[32];
+} oss_digital_control;
+
+#define SNDCTL_DSP_READCTL             __SIOWR('P', 26, oss_digital_control)
+#define SNDCTL_DSP_WRITECTL            __SIOWR('P', 27, oss_digital_control)
+
+/*
+ ****************************************************************************
+ * Sync groups for audio devices
+ */
+typedef struct oss_syncgroup
+{
+  int id;
+  int mode;
+  int filler[16];
+} oss_syncgroup;
+
+#define SNDCTL_DSP_SYNCGROUP           __SIOWR('P', 28, oss_syncgroup)
+#define SNDCTL_DSP_SYNCSTART           __SIOW ('P', 29, int)
+
+/*
+ **************************************************************************
+ * "cooked" mode enables software based conversions for sample rate, sample
+ * format (bits) and number of channels (mono/stereo). These conversions are
+ * required with some devices that support only one sample rate or just stereo
+ * to let the applications to use other formats. The cooked mode is enabled by
+ * default. However it's necessary to disable this mode when mmap() is used or
+ * when very deterministic timing is required. SNDCTL_DSP_COOKEDMODE is an
+ * optional call introduced in OSS 3.9.6f. It's _error return must be ignored_
+ * since normally this call will return erno=EINVAL.
+ *
+ * SNDCTL_DSP_COOKEDMODE must be called immediately after open before doing
+ * anything else. Otherwise the call will not have any effect.
+ */
+#define SNDCTL_DSP_COOKEDMODE          __SIOW ('P', 30, int)
+
+/*
+ **************************************************************************
+ * SNDCTL_DSP_SILENCE and SNDCTL_DSP_SKIP are new calls in OSS 3.99.0
+ * that can be used to implement pause/continue during playback (no effect
+ * on recording).
+ */
+#define SNDCTL_DSP_SILENCE             __SIO  ('P', 31)
+#define SNDCTL_DSP_SKIP                        __SIO  ('P', 32)
+/*
+ ****************************************************************************
+ * Abort transfer (reset) functions for input and output
+ */
+#define SNDCTL_DSP_HALT_INPUT          __SIO  ('P', 33)
+#define SNDCTL_DSP_RESET_INPUT SNDCTL_DSP_HALT_INPUT   /* Old name */
+#define SNDCTL_DSP_HALT_OUTPUT         __SIO  ('P', 34)
+#define SNDCTL_DSP_RESET_OUTPUT        SNDCTL_DSP_HALT_OUTPUT  /* Old name */
+/*
+ ****************************************************************************
+ * Low water level control
+ */
+#define SNDCTL_DSP_LOW_WATER           __SIOW ('P', 34, int)
+
+/*
+ ****************************************************************************
+ * 64 bit pointer support. Only available in environments that support
+ * the 64 bit (long long) integer type.
+ */
+#ifndef OSS_NO_LONG_LONG
+typedef struct
+{
+  long long samples;
+  int fifo_samples;
+  int filler[32];              /* For future use */
+} oss_count_t;
+
+#define SNDCTL_DSP_CURRENT_IPTR                __SIOR ('P', 35, oss_count_t)
+#define SNDCTL_DSP_CURRENT_OPTR                __SIOR ('P', 36, oss_count_t)
+#endif
+
+/*
+ ****************************************************************************
+ * Interface for selecting recording sources and playback output routings.
+ */
+#define SNDCTL_DSP_GET_RECSRC_NAMES    __SIOR ('P', 37, oss_mixer_enuminfo)
+#define SNDCTL_DSP_GET_RECSRC          __SIOR ('P', 38, int)
+#define SNDCTL_DSP_SET_RECSRC          __SIOWR('P', 38, int)
+
+#define SNDCTL_DSP_GET_PLAYTGT_NAMES   __SIOR ('P', 39, oss_mixer_enuminfo)
+#define SNDCTL_DSP_GET_PLAYTGT         __SIOR ('P', 40, int)
+#define SNDCTL_DSP_SET_PLAYTGT         __SIOWR('P', 40, int)
+#define SNDCTL_DSP_GETRECVOL           __SIOR ('P', 41, int)
+#define SNDCTL_DSP_SETRECVOL           __SIOWR('P', 41, int)
+
+/*
+ ***************************************************************************
+ * Some calls for setting the channel assignment with multi channel devices
+ * (see the manual for details).
+ */
+#ifndef OSS_NO_LONG_LONG
+#define SNDCTL_DSP_GET_CHNORDER                __SIOR ('P', 42, unsigned long long)
+#define SNDCTL_DSP_SET_CHNORDER                __SIOWR('P', 42, unsigned long long)
+#      define CHID_UNDEF       0
+#      define CHID_L           1
+#      define CHID_R           2
+#      define CHID_C           3
+#      define CHID_LFE         4
+#      define CHID_LS          5
+#      define CHID_RS          6
+#      define CHID_LR          7
+#      define CHID_RR          8
+#define CHNORDER_UNDEF         0x0000000000000000ULL
+#define CHNORDER_NORMAL                0x0000000087654321ULL
+#endif
+
+#define MAX_PEAK_CHANNELS      128
+typedef unsigned short oss_peaks_t[MAX_PEAK_CHANNELS];
+#define SNDCTL_DSP_GETIPEAKS           __SIOR('P', 43, oss_peaks_t)
+#define SNDCTL_DSP_GETOPEAKS           __SIOR('P', 44, oss_peaks_t)
+
+#define SNDCTL_DSP_POLICY              __SIOW('P', 45, int)    /* See the manual */
+
+/*
+ ****************************************************************************
+ * Few ioctl calls that are not official parts of OSS. They have been used
+ * by few freeware implementations of OSS.
+ */
+#define SNDCTL_DSP_GETCHANNELMASK      __SIOWR('P', 64, int)
+#define SNDCTL_DSP_BIND_CHANNEL                __SIOWR('P', 65, int)
+#     define DSP_BIND_QUERY           0x00000000
+#     define DSP_BIND_FRONT           0x00000001
+#     define DSP_BIND_SURR            0x00000002
+#     define DSP_BIND_CENTER_LFE      0x00000004
+#     define DSP_BIND_HANDSET         0x00000008
+#     define DSP_BIND_MIC             0x00000010
+#     define DSP_BIND_MODEM1          0x00000020
+#     define DSP_BIND_MODEM2          0x00000040
+#     define DSP_BIND_I2S             0x00000080
+#     define DSP_BIND_SPDIF           0x00000100
+#     define DSP_BIND_REAR            0x00000200
+
+#ifdef sun
+/* Not part of OSS. Reserved for internal use by Solaris */
+#define X_SADA_GET_PLAYTGT_MASK        __SIOR ('P', 66, int)
+#define X_SADA_GET_PLAYTGT     __SIOR ('P', 67, int)
+#define X_SADA_SET_PLAYTGT     __SIOWR('P', 68, int)
+#endif
+
+#ifndef NO_LEGACY_MIXER
+/*
+ ****************************************************************************
+ * IOCTL commands for the "legacy " /dev/mixer API (obsolete)
+ *
+ * Mixer controls
+ *
+ * There can be up to 20 different analog mixer channels. The
+ * SOUND_MIXER_NRDEVICES gives the currently supported maximum. 
+ * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells
+ * the devices supported by the particular mixer.
+ *
+ * {!notice This "legacy" mixer API is obsolete. It has been superceded
+ * by a new one (see below).
+ */
+
+#define SOUND_MIXER_NRDEVICES  28
+#define SOUND_MIXER_VOLUME     0
+#define SOUND_MIXER_BASS       1
+#define SOUND_MIXER_TREBLE     2
+#define SOUND_MIXER_SYNTH      3
+#define SOUND_MIXER_PCM                4
+#define SOUND_MIXER_SPEAKER    5
+#define SOUND_MIXER_LINE       6
+#define SOUND_MIXER_MIC                7
+#define SOUND_MIXER_CD         8
+#define SOUND_MIXER_IMIX       9       /*  Recording monitor  */
+#define SOUND_MIXER_ALTPCM     10
+#define SOUND_MIXER_RECLEV     11      /* Recording level */
+#define SOUND_MIXER_IGAIN      12      /* Input gain */
+#define SOUND_MIXER_OGAIN      13      /* Output gain */
+/* 
+ * Some soundcards have three line level inputs (line, aux1 and aux2). 
+ * Since each card manufacturer has assigned different meanings to 
+ * these inputs, it's impractical to assign specific meanings 
+ * (eg line, cd, synth etc.) to them.
+ */
+#define SOUND_MIXER_LINE1      14      /* Input source 1  (aux1) */
+#define SOUND_MIXER_LINE2      15      /* Input source 2  (aux2) */
+#define SOUND_MIXER_LINE3      16      /* Input source 3  (aux3) */
+#define SOUND_MIXER_DIGITAL1   17      /* Digital I/O 1 */
+#define SOUND_MIXER_DIGITAL2   18      /* Digital I/O 2 */
+#define SOUND_MIXER_DIGITAL3   19      /* Digital I/O 3 */
+#define SOUND_MIXER_PHONE      20      /* Phone */
+#define SOUND_MIXER_MONO       21      /* Mono Output */
+#define SOUND_MIXER_VIDEO      22      /* Video/TV (audio) in */
+#define SOUND_MIXER_RADIO      23      /* Radio in */
+#define SOUND_MIXER_DEPTH      24      /* Surround depth */
+#define SOUND_MIXER_REARVOL    25      /* Rear/Surround speaker vol */
+#define SOUND_MIXER_CENTERVOL  26      /* Center/LFE speaker vol */
+#define SOUND_MIXER_SIDEVOL    27      /* Side-Surround (8speaker) vol */
+
+/*
+ * Warning: SOUND_MIXER_SURRVOL is an old name of SOUND_MIXER_SIDEVOL.
+ *          They are both assigned to the same mixer control. Don't
+ *          use both control names in the same program/driver.
+ */
+#define SOUND_MIXER_SURRVOL    SOUND_MIXER_SIDEVOL
+
+/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */
+/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */
+#define SOUND_ONOFF_MIN                28
+#define SOUND_ONOFF_MAX                30
+
+/* Note!       Number 31 cannot be used since the sign bit is reserved */
+#define SOUND_MIXER_NONE       31
+
+/*
+ * The following unsupported macros are no longer functional.
+ * Use SOUND_MIXER_PRIVATE# macros in future.
+ */
+#define SOUND_MIXER_ENHANCE    SOUND_MIXER_NONE
+#define SOUND_MIXER_MUTE       SOUND_MIXER_NONE
+#define SOUND_MIXER_LOUD       SOUND_MIXER_NONE
+
+#define SOUND_DEVICE_LABELS \
+       {"Vol  ", "Bass ", "Treble", "Synth", "Pcm  ", "Speaker ", "Line ", \
+        "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "Rec  ", "IGain", "OGain", \
+        "Aux1", "Aux2", "Aux3", "Digital1", "Digital2", "Digital3", \
+        "Phone", "Mono", "Video", "Radio", "Depth", \
+        "Rear", "Center", "Side"}
+
+#define SOUND_DEVICE_NAMES \
+       {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
+        "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
+        "aux1", "aux2", "aux3", "dig1", "dig2", "dig3", \
+        "phone", "mono", "video", "radio", "depth", \
+        "rear", "center", "side"}
+
+/*     Device bitmask identifiers      */
+
+#define SOUND_MIXER_RECSRC     0xff    /* Arg contains a bit for each recording source */
+#define SOUND_MIXER_DEVMASK    0xfe    /* Arg contains a bit for each supported device */
+#define SOUND_MIXER_RECMASK    0xfd    /* Arg contains a bit for each supported recording source */
+#define SOUND_MIXER_CAPS       0xfc
+#      define SOUND_CAP_EXCL_INPUT     0x00000001      /* Only one recording source at a time */
+#      define SOUND_CAP_NOLEGACY       0x00000004      /* For internal use only */
+#      define SOUND_CAP_NORECSRC       0x00000008
+#define SOUND_MIXER_STEREODEVS 0xfb    /* Mixer channels supporting stereo */
+
+/* OSS/Free ONLY */
+#define SOUND_MIXER_OUTSRC    0xfa     /* Arg contains a bit for each input source to output */
+#define SOUND_MIXER_OUTMASK   0xf9     /* Arg contains a bit for each supported input source to output */
+/* OSS/Free ONLY */
+
+/*     Device mask bits        */
+
+#define SOUND_MASK_VOLUME      (1 << SOUND_MIXER_VOLUME)
+#define SOUND_MASK_BASS                (1 << SOUND_MIXER_BASS)
+#define SOUND_MASK_TREBLE      (1 << SOUND_MIXER_TREBLE)
+#define SOUND_MASK_SYNTH       (1 << SOUND_MIXER_SYNTH)
+#define SOUND_MASK_PCM         (1 << SOUND_MIXER_PCM)
+#define SOUND_MASK_SPEAKER     (1 << SOUND_MIXER_SPEAKER)
+#define SOUND_MASK_LINE                (1 << SOUND_MIXER_LINE)
+#define SOUND_MASK_MIC         (1 << SOUND_MIXER_MIC)
+#define SOUND_MASK_CD          (1 << SOUND_MIXER_CD)
+#define SOUND_MASK_IMIX                (1 << SOUND_MIXER_IMIX)
+#define SOUND_MASK_ALTPCM      (1 << SOUND_MIXER_ALTPCM)
+#define SOUND_MASK_RECLEV      (1 << SOUND_MIXER_RECLEV)
+#define SOUND_MASK_IGAIN       (1 << SOUND_MIXER_IGAIN)
+#define SOUND_MASK_OGAIN       (1 << SOUND_MIXER_OGAIN)
+#define SOUND_MASK_LINE1       (1 << SOUND_MIXER_LINE1)
+#define SOUND_MASK_LINE2       (1 << SOUND_MIXER_LINE2)
+#define SOUND_MASK_LINE3       (1 << SOUND_MIXER_LINE3)
+#define SOUND_MASK_DIGITAL1    (1 << SOUND_MIXER_DIGITAL1)
+#define SOUND_MASK_DIGITAL2    (1 << SOUND_MIXER_DIGITAL2)
+#define SOUND_MASK_DIGITAL3    (1 << SOUND_MIXER_DIGITAL3)
+#define SOUND_MASK_MONO                (1 << SOUND_MIXER_MONO)
+#define SOUND_MASK_PHONE       (1 << SOUND_MIXER_PHONE)
+#define SOUND_MASK_RADIO       (1 << SOUND_MIXER_RADIO)
+#define SOUND_MASK_VIDEO       (1 << SOUND_MIXER_VIDEO)
+#define SOUND_MASK_DEPTH       (1 << SOUND_MIXER_DEPTH)
+#define SOUND_MASK_REARVOL     (1 << SOUND_MIXER_REARVOL)
+#define SOUND_MASK_CENTERVOL   (1 << SOUND_MIXER_CENTERVOL)
+#define SOUND_MASK_SIDEVOL     (1 << SOUND_MIXER_SIDEVOL)
+
+/* Note! SOUND_MASK_SURRVOL is alias of SOUND_MASK_SIDEVOL */
+#define SOUND_MASK_SURRVOL     (1 << SOUND_MIXER_SIDEVOL)
+
+/* Obsolete macros */
+#define SOUND_MASK_MUTE                (1 << SOUND_MIXER_MUTE)
+#define SOUND_MASK_ENHANCE     (1 << SOUND_MIXER_ENHANCE)
+#define SOUND_MASK_LOUD                (1 << SOUND_MIXER_LOUD)
+
+#define MIXER_READ(dev)                        __SIOR('M', dev, int)
+#define SOUND_MIXER_READ_VOLUME                MIXER_READ(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_READ_BASS          MIXER_READ(SOUND_MIXER_BASS)
+#define SOUND_MIXER_READ_TREBLE                MIXER_READ(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_READ_SYNTH         MIXER_READ(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_READ_PCM           MIXER_READ(SOUND_MIXER_PCM)
+#define SOUND_MIXER_READ_SPEAKER       MIXER_READ(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_READ_LINE          MIXER_READ(SOUND_MIXER_LINE)
+#define SOUND_MIXER_READ_MIC           MIXER_READ(SOUND_MIXER_MIC)
+#define SOUND_MIXER_READ_CD            MIXER_READ(SOUND_MIXER_CD)
+#define SOUND_MIXER_READ_IMIX          MIXER_READ(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_READ_ALTPCM                MIXER_READ(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_READ_RECLEV                MIXER_READ(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_READ_IGAIN         MIXER_READ(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_READ_OGAIN         MIXER_READ(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_READ_LINE1         MIXER_READ(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_READ_LINE2         MIXER_READ(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_READ_LINE3         MIXER_READ(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_READ_MUTE          MIXER_READ(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_READ_ENHANCE       MIXER_READ(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_READ_LOUD          MIXER_READ(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_READ_RECSRC                MIXER_READ(SOUND_MIXER_RECSRC)
+#define SOUND_MIXER_READ_DEVMASK       MIXER_READ(SOUND_MIXER_DEVMASK)
+#define SOUND_MIXER_READ_RECMASK       MIXER_READ(SOUND_MIXER_RECMASK)
+#define SOUND_MIXER_READ_STEREODEVS    MIXER_READ(SOUND_MIXER_STEREODEVS)
+#define SOUND_MIXER_READ_CAPS          MIXER_READ(SOUND_MIXER_CAPS)
+
+#define MIXER_WRITE(dev)               __SIOWR('M', dev, int)
+#define SOUND_MIXER_WRITE_VOLUME       MIXER_WRITE(SOUND_MIXER_VOLUME)
+#define SOUND_MIXER_WRITE_BASS         MIXER_WRITE(SOUND_MIXER_BASS)
+#define SOUND_MIXER_WRITE_TREBLE       MIXER_WRITE(SOUND_MIXER_TREBLE)
+#define SOUND_MIXER_WRITE_SYNTH                MIXER_WRITE(SOUND_MIXER_SYNTH)
+#define SOUND_MIXER_WRITE_PCM          MIXER_WRITE(SOUND_MIXER_PCM)
+#define SOUND_MIXER_WRITE_SPEAKER      MIXER_WRITE(SOUND_MIXER_SPEAKER)
+#define SOUND_MIXER_WRITE_LINE         MIXER_WRITE(SOUND_MIXER_LINE)
+#define SOUND_MIXER_WRITE_MIC          MIXER_WRITE(SOUND_MIXER_MIC)
+#define SOUND_MIXER_WRITE_CD           MIXER_WRITE(SOUND_MIXER_CD)
+#define SOUND_MIXER_WRITE_IMIX         MIXER_WRITE(SOUND_MIXER_IMIX)
+#define SOUND_MIXER_WRITE_ALTPCM       MIXER_WRITE(SOUND_MIXER_ALTPCM)
+#define SOUND_MIXER_WRITE_RECLEV       MIXER_WRITE(SOUND_MIXER_RECLEV)
+#define SOUND_MIXER_WRITE_IGAIN                MIXER_WRITE(SOUND_MIXER_IGAIN)
+#define SOUND_MIXER_WRITE_OGAIN                MIXER_WRITE(SOUND_MIXER_OGAIN)
+#define SOUND_MIXER_WRITE_LINE1                MIXER_WRITE(SOUND_MIXER_LINE1)
+#define SOUND_MIXER_WRITE_LINE2                MIXER_WRITE(SOUND_MIXER_LINE2)
+#define SOUND_MIXER_WRITE_LINE3                MIXER_WRITE(SOUND_MIXER_LINE3)
+
+/* Obsolete macros */
+#define SOUND_MIXER_WRITE_MUTE         MIXER_WRITE(SOUND_MIXER_MUTE)
+#define SOUND_MIXER_WRITE_ENHANCE      MIXER_WRITE(SOUND_MIXER_ENHANCE)
+#define SOUND_MIXER_WRITE_LOUD         MIXER_WRITE(SOUND_MIXER_LOUD)
+
+#define SOUND_MIXER_WRITE_RECSRC       MIXER_WRITE(SOUND_MIXER_RECSRC)
+
+typedef struct mixer_info      /* OBSOLETE */
+{
+  char id[16];
+  char name[32];
+  int modify_counter;
+  int fillers[10];
+} mixer_info;
+
+/* SOUND_MIXER_INFO is obsolete - use SNDCTL_MIXERINFO instead */
+#define SOUND_MIXER_INFO               __SIOR ('M', 101, mixer_info)
+
+/*
+ * Two ioctls for special souncard function (OSS/Free only)
+ */
+#define SOUND_MIXER_AGC  _SIOWR('M', 103, int)
+#define SOUND_MIXER_3DSE  _SIOWR('M', 104, int)
+/*
+ * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers.
+ * These features can be used when accessing device specific features.
+ */
+#define SOUND_MIXER_PRIVATE1           __SIOWR('M', 111, int)
+#define SOUND_MIXER_PRIVATE2           __SIOWR('M', 112, int)
+#define SOUND_MIXER_PRIVATE3           __SIOWR('M', 113, int)
+#define SOUND_MIXER_PRIVATE4           __SIOWR('M', 114, int)
+#define SOUND_MIXER_PRIVATE5           __SIOWR('M', 115, int)
+
+/* The following two controls were never implemented and they should not be used. */
+#define SOUND_MIXER_READ_MAINVOL               __SIOR ('M', 116, int)
+#define SOUND_MIXER_WRITE_MAINVOL              __SIOWR('M', 116, int)
+
+/*
+ * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used
+ * for querying current mixer settings from the driver and for loading
+ * default volume settings _prior_ activating the mixer (loading
+ * doesn't affect current state of the mixer hardware). These calls
+ * are for internal use by the driver software only.
+ */
+
+typedef struct mixer_vol_table
+{
+  int num;                     /* Index to volume table */
+  char name[32];
+  int levels[32];
+} mixer_vol_table;
+
+#define SOUND_MIXER_GETLEVELS          __SIOWR('M', 116, mixer_vol_table)
+#define SOUND_MIXER_SETLEVELS          __SIOWR('M', 117, mixer_vol_table)
+
+#define OSS_GETVERSION                 __SIOR ('M', 118, int)
+
+/*
+ * Calls to set/get the recording gain for the currently active
+ * recording source. These calls automatically map to the right control.
+ * Note that these calls are not supported by all drivers. In this case
+ * the call will return -1 with errno set to EINVAL
+ *
+ * The _MONGAIN work in similar way but set/get the monitoring gain for
+ * the currently selected recording source.
+ */
+#define SOUND_MIXER_READ_RECGAIN       __SIOR ('M', 119, int)
+#define SOUND_MIXER_WRITE_RECGAIN      __SIOWR('M', 119, int)
+#define SOUND_MIXER_READ_MONGAIN       __SIOR ('M', 120, int)
+#define SOUND_MIXER_WRITE_MONGAIN      __SIOWR('M', 120, int)
+
+/* The following call is for driver development time purposes. It's not
+ * present in any released drivers.
+ */
+typedef unsigned char oss_reserved_t[512];
+#define SOUND_MIXER_RESERVED           __SIOWR('M', 121, oss_reserved_t)
+#endif /* ifndef NO_LEGACY_MIXER */
+
+/*
+ *************************************************************************
+ * The "new" mixer API of OSS 4.0 and later.
+ *
+ * This improved mixer API makes it possible to access every possible feature
+ * of every possible device. However you should read the mixer programming
+ * section of the OSS API Developer's Manual. There is no chance that you
+ * could use this interface correctly just by examining this header.
+ */
+
+typedef struct oss_sysinfo
+{
+  char product[32];            /* For example OSS/Free, OSS/Linux or OSS/Solaris */
+  char version[32];            /* For example 4.0a */
+  int versionnum;              /* See OSS_GETVERSION */
+  char options[128];           /* Reserved */
+
+  int numaudios;               /* # of audio/dsp devices */
+  int openedaudio[8];          /* Bit mask telling which audio devices are busy */
+
+  int numsynths;               /* # of availavle synth devices */
+  int nummidis;                        /* # of available MIDI ports */
+  int numtimers;               /* # of available timer devices */
+  int nummixers;               /* # of mixer devices */
+
+  int openedmidi[8];           /* Bit mask telling which midi devices are busy */
+  int numcards;                        /* Number of sound cards in the system */
+  int numaudioengines;         /* Number of audio engines in the system */
+  char license[16];            /* For example "GPL" or "CDDL" */
+  char revision_info[256];     /* For internal use */
+  int filler[172];             /* For future expansion */
+} oss_sysinfo;
+
+typedef struct oss_mixext
+{
+  int dev;                     /* Mixer device number */
+  int ctrl;                    /* Controller number */
+  int type;                    /* Entry type */
+#      define MIXT_DEVROOT      0      /* Device root entry */
+#      define MIXT_GROUP        1      /* Controller group */
+#      define MIXT_ONOFF        2      /* OFF (0) or ON (1) */
+#      define MIXT_ENUM         3      /* Enumerated (0 to maxvalue) */
+#      define MIXT_MONOSLIDER   4      /* Mono slider (0 to 255) */
+#      define MIXT_STEREOSLIDER 5      /* Stereo slider (dual 0 to 255) */
+#      define MIXT_MESSAGE      6      /* (Readable) textual message */
+#      define MIXT_MONOVU       7      /* VU meter value (mono) */
+#      define MIXT_STEREOVU     8      /* VU meter value (stereo) */
+#      define MIXT_MONOPEAK     9      /* VU meter peak value (mono) */
+#      define MIXT_STEREOPEAK  10      /* VU meter peak value (stereo) */
+#      define MIXT_RADIOGROUP  11      /* Radio button group */
+#      define MIXT_MARKER      12      /* Separator between normal and extension entries */
+#      define MIXT_VALUE       13      /* Decimal value entry */
+#      define MIXT_HEXVALUE    14      /* Hexadecimal value entry */
+#      define MIXT_MONODB      15      /* OBSOLETE */
+#      define MIXT_STEREODB    16      /* OBSOLETE */
+#      define MIXT_SLIDER      17      /* Slider (mono) with full (31 bit) postitive integer range */
+#      define MIXT_3D          18
+
+/*
+ * Sliders with range expanded to 15 bits per channel (0-32767)
+ */
+#      define MIXT_MONOSLIDER16        19
+#      define MIXT_STEREOSLIDER16      20
+#      define MIXT_MUTE        21      /* Mute=1, unmute=0 */
+
+  /**************************************************************/
+
+  /* Possible value range (minvalue to maxvalue) */
+  /* Note that maxvalue may also be smaller than minvalue */
+  int maxvalue;
+  int minvalue;
+
+  int flags;
+#      define MIXF_READABLE    0x00000001      /* Has readable value */
+#      define MIXF_WRITEABLE   0x00000002      /* Has writeable value */
+#      define MIXF_POLL        0x00000004      /* May change itself */
+#      define MIXF_HZ          0x00000008      /* Herz scale */
+#      define MIXF_STRING      0x00000010      /* Use dynamic extensions for value */
+#      define MIXF_DYNAMIC     0x00000010      /* Supports dynamic extensions */
+#      define MIXF_OKFAIL      0x00000020      /* Interpret value as 1=OK, 0=FAIL */
+#      define MIXF_FLAT        0x00000040      /* Flat vertical space requirements */
+#      define MIXF_LEGACY      0x00000080      /* Legacy mixer control group */
+#      define MIXF_CENTIBEL    0x00000100      /* Centibel (0.1 dB) step size */
+#      define MIXF_DECIBEL     0x00000200      /* Step size of 1 dB */
+#      define MIXF_MAINVOL     0x00000400      /* Main volume control */
+#      define MIXF_PCMVOL      0x00000800      /* PCM output volume control */
+#      define MIXF_RECVOL      0x00001000      /* PCM recording volume control */
+#      define MIXF_MONVOL      0x00002000      /* Input->output monitor volume */
+#      define MIXF_WIDE        0x00004000      /* Enum control has wide labels */
+#      define MIXF_DESCR       0x00008000      /* Description (tooltip) available */
+  oss_id_t id;                 /* Mnemonic ID (mainly for internal use) */
+  int parent;                  /* Entry# of parent (group) node (-1 if root) */
+
+  int dummy;                   /* Internal use */
+
+  int timestamp;
+
+  char data[64];               /* Misc data (entry type dependent) */
+  unsigned char enum_present[32];      /* Mask of allowed enum values */
+  int control_no;              /* SOUND_MIXER_VOLUME..SOUND_MIXER_MIDI */
+  /* (-1 means not indicated) */
+
+/*
+ * The desc field is reserved for internal purposes of OSS. It should not be 
+ * used by applications.
+ */
+  unsigned int desc;
+#define MIXEXT_SCOPE_MASK                      0x0000003f
+#define MIXEXT_SCOPE_OTHER                     0x00000000
+#define MIXEXT_SCOPE_INPUT                     0x00000001
+#define MIXEXT_SCOPE_OUTPUT                    0x00000002
+#define MIXEXT_SCOPE_MONITOR                   0x00000003
+#define MIXEXT_SCOPE_RECSWITCH                 0x00000004
+
+  char extname[32];
+  int update_counter;
+  int rgbcolor;                /* 0 means default color (not black) . Otherwise 24 bit RGB color */
+  int filler[6];
+} oss_mixext;
+
+/*
+ * Recommended colors to be used in the rgbcolor field. These match the
+ * colors used as the audio jack colors in HD audio motherboards.
+ */
+#define OSS_RGB_BLUE   0x7aabde                /* Light blue */
+#define OSS_RGB_GREEN  0xb3c98c                /* Lime green */
+#define OSS_RGB_PINK   0xe88c99
+#define OSS_RGB_GRAY   0xd1ccc4
+#define OSS_RGB_BLACK  0x2b2926                /* Light black */
+#define OSS_RGB_ORANGE 0xe89e47
+#define OSS_RGB_RED    0xff0000
+#define OSS_RGB_YELLOW 0xffff00
+#define OSS_RGB_PURPLE 0x800080
+#define OSS_RGB_WHITE  0xf8f8ff
+
+typedef struct oss_mixext_root
+{
+  oss_id_t id;
+  char name[48];
+} oss_mixext_root;
+
+typedef struct oss_mixer_value
+{
+  int dev;
+  int ctrl;
+  int value;
+  int flags;                   /* Reserved for future use. Initialize to 0 */
+  int timestamp;               /* Must be set to oss_mixext.timestamp */
+  int filler[8];               /* Reserved for future use. Initialize to 0 */
+} oss_mixer_value;
+
+#define OSS_ENUM_MAXVALUE      255
+#define OSS_ENUM_STRINGSIZE    3000
+typedef struct oss_mixer_enuminfo
+{
+  int dev;
+  int ctrl;
+  int nvalues;
+  int version;                 /* Read the manual */
+  short strindex[OSS_ENUM_MAXVALUE];
+  char strings[OSS_ENUM_STRINGSIZE];
+} oss_mixer_enuminfo;
+
+#define OPEN_READ      PCM_ENABLE_INPUT
+#define OPEN_WRITE     PCM_ENABLE_OUTPUT
+#define OPEN_READWRITE (OPEN_READ|OPEN_WRITE)
+
+typedef struct oss_audioinfo
+{
+  int dev;                     /* Audio device number */
+  oss_devname_t name;
+  int busy;                    /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */
+  int pid;
+  int caps;                    /* PCM_CAP_INPUT, PCM_CAP_OUTPUT */
+  int iformats, oformats;
+  int magic;                   /* Reserved for internal use */
+  oss_cmd_t cmd;               /* Command using the device (if known) */
+  int card_number;
+  int port_number;
+  int mixer_dev;
+  int legacy_device;           /* Obsolete field. Replaced by devnode */
+  int enabled;                 /* 1=enabled, 0=device not ready at this moment */
+  int flags;                   /* For internal use only - no practical meaning */
+  int min_rate, max_rate;      /* Sample rate limits */
+  int min_channels, max_channels;      /* Number of channels supported */
+  int binding;                 /* DSP_BIND_FRONT, etc. 0 means undefined */
+  int rate_source;
+  oss_handle_t handle;
+#define OSS_MAX_SAMPLE_RATES   20      /* Cannot be changed  */
+  unsigned int nrates, rates[OSS_MAX_SAMPLE_RATES];    /* Please read the manual before using these */
+  oss_longname_t song_name;    /* Song name (if given) */
+  oss_label_t label;           /* Device label (if given) */
+  int latency;                 /* In usecs, -1=unknown */
+  oss_devnode_t devnode;       /* Device special file name (absolute path) */
+  int next_play_engine;                /* Read the documentation for more info */
+  int next_rec_engine;         /* Read the documentation for more info */
+  int filler[184];
+} oss_audioinfo;
+
+typedef struct oss_mixerinfo
+{
+  int dev;
+  oss_id_t id;
+  char name[32];               /* oss_devname_t is better, but may break compat */
+  int modify_counter;
+  int card_number;
+  int port_number;
+  oss_handle_t handle;
+  int magic;                   /* Reserved */
+  int enabled;
+  int caps;
+#define MIXER_CAP_VIRTUAL      0x00000001
+#define MIXER_CAP_LAYOUT_B     0x00000002      /* For internal use only */
+#define MIXER_CAP_NARROW       0x00000004      /* Conserve horiz space */
+  int flags;                   /* Reserved */
+  int nrext;
+  /*
+   * The priority field can be used to select the default (motherboard)
+   * mixer device. The mixer with the highest priority is the
+   * most preferred one. -2 or less means that this device cannot be used
+   * as the default mixer.
+   */
+  int priority;
+  oss_devnode_t devnode;       /* Device special file name (absolute path) */
+  int legacy_device;
+  int filler[245];             /* Reserved */
+} oss_mixerinfo;
+
+typedef struct oss_midi_info
+{
+  int dev;                     /* Midi device number */
+  oss_devname_t name;
+  int busy;                    /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */
+  int pid;
+  oss_cmd_t cmd;               /* Command using the device (if known) */
+  int caps;
+#define MIDI_CAP_MPU401                0x00000001      /**** OBSOLETE ****/
+#define MIDI_CAP_INPUT         0x00000002
+#define MIDI_CAP_OUTPUT                0x00000004
+#define MIDI_CAP_INOUT         (MIDI_CAP_INPUT|MIDI_CAP_OUTPUT)
+#define MIDI_CAP_VIRTUAL       0x00000008      /* Pseudo device */
+#define MIDI_CAP_MTCINPUT      0x00000010      /* Supports SNDCTL_MIDI_MTCINPUT */
+#define MIDI_CAP_CLIENT                0x00000020      /* Virtual client side device */
+#define MIDI_CAP_SERVER                0x00000040      /* Virtual server side device */
+#define MIDI_CAP_INTERNAL      0x00000080      /* Internal (synth) device */
+#define MIDI_CAP_EXTERNAL      0x00000100      /* external (MIDI port) device */
+#define MIDI_CAP_PTOP          0x00000200      /* Point to point link to one device */
+#define MIDI_CAP_MTC           0x00000400      /* MTC/SMPTE (control) device */
+  int magic;                   /* Reserved for internal use */
+  int card_number;
+  int port_number;
+  int enabled;                 /* 1=enabled, 0=device not ready at this moment */
+  int flags;                   /* For internal use only - no practical meaning */
+  oss_handle_t handle;
+  oss_longname_t song_name;    /* Song name (if known) */
+  oss_label_t label;           /* Device label (if given) */
+  int latency;                 /* In usecs, -1=unknown */
+  oss_devnode_t devnode;       /* Device special file name (absolute path) */
+  int legacy_device;           /* Legacy device mapping */
+  int filler[235];
+} oss_midi_info;
+
+typedef struct oss_card_info
+{
+  int card;
+  char shortname[16];
+  char longname[128];
+  int flags;
+  char hw_info[400];
+  int intr_count, ack_count;
+  int filler[154];
+} oss_card_info;
+
+#define SNDCTL_SYSINFO         __SIOR ('X', 1, oss_sysinfo)
+#define OSS_SYSINFO            SNDCTL_SYSINFO  /* Old name */
+
+#define SNDCTL_MIX_NRMIX       __SIOR ('X', 2, int)
+#define SNDCTL_MIX_NREXT       __SIOWR('X', 3, int)
+#define SNDCTL_MIX_EXTINFO     __SIOWR('X', 4, oss_mixext)
+#define SNDCTL_MIX_READ                __SIOWR('X', 5, oss_mixer_value)
+#define SNDCTL_MIX_WRITE       __SIOWR('X', 6, oss_mixer_value)
+
+#define SNDCTL_AUDIOINFO       __SIOWR('X', 7, oss_audioinfo)
+#define SNDCTL_MIX_ENUMINFO    __SIOWR('X', 8, oss_mixer_enuminfo)
+#define SNDCTL_MIDIINFO                __SIOWR('X', 9, oss_midi_info)
+#define SNDCTL_MIXERINFO       __SIOWR('X',10, oss_mixerinfo)
+#define SNDCTL_CARDINFO                __SIOWR('X',11, oss_card_info)
+#define SNDCTL_ENGINEINFO      __SIOWR('X',12, oss_audioinfo)
+#define SNDCTL_AUDIOINFO_EX    __SIOWR('X',13, oss_audioinfo)
+
+#define SNDCTL_MIX_DESCRIPTION __SIOWR('X',14, oss_mixer_enuminfo)
+
+/*
+ * SNDCTL_MIX_MATRIX_WRITE and SNDCTL_MIX_MATRIX_READ are private ioctl
+ * calls that each driver can define in whatever way they like. They can
+ * be used _ONLY_ by device specific utilities. Each driver can define
+ * meaning of the fields of oss_mixermatrix_t as they like. This means
+ * that applications using this interface will depend on the specific device.
+ *
+ * This interface can be used for example to implement a (GUI) tool that can 
+ * set the signal routings of an on-board mixer matrix of some high end
+ * audio card. The application (designer) must have complete understanding
+ * of the device to be supported. The application will not be portable to any
+ * other device.
+ *
+ * Applications using this interface must verify that the magic field
+ * returned by SNDCTL_MIXERINFO matches the right device/driver.
+ */
+typedef struct
+{
+       int secret;     /* Initialize this to driver spcified secret value */
+       int source, target;
+       int function;
+       int value;
+       int options[16];
+} oss_mixermatrix_t;
+
+#define SNDCTL_MIX_MATRIX_WRITE        __SIOWR('X',15, oss_mixermatrix_t)
+#define SNDCTL_MIX_MATRIX_READ __SIOWR('X',16, oss_mixermatrix_t)
+
+/* ioctl codes 'X', 200-255 are reserved for internal use */
+
+/*
+ * Few more "globally" available ioctl calls.
+ */
+#define SNDCTL_SETSONG         __SIOW ('Y', 2, oss_longname_t)
+#define SNDCTL_GETSONG         __SIOR ('Y', 2, oss_longname_t)
+#define SNDCTL_SETNAME         __SIOW ('Y', 3, oss_longname_t)
+#define SNDCTL_SETLABEL                __SIOW ('Y', 4, oss_label_t)
+#define SNDCTL_GETLABEL                __SIOR ('Y', 4, oss_label_t)
+/*
+ * The "new" mixer API definitions end here.
+ ***************************************
+ */
+
+/*
+ *********************************************************
+ * Few routines that are included in -lOSSlib
+ *
+ * At this moment this interface is not used. OSSlib contains just
+ * stubs that call the related system calls directly.
+ */
+#ifdef OSSLIB
+extern int osslib_open (const char *path, int flags, int dummy);
+extern void osslib_close (int fd);
+extern int osslib_write (int fd, const void *buf, int count);
+extern int osslib_read (int fd, void *buf, int count);
+extern int osslib_ioctl (int fd, unsigned int request, void *arg);
+#else
+#  define osslib_open  open
+#  define osslib_close close
+#  define osslib_write write
+#  define osslib_read  read
+#  define osslib_ioctl ioctl
+#endif
+
+#if 1
+#define SNDCTL_DSP_NONBLOCK            __SIO  ('P',14) /* Obsolete. Not supported any more */
+#endif
+
+#if 1
+/*
+ * Some obsolete macros that are not part of Open Sound System API.
+ */
+#define SOUND_PCM_READ_RATE             SOUND_PCM_READ_RATE_is_obsolete
+#define SOUND_PCM_READ_BITS             SOUND_PCM_READ_BITS_is_obsolete
+#define SOUND_PCM_READ_CHANNELS         SOUND_PCM_READ_CHANNELS_is_obsolete
+#define SOUND_PCM_WRITE_RATE            SOUND_PCM_WRITE_RATE_is_obsolet_use_SNDCTL_DSP_SPEED_instead
+#define SOUND_PCM_WRITE_CHANNELS        SOUND_PCM_WRITE_CHANNELS_is_obsolete_use_SNDCTL_DSP_CHANNELS_instead
+#define SOUND_PCM_WRITE_BITS            SOUND_PCM_WRITE_BITS_is_obsolete_use_SNDCTL_DSP_SETFMT_instead
+#define SOUND_PCM_POST                  SOUND_PCM_POST_is_obsolete_use_SNDCTL_DSP_POST_instead
+#define SOUND_PCM_RESET                 SOUND_PCM_RESET_is_obsolete_use_SNDCTL_DSP_HALT_instead
+#define SOUND_PCM_SYNC                  SOUND_PCM_SYNC_is_obsolete_use_SNDCTL_DSP_SYNC_instead
+#define SOUND_PCM_SUBDIVIDE             SOUND_PCM_SUBDIVIDE_is_obsolete_use_SNDCTL_DSP_SUBDIVIDE_instead
+#define SOUND_PCM_SETFRAGMENT           SOUND_PCM_SETFRAGMENT_is_obsolete_use_SNDCTL_DSP_SETFRAGMENT_instead
+#define SOUND_PCM_GETFMTS               SOUND_PCM_GETFMTS_is_obsolete_use_SNDCTL_DSP_GETFMTS_instead
+#define SOUND_PCM_SETFMT                SOUND_PCM_SETFMT_is_obsolete_use_SNDCTL_DSP_SETFMT_instead
+#define SOUND_PCM_GETOSPACE             SOUND_PCM_GETOSPACE_is_obsolete_use_SNDCTL_DSP_GETOSPACE_instead
+#define SOUND_PCM_GETISPACE             SOUND_PCM_GETISPACE_is_obsolete_use_SNDCTL_DSP_GETISPACE_instead
+#define SOUND_PCM_NONBLOCK              SOUND_PCM_NONBLOCK_is_obsolete_use_SNDCTL_DSP_NONBLOCK_instead
+#define SOUND_PCM_GETCAPS               SOUND_PCM_GETCAPS_is_obsolete_use_SNDCTL_DSP_GETCAPS_instead
+#define SOUND_PCM_GETTRIGGER            SOUND_PCM_GETTRIGGER_is_obsolete_use_SNDCTL_DSP_GETTRIGGER_instead
+#define SOUND_PCM_SETTRIGGER            SOUND_PCM_SETTRIGGER_is_obsolete_use_SNDCTL_DSP_SETTRIGGER_instead
+#define SOUND_PCM_SETSYNCRO             SOUND_PCM_SETSYNCRO_is_obsolete_use_SNDCTL_DSP_SETSYNCRO_instead
+#define SOUND_PCM_GETIPTR               SOUND_PCM_GETIPTR_is_obsolete_use_SNDCTL_DSP_GETIPTR_instead
+#define SOUND_PCM_GETOPTR               SOUND_PCM_GETOPTR_is_obsolete_use_SNDCTL_DSP_GETOPTR_instead
+#define SOUND_PCM_MAPINBUF              SOUND_PCM_MAPINBUF_is_obsolete_use_SNDCTL_DSP_MAPINBUF_instead
+#define SOUND_PCM_MAPOUTBUF             SOUND_PCM_MAPOUTBUF_is_obsolete_use_SNDCTL_DSP_MAPOUTBUF_instead
+#endif
+
+#endif
diff --git a/man/man1/ossinfo.1 b/man/man1/ossinfo.1
new file mode 100644 (file)
index 0000000..699820b
--- /dev/null
@@ -0,0 +1,33 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "User Commands"
+.SH NAME
+ossinfo - Open Sound System information/status program
+
+.SH SYNOPSIS
+ossinfo [-Aaeghmpx] [-v #]
+
+.SH DESCRIPTION
+The ossinfo program displays OSS device information.
+
+.SH OPTIONS
+-v#            Verbose output. Number indicates level of verobisity (0-9).
+-p             Display only physical audio/midi devices
+-g             Display ALL audio/midi/mixer devices (physical and virtual)
+-a             Display audio device files
+-A             Display audio device files (for applications using O_EXCL)
+-e             Display all audio engines
+-m             Display only the MIDI devices
+-x             Display only the mixer devices
+-h             Display help.
+
+.SH FILES
+/usr/bin/ossinfo
+
+.SH SEE ALSO
+ossdevlinks(1), ossmix(1), ossxmix(1)
+The Getting information about devices section of the OSS Programmer's Guide
+(device_discovery(2)) gives instructions for getting device information
+in applications.
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/ossmix.1 b/man/man1/ossmix.1
new file mode 100644 (file)
index 0000000..37c36a4
--- /dev/null
@@ -0,0 +1,133 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "User Commands"
+.SH NAME
+ossmix - Open Sound System command-line mixer program.
+
+.SH SYNOPSIS
+ossmix [-d <dev#>] [-chqD] [control name] [value]
+
+.SH DESCRIPTION
+ossmix is a simple command-line mixer utility that is used to display the mixer
+settings of physical and virtual audio devices. OSS version 4 has an extended
+mixer API which supports some device specific features that may not available
+using other mixer applications. 
+
+.SH OPTIOMS
+-D             Display device information.
+-c             Dump mixer settings for all mixers.
+-h             Display usage information.
+-q             Quiet mode.
+-v[1|2]                Verbose mode. -v2 prints more detailed infoamation than -v1.
+ctrl# value    Change value of a mixer control.
+<no arg>       Display current/possible settings.
+
+.SH USAGE
+ossmix without any arguments displays the current settings of the
+default mixer device (usually the motherboard sound chip). This
+printout can also be used to find out the supported control names and
+their possible values. Currently all controls accept an ON/OFF value, a
+mono value (0 to 100) or a stereo value (left:right where both channel
+volumes can be between 0 and 100). The value can also be expressed in a
+relative form (e.g. +1 to add 1 to the previous volume).
+The following is a sample printout produced by ossmix:
+
+       Selected mixer 0/Creative AudioPCI
+       Known controls are:
+       vol <both/leftvol>[:<rightvol>] (currently 50:50)
+       pcm <both/leftvol>[:<rightvol>] (currently 50:50)
+       speaker <monovol> (currently 21)
+       line <both/leftvol>[:<rightvol>] (currently 32:32)
+       line.rec ON|OFF (currently OFF)
+       mic <monovol> (currently 16)
+       mic.rec ON|OFF (currently ON)
+       cd <both/leftvol>[:<rightvol>] (currently 100:100)
+       cd.rec ON|OFF (currently OFF)
+       pcm2 <both/leftvol>[:<rightvol>] (currently 75:75)
+       line1 <both/leftvol>[:<rightvol>] (currently 32:32)
+       line1.rec ON|OFF (currently OFF)
+       line2 <monovol> (currently 32)
+       line2.rec ON|OFF (currently OFF)
+       line3 <monovol> (currently 0)
+       line3.rec ON|OFF (currently OFF)
+       mic.micboost ON|OFF (currently ON)
+       mic.micbias ON|OFF (currently ON)
+       mute.pcmmute ON|OFF (currently OFF)
+       mute.pcm2mute ON|OFF (currently OFF)
+       mute.micmute ON|OFF (currently OFF)
+       mute.cdmute ON|OFF (currently OFF)
+       mute.linemute ON|OFF (currently OFF)
+       mute.line1mute ON|OFF (currently OFF)
+       mute.line2mute ON|OFF (currently OFF)
+       mute.line3mute ON|OFF (currently OFF)
+
+.SH SELECTING MIXER DEVICE
+It's possible to select the mixer device by using the -d<mixernumber>
+command line argument. This argument (when used) should be the first one
+on the command line. By default the mixer number 0 will be accessed.
+To find the available mixer devices, type ossinfo -x and look
+under the Mixers heading for available mixer devices. 
+
+.SH CHANGING MIXER SETTINGS
+Changing the values is done just like with the original "mixer" applet.
+For example:
+
+       ossmix pcm 50:60
+
+The above sets the pcm control (audio playback volume) so that the left
+channel volume is 50 and the right channel volume is 60. With just
+"ossmix pcm 50" the both channel volumes will be set to 50.
+
+In addition to the old mixer there are now some (usually ON/OFF) settings.
+These settings are device specific and don't work with all soundcards.
+The easiest way to find them out is to start ossmix without command line
+arguments (other than -d#).
+
+Some control names contain a dot ("."). This dot is required when changing
+the value. For example: "ossmix -d0 mic.micboost ON".
+
+."USING OSSMIX WITH A MIDI CONTROLLED MIXER
+."The ossmix program has capability to listen MIDI main volume controller
+."messages from a MIDI port. You can assign a ossmix control to each MIDI
+."channel. After receiving a channel main volume change message ossmix will then
+."change the mixer level of the volume control assigned to the channel. In this
+."mode ossmix will not exit (you need to kill it manually).
+."
+."This mode is very useful if you need to make several rapid mixer changes
+."simultaneously.
+."
+."To use this mode you need to give the MIDI device file and a list of the
+."volume sliders on command line. For example:
+."
+."    ossmix -d1 -m/dev/midi00 vol mic pcm line gain.out1/2 gain.in3/4
+."
+."After that the MIDI channels will be assigned in the following way:
+."
+."    Ch 0 = "vol"
+."    Ch 1 = "mic"
+."    Ch 2 = "pcm"
+."    Ch 3 = "line"
+."    Ch 4 = "gain.out1/2"
+."    Ch 5 = "gain.in3/4"
+."
+."Other MIDI channels (6 to 15) will be ignored.
+."
+."Only mono and stereo slider type controls can be assigned to MIDI channels.
+."Both stereo channels will be set to the same volume (there is no balance 
+."support).
+."
+."After starting ossmix you should move the sliders on the external fader box
+."so that ossmix can figure out their current settings.
+."
+."At this moment only MIDI fader boxes that send only main volume change messages
+."are supported (any other MIDI data will make ossmix to behave incorrectly).
+."For example the FM3 MIDI Mixer (AKA "FaderBaby") by JLCooper is compatible
+."with ossmix.
+."
+.SH FILES
+/usr/bin/ossmix
+
+.SH SEE ALSO
+ossdevlinks(1), ossxmix(1), savemixer(1)
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/ossplay.1 b/man/man1/ossplay.1
new file mode 100644 (file)
index 0000000..02d7677
--- /dev/null
@@ -0,0 +1,55 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "User Commands"
+.SH NAME
+ossplay - Open Sound System playback program.
+
+.SH SYNOPSIS
+ossplay [-FRhlvq] [-S secs ] [ -c channels ] [ -d devname ]
+       [ -f fmtname | ? ] [ -g gain ] [ -o playtarget | ? ]
+       [ -s rate ] filename | - ...
+
+.SH DESCRIPTION
+ossplay plays raw PCM, Microsoft RIFF (.wav), Sun ULaw (.au), Mac AIFF (.aif)
+and other types of audio files. By default the application will try to
+determine the audio file's format and play audio based on the stored
+inforation about sample format, number of channels and sampling rate.
+
+.SH OPTIONS
+-v             Verbose output. Multiple invocations increase the level
+               of verbosity.
+-q             Quiet (no information printed).
+-l             Loop playback indefinately.
+-d<devname>    Select <devname> as the device (eg -d/dev/dsp2).
+-s<rate>       Select the playback rate for raw PCM audio (eg -s48000).
+-c<channels    Select the number of channels 1=mono 2=stereo, 4, 6, 8, etc.
+-f<fmtname>    Select the input format (eg -fU8 or -fS16_BE).
+-f?            Prints the list of supported format names.
+-o<playtarget>         Selects the play target name if the device supports multiple
+               play targets (such as front, rear, side). 
+-o?            Prints the list of available play targets.
+-g<gain>       Amplify all played samples by percentage given as argument. 
+               100 (default) means normal signal level, 200 means double level.
+-F             Treat all input as raw PCM data.
+-R             Disable redirection to virtual mixer engines and sample
+               rate/format conversions. Should not be used unless absolutely
+               necessary.
+-S<secs>       Start playing at <secs> seconds from start of file.
+               The argument can contain a fractional part (e.g. -S1.2)
+-h             Display usage information.
+
+.SH INTERRUPT
+Sending a SIGQUIT (Ctrl-\\ in most terminals) will make ossplay stop playing
+the currently played file and skip to the next file.
+
+.SH NOTES
+The ossplay executable is the same as the ossrecord executable.
+Behaviour is decided by the name used to invoke the program.
+
+.SH SEE ALSO
+ossrecord(1), ossmix(1), ossxmix(1)
+
+.SH FILES
+/usr/bin/ossplay
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/ossrecord.1 b/man/man1/ossrecord.1
new file mode 100644 (file)
index 0000000..7f1ed23
--- /dev/null
@@ -0,0 +1,103 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "User Commands"
+.SH NAME
+ossrecord - Open Sound System recording program.
+
+.SH USAGE
+ossrecord [options] filename
+
+.SH DESCRIPTION
+The ossrecord program records audio in Microsoft RIFF (wav) format. It
+will record from any input that's currently set as the recording source
+by the ossxmix/ossmix mixer programs. With the -l option, you also get
+a level meter that will display VU levels in a character mode.
+
+The filename parameter is name of the (.wav) file to be produced. Output can be
+sent to stdout by giving - as the file name.
+
+.SH OPTIONS
+-s<rate>       Select the recording rate for raw PCM audio (eg -s48000).
+-c<channels>   Select the number of channels 1=mono 2=stereo, 4, 6, 8, etc. 
+-d<devname>    Select <devname> as the device (eg -d/dev/dsp2).
+-f<fmt>                Select the output sample format (eg -fS32_LE or -fMU_LAW)
+-f?            Prints the list of supported format names.
+-F<cnt>                Select the container format (eg WAV or AU). Default is WAV.
+-F?            Prints the list of supported container formats.
+-R             Open audio device in raw mode to disable virtual mixing and
+               sample rate/format conversions. Can be used when recording
+               from a digital source (S/PDIF input).
+-v             Verbose output.
+-l             Display level meters (character based).
+-i<recsrc|?>   Select the recording source or display available recording 
+               sources if '?' is supplied.
+               e.g. ossrecord -i? may display:
+                               vol
+                               line (currently selected)
+                               mic
+                               cd
+                               aux1
+                               phone
+                               mono
+                               video
+-m<nfiles>     Repeat the recording operation <nfiles> times. The filename
+               argument must have %d (or %02d) somewhere in the file to
+               guarantee unique filenames. If no %d is given then subsequent
+               recordings will overwrite the previous one(s). This option is
+               useful only with loopback audio devices or if the -t option
+               is used.
+-r<command>    This option launches the <command> in background after 
+               recording the file has completed. The name of the recorded file
+               will be given as the (only) command line argument. When the -m 
+               option is used the script will run in parallel while recording
+               the next file. See the COMMAND SCRIPT section (below) for more
+               info.
+-g<gain>       Amplify recorded samples by percentage given as argument.
+               100 (default) means normal signal level, 200 means double level.
+               Only supported in 16 and 32 bit modes.
+-t<maxsecs>    Do not record more than <maxsecs> seconds in a single recording
+               operation.
+-L<level>      Set the recording level to <level>.
+-O             Allow overwriting of file when recording.
+-h             Display usage instructions.
+
+.SH COMMAND SCRIPT
+               The -r command line argument makes it possible to execute a
+               script or program after recording of the wave file is finished.
+               Below is a simple scell script that does MP3 encoding using
+               lame.
+
+#!/bin/sh
+
+WAVENAME=$1
+
+MP3NAME=$1.mp3
+
+lame -m s -h --preset studio $WAVENAME $MP3NAME
+
+exit 0
+
+Another example script for ossrecord is a simple CGI script for live MP3
+streaming (from /dev/dsp).
+
+#!/bin/sh
+
+echo Content-Type: audio/mp3
+
+echo
+
+ossrecord -S -b16 -s48 - | lame -m j - -
+
+exit 0
+
+.SH NOTES
+The ossrecord executable is the same as the ossplay executable.
+Behaviour is decided by the name used to invoke the program.
+
+.SH SEE ALSO
+ossplay(1), ossmix(1), ossxmix(1)
+
+.SH FILES
+/usr/bin/ossrecord
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/osstest.1 b/man/man1/osstest.1
new file mode 100644 (file)
index 0000000..bcfdbf9
--- /dev/null
@@ -0,0 +1,92 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "User Commands"
+.SH NAME
+osstest - Open Sound System audio self test applet.
+
+.SH DESCRIPTION
+The osstest applet is a simple test application that can be used to test 
+functionality of the sound hardware installed in the system.
+
+osstest performs a playback test for each installed audio device. If there
+are any "machine detectable" problems they will be reported. You will first
+hear an audio sample played on the left speaker, then the right speaker and
+finally in stereo on both speakers.
+
+It's user's responsibility to listen if the test sound is audible. If no
+sound output can be heard the possible reason is one of the following:
+
+1. An error was reported by osstest. In this case there will usually not be
+any sound output. The error needs to be fixed before running osstest
+again.
+2. There is no headphones or speakers connected. Or the connection is not
+made correctly.
+3. The mixer volume level is set to a too low value. By default it should
+be OK. The mixer level can be adjusted using the mixer, ossmix and ossxmix
+utilities distributed with OSS.
+4. Some notebooks have nonstandard volume control and/or speaker selection
+hardware that is not supported by OSS. It's very likely that OSS doesn't
+support such vendor specific additions.
+
+If no errors were reported and the test sound was audible it means that
+OSS and your sound hardware is functioning correctly. If you still encounter
+problems with some sound applications the reason is almost certainly in
+the application. Check it's configuration or try to use another equivivalent
+application. 
+
+If you are having problems with JDS, KDE and/or Gnome system sounds, you need
+to make sure that OSS gets started before the GUI environment. Refer to your
+operating system's startup procedures.
+
+.SH  SAMPLE RATE DRIFT
+
+The osstest utility measures a sample rate drift value after playing
+back the test sound. Ideally it should be 0% but in practice there
+will be an error of few percents. 0% means that the 48000 Hz test file
+was played exactly at 48000 Hz sampling rate.
+
+The sample rate measurement is based on the system timer which has limited
+precision. It's likely that less than 1% differenc between the nominal and 
+the measured sampling rates are actually caused by an error in the measurement.
+For this reason the drift reported by osstest should not be used as any kind of
+quality measurement. However if the drift is very large it means that there is
+something wrong in the system. The oscillator chip used with the sound chip is
+broken or the system clock is running at a wrong speed.
+
+.SH  USING OSSTEST MANUALLY
+
+The osstest utility is located in the /usr/bin directory. It can be run 
+manually to test functionality of OSS and your sound hardware. When invoked 
+without any command line parameters osstest performs the default test on all 
+devices. However it will skip some of the devices base on the following rules.
+
+.IP \(bu 3
+It is possible to test just one of the available audio devices by giving
+its number on command line (for example osstest 1). Use the device index
+numbers reported by "ossinfo -a".
+.IP \(bu 3
+Use the -l command line option to loop the test infinitely.
+.IP \(bu 3
+Virtual mixer devices will not be tested. Use the -V command line option to
+force test of virtual devices.
+.IP \(bu 3
+The actual (physical) audio devices will be tested directly (bypassing
+virtual mixer). If you want to test playback through vmix then use the
+-V option.
+.IP \(bu 3
+Multiple device files related with the same physical device will not
+be tested. Only the first one gets tested while the remaining ones will be
+skipped. At this moment there is no way to force osstest to test this kind of
+devices.
+.IP \(bu 3
+Only stereo devices will be tested. Future versions of osstest will be
+able to test mono and multi channel devices too. Also osstest requires that
+the device supports the 16 bit signed format and 48kHz sampling rate.
+
+.SH FILES
+/usr/bin/osstest
+
+.SH SEE ALSO
+savemixer(1)
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/soundoff.1 b/man/man1/soundoff.1
new file mode 100644 (file)
index 0000000..56a5ad6
--- /dev/null
@@ -0,0 +1,38 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "OSS System Administration Commands"
+.SH NAME
+soundoff - Stop Open Sound System
+
+.SH DESCRIPTION
+
+The soundoff command can be used to stop Open Sound System and to unload the
+kernel modules related with it.
+
+There are no command line arguments. Only the super user (root) can use this
+command.
+
+Open Sound System can be loaded by executing the soundon command.
+
+.SH SAVING THE MIXER AND CONTROL PANEL SETTINGS AUTOMATICALLY
+
+By default soundoff will save the current mixer and control panel settings
+automatically each time soundoff is executed. The saved settings will be 
+restored automatically when soundon is executed next time.
+
+This automatic save feature can be disabled by editing /usr/lib/oss/etc/userdefs
+and by changing the line containing "autosave_mixer yes" to
+"autosave_mixer no". After this the mixer settings will only be saved when
+the savemixer command is executed (by super user).
+
+.SH FILES
+/usr/lib/oss/etc/userdefs
+/usr/sbin/soundoff
+/usr/lib/oss/etc/installed_drivers.
+
+.SH SEE ALSO
+soundon(1)
+ossdetect(1)
+ossdevlinks(1)
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man1/soundon.1 b/man/man1/soundon.1
new file mode 100644 (file)
index 0000000..258b15f
--- /dev/null
@@ -0,0 +1,28 @@
+." Automatically generated text
+.TH 1 "August 31, 2006" "OSS" "OSS System Administration Commands"
+.SH NAME
+soundon - Start Open Sound System
+
+.SH DESCRIPTION
+
+The soundon command is used to load the OSS core module (osscore) and the
+low level drivers for the sound devices detected in ths system (by ossdetect).
+The list of low level sound device drivers to load is located in
+/usr/lib/oss/etc/installed_drivers which is maintained by the ossdetect command.
+
+There are no command line arguments. Only the super user (root) can use this
+command.
+
+Open Sound System can be unloaded by executing the soundoff command.
+
+.SH FILES
+/usr/sbin/soundon
+/usr/lib/oss/etc/installed_drivers.
+
+.SH SEE ALSO
+soundoff(1)
+ossdetect(1)
+ossdevlinks(1)
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_atiaudio.7 b/man/man7/oss_atiaudio.7
new file mode 100644 (file)
index 0000000..dd5f1ab
--- /dev/null
@@ -0,0 +1,21 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_atiaudio - ATI IXP southbridge audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for ATI IXP 150/200/250 audio controller
+ATI IXP device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4ch/5.1ch playback
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_atiaudio.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_audigyls.7 b/man/man7/oss_audigyls.7
new file mode 100644 (file)
index 0000000..1bf8768
--- /dev/null
@@ -0,0 +1,51 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_audigyls - Creative Labs CA106 (AudigyLS/SBLive 24bit) driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Creative Labs Audigy2-LS and SBLive 24bit 7.1 
+soundcards.
+
+Audigy-LS device characteristics:
+       o 8/16/24 bit playback/record
+       o mono/stereo/4/5.1 playback
+       o 8KHz to 192Khz sample rate.
+
+.SH  AUDIGYLS MODELS
+
+There are 2 models of the AudigyLS device: one with an AC97 codec called the
+AudigyLS and the one without called the SBLive 7.1. Essentially they are
+the same chip but behave a bit differently. 
+
+When playing AC3 on the AudigyLS (the one with the AC97 mixer) - you
+need to ensure that the igain slider is set to 0. 
+
+.SH  AUDIGYLS MIXER
+
+.IP \(bu 3
+The AudigyLS has 4 mixer controls for each channel.
+.IP \(bu 3
+The "spread" button will simply duplicate the front audio on the other 3 
+ channels so that every speaker is playing what the front L/R is playing.
+.IP \(bu 3
+LoopBack recording allows you to capture any channel that's playing audio.
+.IP \(bu 3
+Record Volume slider just adjusts the input gain.
+.IP \(bu 3
+Record Source selector selects the input.
+
+.SH OPTIONS
+.IP \(bu 3
+audigyls_spdif_enable=0|1
+The Audigy LS has a versa-jack (orange) that can be set as SPDIF output
+or the Side-Surround left/right speakers in a 7.1 setup.
+When set as SPDIF, you can get play PCM/AC3 audio to a Dolby(R) capable 
+receiver.
+
+.SH FILES
+/usr/lib/oss/conf/oss_audigyls.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_audiopci.7 b/man/man7/oss_audiopci.7
new file mode 100644 (file)
index 0000000..f1ac4aa
--- /dev/null
@@ -0,0 +1,22 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_audiopci - Creative/Ensoniq Audiopci - ES1370 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Creative AudioPCI ES1370 (also sold as SBPCI128)
+audio controllers
+
+ES1370 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_audiopci.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_cmi878x.7 b/man/man7/oss_cmi878x.7
new file mode 100644 (file)
index 0000000..689f8d8
--- /dev/null
@@ -0,0 +1,60 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_cmi878x - CMedia CMI8788 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for CMedia Electronics CMI8788 audio
+
+CMI87xx device characteristics:
+       o 8/16/24/32 bit playback/record
+       o mono/stereo/4ch/5.1/7.1 playback
+       o 8KHz to 192Khz sample rate.
+
+The CMedia 8788 device provides 3 types of devices. The first devices is
+a Multichannel full duplex device. The second device provides Front Panel
+audio access and the SPDIF device provide SPDIF (Digital) audio I/O.
+
+.SH  MIXER PANEL
+The CMedia chip provides some unique features that are set up
+by the Mixer chip. There are 3 mixer devices presented to the user.
+
+Main Mixer Panel (/dev/mixer0)
+
+.IP \(bu 3
+Master Mixer panel is for controlling output volumes for each of the 8
+channels. 
+
+.IP \(bu 3
+Monitor buttons will allow you to monitor the input from the Rear Panel 
+inputs, Front Panel Inputs and SPDIF IN.
+
+.IP \(bu 3
+Speaker-Spread function duplicates the front channel output on all 8
+speakers. 
+
+.IP \(bu 3
+SPDIF Loopback simply takes SPDIF Input and Plays it out the SPDIF Output.
+panel.
+
+
+AC97 Input Mixer Panel (/dev/mixer1)
+This mixer panel is used to switch between the various inputs like line-in,
+mic, cd. When the Rear Panel Monitor button is check marked in the Main
+mixer panel, the IGAIN slider in this panel controls the level of the input
+that can be hear on the speakers.
+
+
+AC97 Front Panel Mixer (/dev/mixer2)
+This mixer controls the front panel ac97 device. It can be used to control
+all the volumes and inputs as well as SPDIF output on the front panel device.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_cmi878x.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_cmpci.7 b/man/man7/oss_cmpci.7
new file mode 100644 (file)
index 0000000..860673a
--- /dev/null
@@ -0,0 +1,63 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_cmpci - CMedia CMI8738/8768 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for CMedia Electronics CMI8738/8768 audio
+
+CMI87xx device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4ch/5.1ch playback
+       o 8KHz to 48Khz sample rate.
+
+.SH  MIXER PANEL
+The CMedia chip provides some unique features that are set up
+by the Mixer chip. Running ossxmix will display the CMI8738 mixer
+panel.
+
+Most of the sliders and buttons are self evident. However there
+are some options that need explaining:
+
+Dual Dac: Enabling this button sets the CMPCI device as two
+separate output devices with /dev/dsp1 audio going to the front and
+/dev/dsp0 going to the rear outputs. Separate audio streams can
+be send to the device simultaneously.
+
+Speaker Mode: The audio can be sent just to the front speakers or
+it can be sent simultaneously to all speakers in the "Spread" mode.
+
+AC3 passthrough only works on Models 037 and higher. This is because of
+a hardware bug in the earlier models so check the model number
+(ossinfo -a).
+
+SPDIF:
+
+.IP \(bu 3
+Enable will enable SPDIF output.
+
+.IP \(bu 3
+Rec will allow you to record from the SPDIF device. Note that when
+you have SPDIF recording enabled, you cannot play 4/6 channel audio.
+
+.IP \(bu 3
+Polarity - certain models require you to flip the bit otherwise you
+ get distorted audio.
+
+.IP \(bu 3
+IMon - monitor input via SPDIF in.
+
+.IP \(bu 3
+Optical - sets the SPDIF to Optical (TOSLINK) or RCA Jacks interface.
+
+
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_cmpci.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_cs4281.7 b/man/man7/oss_cs4281.7
new file mode 100644 (file)
index 0000000..a6fde42
--- /dev/null
@@ -0,0 +1,23 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_cs4281 - Cirrus Logic CS4281 driver
+
+.SH DESCRIPTION
+Open Sound System driver for Cirrus Logic (Crystal Semicoductor) CS4281 audio
+controller.
+
+CS4281 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_cs4281.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_cs461x.7 b/man/man7/oss_cs461x.7
new file mode 100644 (file)
index 0000000..2d1ee20
--- /dev/null
@@ -0,0 +1,27 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_cs461x - Cirrus Logic CS461x/CS4280 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Crystal Semiconductor (Cirrus Logic) CS4280 and
+461x, audio controllers.
+
+CS4280 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+.IP \(bu 3
+cs461x_clk_run_fix=0|1 (feature not used anylonger)
+Certain IBM Thinkpads required the CLK_RUN bit flipped in order to wake up
+the audio device. 
+
+
+.SH FILES
+/usr/lib/oss/conf/oss_cs461x.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_digi96.7 b/man/man7/oss_digi96.7
new file mode 100644 (file)
index 0000000..eb4db2d
--- /dev/null
@@ -0,0 +1,72 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_digi96 - RME Digi96 professional audio driver.
+
+.SH DESCRIPTION
+Audio driver for the RME Digi96 family of profressional audio controllers.
+- Only 16 and 24/32 bit audio formats are supported.
+- All Digi96 family members support 32kHz, 44.1kHz, 48kHz, 64kHz, 88.2kHz and
+96kHz. sampling rates.
+
+
+.SH MIXER PANEL
+
+Note! For recording you need to set digi96.sync to INTERNAL and the values
+     of digi96.mode and digi96.input to match your studio setup. Otherwise
+     recordings will fail with I/O error.
+
+There are several settings that can be changed using the ossmix program
+shipped with OSS. Note that some features don't work with all Digi96
+family members. For example ADAT mode is not supported by the base
+model.
+
+.IP \(bu 3
+digi96.mode <SPDIF|AESEBU|ADAT>:
+This setting controls the output mode which can be S/PDIF (consumer),
+AES/EBU (professional) or ADAT. The input mode is detected automatically.
+If ADAT input is detected the output mode will be switched to ADAT
+automatically (this doesn't work in the other direction).
+
+.IP \(bu 3
+digi96.sync <EXTERNAL|INTERNAL>:
+This setting tells if the playback sampling rate is based on the internal
+oscillator or the sample rate detected in the input port. See also the
+definition of the digi96.worldclk setting.
+
+.IP \(bu 3
+digi96.input <OPTICAL|COAXIAL|INTERNAL|XLR>: Selects the active input.
+
+.IP \(bu 3
+digi96.sel <BYPASS|NORMAL>: 
+When set to BYPASS the input signal will be routed directly to the
+output (also sets digi96.sync automatically to EXTERNAL). In this mode
+audio data written to /dev/dsp will be muted.
+
+.IP \(bu 3
+digi96.worldclk ON|OFF:
+Setting this control to ON will enable the optional worldclock input as
+the sample rate source (overrides the digi96.sync setting).
+
+.IP \(bu 3
+digi96.emph ON|OFF:
+Enables/disables the de-emphasis option on the analog (monitor) output
+connector.
+
+.IP \(bu 3
+digi96.data <AUDIO|AC3>:
+Specifies if the output signal is audio or AC3 data (sets the non-audio
+bit in the channel status data).
+
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_digi96.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
+
+
diff --git a/man/man7/oss_emu10k1x.7 b/man/man7/oss_emu10k1x.7
new file mode 100644 (file)
index 0000000..be4fdb8
--- /dev/null
@@ -0,0 +1,30 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_emu10k1x - Creative Labs P16x (EMU10K1X) driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Creative Labs SBLive 5.1 Dell OEM version
+soundcards. The device has a chipset called the EMU10K1X and is not the same
+as the SBLive EMU10K1/EMU10K2 audio processors found in the SBLive! and Audigy
+soundcards.
+
+EMU10K1X device characteristics:
+       o 8/16/24 bit playback/record
+       o mono/stereo/4/5.1 playback
+       o 8KHz to 192Khz sample rate.
+
+.SH OPTIONS
+.IP \(bu 3
+emu10k1x_spdif_enable=<0|1>
+The EMU10K1X has a versa-jack (orange) that can be set as SPDIF output
+or the Side-Surround left/right speakers in a 5.1 setup.
+When set as SPDIF, you can get play PCM/AC3 audio to a Dolby(R) capable 
+receiver.
+
+.SH FILES
+/usr/lib/oss/conf/oss_emu10k1x.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_envy24.7 b/man/man7/oss_envy24.7
new file mode 100644 (file)
index 0000000..b99fd01
--- /dev/null
@@ -0,0 +1,358 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_envy24 - ICE Envy24 audio device driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Envy24 based audio cards such as the
+M-Audio Delta Series, Terratec EWS88 Series, Hoontech DSP24.
+
+ENVY24 device characteristics:
+
+.IP \(bu 3
+8/16 bit playback/record
+.IP \(bu 3
+mono/stereo/4ch/5.1ch/7.1ch playback
+.IP \(bu 3
+mono/sterero recording 
+.IP \(bu 3
+8KHz to 192Khz sample rate.
+
+ENVY24 AUDIO DEVICES
+
+       Audio devices:
+       0: M Audio Delta 1010 out1/2
+       1: M Audio Delta 1010 out3/4
+       2: M Audio Delta 1010 out5/6
+       3: M Audio Delta 1010 out7/8
+       4: M Audio Delta 1010 S/PDIF out
+       5: M Audio Delta 1010 in1/2
+       6: M Audio Delta 1010 in3/4
+       7: M Audio Delta 1010 in5/6
+       8: M Audio Delta 1010 in7/8
+       9: M Audio Delta 1010 S/PDIF in
+       10: M Audio Delta 1010 input from mon. mixer
+       11: M Audio Delta 1010 (all outputs)
+       12: M Audio Delta 1010 (all inputs)
+
+       Synth devices:
+
+       Midi devices:
+       0: M Audio Delta 1010
+
+       Timers:
+       0: System clock
+
+       Mixers:
+       0: M Audio Delta 1010
+
+
+The actual /dev/dsp# numbers may be different on your system. Check the right
+ones by looking at the output procuced by "ossinfo -a" command. With the
+above configuration you can use /dev/dsp0 to /dev/dsp4 for playback of stereo
+streams. If you play mono files the signal will be output only from the left
+channel. /dev/dsp0 to /dev/dsp3 are connected to the analog outputs while
+/dev/dsp4 is the S/PDIF output. 
+
+The /dev/dsp5 to /dev/dsp10 device files can be used for recording. /dev/dsp5
+to /dev/dsp8 are the analog inputs. /dev/dsp11 and /dev/dsp12 are raw 
+input/output device files. They will be described in detail in the "Raw I/O
+devices" section below.
+
+It's also possible to make OSS to create individual device files for every
+channel this creates twice as many device files than the default setting. To
+do this just append envy24_skipdevs=1 to the oss_envy24.conf file. This is useful
+only if you are working on mono rather than stereo signals. However please
+note that setting envy24_skipdevs=1 does _NOT_ lock the device files to one 
+channel mode, the application can still set them to stereo or multi channel 
+mode if it likes.
+
+It is possible to set all device files to mono only mode by setting 
+envy24_skipdevs=1 and envy24_force_mono=1. However this mode disables stereo 
+and multi channel usage for all devices so in general it should not be used.
+.SH  
+By default the driver will create output devices before the input ones. By 
+setting envy24_swapdevs=1 in oss_envy24.conf you can ask OSS to create the device
+files in opposite order i.e. input device files before the output ones. This
+may be useful when using RealProducer.
+
+As a workaround to a bug in RealProducer you also need to create some dummy
+mixer devices by defining envy24_realencoder_hack=1 in oss_envy24.conf. Without
+these extra mixer devices RealProducer will not be able to access other than 
+the first input device.
+
+
+.SH  DEVICE MANAGEMENT
+
+By default OSS creates a large number of device files for each envy24 card. 
+This may be a problem when multiple cards need to be used in the same system. 
+Adding the envy24_devmask option to oss_envy24.conf should help
+in most cases because it removes the devices that are actually not needed in 
+the system.
+
+The envy24_devmask number is the SUM of the following values:
+
+       1: Create primary (analog/ADAT/TDIF) outputs.
+       2: Create primary (analog/ADAT/TDIF) inputs.
+       4: Create S/PDIF outputs.
+       8: Create S/PDIF inputs.
+       16: Create monitor input device.
+       32: Create the raw input and output devices.
+
+For example envy24_devmask=12 (4+8) creates only the S/PDIF devices.
+To enable all possible (current or future) device files set envy24_devmask
+to 65535 (default).
+
+If possible make your application to open the right device file 
+(/dev/dsp0 to /dev/dsp10) explicitly. It's also possible to use the 
+default devicefile (/dev/dsp) since OSS now supports automatic device
+allocation (it opens the first available input or output devicefile 
+depending on the open mode).
+
+The channel allocation mechanism between device files is very flexible.
+Even there is a device file for every stereo pair (or a mono channel) 
+it's possible to use any of the device file to access multiple channels.
+For example an application can open /dev/dsp0 and set the number of 
+channels to 10. In this way the application can play all 10 channels 
+(or any number between 1 and 10) simultaneously (the samples will be 
+interleaved).
+
+There is simple automatic syncstart feature when using multiple 
+applications at the same time. Playback will not start before all 
+currently open devices files have started the playback operation. 
+The same mechanism works for recording (recording and playback 
+operations are fully independent).
+
+The Envy24 driver supports 8, 16 and 24/32 bit sample formats.
+
+
+.SH  SAMPLING RATE
+
+Envy24 based cards are multi channel devices and all the channels share the
+same sampling rate. For this reason the sampling rate is normally locked to the
+value selected using ossmix. However OSS supports some other methods for
+changing the sampling rate. There are four ways to change the sampling rate.
+
+ BASIC METHOD:
+
+Since all input and output channels of Envy24 work at the same sampling rate
+it's not possible for the applications to select the rate themselves. Instead
+the sampling rate is always locked to the currently selected rate. This rate
+selection can be changed using the ossmix program shipped with OSS.
+
+For example:
+
+       ossmix envy24.rate 48000
+
+sets the sampling rate to 48000 Hz (default). The possible alternatives are 
+- 8000
+- 9600
+- 11025
+- 12000
+- 16000
+- 22050
+- 24000
+- 32000
+- 44100
+- 48000
+- 88200 
+- 96000
+
+When using S/PDIF inputs/outputs only the sampling rates 32000, 44100, 48000, 88200 or 96000 should be used.
+
+.SH   EXTERNAL SYNC
+It's possible to lock the sampling rate to the S/PDIF or world clock inputs
+by setting the envy24.sync setting in ossmix to SPDIF or WCLOCK. However
+the envy24.rate setting should be set manually to match the rate being used
+(there is no autodetection for that).
+
+.SH   NONLOCKED METHOD
+It's also possible to turn the envy24.ratelock setting to OFF using ossmix.
+After that the first application that opens the device can change the sampling
+rate. However great care should be taken that this application gets the
+recording/playback process fully started before any of the other
+applications open their devices. Otherwise all devices will be locked to 8Khz.
+Also keep in mind that subsequent applications will be forced to use the
+sampling rate set by the first one.
+
+.SH   SOFTWARE SRC
+OSS contains a very high quality software based sample rate converter.
+It can be enabled by setting envy24.src to ON using ossmix.
+
+After that OSS can do on-fly sample rate conversions between the actual
+"hardware" sampling rate and the sampling rates used by the applications. In
+this way every application may use different sampling rate. However there are
+some drawbacks in this method:
+
+.IP \(bu 3
+The hardware rate needs to be 44100, 48000 or 96000 Hz.
+.IP \(bu 3
+The software SRC algorithm consumes some CPU time (1% to 20% per audio 
+channel depending on the CPU speed and sampling rates). For this reason this 
+method may be useless in multi channel use with anything else but the fastest
+high end CPUs.
+.IP \(bu 3
+Only mono and stereo (1 or 2 channel) streams are supported.
+.IP \(bu 3
+The SRC algorithm does cause minor artifacts to the sound (SNR is around 60 dB).
+
+
+.SH  RAW IO DEVICES
+
+These device files provide an alternative way to access Envy24 based devices.
+With these devices it's possible to bypass the dual buffering required by the 
+"normal" input-output device files described above. This means that also the 
+mmap() feature is available and that the latencies caused by dual buffering 
+are gone. So these device files work much like "ordinary" soundcards. However
+due to multi channel professional nature of the Envy24 chip there are some very
+fundamental differences. This means that these device files can only be used 
+with applications that are aware of them.
+
+The differences from normal audio device files are:
+
+1. The sample format will always be 32 bit msb aligned (AFMT_S32_LE). Trying to
+use any other sample format will cause unexpected results.
+2. Number of channels is fixed and cannot be changed. The output device has 
+always 10 channels (0 to 7 are analog outputs and 8 to 9 are the digital 
+outputs). This assignment will be used even with cards that don't support 
+digital (or analog) outputs at all. If the actual hardware being used has 
+less channels the unused ones will be discarded (however they will be fed to 
+the on board monitor mixer).
+
+The input device is fixed to 12 channels. Channels 0 to 7 are analog inputs.
+Channels 8 to 9 are digital inputs. Channels 10 and 11 are for the result 
+signal from the on board monitor mixer.
+
+
+.SH  DIGITAL MONITOR MIXER
+
+All Envy24 based cards have a built in monitor mixer. It can be used to mix 
+allinput and output signals together. The result can be recorded from the 
+"input from mon mixer" device (device 10 in the /dev/sndstat example above).
+The monitor mix signal can also be routed to any of the outputs (including 
+S/PDIF and the "consumer" AC97 output of Terratec EWS88MT/D and any other card
+that support s it).
+
+The settings in the gain.* group of ossmix are used to change the levels of all
+inputs and outputs in the digital monitor mixer. The possible values are 
+between 0 (minimum) and 144 (maximum).
+
+OSS permits using all 10 possible output channels of the monitor mixer even 
+with cards that have less physical outputs. These "virtual" outputs are only 
+sent to the monitor mixer and their signal is only present in the monitor mixer
+output. To enable these "virtual" channels set the envy24_virtualout parameter 
+to 1 in oss_envy24.conf. This option has no effect with Delta1010, EWS88MT and
+other cards that have 10 "real" outputs.
+
+
+.SH  SYNC SOURCE
+
+On cards with S/PDIF and/or World Clock inputs it's possible to select the
+sync source using
+
+       ossmix envy24.sync
+
+The possible choices are:
+
+.IP \(bu 3
+INTERNAL: Use the internal sampling rate as defined by envy24.rate
+.IP \(bu 3
+SPDIF: Use the S/PDIF input as the clock source. The envy24.rate setting 
+must be set manually to match the actual input sampling rate.
+.IP \(bu 3
+WCLOCK: Like SPDIF but uses the world clock input signal (Delta 1010 only).
+
+
+.SH  OUTPUT ROUTINGS
+
+Output routing of output ports can be changed by changing the route.* settings
+using ossmix. The possible choices are:
+
+.IP \(bu 3
+DMA: Playback from the associated /dev/dsp# device.
+.IP \(bu 3
+MONITOR: Output of the digital mixer (only out1/2 and S/PDIF).
+.IP \(bu 3
+IN1/2 to IN9/10 or IN1 to IN10: Loopback from the analog inputs
+.IP \(bu 3
+SPDIFL or SPDIFR or SPDIF: Loopback from the S/PDIF input.
+
+
+.SH  PEAK METERS
+
+Envy24 based cards have peak meters for the input and output ports of the
+digital monitor mixer. ossmix can show these values under the peak.* group
+(these settings are read only). The values are between 0 (minimum) and 255
+(maximum). At this moment the only applications that supports these peak meters
+are ossmix and ossxmix.
+
+
+.SH  AUDIO LATENCY
+
+IDE disk and CD-ROM drives may cause some interrupt latency problems which
+may cause dropouts in recording/playback with Envy24 based cards. For this
+reason ensure that DMA is turned on for the disk drive.
+
+Another method to solve the dropout problems is making the fragment size used
+by the driver longer. This can be done by adding envy24_nfrags=N to the
+oss_envy24.conf file. By default N is 16. Values 2, 4 or 8 make the fragments
+longer which should cure the dropout problems. However this may cause
+latency problems with some applications. Values 32 and 64 decrease the
+latencies but may cause dropouts with IDE.
+
+
+.SH OPTIONS
+
+.IP \(bu 3
+envy24_skipdevs: It's also possible to make OSS to create individual device 
+files for every channel. This creates twice as many device files than the 
+default setting.  
+Values: 1, 0 Default: 0
+
+.IP \(bu 3
+envy24_swapdevs: By default the driver will create output devices before the
+input ones. You can force the input devices to be configured before output 
+devices.
+Values: 1, 0 Default: 0
+
+.IP \(bu 3
+envy24_realencoder_hack: RealProducer wants to see a mixer device in 
+/dev/mixer. This option allows you to define a dummy /dev/mixer mixer device.
+Envy24 Mixer device doesn't provide any consumer level soundcard compatibility
+so this dummy mixer fools RealProducer into thinking it's running on a consumer
+soundcard like SB Pro or SBLive.
+Values: 1, 0 Default: 0
+
+.IP \(bu 3
+envy24_gain_sliders: With some devices it's possible to change the gain 
+controllers to be continuous sliders instead of just enumerated ones.
+Values: 1, 0 Default: 0
+
+.IP \(bu 3
+envy24_nfrags: To solve the dropout problems make the fragment size used by
+the driver longer. By default is 16. Values 2, 4 or 8 make the fragments longer
+which should cure the dropout problems. However this may cause latency problems
+with some applications. Values 32 and 64 decrease the latencies but may cause
+dropouts with IDE drives.
+Values: 2-64 Default: 16
+
+.IP \(bu 3
+envy24_virtualout: OSS permits using all 10 possible output channels of the
+monitor mixer even with cards that have less physical outputs. These "virtual"
+outputs are only sent to the monitor mixer and their signal is only present in
+the monitor mixer output. This has no effect for Delta1010 or Terratec EWS88MT.
+Values: 1, 0 Default: 0
+
+.IP \(bu 3
+envy24_force_mono: It is possible to set all device files to mono only mode
+by setting envy24_skipdevs=1 and envy24_force_mono=1. However this mode 
+disables stereo and multi channel usage for all devices so in general it should
+not be used.
+Values: 1, 0 Default: 0
+
+.SH FILES
+/usr/lib/oss/conf/oss_envy24.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_envy24ht.7 b/man/man7/oss_envy24ht.7
new file mode 100644 (file)
index 0000000..a620a65
--- /dev/null
@@ -0,0 +1,33 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_envy24ht - VIA Envy24HT/PT audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Envy24HT, Envy24HT-S, Envy24PT based sound
+cards.
+
+Envy24HT device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4ch/5.1ch/7.1ch playback
+       o mono/sterero recording 
+       o 8KHz to 192Khz sample rate.
+
+.SH OPTIONS
+o envy24ht_model = -1|0|1
+Select the Model number if the card isn't autodetected
+Values: 0 = Envy24ht 1=Envy24PT/HT-s compatible -1=Autodetect Default: -1
+
+o envy24ht_fake_mixer = 0|1
+Some old applications may refuse to run if they don't find some legacy mixer
+controls the envy24ht chip doesn't support. A "fake" legacy mixer can be
+enabled to make such applications to run. However these fake legacy controls
+will be permanently bound to full level.
+Values: 0 = Disabled 1 = Enabled. Default: 0.
+
+.SH FILES
+/usr/lib/oss/conf/oss_envy24ht.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_fmedia.7 b/man/man7/oss_fmedia.7
new file mode 100644 (file)
index 0000000..1a889c7
--- /dev/null
@@ -0,0 +1,26 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_fmedia - Forte Media FM801 driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Forte Media FM801/FM801-AU audio controllers.
+
+FM801 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4ch/5.1ch playback
+       o mono/sterero recording 
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+.IP \(bu 3
+fmedia_mpu_irq=<xx>
+Set the IRQ for the UART401 MPU. Refer to device conf file (see below) for
+valid IRQs.
+
+.SH FILES
+/usr/lib/oss/conf/oss_fmedia.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_geode.7 b/man/man7/oss_geode.7
new file mode 100644 (file)
index 0000000..53b31f1
--- /dev/null
@@ -0,0 +1,27 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_geode - National Semiconductor Geode audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for National Semiconductor Geode/CS5530/CS5536 audio 
+controllers.
+
+Geode device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH NOTES
+Some old Geode CPUs are not able to handle heavy computational loads.
+If your audio streams are use a lot of CPU, you can start getting garbled audio
+since the OSS Sample Rate Convertor is CPU intensive. Setting vmix0-src to
+OFF will allow you to play audio but only at a fixed rate set via vmixctl
+(Default: 48Khz).
+
+.SH FILES
+/usr/lib/oss/conf/oss_geode.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_hdaudio.7 b/man/man7/oss_hdaudio.7
new file mode 100644 (file)
index 0000000..22e5ff7
--- /dev/null
@@ -0,0 +1,81 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_hdaudio - Intel High Definition Audio (AZALIA) 
+
+.SH DESCRIPTION
+ Open Sound System driver for Intels high definition audio known as 
+ "Azalia". This driver supports Intel 915/925 chipsets with the
+ Realtek ALC880 and CMedia 9880 8 channel codecs.
+
+ The HDA driver supports:
+
+ o 8-96Khz Playback/Recording
+ o 8 or 16 or 32 bits
+ o 2, 4, 6 or 8 channel audio.
+ o SPDIF digital output and Input
+ o AC3 passthrough 
+
+.SH  HDAUDIO MIXER
+ The Intel HDA mixer is a new type of mixer that doesn't have
+ the normal volume controls found on AC97 or legacy SB devices.
+ The HDA mixer presents a concept of Jacks and you can configure
+ any jack to be either an output or an input jack.
+
+ Some motherboards may not correctly initialize the jacks according
+ to their color and functionality but in general here's the 
+ configuration that should generally be followed:
+
+       o Orange = Center/LFE   o Blue = Line-in
+       o Black = Rear          o Green = Front
+       o Grey = Side           o Pink = Mic
+
+Some Azalia codecs support front panel connectors and so if you see
+fp-green and fp-pink connectors, then these are for front panel
+speaker and mic/line-in Jacks.
+
+There is a function selector for most of the analog audio jacks (for example
+connector.pink.mode). This selector is used to control if the jack is used
+as an input (microphone or line in) or output (front, rear, side, speaker,
+etc).
+
+.SH KNOWN PROBLEMS
+In general Azalia based systems (laptops/motherboards) would require a custom
+driver to work properly. Due to enormous number of different systems it is not
+possible to develop such custom drivers for all systems. A generic driver is 
+used for systems that don't have dedicated drivers.
+
+Unfortunately the mixer and control panel interface (see ossmix(1)) 
+for "generic" systems is very cryptic and difficult to
+understand. To solve problems with volumes or signal routing you need to
+start ossxmix(1) and change the controls one at time until you get the desired
+effect.
+
+.SH OPTIONS
+.IP \(bu 3
+hdaudio_jacksense      enables jack sensing mode when the hdaudio driver is
+                       loaded. In this mode all I/O pin's that are not
+                       in use will be disabled as well as the mixer controls
+                       that are related with them. In this way the
+                       mixer/control panel will become more intuitive.
+                       However OSS will need to be restarted with soundoff;
+                       soundon every time new inputs or outputs are attached
+                       to the audio jacks. Default : 0.
+
+                       NOTE! hdaudio_jacksense=1 works only in some systems.
+                       Many laptops and motherboards don't support jack
+                       sensing.
+
+.IP \(bu 3
+hdaudio_noskip Disable skipping unconnected jack. All mixer controls
+                       will be shown, even for disabled I/O pins.
+                       Can get values 0-7. 1-7 is a bitmask, where every bit
+                       masks a different check. Bit 3 (= value 4) overrides
+                       jacksense check too.
+                       Default: 0 - unconnected jacks are skipped.
+.SH FILES
+ /usr/lib/oss/conf/oss_hdaudio.conf Device configuration file
+
+.SH AUTHOR
+ 4Front Technologies
+
diff --git a/man/man7/oss_ich.7 b/man/man7/oss_ich.7
new file mode 100644 (file)
index 0000000..adcd0fc
--- /dev/null
@@ -0,0 +1,39 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_ich - Intel ICH/SiS7012/Nvidia/AMD audio device driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Intel ICH, nVidia Nforce, AMD and SiS 7012 
+devices.
+
+.SH OPTIONS
+
+.IP \(bu 3
+intelpci_rate_tuning=<NNN> (default is 240)
+Some Compaq Deskpro models (EN and EX at least) and certain Dell models 
+play and record audio at a higher speed than what is expected. If you have 
+an Intel815 motherboard with an AD1885 you can try setting the parameter 
+to 240, 280 or 330 and see which works for your system. The way to figure 
+out the the right intelpci_rate_tuning value is using the osstest application. 
+It reports a sample rate drift value ("Sample rate drift" or "srate drift"). 
+Use the following formula (round the result to the nearest integer): 
+
+<intelpci_rate_tuning = (240*(drift+100))/100>
+
+.IP \(bu 3
+intelpci_force_mmio=<0|1> (default is 0=Disable)
+This option can be used to force the ICH4/ICH5 and ICH6 controllers to 
+run in memory mapped mode to free up I/O address space.
+
+.IP \(bu 3
+ich_jacksense=<0|1> (default is 0)
+Force use of jacksensing on some AD198x mixers.
+
+.SH FILES
+/usr/lib/oss/conf/oss_ich.conf  Device configuration file.
+
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_sblive.7 b/man/man7/oss_sblive.7
new file mode 100644 (file)
index 0000000..f7d1588
--- /dev/null
@@ -0,0 +1,245 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_sblive - Creative Labs Sound Blaster Live/Audigy family driver.
+
+.SH DESCRIPTION
+ Open Sound System driver for Creative Labs Sound Blaster Live!, Audigy, 
+ Audigy2, Audigy2-Value and sound cards.
+
+ The sblive driver supports:
+
+ o 8-48Khz Playback/Recording
+ o 8 or 16 bits
+ o SPDIF digital output and Input
+ o Multi channel 5.1 (Live!) and 7.1 (Audigy) output.
+
+ AC3 passthrough is only supported on Audigy series of the soundcards.
+
+.SH OTHER SIMILAR CARDS
+There are several Sound Blaster cards that are also called as Live or
+Audigy. However these cards are based on entirely different hardware design
+and they are not compatible with this driver.
+
+.IP \(bu 3
+Sound Blaster Live 5.1 card is used in some Dell machines but it's
+ driven by the emu10k1x driver.
+.IP \(bu 3
+Sound Blaster AudigyLS and Live 7.1 models are driven by the audigyls
+ driver of OSS.
+
+.SH  SBLIVE COMBO SPDIF AND AUDIO JACKS
+Most models of Live! and Audigy cards have an orange combo jack that is
+used both for the analog center/LFE output and for digital DIN (S/PDIF)
+output. The output mode is selected by a driver configuration option
+(seel below) which should be set to proper value depending on the actual
+speaker configuration.
+
+.IP \(bu 3
+Noisy analog center/LFE output. The orange combo jack at the rear plate
+ of the Live/Audigy card is shared between the digital DIN and the analog
+ center/LFE outputs. In digital DIN mode (default) you will hear very noisy
+ output from the speakers connected to this output jack. If you have analog
+ center/LFE (subwoofer) speakers connected then you need to turn off the
+ sblive_digital_din (or audigy_digital_din) option. 
+
+.IP \(bu 3
+There is a new configuration option to enable/disable the "digital DIN"
+ output. By default the digital DIN interface is enabled which disables the
+ center/LFE analog output (uses the same combo jack). By setting the
+ sblive_digital_din (or audigy_digital_din) option to 0 you can enable the
+ analog C/LFE output feature. When digital DIN is disabled you can still get
+ S/PDIF (or AC3) output from the digital (optical/coax) outputs of the
+ optional livedrive unit.
+
+.SH  SBLIVE MIXER
+SB Live cards have actually two mixer chips. In OSS both of them are 
+controlled together. However only limited set of features can be controlled
+using ordinary mixer programs (such as the mixer applet included in OSS).
+Majority of features can only be accessed using the ossmix and ossxmix
+programs included in OSS.
+
+The AC97 mixer is used to control volumes of the back bracket inputs (mic and
+line in) and the _analog_ CD input connector on the soundcard. The 'mic' 
+volume controls the level of the rear bracket microphone input sent directly 
+to the front (only front) speakers. The 'line' and 'cd' controls do the same
+for the back bracket line in connector and the on board analog CD input
+connector. It's usually recommended to set these volumes to 0.
+
+Another function of the AC97 mixer is selecting the signal that is passed to
+the master mixer (for example for recording). One of the 'mic', 'line' or
+'cd' signals can be routed to the master mixer by selecting that device as
+the recording source in the AC97 mixer. The 'rec' volume control slider can 
+be used to adjust the signal strength. The 'igain' control doesn't usually
+have any effect but some hardware revisions may use it for controlling the 
+microphone recording level.
+
+
+.SH  SBLIVE MASTER MIXER
+Other mixer functions are handled by the DSP engine of the EMU 10k1 chip.
+Most input signals (including all digital signals and LiveDrive inputs).
+
+There are only two master mixer settings that can be controlled using all
+mixer programs. The 'vol' setting is the master output volume that affects
+both the front and rear speakers and the headphone output (digital output
+volumes are not affected). The 'pcm' setting controls volumes of all PCM
+playback channels (/dev/dsp#).
+
+In addition to volume sliders most inputs have a stereo VU meter pair
+(only in ossxmix) that can be used to monitor the input and to adjust the
+input levels properly.
+
+The master mixer consists of several sections that are:
+
+.IP \(bu 3
+Primary section: This section has two settings. The "spkmode" setting
+ selects how front/rear speakers are used for PCM playback (outputs from
+ programs using /dev/dsp#). The possible settings are FRONT, REAR and 
+ FRONT+REAR. The default is FRONT+REAR. Change this setting if you like to
+ get PCM playback only from front or rear speakers. The "autoreset" flag is
+ used to control the "/dev" section.
+
+.IP \(bu 3
+"/dev" section: This section controls the volumes of each /dev/dsp# device 
+ file supported by the device (there are 8 of them at this moment). These 
+ volumes will return back to maximum every time the device is opened. However
+ this can be disabled by setting the 'autoreset' option to OFF. The ossxmix 
+ program has special ability to show the application using the particular 
+ /dev/dsp device (for layout reasons only the first 4 characters of the 
+ program name are shown).
+
+.IP \(bu 3
+The equalizer section: This section controls the graphic equalizer for
+ front speakers only.
+
+.IP \(bu 3
+The front rear, and record sections: These three identical sections control 
+ the levels of external inputs and PCM playback (/dev/dsp# devices) to be 
+ sent to the front/rear speakers and to the recording device.
+ The CD Analog audio will only be heard from the FRONT speakers.
+
+.SH  SBLIVE RECORDING
+Before recording anything you need to set the volumes in the recording
+section properly. To enable recording from the AC97 connected inputs
+(mic, line in and analog CD) use the AC97 mixer to select the desired input
+and then tune the input level using the rec (and igain) setting.
+
+Finally set the 'ac97' slider in the record section of the master mixer so
+that the recording level is suitable.
+
+The OSS drivers permit recording any application that's currently playing.
+
+To record audio that's playing on any of the SB Live channels:
+
+.IP \(bu 3
+Turn down the AC97 control in the "record" section. This prevents any audio
+ being fed to the soundcard from MIC/Line-in/CD-in from getting mixed with
+ the audio produced by the application that's currently playing.
+
+.IP \(bu 3
+Type ossrecord -s<sampling rate> -b<bits/sample> -c<channels> test.wav
+
+.IP \(bu 3
+To stop recording press <Ctrl-c> and then you can play back the test.wav
+ file using ossplay command.
+
+
+ RECORDING ISSUES:
+In most cases noise is caused by the microphone input or some other
+(unused) input. Use the ossxmix program to turn off all unused inputs and
+finally save the current mixer settings (see below).
+
+Hint: Look at the VU meter panels of ossxmix. It's usually very easy to
+locate the noise source by looking which input has some signal coming from
+it.
+
+WARNING! If you turn off some of the signals in recording section or the
+AC97 mixer section this affects all subsequent recordings. Remember
+to raise the volume prior doing any recording. After that decrease
+the volumes again if necessary.
+
+
+.SH  SBLIVE HARDWARE MIXING
+You can use /dev/oss/oss_sblive0/ pcm0-pcm7 to play multiple audio programs
+using the hardware mixing.
+Simply specify the device name with the application. A simple test is
+to do the following:
+  ossplay -d/dev/oss/oss_sblive0/pcm0 <file1.wav> &
+  ossplay -d/dev/oss/oss_sblive0/pcm1 <file2.wav> &
+  ossplay -d/dev/oss/oss_sblive0/pcm2 <file3.wav> &
+
+You should hear all three wav files playing simultaneously.
+
+NOTE: Some apps may desire the old /dev/dspN names. e.g. /dev/dsp0 - /dev/dsp7.
+
+NOTE: You can increase the number of output devices from the standard 8 devices
+to 32 device. For this, run soundconf, select Set configuration options and 
+look for the entry "sblive_device", now type any number between 1 and 32
+for the number of channels you wish. You can also do this manually by editing 
+oss_sblive.conf and inserting sblive_devices=XX entry, 
+ e.g.: sblive_devices=27 
+
+.SH  CDROM CONNNECTIONS
+There are two alternative ways to connect audio signal from a CD-ROM drive tor
+the SB Live soundcard. You can use a (three wire) analog cable or a (2 wire)
+digital cable. OSS now supports both of these choices. Note that there are
+separate mixer settings for both of these connections.
+
+The analog CD-ROM wire is connected to the AC97 code chip and this method
+works in most cases. To route the analog CD -input to the (front) speakers
+you need to raise the volume of the 'cd' control in mixer. However if you
+like to hear the analog CD input both from the front and rears speakers you
+need to do this in slightly different way (please read the description of
+the mixer above).
+
+The digital connection works only with CD-ROM drives that has support for it.
+Note that some CD-ROM drives having this digital output connector use a
+different signal level than the one required by SB Live. This means that the
+digital connection doesn't work with all CD-ROM drives (no sound). If you
+have problems with the digital connection you should use the analog one.
+When using the the digital CD input you may need to adjust the 'digcd' 
+volumes using ossxmix (or ossmix).
+
+It should be noted that SB Live works internally at 48 kHz. This means that 
+all S/PDIF input signals are automatically sample rate converted to 48 kHz. 
+If you record from a 44.1 kHz (CD-ROM) and save the result to a 44.1 kHz 
+file the signal will be sample rate converted twice. First from the 44.1 kHz
+input to internal 48 kHz and then back to 44.1 kHz. While the sample rate
+converter of SB Live is very precise this will cause some change. This should
+not be any problem when doing audio recordings but it may cause unwanted 
+results when transferring digital data (such as AC3/DTS) using the S/PDIF 
+the interface.
+
+.SH CONFIGURATION OPTIONS
+.IP \(bu 3
+sblive_digital_din=<0|1> - This option is to enable/disable the "digital DIN"
+ output of SB Live. By default the digital DIN interface is disabled which
+ enables the center/LFE analog output (uses the same combo jack). By
+ setting the sblive_digital_din option to 0 you can enable the analog 
+ Center/LFE output feature. When digital DIN is disabled you can still
+ get S/PDIF (or AC3) output from the digital (optical/coax) outputs of the
+ optional livedrive unit. Default: 0=analog output.
+
+.IP \(bu 3
+audigy_digital_din=<0|1> - same as "sblive_digital_din" option except for
+ the Audigy soundcards. Default: 1=digital output.
+
+.IP \(bu 3
+sblive_devices=<1..32> - Number of audio devices to be configured.
+
+
+.SH LIMITATION
+.IP \(bu 3
+SB Live! devices will not work in Sparc systems due to PCI addressing
+ limitations. Only Audigy/Audigy2 models work under Sparc.
+.IP \(bu 3
+EMU Wavetable MIDI synthesizer is not supported
+.IP \(bu 3
+AC3 passthrough only supported on Audigy/Audigy but not on SB Live! devices.
+
+.SH FILES
+/usr/lib/oss/conf/oss_sblive.conf Device configuration file
+
+.SH AUTHOR
+ 4Front Technologies
+
diff --git a/man/man7/oss_sbpci.7 b/man/man7/oss_sbpci.7
new file mode 100644 (file)
index 0000000..6da5cd5
--- /dev/null
@@ -0,0 +1,43 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_sbpci - Creative Labs ES1371 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Creative Labs ES1371/ES1373/5880, Ectiva 1938 
+audio controllers.
+
+APCI97 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate
+
+APCI97 MIXER EXTENSIONS
+
+Dual Dac mode: This feature turns the APCI97 into two output devices with
+the output going to front and rear speakers independantly (however volume
+control is global).
+
+Speaker Mode: This feature allows you to either have the audio coming out
+the front speakers or you can have audio duplicated on rear speakers. This
+mode is disabled when Dual Dac mode is enabled.
+
+SPDIF: This button enables or disables SPDIF output.
+
+.SH OPTIONS
+.IP \(bu 3
+apci97_latency=<NNN> 
+Certain models of the ES1371 sound devices will sound distorted playing stereo
+audio and setting the PCI latency fixes the problem
+
+.IP \(bu 3
+apci_spdif=0|1
+Certain models like the SB 4.1D/SB PCI128D have SPDIF output jacks and 
+this setting enables the output device.
+
+.SH FILES
+/usr/lib/oss/conf/oss_sbpci.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_sbxfi.7 b/man/man7/oss_sbxfi.7
new file mode 100644 (file)
index 0000000..35b7a2f
--- /dev/null
@@ -0,0 +1,23 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_sbxfi - SoundBlaster X-Fi audio driver
+
+.SH DESCRIPTION
+Open Sound System driver for the SoundBlaster X-Fi cards.
+
+.SH OPTIONS
+.IP \(bu 3
+sbxfi_type     Override X-Fi type autodetection. Values:
+               0 - Autodetect type
+               1 - Sound Blaster X-Fi (SB046x/067x/076x)
+               2 - Sound Blaster X-Fi (SB073x)
+               3 - Sound Blaster X-Fi (SB055x)
+               4 - Sound Blaster X-Fi (UAA)
+               Default : 0.
+
+.SH FILES
+/usr/lib/oss/conf/oss_sbxfi.conf Device configuration file.
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_solo.7 b/man/man7/oss_solo.7
new file mode 100644 (file)
index 0000000..0e91b0a
--- /dev/null
@@ -0,0 +1,21 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_solo - ESS Solo-1 audio driver
+
+.SH DESCRIPTION
+Open Sound System driver for ESS Solo1/1938/1968 audio controllers.
+ESS Solo1 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_solo.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/oss_trident.7 b/man/man7/oss_trident.7
new file mode 100644 (file)
index 0000000..45fbbec
--- /dev/null
@@ -0,0 +1,30 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_trident - SiS7018, 4Dwave, ALIM5451 audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Trident 4DWave DX/NX, SiS7018 and ALI5451 audio
+controllers.
+
+Trident device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+       o Upto 8 hardware channels to mixing audio streams
+
+.SH OPTIONS
+trident_mpu_ioaddr=<xxx> 
+Set the MPU I/O address. Refer to the driver.conf file for valid addresses.
+
+.SH LIMITATIONS
+.IP \(bu 3
+Due to PCI addressing limitations any add-on cards based on these chips
+will not work under Sparc. The only exception is the ALI5451 chip that is
+used on the main boards on many Sparc based systems.
+
+.SH FILES
+/usr/lib/oss/conf/oss_trident.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_via823x.7 b/man/man7/oss_via823x.7
new file mode 100644 (file)
index 0000000..fa1360d
--- /dev/null
@@ -0,0 +1,22 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_via823x - Open Sound System driver for VIA 8233/8235/8237 audio controllers.
+
+.SH DESCRIPTION
+
+VIA823x device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4/5.1 (Dolby) playback
+       o mono/stereo recording
+       o 8KHz to 48Khz sample rate.
+       o SPDIF input/output capability based on AC97 codec attech to the 
+         VIA823x controller.
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_via823x.conf Device configuration 
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_via97.7 b/man/man7/oss_via97.7
new file mode 100644 (file)
index 0000000..7b62ac3
--- /dev/null
@@ -0,0 +1,21 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_via97 - VIA 82C686 audio driver
+
+.SH DESCRIPTION
+Open Sound System driver for VIA 82C686A and 82C686B audio controllers.
+
+VIA97 device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo playback/recording
+       o 8KHz to 48Khz sample rate.
+
+.SH OPTIONS
+None
+
+.SH FILES
+/usr/lib/oss/conf/oss_via97.conf Device configuration file.
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man7/oss_ymf7xx.7 b/man/man7/oss_ymf7xx.7
new file mode 100644 (file)
index 0000000..329bdde
--- /dev/null
@@ -0,0 +1,38 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+oss_ymf7xx - Yamaha DS-XG audio driver.
+
+.SH DESCRIPTION
+Open Sound System driver for Yamaha DS-XG YMF724/740/744/754 audio controllers.
+
+ymf7xx device characteristics:
+       o 8/16 bit playback/record
+       o mono/stereo/4 channel playback
+       o mono/stereo recording
+       o 8KHz to 48Khz sample rate.
+
+.SH  MIXER
+The Yamaha DSXG models 744 and 754 supports SPDIF and AC3 multichannel output
+and the Mixer extentions will allow you to enable/disable SPDIF output.
+
+.SH CONFIG OPTIONS
+.IP \(bu 3
+yamaha_mpu_ioaddr=<xxx>
+MPU I/O address. Refer to the device conf file (see below) for legal values.
+
+.IP \(bu 3
+yamaha_mpu_irq=<xx>
+MPU IRQ. Refer to device conf file (see below) for legal values
+
+.IP \(bu 3
+yamaha_fm_ioaddr=<xxx>
+Yamaha FM SYnthesizer IO address. Refer to driver conf file (see below) for
+possible values.
+
+.SH FILES
+/usr/lib/oss/conf/oss_ymf7xx.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
+
diff --git a/man/man7/osscore.7 b/man/man7/osscore.7
new file mode 100644 (file)
index 0000000..bdf3f63
--- /dev/null
@@ -0,0 +1,84 @@
+." Automatically generated text
+.TH 7 "August 31, 2006" "OSS" "OSS Devices"
+.SH NAME
+osscore - Open Sound Sytem core audio framework.
+
+.SH DESCRIPTION
+Open Sound System core audio support psudo driver. This driver implements the core Open Sound System API for audio, midi, mixer and synth functions. This driver also implements the OS driver interface as well as device configuration and setup. 
+More information on programming on the OSS API is avaialable at:
+http://manuals.opensound.com/
+
+.SH OPTIONS
+.IP \(bu 3
+ac97_recselect When set to 1 this option enables independent
+               recording source selection for the left and the right channel
+               on AC97 devices. In this way it's possible to record audio
+               streams so that (for example) the left channel signal comes
+               from the microphone and
+               the right channel signal from line-in. However when this
+               option is enabled it's only possible to select the recording
+               source by using a fully OSS 4.0 compatible mixer program such
+               as ossxmix.
+               Default: 0 - recording source is common to both channels.
+.IP \(bu 3
+ac97_amplifier When set to 1 this option enables the speaker power
+               amplifier feature of AC97 codec (if available).
+               Some boards have this inverted, so this feature can be
+               disabled by setting this option to 0.
+               Affects all AC97 based audio devices in the system.
+               Default: -1=autodetect correct setting.
+.IP \(bu 3
+cooked_enable          By default OSS will let applications to use sampling
+               rates and formats that are not supported by the hardware.
+               Instead OSS performs the necessary format conversions in
+               software. Applications that don't tolerate this kind of
+               conversions usually disable them by using features of the OSS
+               API (SNDCTL_DSP_COOKEDMODE). If this option is set to 0 then
+               the format conversions will be disabled for all applications
+               and devices unless the application explicitly enables them.
+               Default: 1 - conversions are enabled.
+               This option should not be changed without very strong reasons.
+.IP \(bu 3
+detect_trace   Internal debugging (do not change). Default: 0
+.IP \(bu 3
+dma_buffsize   By default OSS will allocate audio DMA buffers with some
+               system dependent default size (usually 64k but sometimes
+               smaller). It is possible to change this default allocation by
+               setting this option. Value of 0 means that the default size
+               will be used. Value between 16 and 128 (kilobytes) can be used
+               if the default size is not suitable for some reason.
+               Default: 0 - system dependent buffsize.
+               This option mustn't be changed unless it's absolutely necessary.
+.IP \(bu 3
+max_intrate    Set the maximum number of interrupts per second.
+               Default: 100 interrupts per second which equals to about
+               10 msec minimum latencies.
+.IP \(bu 3
+vmix_disabled          The virtual mixer subsystem can be disabled by setting
+               this configuration option to 1.
+               Default: 0 - virtual mixer is enabled.
+.IP \(bu 3
+vmix_loopdevs          Optionally the virtual mixer subsystem can create
+               special loopback audio devices that can be used to record the
+               output mix sent to the device. This option tells how many
+               loopback devices will be created (0, 1 or 2). If there are
+               multiple audio devices in the system the all of them will have
+               the same number of loopback devices.
+               Default: 0 - no loopback devices are created.
+               This setting should be left to 0 unless there are specific
+               reasons to enable the loopback devices.
+.IP \(bu 3
+vmix_no_autoattach     By default (0) the low level
+               drivers for most sound cards will automatically
+               attach virtual mixer (vmix) to the primary audio devices of the cards.
+               In some situations it may be necessary to attach virtual mixer using 
+               nonstandard parameters. If vmix_no_autoattach is set to 1 then user
+               can use vmixctl attach command to attach virtual mixer manually to
+               the device(s).
+               Default: 0 - Automatically attach virtual mixer.
+
+.SH FILES
+/usr/lib/oss/conf/osscore.conf Device configuration file
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man8/ossdevlinks.8 b/man/man8/ossdevlinks.8
new file mode 100644 (file)
index 0000000..d9303d2
--- /dev/null
@@ -0,0 +1,38 @@
+." Automatically generated text
+.TH 8 "August 31, 2006" "OSS" "System Administration Commands"
+.SH NAME
+ossinfo - Open Sound System legacy device management utility.
+
+.SH DESCRIPTION
+The ossdevlinks utility creates and manages old style (legacy) device files
+for OSS audio, MIDI and mixer devices.
+
+In previous versioms OSS used "flat" device numbering for the device files
+(for example /dev/dsp0 to /dev/dspN). OSS version 4.0 and later uses different
+naming scheme. The ossdevlinks utility is used to manage the legacy device
+names as symbolic links to the new style devices.
+
+.SH OPTIONS
+Normally ossdevlinks is used without command line arguments. However
+there are few command line options.
+
+-v             Verbose output
+-r             Reset the legacy device numbering (do not use).
+
+The -r option will invalidate audio device selections in the setup files
+of various applications. This is considered highly undesirable. Applications
+using wrong audio devices may cause serious security and privacy problems.
+For this reason the -r option should never be used unless there are no other
+ways to recover from serious audio/sound related problems. After that users
+should review the audio settings of all the audio applications they are using.
+.SH                 
+
+.SH FILES
+/usr/sbin/ossdevlinks
+/usr/lib/oss/etc/legacy_devices
+/dev/dspN
+/dev/midiNN
+/dev/mixerN
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man8/savemixer.8 b/man/man8/savemixer.8
new file mode 100644 (file)
index 0000000..ce16a07
--- /dev/null
@@ -0,0 +1,39 @@
+." Automatically generated text
+.TH 8 "August 31, 2006" "OSS" "System Administration Commands"
+.SH NAME
+savemixer - Open Sound System program for saving and restoring mixer settings.
+
+.SH SYNOPSIS
+savemixer [-LVv] [-f <fname>]
+
+.SH DESCRIPTION
+The savemixer program saves mixer settings. It can also load saved mixer
+settings back into the mixer.
+
+Running this program without any parameters will save the current mixer
+settings into /etc/oss/mixer.save or $OSSLIBDIR/etc/mixer.save file.
+OSSLIBDIR is decided by reading /etc/oss.conf, and defaults to /usr/lib/oss.
+
+.SH AUTOMATIC SAVE
+By default the soundoff command will automatically run savemixer to save
+the active mixer settings. See the manual page for soundoff(1) if you
+like to turn this feature off.
+
+.SH OPTIONS
+-f<fname>      Use <fname> as setting file.
+-L             Loads saved mixer and device map information from mixer.save.
+-V             Version information.
+-v             Verbose output.
+
+.SH SEE ALSO
+soundoff(1), soundon(1), ossdetect(1), ossdevlinks(1), ossmix(1), ossxmix(1)
+
+.SH FILES
+/etc/oss.conf
+/usr/sbin/savemixer
+/usr/lib/oss/etc/mixer.save
+/usr/lib/oss/etc/dspdevs.map
+/usr/lib/oss/etc/applist.conf
+
+.SH AUTHOR
+4Front Technologies
diff --git a/man/man8/vmixctl.8 b/man/man8/vmixctl.8
new file mode 100644 (file)
index 0000000..39202c6
--- /dev/null
@@ -0,0 +1,99 @@
+." Automatically generated text
+.TH 8 "August 31, 2006" "OSS" "System Administration Commands"
+.SH NAME
+vmixctl - Open Sound System utility to control the vmix subsystem.
+
+.SH SYNOPSIS
+o      vmixctl attach [attach_options...] audiodev [inputdev]
+o      vmixctl detach [attach_options...] audiodev
+o      vmixctl rate audiodev samplerate
+
+.SH DESCRIPTION
+The vmixctl program can be used to attach or detach the virtual mixer subsystem
+(vmix) to/from audio devices. In addition it can be used to control vmix 
+related parameters such as the sampling rate to be used with the device.
+
+By default most OSS drivers will attach virtual mixer to the primary audio device
+of the sound card (or motherboard audio chip) when the device is attached.
+However possible secondary audio devices (engines) will not have vmix
+attached by default. In additional professional audio devices will be
+attached without vmix because mixing may cause some unwanted distortion
+to the signal.
+
+.SH ATTACHING VMIX TO AN AUDIO DEVICE
+There are two forms of vmixctl attach command:
+
+o      vmixctl attach audiodev
+This alternative is to be used with devices that support only output or
+have a single audio device file that supports full duplex.
+o      vmixctl attach audiodev inputdev
+The second form is to be used with devices that have separate output and
+input device files. The "audiodev" parameter defines the output device and 
+the "inputdev" parameter is the device file to be used for input direction.
+Note that both device files must belong to the same "physical" sound card.
+In some cases it might be possible to use one sound card for playback and
+another for recording. However this configuration is not supported and the
+result may not be functional.
+
+To find out the right device file names (audiodev and inputdev) you can use
+the "ossinfo -a" command.
+
+.SH  ATTACH OPTIONS
+o      -r      Disable recording functionality. By default vmix will suppor
+               recording if the master device(s) support it.
+o      -p      Do not preallocate client engines. By default vmix will
+               preallocate first 4 (out of 8) client engines when attaching
+               to the device. The remaining engines will be allocated 
+               on-demand if there are more concurrent applications that
+               use the device.
+o      -V      Make client devices visible (have private device nodes under /dev).
+o      -c <n>  Preallocate <n> client engines instead of 4. However -p
+               option makes this option ineffective.
+
+.SH  EXAMPLES
+o      vmixctl attach /dev/oss/oss_envy240/pcm0
+o      vmixctl attach /dev/oss/oss_envy240/pcm0 /dev/oss/oss_envy240/pcmin0
+
+.SH SETTING THE SAMPLING RATE USED BY VMIX
+The virtual mixer subsystem will set the physical audio devce(s) to use
+fixed sampling rate that is 48000 Hz by default. It is possible to use
+"vmixctl rate audiodev" to switch vmix to use some different rate with this
+device (pair). You should use "ossinfo -a -v2" to verify that the sampling rate
+is actually supported by the device. Otherwise the actual device may enforce
+vmix to use the nearest supported rate (or some default rate).
+
+The "audiodev" parameter is the device file name (see ossinfo -a) that is
+used for playback. The input device name doesn't need to be specified.
+
+Note that some professional audio devices may be locked to external sampling
+rate or some fixed rate (defined in ossmix/ossxmis). In such case the rate is
+not changeable by vmixctl.
+
+.SH  EXAMPLE
+o      vmixctl rate /dev/oss/oss_envy240/pcm0
+
+.SH DETACHING VMIX FROM AN AUDIO DEVICE
+It is possible to detach vmix from an audio device if it causes problems
+with applications by using "vmix detach audiodev". 
+
+It is not possible to detach and (re)attach vmix to the same device more
+than few times. Use the vmix-enable setting in the control panel
+(ossxmix or ossmix) to disable/re-enable vmix if you need to do it
+repeatedly. Use vmix detach only if you need to attach virtual mixer using
+different parameters.
+
+.SH  EXAMPLE
+o      vmix detach /dev/oss/oss_envy240/pcm0
+
+.SH POSSIBLE BUGS
+o      The control panel elements related with vmix are not removed from the
+       mixer API when vmix is detached. This may be somehow confusing.
+
+.SH SEE ALSO
+soundoff(1), soundon(1), ossmix(1), ossxmix(1)
+
+.SH FILES
+/usr/sbin/vmixct
+
+.SH AUTHOR
+4Front Technologies