📄 soundcard.h
字号:
#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
/*******************************************
* 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 */
#define SEQ_BALANCE 11
#define SEQ_VOLMODE 12
/*
* Volume mode decides 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;
};
#define MIDI_CAP_MPU401 1 /* MPU-401 intelligent mode */
struct midi_info {
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 */
};
/********************************************
* ioctl commands for the /dev/midi##
*/
typedef struct {
unsigned char cmd;
char nr_args, nr_returns;
unsigned char data[30];
} mpu_command_rec;
#define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
#define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
#define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
/********************************************
* IOCTL commands for /dev/dsp and /dev/audio
*/
#define SNDCTL_DSP_RESET _SIO ('P', 0)
#define SNDCTL_DSP_SYNC _SIO ('P', 1)
#define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
#define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
#define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
#define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
#define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
#define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, 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 */
# define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */
/*
* 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_NONBLOCK _SIO ('P',14)
#define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
# define DSP_CAP_REVISION 0x000000ff /* Bits for revision level (0 to 255) */
# define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */
# define DSP_CAP_REALTIME 0x00000200 /* Real time capability */
# define DSP_CAP_BATCH 0x00000400 /* Device has some kind of */
/* internal buffers which may */
/* cause some delays and */
/* decrease precision of timing */
# define DSP_CAP_COPROC 0x00000800 /* Has a coprocessor */
/* Sometimes it's a DSP */
/* but usually not */
# define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */
# define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */
# define DSP_CAP_MULTI 0x00004000 /* support multiple open */
# define DSP_CAP_BIND 0x00008000 /* channel binding to front/rear/cneter/lfe */
#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 {
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_MAPINBUF _SIOR ('P', 19, buffmem_desc)
#define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
#define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
#define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
#define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
#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 SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
#define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
# define SPDIF_PRO 0x0001
# define SPDIF_N_AUD 0x0002
# define SPDIF_COPY 0x0004
# define SPDIF_PRE 0x0008
# define SPDIF_CC 0x07f0
# define SPDIF_L 0x0800
# define SPDIF_DRS 0x4000
# define SPDIF_V 0x8000
/*
* Application's profile defines the way how playback underrun situations should be handled.
*
* APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
* playback buffer whenever an underrun occurs. This consumes some time
* prevents looping the existing buffer.
* APF_CPUINTENS is intended to be set by CPU intensive applications which
* are likely to run out of time occasionally. In this mode the buffer cleanup is
* disabled which saves CPU time but also let's the previous buffer content to
* be played during the "pause" after the underrun.
*/
#define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
#define APF_NORMAL 0 /* Normal applications */
#define APF_NETWORK 1 /* Underruns probably caused by an "external" delay */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -