我们买了一部华为 14S,它很不错,但是扬声器和耳机的声音有问题,有时耳机不工作,扬声器经常不工作。真是一场噩梦!
答案1
这不是一个完美的解决方案,更多的是一种变通方法:扬声器的声音工作,需要使用外部耳机适配器(例如这个)
1-在底部添加此行/etc/modprobe.d/alsabase.conf
:
options snd-hda-intel dmic_detect=0
2 - 重启
3 - 尝试命令alsactl init
。扬声器应该可以工作(如果不行,请转到声音参数)。
4 - 如果alsactl init
有效,在 gnome 中添加启动应用程序:
启动gnome-session-properties
命令并添加新应用程序:
name : Alsactl Init
command : alsactl init
comment : to make speaker work
. . 保存,关闭并重启
扬声器应该可以工作(如果不行,请转到声音参数)。
切勿使用集成耳机
! 使用外部 USB 转插孔适配器
PS:列出的命令这里如果仍然不起作用可能会有所帮助(需要安装alsa-tools
包才能使用hda-verb
命令)。
答案2
我也遇到了类似的问题,根据找到的资料,我编写了一个解决该问题的守护进程。
问题
在 Linux 发行版的声卡驱动程序中,耳机和扬声器通道是混合的。
当连接耳机时,系统认为声音应该从扬声器输出。当关闭耳机时,系统会尝试通过耳机输出声音。
问题详细信息(发现这里)
看起来有一些奇怪的硬件设计,因为从我的角度来看,有趣的小部件是:
- 0x01 - 音频功能组
- 0x10-耳机 DAC(实际上两个设备都连接在这里)
- 0x11-扬声器 DAC
- 0x16-耳机插孔
- 0x17-内置扬声器
和:
- 小部件 0x16 和 0x17 应该简单地连接到不同的 DAC 0x10 和 0x11,但内部扬声器 0x17 忽略连接选择命令并使用耳机插孔 0x16 的值。
- 耳机插孔 0x16 由一些奇怪的东西控制,因此应该使用音频组 0x01 的 GPIO 命令启用它。
- 内部扬声器 0x17 与耳机插孔 0x16 相连,因此应使用 EAPD/BTL 启用命令明确禁用它。
解决方案
已经实现了一个守护进程,用于监视耳机的连接/断开连接并访问声卡设备以便将播放切换到正确的位置。
你可以在我的 github repo 中获取安装程序:华为-ubuntu-声音修复。
希望能帮助到你。