On Wed, 06 Sep 2017 01:55:51 +0200, Jack Bates wrote: > > On 01/09/17 12:34 AM, Takashi Iwai wrote: > > On Wed, 30 Aug 2017 21:48:58 +0200, > > Jack Bates wrote: > >> > >> I confirmed with Wireshark that my USB sound card responds to GET_MIN > >> with 0x0000 and GET_MAX with 0x6300 .. The audio device class > >> definition [1] says the units are 1/256 dB (section 5.2.2.2.3: Mixer > >> Control) ... So by my calculation, the min and max are 0 and 99 dB > >> (0x6300 / 256 == 99) ... Why then does alsactl print: > >> > >>> range '0 - 99' > >>> dbmin 0 > >>> dbmax 38 > >> > >> (/usr/sbin/aslactl -f - store) > >> > >> I originally asked about this on the pulseaudio-discuss list [2] > >> because it uses "dB data" [3]. > >> > >> The "0 - 99" makes sense -- it lines up with my calculation ... Where > >> does the 38 come from? (I expect it's obvious, I just haven't found > >> the explanation?) > > > > Hm, what shows /proc/asound/card*/usbmixer proc file? > > It contains some raw data. > > It also shows dBmax=38 (it matches alsactl): > > > nottheoilrig@debian:~$ cat /proc/asound/card2/usbmixer > > USB Mixer: usb_id=0x05a740fa, ctrlif=0, ctlerr=0 > > Card: Bose Corporation Bose Revolve SoundLink at usb-0000:00:14.0-1, full speed > > Unit: 2 > > Control: name="PCM Playback Volume", index=0 > > Info: id=2, control=2, cmask=0x0, channels=1, type="S16" > > Volume: min=0, max=99, dBmin=0, dBmax=38 > > Unit: 2 > > Control: name="PCM Playback Switch", index=0 > > Info: id=2, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN" > > Volume: min=0, max=1, dBmin=0, dBmax=0 > > nottheoilrig@debian:~$ > > > Basically the driver simply interprets the USB descriptor min/max > > unless there are overriding mappings by quirk list. > > How can I inspect the device's USB descriptor min/max (to confirm that > 38 *is* what's advertised)? I was using Wireshark to capture the > GET_MAX request and response ([1] section 5.2.2.2.2: Get Mixer Unit > Control Request) -- in which case the response data is 0x6300 ... > > If the source behind the usbmixer proc file/dB data is the GET_MAX > response, then how does 0x6300 turn into 38 dB? I haven't spotted any > obvious quirks for usb_id=0x05a740fa (although I haven't read all of > mixer.c) ... get_min_max_with_quirks() would seem to interpret it as > 1/256 dB [2] (as per the spec) but 0x6300 / 256 != 38 ... I also see no special code doing wrong, could you check via an old-good way, e.g. just adding some debug prints? thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel