Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Apr 2017 11:56:21 +0200
From:      Hans Petter Selasky <hps@selasky.org>
To:        Alexander Leidinger <Alexander@Leidinger.net>, "freebsd-usb@FreeBSD.org" <freebsd-usb@FreeBSD.org>
Subject:   Re: Question about usb audio device - how to select output connector
Message-ID:  <50fd6b50-a14b-6894-0735-fa6ed054852e@selasky.org>
In-Reply-To: <20170430113422.Horde.7udwHoKOQOINbeW7AxByIRW@webmail.leidinger.net>
References:  <20170430113422.Horde.7udwHoKOQOINbeW7AxByIRW@webmail.leidinger.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 04/30/17 11:34, Alexander Leidinger wrote:
> Hi,
> 
> I had a look at snd_uaudio and there I don't find the info I look for.
> 
> What I want to do is to have 6 chanel (5.1) SPDIF output. What I don't 
> understand is how to select the connectors. To my understanding the 
> soundsystem only sees a line out and a line in, but not all the other 
> connectors. Looking at the output of sysctl (dev.pcm, dev.uaudio and 
> hw.snd) doesn't give me a hint either.
> 
> What I have:
> ---snip---
> ugen5.2: <Creative Technology SB Live 24-bit External> at usbus5
> uaudio0 on uhub4
> uaudio0: <Creative Technology SB Live 24-bit External, class 0/0, rev 
> 1.10/1.00, addr 2> on usbus5
> uaudio0: Play: 48000 Hz, 4 ch, 24-bit S-LE PCM format, 2x8ms buffer.
> uaudio0: Play: 44100 Hz, 4 ch, 24-bit S-LE PCM format, 2x8ms buffer.
> uaudio0: Record: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
> uaudio0: Record: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
> uaudio0: Record: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
> uaudio0: No MIDI sequencer.
> pcm5: <USB audio> on uaudio0
> uaudio0: No HID volume keys found.
> ---snip---
> 
> What the sound subsystem sees:
> ---snip---
> # cat /dev/sndstat
> FreeBSD Audio Driver (64bit 2009061500/amd64)
> Installed devices:
> pcm0: <Realtek ALC889 (Rear Analog 7.1/2.0)> on hdaa0 kld snd_hda 
> (1p:1v/1r:1v) default
>          snddev 
> flags=0x2e6<AUTOVCHAN,SOFTPCMVOL,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm0:play:dsp0.p0]: spd 48000, fmt 0x00200010, flags 
> 0x00002100, 0x00000004
>          interrupts 62, underruns 0, feed 62, ready 0 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {userland} -> feeder_mixer(0x00200010) -> {hardware}
>          pcm0:play:dsp0.p0[pcm0:virtual:dsp0.vp0]: spd 44100/48000, fmt 
> 0x00201000/0x00200010, flags 0x10000000, 0x0000002b
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:0/0/0|bs:131072/4096/32]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00201000) -> 
> feeder_format(0x00201000 -> 0x00200010) -> feeder_volume(0x00200010) -> 
> feeder_rate(0x00200010 q:1 44100 -> 48000) -> {hardware}
>          [pcm0:record:dsp0.r0]: spd 48000, fmt 0x00200010, flags 
> 0x00002100, 0x00000005
>          interrupts 0, overruns 0, feed 0, hfree 4096, sfree 4096 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {hardware} -> feeder_root(0x00200010) -> 
> feeder_mixer(0x00200010) -> {userland}
>          pcm0:record:dsp0.r0[pcm0:virtual:dsp0.vr0]: spd 8000, fmt 
> 0x00100008, flags 0x10000000, 0x00000000
>          interrupts 0, overruns 0, feed 0, hfree 0, sfree 0 
> [b:0/0/0|bs:0/0/0]
>          channel flags=0x10000000<VIRTUAL>
>          {hardware} -> feeder_root(0x00000000) -> {userland}
> pcm1: <Realtek ALC889 (Front Analog)> on hdaa0 kld snd_hda (1p:1v/2r:1v)
>          snddev 
> flags=0x2e6<AUTOVCHAN,SOFTPCMVOL,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm1:play:dsp1.p0]: spd 48000, fmt 0x00200010, flags 
> 0x00002100, 0x00000004
>          interrupts 128, underruns 0, feed 128, ready 0 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {userland} -> feeder_mixer(0x00200010) -> {hardware}
>          pcm1:play:dsp1.p0[pcm1:virtual:dsp1.vp0]: spd 22050/48000, fmt 
> 0x00201000/0x00200010, flags 0x10000000, 0x0000002b
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:0/0/0|bs:65536/2048/32]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00201000) -> 
> feeder_format(0x00201000 -> 0x00200010) -> feeder_volume(0x00200010) -> 
> feeder_rate(0x00200010 q:1 22050 -> 48000) -> {hardware}
>          [pcm1:record:dsp1.r0]: spd 48000, fmt 0x00200010, flags 
> 0x00002100, 0x00000005
>          interrupts 0, overruns 0, feed 0, hfree 4096, sfree 4096 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {hardware} -> feeder_root(0x00200010) -> 
> feeder_mixer(0x00200010) -> {userland}
>          [pcm1:record:dsp1.r1]: spd 8000, fmt 0x00100008, flags 
> 0x00000000, 0x00000000
>          interrupts 0, overruns 0, feed 0, hfree 65536, sfree 0 
> [b:65536/32768/2|bs:0/0/0]
>          channel flags=0x0
>          {hardware} -> feeder_root(0x00000000) -> {userland}
>          pcm1:record:dsp1.r0[pcm1:virtual:dsp1.vr0]: spd 8000, fmt 
> 0x00100008, flags 0x10000000, 0x00000000
>          interrupts 0, overruns 0, feed 0, hfree 0, sfree 0 
> [b:0/0/0|bs:0/0/0]
>          channel flags=0x10000000<VIRTUAL>
>          {hardware} -> feeder_root(0x00000000) -> {userland}
> pcm2: <Realtek ALC889 (Rear Digital)> on hdaa0 kld snd_hda (1p:1v/0r:0v)
>          snddev 
> flags=0x2e7<SIMPLEX,AUTOVCHAN,SOFTPCMVOL,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm2:play:dsp2.p0]: spd 48000, fmt 0x00200010, flags 
> 0x00006100, 0x00000004
>          interrupts 133, underruns 0, feed 133, ready 0 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x6100<BUSY,HAS_VCHAN,VCHAN_PASSTHROUGH>
>          {userland} -> feeder_mixer(0x00200010) -> {hardware}
>          pcm2:play:dsp2.p0[pcm2:virtual:dsp2.vp0]: spd 22050/48000, fmt 
> 0x00201000/0x00200010, flags 0x10000000, 0x0000002b
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:0/0/0|bs:65536/2048/32]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00201000) -> 
> feeder_format(0x00201000 -> 0x00200010) -> feeder_volume(0x00200010) -> 
> feeder_rate(0x00200010 q:1 22050 -> 48000) -> {hardware}
> pcm3: <NVIDIA (0x001c) (HDMI/DP 8ch)> on hdaa1 kld snd_hda (1p:1v/0r:0v)
>          snddev 
> flags=0x2e7<SIMPLEX,AUTOVCHAN,SOFTPCMVOL,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm3:play:dsp3.p0]: spd 48000, fmt 0x00200010, flags 
> 0x00006100, 0x00000004
>          interrupts 153, underruns 0, feed 153, ready 0 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x6100<BUSY,HAS_VCHAN,VCHAN_PASSTHROUGH>
>          {userland} -> feeder_mixer(0x00200010) -> {hardware}
>          pcm3:play:dsp3.p0[pcm3:virtual:dsp3.vp0]: spd 22050/48000, fmt 
> 0x00201000/0x00200010, flags 0x10000000, 0x0000002b
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:0/0/0|bs:65536/2048/32]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00201000) -> 
> feeder_format(0x00201000 -> 0x00200010) -> feeder_volume(0x00200010) -> 
> feeder_rate(0x00200010 q:1 22050 -> 48000) -> {hardware}
> pcm4: <NVIDIA (0x001c) (HDMI/DP 8ch)> on hdaa1 kld snd_hda (1p:1v/0r:0v)
>          snddev 
> flags=0x2e7<SIMPLEX,AUTOVCHAN,SOFTPCMVOL,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm4:play:dsp4.p0]: spd 48000, fmt 0x00200010, flags 
> 0x00006100, 0x00000004
>          interrupts 437, underruns 0, feed 437, ready 0 
> [b:4096/2048/2|bs:4096/2048/2]
>          channel flags=0x6100<BUSY,HAS_VCHAN,VCHAN_PASSTHROUGH>
>          {userland} -> feeder_mixer(0x00200010) -> {hardware}
>          pcm4:play:dsp4.p0[pcm4:virtual:dsp4.vp0]: spd 22050/48000, fmt 
> 0x00201000/0x00200010, flags 0x10000000, 0x0000002b
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:0/0/0|bs:65536/2048/32]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00201000) -> 
> feeder_format(0x00201000 -> 0x00200010) -> feeder_volume(0x00200010) -> 
> feeder_rate(0x00200010 q:1 22050 -> 48000) -> {hardware}
> pcm5: <USB audio> at ? kld snd_uaudio (1p:1v/1r:1v)
>          snddev flags=0x2e2<AUTOVCHAN,BUSY,MPSAFE,REGISTERED,VPC>
>          [pcm5:play:dsp5.p0]: spd 48000, fmt 0x00200010/0x00410000, 
> flags 0x00002100, 0x00000046
>          interrupts 0, underruns 0, feed 0, ready 0 
> [b:9216/4608/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {userland} -> feeder_mixer(0x00200010) -> 
> feeder_format(0x00200010 -> 0x00201000) -> feeder_matrix(2.0 -> 4.0) -> 
> feeder_format(0x00401000 -> 0x00410000) -> {hardware}
>          pcm5:play:dsp5.p0[pcm5:virtual:dsp5.vp0]: spd 8000, fmt 
> 0x00100008, flags 0x10000000, 0x00000000
>          interrupts 0, underruns 0, feed 0, ready 0 [b:0/0/0|bs:0/0/0]
>          channel flags=0x10000000<VIRTUAL>
>          {userland} -> feeder_root(0x00000000) -> {hardware}
>          [pcm5:record:dsp5.r0]: spd 48000, fmt 0x00200010/0x00210000, 
> flags 0x00002100, 0x00000007
>          interrupts 0, overruns 0, feed 0, hfree 4608, sfree 4096 
> [b:4608/2304/2|bs:4096/2048/2]
>          channel flags=0x2100<BUSY,HAS_VCHAN>
>          {hardware} -> feeder_root(0x00210000) -> 
> feeder_format(0x00210000 -> 0x00200010) -> feeder_mixer(0x00200010) -> 
> {userland}
>          pcm5:record:dsp5.r0[pcm5:virtual:dsp5.vr0]: spd 8000, fmt 
> 0x00100008, flags 0x10000000, 0x00000000
>          interrupts 0, overruns 0, feed 0, hfree 0, sfree 0 
> [b:0/0/0|bs:0/0/0]
>          channel flags=0x10000000<VIRTUAL>
>          {hardware} -> feeder_root(0x00000000) -> {userland}
> No devices installed from userspace.
> ---snip---
> 
> What I have in /dev:
> ---snip---
> # ll /dev/(dsp|mix|snd)*
> crw-rw-rw-  1 root  wheel   0xed 29 Apr. 17:07 /dev/dsp0.0
> crw-rw-rw-  1 root  wheel  0x126 29 Apr. 16:59 /dev/dsp1.0
> crw-rw-rw-  1 root  wheel  0x127 29 Apr. 16:59 /dev/dsp1.2
> crw-rw-rw-  1 root  wheel  0x124 29 Apr. 16:59 /dev/dsp2.0
> crw-rw-rw-  1 root  wheel  0x125 29 Apr. 16:59 /dev/dsp2.2
> crw-rw-rw-  1 root  wheel  0x122 29 Apr. 16:59 /dev/dsp3.0
> crw-rw-rw-  1 root  wheel  0x123 29 Apr. 16:59 /dev/dsp3.2
> crw-rw-rw-  1 root  wheel  0x120 29 Apr. 16:59 /dev/dsp4.0
> crw-rw-rw-  1 root  wheel  0x121 29 Apr. 16:59 /dev/dsp4.2
> crw-rw-rw-  1 root  wheel   0x79 25 Apr. 21:35 /dev/mixer0
> crw-rw-rw-  1 root  wheel   0x7e 25 Apr. 21:35 /dev/mixer1
> crw-rw-rw-  1 root  wheel   0x83 25 Apr. 21:35 /dev/mixer2
> crw-rw-rw-  1 root  wheel   0x85 25 Apr. 21:35 /dev/mixer3
> crw-rw-rw-  1 root  wheel   0x86 25 Apr. 21:35 /dev/mixer4
> crw-rw-rw-  1 root  wheel  0x10b 29 Apr. 16:53 /dev/mixer5
> crw-r--r--  1 root  wheel   0x73 25 Apr. 21:35 /dev/sndstat
> ---snip---
> 
> Mixer settings for uaudio:
> ---snip---
> # mixer -f /dev/mixer5
> Mixer vol      is currently set to  75:75
> Mixer pcm      is currently set to  75:75
> Mixer line     is currently set to  75:75
> ---snip---
> 
> Connectors on the hardware:
>   - front - optical out
>   - front - mix in
>   - front - phones
>   - rear - spdif out
>   - rear - center/sub out
>   - rear - rear
>   - rear - front
>   - rear - line in
>   - rear - DIN
> 
> Buttons on the hardware (for completeness, not important for now):
>   - output volume (some kind of slider)
>   - input volume (some kind of slider)
>   - CMSS (in Windows some kind of channel-upmix)
> 

Hi,

Usually this is done using the "mixer" utility.

All the USB device knobs that are available which don't fit into the 
mixer utility are exported as sysctls. See sysctl -a | grep pcm

For example:
sysctl dev.pcm.5.mixer

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50fd6b50-a14b-6894-0735-fa6ed054852e>