geoffreybennett / scarlett-gen2

Linux kernel source tree with additional Focusrite Scarlett and Clarett support ("Scarlett2 USB Protocol Mixer Driver")
200 stars 6 forks source link

Scarlett Solo Gen 2 - `This sound device does not have any controls.` #27

Closed bilogic closed 3 weeks ago

bilogic commented 4 weeks ago
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
...
# uname -r
6.8.12-2-pve
# lsusb | grep ocus
Bus 003 Device 005: ID 1235:8205 Focusrite-Novation Scarlett Solo USB
# cat /etc/modprobe.d/alsa.conf
options snd_usb_audio vid=0x1235 pid=0x8205 device_setup=1

Hi

  1. Doing the above has no effect, I still have no controls in alsamixer
  2. From what I could understand, my OS should have this driver already, correct?
  3. I'm running proxmox and for some reason, disabling secure boot prevents one of desktop VM from booting
  4. From the above, possible to tell if my system already has the driver?
geoffreybennett commented 3 weeks ago

Hi @bilogic,

No specific driver exists or is needed. Please see https://support.focusrite.com/hc/en-gb/articles/207547145-Mix-Control-or-Focusrite-Control-for-bus-powered-Scarletts — it's USB audio class compliant, supported by the generic USB audio driver, and there are no software controls.

Regards, Geoffrey.

bilogic commented 3 weeks ago

Thanks for the clarification! I shall end my search then.

bilogic commented 3 weeks ago

By the way, my main problem is the inability to reduce the headphone volume of my solo.

Do you know if there are any alsa commands that can do that? Or is hardware control the only way, and in this case, I have no way to do that?

geoffreybennett commented 3 weeks ago

On the 2nd Gen Solo, the big knob marked "Monitor" on the front panel controls the output level at both the rear panel outputs and the front panel headphone output (see https://fael-downloads-prod.focusrite.com/customer/prod/downloads/Scarlett%20Solo%202nd%20Gen%20User%20Guide%20v1.1%20-%20EN.pdf page 13). If yours doesn't do that, then I'd say that it's broken.

If what you're after is independent volume control of the front and rear outputs then you need a different Scarlett model. E.g. the 4th Gen Solo has two volume knobs; one for the rear outputs and one for the front headphone output. Somewhat related, if you want different things (not just different volume) coming out of the front and rear outputs then the 3rd and 4th Gen 4i4 can do that.

bilogic commented 3 weeks ago

The big knob can change levels, but I'm looking for software control, partly because the device is physically far from me, and software control opens up many other options of automation.

I come from the Windows world and it never occurred to me that there are USB audio devices that do not expose a way for the OS to control its volume. I'm pretty sure Windows was able to control the volume of this solo.

geoffreybennett commented 3 weeks ago

Oh, for sure there are software controls for audio. That's how Windows controls the volume of the Solo — just by sending louder/quieter audio to it, and the same facility is available in Linux, provided by your sound server (hopefully PipeWire, but there's also PulseAudio).

FYI, the larger interfaces (4i4 and up) do have software-controllable hardware volume (and you'd find those controls in alsamixer), and the latest/biggest interfaces (4th Gen 16i16 and up) have switched from potentiometer-based volume knobs to rotary encoders so you can turn up the volume from software even if you turned it all the way down on the front panel.

Does your desktop not have a volume control on it? E.g. Gnome has this: image

If not, try installing and running pavucontrol. image

For automation, check out the pamixer command. E.g. pamixer --set-volume 50.

bilogic commented 3 weeks ago

Hmm, it's complicated, so let's start with the simple one first:

Simple

  1. I run proxmox and my solo is connected to it, thus, there is no GUI.
  2. On the CLI, I can run aplay test.mp3, but it is played at max volume.
  3. I would like to control the solo's output volume using alsamixer or any other way, just not via aplay
  4. I just tried pamixer, gave a Connection error

Actual

  1. My Windows desktop is a VM has a series of DSPs and eventually routes its audio to the solo via VBAN https://vb-audio.com/Voicemeeter/vban.htm
  2. For some reason, I cannot get total silence when controlling the volume on Windows
  3. Thus, what I'm seeking to do is control volume directly at the solo
geoffreybennett commented 3 weeks ago

I see. I might not be much help here then as I've never tried to do audio + proxmox, but I'll share what I do know and give you some suggestions of what you should be looking for.

If you're passing the Solo through to Windows as a USB device then you've got no chance to change the volume in the Linux host, either through software or hardware controls, even if the Solo supported such a thing.

If you've created a virtual audio device for Windows to use, then the VM would appear to ALSA as just another audio application and you will be able to control the volume from Linux. The Solo has no facilities within itself to change the volume, besides the knob on the front panel.

ALSA (by default, without dmix) only supports one application at a time using a sound card, and most Linux distros will set up a sound server like PulseAudio or PipeWire for you so that more than one application can play audio at the same time. Probably proxmox doesn't install a sound server which would explain why pamixer says Connection error.

If you run lsof /dev/snd/*, that will let you confirm what application is connecting to ALSA. I'm guessing you'll see kvm there.

If my guess is right then you have two choices:

1) set up the softvol plugin https://alsa.opensrc.org/How_to_use_softvol_to_control_the_master_volume (I've never used this, but according to the web page, it's exactly what you'd need in these circumstances)

2) install PulseAudio or PipeWire and use pamixer to set the volume

How to do either of those on proxmox, I don't know sorry, but hopefully this is enough to point you in the right direction.

bilogic commented 3 weeks ago

No, it isn't USB passthrough. Anyway I found the solution:

# cat /etc/asound.conf
defaults.pcm.card 0
defaults.ctl.card 0

pcm.softvol {
    type            softvol
    slave {
        pcm         "sysdefault"
    }
    control {
        name        "Master"
        card        0
    }
}

alsamixer is able to control my volume now. Thank you!