⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soundcard.h

📁 linux1.1源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
		unsigned short	key;		/* 	Initialize to FM_PATCH or OPL3_PATCH */#define FM_PATCH	0x01fd#define OPL3_PATCH	0x03fd		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		int	synth_subtype;#define FM_TYPE_ADLIB			0x00#define FM_TYPE_OPL3			0x01#define SAMPLE_TYPE_GUS			0x10		int	perc_mode;	/* No longer supported */		int	nr_voices;		int	nr_drums;	/* Obsolete field */		int	instr_bank_size;		unsigned long	capabilities;	#define SYNTH_CAP_PERCMODE		0x00000001 /* No longer used */#define SYNTH_CAP_OPL3			0x00000002 /* Set if OPL3 supported */		int	dummies[19];	/* Reserve space */	};struct midi_info {		char		name[30];		int		device;		/* 0-N. INITIALIZE BEFORE CALLING */		unsigned long	capabilities;	/* To be defined later */		int		dev_type;		int		dummies[18];	/* Reserve space */	};/******************************************** * IOCTL commands for /dev/dsp and /dev/audio */#define SNDCTL_DSP_RESET		_IO  ('P', 0)#define SNDCTL_DSP_SYNC			_IO  ('P', 1)#define SNDCTL_DSP_SPEED		_IOWR('P', 2, int)#define SNDCTL_DSP_STEREO		_IOWR('P', 3, int)#define SNDCTL_DSP_GETBLKSIZE		_IOWR('P', 4, int)#define SNDCTL_DSP_SAMPLESIZE		_IOWR('P', 5, int)	/* 8, 12 or 16 */#define SOUND_PCM_WRITE_CHANNELS	_IOWR('P', 6, int)#define SOUND_PCM_WRITE_FILTER		_IOWR('P', 7, int)#define SNDCTL_DSP_POST			_IO  ('P', 8)#define SNDCTL_DSP_SUBDIVIDE		_IOWR('P', 9, int)#define SOUND_PCM_READ_RATE		_IOR ('P', 2, int)#define SOUND_PCM_READ_CHANNELS		_IOR ('P', 6, int)#define SOUND_PCM_READ_BITS		_IOR ('P', 5, int)#define SOUND_PCM_READ_FILTER		_IOR ('P', 7, int)/* Some alias names */#define SOUND_PCM_WRITE_BITS		SNDCTL_DSP_SAMPLESIZE#define SOUND_PCM_WRITE_RATE		SNDCTL_DSP_SPEED#define SOUND_PCM_POST			SNDCTL_DSP_POST#define SOUND_PCM_RESET			SNDCTL_DSP_RESET#define SOUND_PCM_SYNC			SNDCTL_DSP_SYNC#define SOUND_PCM_SUBDIVIDE		SNDCTL_DSP_SUBDIVIDE/********************************************* * IOCTL commands for /dev/mixer */	/*  * Mixer devices * * 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. */#define SOUND_MIXER_NRDEVICES	12#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 *//* 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#define SOUND_MIXER_MUTE	28	/* 0 or 1 */#define SOUND_MIXER_ENHANCE	29	/* Enhanced stereo (0, 40, 60 or 80) */#define SOUND_MIXER_LOUD	30	/* 0 or 1 *//* Note!	Number 31 cannot be used since the sign bit is reserved */#define SOUND_DEVICE_LABELS	{"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \				 "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "rec"}#define SOUND_DEVICE_NAMES	{"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \				 "mic", "cd", "mix", "pcm2", "rec"}/*	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_MIXER_STEREODEVS	0xfb	/* Mixer channels supporting stereo *//*	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_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)		_IOR('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_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)		_IOWR('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_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)/* *	The following mixer ioctl calls are compatible with the BSD driver by *	  Steve Haehnichen <shaehnic@ucsd.edu> * * Since this interface is entirely SB specific, it will be dropped in the * near future. */typedef unsigned char S_BYTE;typedef unsigned char S_FLAG;struct stereo_vol{  S_BYTE l;			/* Left volume */  S_BYTE r;			/* Right volume */};#define MIXER_IOCTL_SET_LEVELS 		_IOW ('s', 20, struct sb_mixer_levels)#define MIXER_IOCTL_SET_PARAMS 		_IOW ('s', 21, struct sb_mixer_params)#define MIXER_IOCTL_READ_LEVELS 	_IOR ('s', 22, struct sb_mixer_levels)#define MIXER_IOCTL_READ_PARAMS 	_IOR ('s', 23, struct sb_mixer_params)#define MIXER_IOCTL_RESET		_IO  ('s', 24)/* * Mixer volume levels for MIXER_IOCTL_SET_VOL & MIXER_IOCTL_READ_VOL */struct sb_mixer_levels{  struct stereo_vol master;	/* Master volume */  struct stereo_vol voc;	/* DSP Voice volume */  struct stereo_vol fm;		/* FM volume */  struct stereo_vol line;	/* Line-in volume */  struct stereo_vol cd;		/* CD audio */  S_BYTE mic;			/* Microphone level */};/* * Mixer parameters for MIXER_IOCTL_SET_PARAMS & MIXER_IOCTL_READ_PARAMS */struct sb_mixer_params{  S_BYTE record_source;		/* Recording source (See SRC_xxx below) */  S_FLAG hifreq_filter;		/* Filter frequency (hi/low) */  S_FLAG filter_input;		/* ANFI input filter */  S_FLAG filter_output;		/* DNFI output filter */  S_FLAG dsp_stereo;		/* 1 if DSP is in Stereo mode */};#define SRC_MIC         1	/* Select Microphone recording source */#define SRC_CD          3	/* Select CD recording source */#define SRC_LINE        7	/* Use Line-in for recording source */#if !defined(KERNEL) && !defined(INKERNEL)/* *	Some convenience macros to simplify programming of the *	/dev/sequencer interface * *	These macros define the API which should be used when possible. */void seqbuf_dump(void);	/* This function must be provided by programs *//* 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, _seqbufptr = 0#define SEQ_PM_DEFINES			struct patmgr_info _pm_info#define _SEQ_NEEDBUF(len)		if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()#define _SEQ_ADVBUF(len)		_seqbufptr += len#define SEQ_DUMPBUF			seqbuf_dump#define PM_LOAD_PATCH(dev, bank, pgm)	(SEQ_DUMPBUF(), _pm_info.command = _PM_LOAD_PATCH, \					_pm_info.device=dev, _pm_info.data.data8[0]=pgm, \					_pm_info.parm1 = bank, _pm_info.parm2 = 1, \					ioctl(seqfd, SNDCTL_PMGR_ACCESS, &_pm_info))#define PM_LOAD_PATCHES(dev, bank, pgm) (SEQ_DUMPBUF(), _pm_info.command = _PM_LOAD_PATCH, \					_pm_info.device=dev, memcpy(_pm_info.data.data8, pgm, 128), \					_pm_info.parm1 = bank, _pm_info.parm2 = 128, \					ioctl(seqfd, SNDCTL_PMGR_ACCESS, &_pm_info))#define SEQ_START_NOTE(dev, voice, note, vol)	{_SEQ_NEEDBUF(8);\					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\					_seqbuf[_seqbufptr+1] = SEQ_NOTEON;\					_seqbuf[_seqbufptr+2] = (dev);\					_seqbuf[_seqbufptr+3] = (voice);\					_seqbuf[_seqbufptr+4] = (note);\					_seqbuf[_seqbufptr+5] = (vol);\					_seqbuf[_seqbufptr+6] = 0;\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_STOP_NOTE(dev, voice, note, vol)	{_SEQ_NEEDBUF(8);\					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\					_seqbuf[_seqbufptr+1] = SEQ_NOTEOFF;\					_seqbuf[_seqbufptr+2] = (dev);\					_seqbuf[_seqbufptr+3] = (voice);\					_seqbuf[_seqbufptr+4] = (note);\					_seqbuf[_seqbufptr+5] = (vol);\					_seqbuf[_seqbufptr+6] = 0;\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_CHN_PRESSURE(dev, voice, pressure)	{_SEQ_NEEDBUF(8);\					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\					_seqbuf[_seqbufptr+1] = SEQ_AFTERTOUCH;\					_seqbuf[_seqbufptr+2] = (dev);\					_seqbuf[_seqbufptr+3] = (voice);\					_seqbuf[_seqbufptr+4] = (pressure);\					_seqbuf[_seqbufptr+5] = 0;\					_seqbuf[_seqbufptr+6] = 0;\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_PANNING(dev, voice, pos)	{_SEQ_NEEDBUF(8);\					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\					_seqbuf[_seqbufptr+1] = SEQ_BALANCE;\					_seqbuf[_seqbufptr+2] = (dev);\					_seqbuf[_seqbufptr+3] = (voice);\					(char)_seqbuf[_seqbufptr+4] = (pos);\					_seqbuf[_seqbufptr+5] = 0;\					_seqbuf[_seqbufptr+6] = 0;\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_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);\					*(short *)&_seqbuf[_seqbufptr+5] = (value);\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_PITCHBEND(dev, voice, value) SEQ_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTRL_EXPRESSION, value)#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTRL_MAIN_VOLUME, value)#define SEQ_START_TIMER()		{_SEQ_NEEDBUF(4);\					_seqbuf[_seqbufptr] = SEQ_SYNCTIMER;\					_seqbuf[_seqbufptr+1] = 0;\					_seqbuf[_seqbufptr+2] = 0;\					_seqbuf[_seqbufptr+3] = 0;\					_SEQ_ADVBUF(4);}#define SEQ_SET_PATCH(dev, voice, patch)	{_SEQ_NEEDBUF(8);\					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\					_seqbuf[_seqbufptr+1] = SEQ_PGMCHANGE;\					_seqbuf[_seqbufptr+2] = (dev);\					_seqbuf[_seqbufptr+3] = (voice);\					_seqbuf[_seqbufptr+4] = (patch);\					_seqbuf[_seqbufptr+5] = 0;\					_seqbuf[_seqbufptr+6] = 0;\					_seqbuf[_seqbufptr+7] = 0;\					_SEQ_ADVBUF(8);}#define SEQ_WAIT_TIME(ticks)		{_SEQ_NEEDBUF(4);\				 	*(unsigned long *)&_seqbuf[_seqbufptr] = SEQ_WAIT | ((ticks) << 8);\				 	_SEQ_ADVBUF(4);}#define SEQ_ECHO_BACK(key)		{_SEQ_NEEDBUF(4);\				 	*(unsigned long *)&_seqbuf[_seqbufptr] = SEQ_ECHO | ((key) << 8);\				 	_SEQ_ADVBUF(4);}#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);}#define SEQ_WRPATCH(patch, len)		{if (_seqbufptr) seqbuf_dump();\					if (write(seqfd, (char*)(patch), len)==-1) \					   perror("Write patch: /dev/sequencer");}#endiflong soundcard_init(long mem_start);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -