Manjaro/Arch+KDE:扬声器测试有效但应用程序没有声音(外部 USB 声卡)

Manjaro/Arch+KDE:扬声器测试有效但应用程序没有声音(外部 USB 声卡)

我有一个 Cinebar One 扬声器系统,内置声卡,连接到我的电脑 USB 端口。当我按下 KDE 音频设置中的“前置右/前置左”扬声器测试按钮时,它可以毫无问题地被识别。我可以听到友好的女士的声音告诉我它工作正常。speaker-test从终端也可以工作。除了我已经对各种配置文件进行的编辑(在最后描述)外,这是 Manjaro 18.0.2(已安装更新)的全新安装,内核为 4.19.28-1。

但是其他所有应用程序都不会发出声音,当另​​一个应用程序同时运行时(例如 vlc),扬声器测试将静音。我将其配置得与笔记本电脑上的完全相同,它在那里运行没有问题。

KDE-Audio-Config - Advanced-Tab 的屏幕截图
KDE-Audio-Config - 应用程序选项卡的屏幕截图
KDE-Audio-Config - 设备选项卡的屏幕截图

首先我检查是否使用了错误的源和接收器pactl info

Server String: unix:/run/user/1000/pulse/native
Library Protocol Version: 32
Server Protocol Version: 32
Is Local: yes
Client Index: 82
Tile Size: 65472
User Name: takiro
Host Name: takiro-desktop
Server Name: pulseaudio
Server Version: 12.2
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo
Default Source: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo.monitor
Cookie: 5ca7:421f

Default Sink并且Default Source是正确的,据我所知,其他设置也正确。

然后我想应用程序可能使用了错误的接收器,或者可能被静音或堵塞了。我pactl list sink-inputs在应用程序(VLC)运行时检查了这一点

Sink Input #94
        Driver: protocol-native.c
        Owner Module: 13
        Client: 79
        Sink: 24
        Sample Specification: float32le 2ch 44100Hz
        Channel Map: front-left,front-right
        Format: pcm, format.rate = "44100"  format.sample_format = "\"float32le\""  format.channels = "2"  format.channel_map = "\"front-left,front-right\""
        Corked: no
        Mute: no
        Volume: front-left: 65536 / 100% / 0,00 dB,   front-right: 65536 / 100% / 0,00 dB
                balance 0,00
        Buffer Latency: 339659 usec
        Sink Latency: 48859 usec
        Resample method: copy
        Properties:
                media.role = "video"
                media.name = "audio stream"
                application.name = "VLC media player (LibVLC 3.0.6)"
                native-protocol.peer = "UNIX socket client"
                native-protocol.version = "32"
                application.id = "org.VideoLAN.VLC"
                application.version = "3.0.6"
                application.icon_name = "vlc"
                application.language = "en_US.UTF-8"
                application.process.id = "4215"
                application.process.user = "takiro"
                application.process.host = "takiro-desktop"
                application.process.binary = "vlc"
                window.x11.display = ":0"
                application.process.machine_id = "34b82a1eb1ad4ab48c8d7c2b845005f6"
                application.process.session_id = "2"
                module-stream-restore.id = "sink-input-by-media-role:video"

正如你所看到的,它既没有静音,也没有塞住。仔细检查了一下sink: 24实际情况,我运行了pactl list sinks

Sink #24
        State: RUNNING
        Name: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo
        Description: Teufel Cinebar One Digital Stereo (IEC958)
        Driver: module-alsa-card.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 32
        Mute: no
        Volume: front-left: 65506 / 100% / -0,01 dB,   front-right: 65506 / 100% / -0,01 dB
                balance 0,00
        Base Volume: 65536 / 100% / 0,00 dB
        Monitor Source: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo.monitor
        Latency: 48456 usec, configured 40000 usec
        Flags: HARDWARE DECIBEL_VOLUME LATENCY SET_FORMATS 
        Properties:
                alsa.resolution_bits = "16"
                device.api = "alsa"
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "USB Audio"
                alsa.id = "USB Audio"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "1"
                alsa.card_name = "Teufel Cinebar One"
                alsa.long_card_name = "Teufel Cinebar One at usb-0000:00:14.0-8, full speed"
                alsa.driver_name = "snd_usb_audio"
                device.bus_path = "pci-0000:00:14.0-usb-0:8:1.0"
                sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb2/2-8/2-8:1.0/sound/card1"
                udev.id = "usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00"
                device.bus = "usb"
                device.vendor.id = "2cc2"
                device.vendor.name = "2cc2"
                device.product.id = "0005"
                device.product.name = "Teufel Cinebar One"
                device.serial = "2cc2_Teufel_Cinebar_One_ABCDEF0123456789"
                device.string = "iec958:1"
                device.buffering.buffer_size = "352800"
                device.buffering.fragment_size = "176400"
                device.access_mode = "mmap+timer"
                device.profile.name = "iec958-stereo"
                device.profile.description = "Digital Stereo (IEC958)"
                device.description = "Teufel Cinebar One Digital Stereo (IEC958)"
                alsa.mixer_name = "USB Mixer"
                alsa.components = "USB2cc2:0005"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-usb"
        Ports:
                iec958-stereo-output: Digital Output (S/PDIF) (priority: 0)
        Active Port: iec958-stereo-output
        Formats:
                pcm

正确的设备和水槽。

pactl list sources也没有给我任何提示。

Source #24
        State: IDLE
        Name: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo.monitor
        Description: Monitor of Teufel Cinebar One Digital Stereo (IEC958)
        Driver: module-alsa-card.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 32
        Mute: no
        Volume: front-left: 65536 / 100% / 0,00 dB,   front-right: 65536 / 100% / 0,00 dB
                balance 0,00
        Base Volume: 65536 / 100% / 0,00 dB
        Monitor of Sink: alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo
        Latency: 0 usec, configured 2000000 usec
        Flags: DECIBEL_VOLUME LATENCY 
        Properties:
                device.description = "Monitor of Teufel Cinebar One Digital Stereo (IEC958)"
                device.class = "monitor"
                alsa.card = "1"
                alsa.card_name = "Teufel Cinebar One"
                alsa.long_card_name = "Teufel Cinebar One at usb-0000:00:14.0-8, full speed"
                alsa.driver_name = "snd_usb_audio"
                device.bus_path = "pci-0000:00:14.0-usb-0:8:1.0"
                sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb2/2-8/2-8:1.0/sound/card1"
                udev.id = "usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00"
                device.bus = "usb"
                device.vendor.id = "2cc2"
                device.vendor.name = "2cc2"
                device.product.id = "0005"
                device.product.name = "Teufel Cinebar One"
                device.serial = "2cc2_Teufel_Cinebar_One_ABCDEF0123456789"
                device.string = "1"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-usb"
        Formats:
                pcm

alsamixer也没有显示任何不寻常的频道或东西。 Alsa 混音器截图

奇怪的是,我用我的笔记本电脑测试了声卡和扬声器,它运行最新的 Manjaro 和 KDE-Plasma,运行正常。这就是为什么我重新安装了我的桌面(之前使用 Manjaro 和 XFCE),希望它现在也能工作,但你猜怎么着,它不行。

我已经检查了一些配置,但据我所知,它们的配置完全相同。因此,它没有静音,音量为 100%,但仍然没有声音。

最后安装一个新的系统确实有帮助解决“设备正忙”问题,我的台式电脑仍然没有声音。

我在网上找到了很多有类似问题的帖子,但通常是频道静音或缺少库,我尝试了解决方案,但没有奏效。我还检查了https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecturehttps://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting寻找可能的解决方案。

编辑
我在此期间尝试过但没有成功:

  • 检查日志中的错误并发现No object for name "alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo.monitor"。搜索此问题的解决方案没有得到任何我尚未尝试过的结果。
  • 将内核模块列入黑名单snd_hda_intel以防止 Nvidia Audio 干扰。我的 USB 声卡现在是系统识别的唯一声卡,但没有变化。
  • 我在 末尾添加了set-card-profile alsa_card.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00 output:iec958-stereo和 。问题仍然存在。set-sink-port alsa_output.usb-2cc2_Teufel_Cinebar_One_ABCDEF0123456789-00.iec958-stereo iec958-stereo-output/etc/pulse/default.pa
  • 我注释掉了load-module module-detectload-module module-role-cork并且load-module module-switch-on-port-available
  • 安装并尝试apulse <application>。仍然没有声音。
  • 运行fuser -v /dev/snd/*以检查是否存在违规应用程序

    /dev/snd/controlC0:  takiro     3727 F.... pulseaudio  
    /dev/snd/pcmC0D0p:   takiro     3727 F...m pulseaudio
    
  • 将我的用户添加到audio组中。
  • 删除所有内容~/.config/pulse/并重新启动 pulseaudio

目前唯一的变化是:VLC、Firefox 和其他应用程序会产生声音,但只有当它speaker-test从终端同时运行时才会产生声音。不幸的是,我不确定具体什么时候发生的。

答案1

当我在制定解决方案时,我注意到一些应用程序(如 Telegram)和一些视频实际上产生了声音。我进一步调查,首先假设这是由于缺少编解码器造成的,然后注意到所有正常工作的媒体文件都有单声道或统一立体声通道。当我检查更多文件时,我注意到这实际上不是问题所在。所有不工作的文件都有一个共同点,那就是采样率。所有采样率为 48000 的文件都按预期产生了声音。

根据这些新信息,我编辑/etc/pulse/daemon.conf并修改了

; default-sample-format = s16le
default-sample-rate = 48000
; alternate-sample-rate = 48000
default-sample-channels = 2
default-channel-map = front-left,front-right

我注释掉了default-sample-rate并将采样率改为48000。为了确保万无一失,我还注释掉了default-sample-channels和 ,default-channel-map但保留了它们的值,因为这已经是我的声卡支持的。

保存更改后,我重新启动了 pulseaudio,systemctl --user restart pulseaudio然后它就正常工作了。据我所知,我测试的所有应用程序现在都有声音了。

相关内容