我有一个 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_Architecture和https://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-detect
,load-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
然后它就正常工作了。据我所知,我测试的所有应用程序现在都有声音了。