alsamixer USB 耳机/麦克风组合无法控制麦克风

alsamixer USB 耳机/麦克风组合无法控制麦克风

我尝试了所有能在网上找到的方法,但还是无能为力。HyperX Cloud Flight S 耳机不允许我使用麦克风,而之前的非 S 版本却运行正常。以下是一些相关输出:

uname -a
Linux laptop 5.3.0-42-generic #34-Ubuntu SMP Fri Feb 28 05:49:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
amixer -c1 contents
numid=4,iface=CARD,name='Keep Interface'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=2,iface=MIXER,name='PCM Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=7,iface=MIXER,name='PCM Playback Switch',index=1
  ; type=BOOLEAN,access=rw------,values=1
amixer: Control hw:1 element read error: Invalid argument

numid=3,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=8,min=0,max=74,step=0
  : values=54,54,54,54,54,54,54,54
  | dBminmax-min=-74.00dB,max=0.00dB
numid=8,iface=MIXER,name='PCM Playback Volume',index=1
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=1,step=0
amixer: Control hw:1 element read error: Invalid argument

numid=9,iface=MIXER,name='Mic Capture Switch'
  ; type=BOOLEAN,access=rw------,values=1
amixer: Control hw:1 element read error: Invalid argument

numid=10,iface=MIXER,name='Mic Capture Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=1,step=0
amixer: Control hw:1 element read error: Invalid argument

numid=5,iface=PCM,name='Capture Channel Map'
  ; type=INTEGER,access=r----R--,values=1,min=0,max=36,step=0
  : values=0
  | container
    | chmap-fixed=MONO

numid=1,iface=PCM,name='Playback Channel Map'
  ; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
  : values=3,4
  | container
    | chmap-fixed=FL,FR
    | chmap-fixed=FL,FR,FC,LFE,SL,SR,SL,SR

numid=6,iface=PCM,name='Playback Channel Map',device=1
  ; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
  : values=0,0
  | container
    | chmap-fixed=FL,FR
lsusb
Bus 001 Device 003: ID 0951:16ea Kingston Technology HyperX Cloud Flight S
cat /proc/asound/cards
1 [S              ]: USB-Audio - HyperX Cloud Flight S
                      Kingston HyperX Cloud Flight S at usb-0000:00:14.0-2, full speed
arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: S [HyperX Cloud Flight S], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

答案1

内核更新在 5.7rc3 中引入了针对此问题的补丁(专门针对此耳机)。修补后,您的 dmesg 输出应该有一行如下内容:

[    6.804026] kernel: usb 1-1: Found post-registration device assignment: 095116ea:02

alsa配置文档说明:

Module snd-usb-audio
--------------------
...
delayed_register
    The option is needed for devices that have multiple streams
    defined in multiple USB interfaces.  The driver may invoke
    registrations multiple times (once per interface) and this may
    lead to the insufficient device enumeration.
    This option receives an array of strings, and you can pass
    ID:INTERFACE like ``0123abcd:4`` for performing the delayed
    registration to the given device.  In this example, when a USB
    device 0123:abcd is probed, the driver waits the registration
    until the USB interface 4 gets probed.
    The driver prints a message like "Found post-registration device
    assignment: 1234abcd:04" for such a device, so that user can
    notice the need.

因此,利用从 dmesg 获取的上述信息以及从配置文档中获取所需的字段,将其添加到 alsa-base.conf 的末尾

# Add delayed register for HyperX Cloud Flight S Headset
options snd-usb-audio delayed_register=095116ea:02

然后重新启动,您应该能够看到预期的耳机和配置文件。

顺便提一下,snd-usb-audio 模块中还有另一个选项

quirk_alias
    Quirk alias list, pass strings like ``0123abcd:5678beef``, which
    applies the existing quirk for the device 5678:beef to a new
    device 0123:abcd.

这让我相信你可以复制内核 5.4 为“Kingston HyperX AMP”编写的怪癖并将其应用于此耳机,以及添加延迟寄存器,它将在 5.7 之前工作。由于我已经下定决心并进行了内核升级,所以我不会回头检查。如果有人让它工作,请告诉我,我会在这里更新帖子。它应该像以下一样简单:

options snd-usb-audio quirk_alias=095116ea:095116d8 delayed_register=095116ea:02

让我知道!

相关内容