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

📄 oss-emulation.txt

📁 底层驱动开发
💻 TXT
字号:
		NOTES ON KERNEL OSS-EMULATION		=============================		Jan. 22, 2004  Takashi Iwai <tiwai@suse.de>Modules=======ALSA provides a powerful OSS emulation on the kernel.The OSS emulation for PCM, mixer and sequencer devices is implementedas add-on kernel modules, snd-pcm-oss, snd-mixer-oss and snd-seq-oss.When you need to access the OSS PCM, mixer or sequencer devices, thecorresponding module has to be loaded.These modules are loaded automatically when the corresponding serviceis called.  The alias is defined sound-service-x-y, where x and y arethe card number and the minor unit number.  Usually you don't have todefine these aliases by yourself.Only necessary step for auto-loading of OSS modules is to define thecard alias in /etc/modprobe.conf, such as	alias sound-slot-0 snd-emu10k1As the second card, define sound-slot-1 as well.Note that you can't use the aliased name as the target name (i.e."alias sound-slot-0 snd-card-0" doesn't work any more like the oldmodutils).The currently available OSS configuration is shown in/proc/asound/oss/sndstat.  This shows in the same syntax of/dev/sndstat, which is available on the commercial OSS driver.On ALSA, you can symlink /dev/sndstat to this proc file.Please note that the devices listed in this proc file appear onlyafter the corresponding OSS-emulation module is loaded.  Don't worryeven if "NOT ENABLED IN CONFIG" is shown in it.Device Mapping==============ALSA supports the following OSS device files:	PCM:		/dev/dspX		/dev/adspX	Mixer:		/dev/mixerX	MIDI:		/dev/midi0X		/dev/amidi0X	Sequencer:		/dev/sequencer		/dev/sequencer2 (aka /dev/music)where X is the card number from 0 to 7.(NOTE: Some distributions have the device files like /dev/midi0 and       /dev/midi1.  They are NOT for OSS but for tclmidi, which is       a totally different thing.)Unlike the real OSS, ALSA cannot use the device files more than theassigned ones.  For example, the first card cannot use /dev/dsp1 or/dev/dsp2, but only /dev/dsp0 and /dev/adsp0.As seen above, PCM and MIDI may have two devices.  Usually, the firstPCM device (hw:0,0 in ALSA) is mapped to /dev/dsp and the secondarydevice (hw:0,1) to /dev/adsp (if available).  For MIDI, /dev/midi and/dev/amidi, respectively.You can change this device mapping via the module options ofsnd-pcm-oss and snd-rawmidi.  In the case of PCM, the followingoptions are available for snd-pcm-oss:	dsp_map		PCM device number assigned to /dev/dspX			(default = 0)	adsp_map	PCM device number assigned to /dev/adspX			(default = 1)For example, to map the third PCM device (hw:0,2) to /dev/adsp0,define like this:	options snd-pcm-oss adsp_map=2The options take arrays.  For configuring the second card, specifytwo entries separated by comma.  For example, to map the third PCMdevice on the second card to /dev/adsp1, define like below:	options snd-pcm-oss adsp_map=0,2To change the mapping of MIDI devices, the following options areavailable for snd-rawmidi:	midi_map	MIDI device number assigned to /dev/midi0X			(default = 0)	amidi_map	MIDI device number assigned to /dev/amidi0X			(default = 1)For example, to assign the third MIDI device on the first card to/dev/midi00, define as follows:	options snd-rawmidi midi_map=2PCM Mode========As default, ALSA emulates the OSS PCM with so-called plugin layer,i.e. tries to convert the sample format, rate or channelsautomatically when the card doesn't support it natively.This will lead to some problems for some applications like quake orwine, especially if they use the card only in the MMAP mode.In such a case, you can change the behavior of PCM per application bywriting a command to the proc file.  There is a proc file for each PCMstream, /proc/asound/cardX/pcmY[cp]/oss, where X is the card number(zero-based), Y the PCM device number (zero-based), and 'p' is forplayback and 'c' for capture, respectively.  Note that this proc fileexists only after snd-pcm-oss module is loaded.The command sequence has the following syntax:	app_name fragments fragment_size [options]app_name is the name of application with (higher priority) or withoutpath.fragments specifies the number of fragments or zero if no specificnumber is given.fragment_size is the size of fragment in bytes or zero if not given.options is the optional parameters.  The following options areavailable:	disable		the application tries to open a pcm device for			this channel but does not want to use it.	direct		don't use plugins	block		force block open mode	non-block	force non-block open mode	partial-frag	write also partial fragments (affects playback only)	no-silence	do not fill silence ahead to avoid clicksThe disable option is useful when one stream direction (playback orcapture) is not handled correctly by the application although thehardware itself does support both directions.The direct option is used, as mentioned above, to bypass the automaticconversion and useful for MMAP-applications.For example, to playback the first PCM device without plugins forquake, send a command via echo like the following:	% echo "quake 0 0 direct" > /proc/asound/card0/pcm0p/ossWhile quake wants only playback, you may append the second commandto notify driver that only this direction is about to be allocated:	% echo "quake 0 0 disable" > /proc/asound/card0/pcm0c/ossThe permission of proc files depend on the module options of snd.As default it's set as root, so you'll likely need to be superuser forsending the command above.The block and non-block options are used to change the behavior ofopening the device file.As default, ALSA behaves as original OSS drivers, i.e. does not blockthe file when it's busy. The -EBUSY error is returned in this case.This blocking behavior can be changed globally via nonblock_openmodule option of snd-pcm-oss.  For using the blocking mode as defaultfor OSS devices, define like the following:	options snd-pcm-oss nonblock_open=0The partial-frag and no-silence commands have been added recently.Both commands are for optimization use only.  The former commandspecifies to invoke the write transfer only when the whole fragment isfilled.  The latter stops writing the silence data aheadautomatically.  Both are disabled as default.You can check the currently defined configuration by reading the procfile.  The read image can be sent to the proc file again, hence youcan save the current configuration	% cat /proc/asound/card0/pcm0p/oss > /somewhere/oss-cfgand restore it like	% cat /somewhere/oss-cfg > /proc/asound/card0/pcm0p/ossAlso, for clearing all the current configuration, send "erase" commandas below:	% echo "erase" > /proc/asound/card0/pcm0p/ossMixer Elements==============Since ALSA has completely different mixer interface, the emulation ofOSS mixer is relatively complicated.  ALSA builds up a mixer elementfrom several different ALSA (mixer) controls based on the namestring.  For example, the volume element SOUND_MIXER_PCM is composedfrom "PCM Playback Volume" and "PCM Playback Switch" controls for theplayback direction and from "PCM Capture Volume" and "PCM CaptureSwitch" for the capture directory (if exists).  When the PCM volume ofOSS is changed, all the volume and switch controls above are adjustedautomatically.As default, ALSA uses the following control for OSS volumes:	OSS volume		ALSA control		Index	-----------------------------------------------------	SOUND_MIXER_VOLUME 	Master			0	SOUND_MIXER_BASS	Tone Control - Bass	0	SOUND_MIXER_TREBLE	Tone Control - Treble	0	SOUND_MIXER_SYNTH	Synth			0	SOUND_MIXER_PCM		PCM			0	SOUND_MIXER_SPEAKER	PC Speaker 		0	SOUND_MIXER_LINE	Line			0	SOUND_MIXER_MIC		Mic 			0	SOUND_MIXER_CD		CD 			0	SOUND_MIXER_IMIX	Monitor Mix 		0	SOUND_MIXER_ALTPCM	PCM			1	SOUND_MIXER_RECLEV	(not assigned)	SOUND_MIXER_IGAIN	Capture			0	SOUND_MIXER_OGAIN	Playback		0	SOUND_MIXER_LINE1	Aux			0	SOUND_MIXER_LINE2	Aux			1	SOUND_MIXER_LINE3	Aux			2	SOUND_MIXER_DIGITAL1	Digital			0	SOUND_MIXER_DIGITAL2	Digital			1	SOUND_MIXER_DIGITAL3	Digital			2	SOUND_MIXER_PHONEIN	Phone			0	SOUND_MIXER_PHONEOUT	Phone			1	SOUND_MIXER_VIDEO	Video			0	SOUND_MIXER_RADIO	Radio			0	SOUND_MIXER_MONITOR	Monitor			0The second column is the base-string of the corresponding ALSAcontrol.  In fact, the controls with "XXX [Playback|Capture][Volume|Switch]" will be checked in addition.The current assignment of these mixer elements is listed in the procfile, /proc/asound/cardX/oss_mixer, which will be like the following	VOLUME "Master" 0	BASS "" 0	TREBLE "" 0	SYNTH "" 0	PCM "PCM" 0	...where the first column is the OSS volume element, the second columnthe base-string of the corresponding ALSA control, and the third thecontrol index.  When the string is empty, it means that thecorresponding OSS control is not available.For changing the assignment, you can write the configuration to thisproc file.  For example, to map "Wave Playback" to the PCM volume,send the command like the following:	% echo 'VOLUME "Wave Playback" 0' > /proc/asound/card0/oss_mixerThe command is exactly as same as listed in the proc file.  You canchange one or more elements, one volume per line.  In the lastexample, both "Wave Playback Volume" and "Wave Playback Switch" willbe affected when PCM volume is changed.Like the case of PCM proc file, the permission of proc files depend onthe module options of snd.  you'll likely need to be superuser forsending the command above.As well as in the case of PCM proc file, you can save and restore thecurrent mixer configuration by reading and writing the whole fileimage.Unsupported Features====================MMAP on ICE1712 driver----------------------ICE1712 supports only the unconventional format, interleaved10-channels 24bit (packed in 32bit) format.  Therefore you cannot mmapthe buffer as the conventional (mono or 2-channels, 8 or 16bit) formaton OSS.USB devices-----------Some USB devices support only 24bit format packed in 3bytes.  Thisformat is not supported by OSS and no conversion is provided by kernelOSS emulation.  You can use the user-space OSS emulation via libaossinstead.

⌨️ 快捷键说明

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