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

FreeBSD Manual Pages

  
 
  

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

NAME
     virtual_oss -- daemon to multiplex	and demultiplex	an OSS device

SYNOPSIS
     virtual_oss [-h]

DESCRIPTION
     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
     ways.

     virtual_oss requires the cuse(3) kernel module.  To load the driver as a
     module at boot time, place	the following line in loader.conf(5):

	    cuse_load="YES"

     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 to bits for the subsequent commands.  Valid val-
	     ues are 8,	16, 24 and 32.

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

     -s	value
	     Set default buffer	size to	value.	If the argument	is suffixed by
	     "ms" it is	interpreted as milliseconds.  Else the argument	gives
	     number of samples.	 The buffer size specified is per channel.  If
	     there are multiple	channels, the total buffer size	will be
	     larger.

     -i	priority
	     Set real-time priority to priority.  Refer	to rtprio(1) for more
	     information.

     -a	log2_amp
	     Set the default DSP output	and input device amplification to
	     log2_amp.	The specified amplification is logarithmic.  Valid
	     values range from -63 to 63 inclusivly.  The device input ampli-
	     fication gets set to minus	log2_amp and the device	output ampli-
	     fication gets set to log2_amp.

     -a	i,log2_amp
	     Set the default DSP input device amplification to log2_amp.  The
	     specified amplification is	logarithmic.  Valid values range from
	     -63 to 63 inclusivly.

     -a	o,log2_amp
	     Set default DSP output device amplification to log2_amp.  The
	     specified amplification is	logarithmic.  Valid values range from
	     -63 to 63 inclusivly.

     -p	polarity
	     Set default polarity of DSP device.  A value of zero means	normal
	     polarity.	A value	of one means negative polarity.

     -e	rx_mute,tx_mute
	     Set default mute state of DSP device.  A value of zero means un-
	     muted.  A value of	one means muted.

     -m	rx_ch,tx_ch,....
	     Set default channel mapping of DSP	device,	as a comma separated
	     list of integers.	The first integer selects the receive channel,
	     the second	value selects the transmit channel and then it re-
	     peats.  A value of	zero indicates the first receive or transmit
	     channel.

     -C	num  Set the maximum number of mix channels to num.

     -c	num  Set mix channels for the subsequent commands.

     -M	type,src_ch,dst_ch,pol,mute,log2_gain
	     Add a monitoring filter.  The filter consists of a	list of	comma
	     separated arguments.  The first argument indicates	the type of
	     monitoring	filter:

	     i	     Feedback one mix input channel into another mix output
		     channel, for remote feedback.

	     o	     Add one mix output	channel	into another mix output	chan-
		     nel, for creating a mix of	multiple output	channels.

	     x	     Feedback one mix output channel into another mix input
		     channel, for local	feedback.
	     The second	argument gives the source mix channel.	The third ar-
	     gument gives the destination mix channel.	The fourth argument
	     gives the polarity, default is zero.  The fifth argument gives
	     the mute state, default is	one or muted.  The sixth argument
	     gives the amplitude, default is zero or no	gain.

     -t	devname
	     Set control device	name.

     -P	devname
	     Set playback DSP device only.  Specifying /dev/null is magic and
	     means no playback device.	Specifying a sndio(7) device descrip-
	     tor prefixed by "/dev/sndio/" is also magic, and will use a sndio
	     backend rather than an OSS	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-
	     tions.

     -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	.

     -E	enable_recording
	     If	the value passed is non-zero, recording	is enabled.  Else
	     recording is disabled.  This can be used to synchronize multiple
	     recording streams.

     -h	     Show usage	and all	available options.

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

	   virtual_oss \
		   -S \
		   -c 2	-r 48000 -b 16 -s 4ms -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-
     devices:

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

	   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	4ms -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 \
		   -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 \
		   -M x,8,0,0,1,0 \
		   -M x,8,1,0,1,0 \
		   -t vdsp.ctl

     Create a secondary	audio device sending its output	audio into both	input
     and output	channels of the	main DSP device.

	   virtual_oss \
		   -C 4	-c 2 \
		   -r 48000 \
		   -b 24 \
		   -s 4ms \
		   -f /dev/dsp3	\
		   -c 2	\
		   -d dsp \
		   -m 2,2,3,3 \
		   -d dsp.speech \
		   -M o,2,0,0,0,0 \
		   -M o,3,1,0,0,0 \
		   -M x,2,0,0,0,0 \
		   -M x,3,1,0,0,0

     Connect to	a bluetooth audio headset, playback only:

	   virtual_oss \
		   -C 2	-c 2 -r	48000 -b 16 -s 4ms \
		   -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 4ms \
		   -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 4ms \
		   -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-
     tual_out:

	   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

     Create a playback-only audio device which sends its output	to a remote
     sndio(7) server:

	   virtual_oss \
		   -b 16 -c 2 -r 44100 -s 50ms \
		   -R /dev/null	-O /dev/sndio/snd@remotehost/0 -d dsp

     Create a full-duplex audio	device exchanging audio	using the default
     sndio(7) server:

	   virtual_oss -S -b 16	-C 2 -c	2 -r 48000 -s 4ms \
		   -f /dev/sndio/default -d dsp

     How to set	intel based CPUs in performance	mode:

	   sysctl -aN |	fgrep dev.hwpstate | fgrep epp | while read OID
	   do
	   sysctl ${OID}=0
	   done

	   sysctl kern.sched.preempt_thresh=224

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

FILES
SEE ALSO
     sysctl(8),	virtual_bt_speaker(8), virtual_equalizer(8),
     virtual_oss_cmd(8), and cuse(3)

AUTHORS
     virtual_oss was written by	Hans Petter Selasky hselasky@freebsd.org.

FreeBSD			       November	27, 2022		       FreeBSD

NAME | SYNOPSIS | DESCRIPTION | EXAMPLES | NOTES | FILES | SEE ALSO | AUTHORS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=virtual_oss&sektion=8&manpath=FreeBSD+13.2-RELEASE+and+Ports>

home | help