Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
VIRTUAL_OSS(8)		  BSD System Manager's Manual		VIRTUAL_OSS(8)

     virtual_oss -- daemon to multiplex	and demultiplex	an OSS device

     virtual_oss [-h]

     virtual_oss is an audio mixing application	that multiplexes and demulti-
     plexes a single OSS device	into multiple customizable OSS compatible de-
     vices using character devices from	userspace. These devices can be	used
     to	record played back audio and mix the individual	channels in multiple

     virtual_oss requires the cuse4bsd(3) or cuse(3) kernel module. To load
     the driver	as a module at boot time, place	onf of the following lines in

	    # FreeBSD <	11
	    # FreeBSD >= 11

     All channel numbers start at zero.	 Left channel is zero and right	chan-
     nel is one.

     The following options are available:

     -B	     Run program in background.

     -S	     Enable automatic DSP rate resampling.

     -Q	quality
	     Set resampling quality: 0=best, 1=medium and 2=fastest (default).

     -b	bits
	     Set sample-depth in bits for the proceeding commands.

     -r	rate
	     Set default sample-rate for the proceeding	commands.

     -s	size
	     Set default buffer	size.  Size is specified as <samples> or <mil-

     -i	priority
	     Set real-time priority.

     -a	amp  Set default DSP device amplification as power of two value.

     -p	polarity
	     Set default polarity of DSP device.

     -e	mute
	     Set default mute state of DSP device.

     -m	channels
	     Set default channel mapping of DSP	device.

     -C	num  Set maximum number	of mix channels.

     -c	num  Set mix channels for the proceeding commands.

     -M	filter
	     Add a monitoring filter.

     -t	devname
	     Set control device	name.

     -P	devname
	     Set playback DSP device only.  Specifying /dev/null is magic and
	     means no playback device.

     -O	devname
	     Set playback DSP device only which	acts as	a master device.  This
	     option is used in conjunction with	-R /dev/null .

     -R	devname
	     Set recording DSP device only.  Specifying	/dev/null is magic and
	     means no recording	device.

     -f	devname
	     Set both playback and recording DSP device

     -T	devname
	     Install entry in /dev/sndstat.

     -w	name
	     Create a WAV file format compatible companion device by given
	     name.  This option	should be specified before the -d and -l op-

     -d	name
	     Create an OSS device by given name.

     -l	name
	     Create a loopback OSS device by given name.

     -L	name
	     Create a loopback OSS device which	acts as	a master device.  This
	     option is used in conjunction with	-f /dev/null .

     -F	size
	     Set receive filter	size in	number of samples or <milliseconds>ms
	     for the next device to be created.

     -G	size
	     Set transmit filter size in number	of samples or <milliseconds>ms
	     for the next device to be created.

     -D	file
	     Write process ID of virtual_oss to	file.

     -g	knee,attack,decay
	     Enable device compressor in receive direction.  See description
	     of	-x option.

     -x	knee,attack,decay
	     Enable output compressor and set knee, attack and decay.  Knee is
	     in	the range 0..255, while	attack and decay are between 0 and 62.
	     Samples having an absolute	value lower than the knee are trans-
	     mitted unchanged.	Sample values over the knee are	lowered	"a
	     little bit".  You can think about attack and decay	as a measure
	     of	how fast or slow the gain of the compressor will work.	It is
	     advised that attack is low, so it reacts fast once	too high sam-
	     ple values	appear.	 It is also advised that the decay value is
	     higher than the attack value so that the gain reduction is	gradu-
	     ally removed.  The	reasoning behind this is that the compressor
	     should react almost immediately when high volume signals arrive
	     to	protect	the hardware, but it slowly changes gain when there
	     are no loud signals to avoid distorting the signal.  The default
	     values are	85,3,20	.

     -h	     Show usage	and all	available options.

     Split a 2-channel OSS compatible sound device into	multiple subdevices:

	   virtual_oss \
		   -S \
		   -c 2	-r 48000 -b 16 -s 768 -f /dev/dspX \
		   -a 0	-b 16 -c 2 -m 0,0,1,1 -d vdsp.zyn \
		   -a 0	-b 16 -c 2 -m 0,0,1,1 -d vdsp.fld \
		   -a 0	-b 16 -c 2 -m 0,0,1,1 -d dsp \
		   -a 0	-b 16 -c 2 -m 0,0,1,1 -w vdsp.jack.wav -d vdsp.jack \
		   -a 0	-b 16 -c 2 -m 0,0,1,1 -w vdsp.rec.wav -l vdsp.rec \
		   -M i,0,0,0,1,0 \
		   -M i,0,0,0,1,0 \
		   -M i,0,0,0,1,0 \
		   -M i,0,0,0,1,0 \
		   -t vdsp.ctl

     Split an 8-channel	24-bit OSS compatible sound device into	multiple sub-

	   sysctl dev.pcm.X.rec.vchanformat=s24le:7.1
	   sysctl dev.pcm.X.rec.vchanrate=48000

	   mixer -f /dev/mixerX	-s vol 100
	   mixer -f /dev/mixerX	-s pcm 100

	   virtual_oss \
		   -S \
		   -i 8	\
		   -x 85,3,20 \
		   -C 16 -c 8 -r 48000 -b 32 -s	768 -f /dev/dspX \
		   -a 12 -b 16 -c 2 -m 0,4,1,5 -d dsp \
		   -a 12 -b 16 -c 2 -m 8,8,9,9 -d vdsp \
		   -a 13 -b 16 -c 2 -m 10,10,11,11 -d vdsp.fld \
		   -a 0	-b 32 -c 4 -m 4,2,5,3,6,4,7,5 -d vdsp.jack \
		   -a -3 -b 32 -c 2 -m 14,14,15,15 -d vdsp.zyn.base \
		   -a -3 -b 32 -c 2 -m 14,14,15,15 -d vdsp.zyn.synth \
		   -e 0,1 \
		   -a 0	-b 32 -c 8 -m 0,8,1,9,2,8,3,9,4,8,5,9,6,8,7,9 -w vdsp.rec.mic.wav -d vdsp.rec.mic \
		   -a 0	-b 32 -c 2 -m 0,8,1,9 -w vdsp.rec.master.wav -d	vdsp.master.mic	\
		   -a 0	-b 32 -c 2 -m 10,10,11,11 -w vdsp.rec.fld.wav -l vdsp.rec.fld \
		   -a 0	-b 32 -c 2 -m 12,12,13,13 -w vdsp.rec.jack.wav -l vdsp.rec.jack	\
		   -a 0	-b 32 -c 2 -m 14,14,15,15 -w vdsp.rec.zyn.wav -l vdsp.rec.zyn \
		   -M o,8,0,0,0,0 \
		   -M o,9,1,0,0,0 \
		   -M o,10,0,0,0,0 \
		   -M o,11,1,0,0,0 \
		   -M o,12,0,0,0,0 \
		   -M o,13,1,0,0,0 \
		   -M o,14,0,0,0,0 \
		   -M o,15,1,0,0,0 \
		   -M i,14,14,0,1,0 \
		   -M i,15,15,0,1,0 \
		   -t vdsp.ctl

     Connect to	a bluetooth audio headset, playback only:

	   virtual_oss \
		   -C 2	-c 2 -r	48000 -b 16 -s 1024 \
		   -R /dev/null	-P /dev/bluetooth/xx:xx:xx:xx:xx:xx -d dsp

     Connect to	a bluetooth audio headset, playback and	recording:

	   virtual_oss \
		   -C 2	-c 2 -r	48000 -b 16 -s 1024 \
		   -f /dev/bluetooth/xx:xx:xx:xx:xx:xx -d dsp

     Create recording device which outputs a WAV-formatted file:

	   virtual_oss \
		   -C 2	-c 2 -r	48000 -b 16 -s 1024 \
		   -f /dev/dspX	-w dsp.wav -d dsp

     Create a device named dsp.virtual which mix the samples written by	all
     clients and outputs the result for	further	processing into	dsp.vir-

	   virtual_oss \
		   -S -Q 0 -b 16 -c 2 -r 96000 -s 100ms	-i 20 \
		   -f /dev/null	-d dsp.virtual -L dsp.virtual_out

     All character devices are created using the 0666 mode which gives every-
     one in the	system access.

     virtual_bt_speaker(8), virtual_equalizer(8), cuse(3) and cuse4bsd(3)

     virtual_oss was written by	Hans Petter Selasky

FreeBSD				August 7, 2020			       FreeBSD


Want to link to this manual page? Use this URL:

home | help