硬件驱动坎内核,Debian只是软件仓库
硬件驱动坎内核,Debian只是软件仓库
我认为是发行版软件包(可能配置文件)的问题,
同样的内核,ubuntu下麦克风就有声音,deepin下麦克风没有声音
同样的dde,ubuntudde下麦克风有声音,deepin下麦克风没有声音
so,只能是debian的问题了
今天稍微有点空,继续肝deepin麦克风驱动
现在的问题是,arecord可以用麦克风录音了,但是pavucontrol、deepin设置声音输入都没有声音,一些录音的应用软件比如deepin语音记事本和audacity也是无法采用麦克风录音
估计是默认初始化的音频输入设备是无法录音的,必须使用hw:0,6设备,也就是sof-hda-dsp声卡的第6个逻辑设备或者第七个逻辑设备才能录音

广泛在google搜索了一下以后,关于如何指定音频输入设备,在archwiki有一个教程
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#Microphone_not_detected_by_PulseAudio
亲测是可以用的
编辑/etc/pulse/default.pa并插入load-module一行以指定您的设备,如下所示:
这里device我改成hw:0,6
load-module module-alsa-source device=hw:0,6 # the line above should be somewhere before the line below .ifexists module-udev-detect.so

最后,重新启动pulseaudio以应用新设置:
pulseaudio -k ; pulseaudio -D
如果一切正常,您现在应该可以看到麦克风在运行时显示pavucontrol(在Input Devices选项卡下)。

现在确实可以看到两个input设备了,而且第一个设备是有声音输入的,但是在deepin设置里面还是不可以选择输入设备,应用软件那边也没有声音,不过也算是有进步,慢慢来,一点一点解决问题,今天就到这里,欢迎大神前来指导
今天继续肝麦克风驱动问题,经过这么几天的理解和思考,大概搞懂了linux下面音频驱动的大概原理

内核内部的声卡驱动,以前是oss模式的,就是oss在内核的声卡驱动注册出/dev下面的字符设备,应用通过write()、read()、ioctl()系统调用来进行访问硬件
现在都是alsa模式了,alsa高级的地方就是给应用程序提供了它规定的一些api接口来访问声卡,然后应用层就可以用alsalib提供的接口来进行音频编程,屏蔽了底层细节,提高了通用性
那这个pluseaudio又是什么?pulseaudio应该就是linux系统里面的音频服务,pulseaudio也属于应用程序,但是pulseaudio是系统的应用程序,也就是所谓的daemon守护进程吧
那就是说所有的应用层面的音频调用,比如播放声音和录音,都需要经过pulseaudio
所以我们linux系统如果声音有问题,先看alsa驱动有没有问题,在/dev/asound/路径下没有正确显示声卡设备文件
如果没有正确显示声卡设备文件,说明当前linux内核没有支持正确声卡驱动,换内核,或者找自己声卡的模块insmod进去
如果有显示声卡设备文件,再用aplay和arecord测试一下能不能播放声音和录音,注意的是一个声卡设备可能有好几个子设备,都可以试一下,有可能默认的那个设备就是不能用,而其他设备能用
这个问题是pulseaudio造成的吗?
修改/etc/pluse/default.pa文件,可以更改默认使用的音频设备,能让系统正确播放声音和录音
在之前通过手动添加pulseaudio输入源的基础上,
现在通过在/etc/pulse/default.pa中最后一行指定默认输入源,
或者使用命令行,
或者使用pavucontrol图形界面,
可以更改pulseaudio的默认源

![]()

现在使用audacity可以正常录音了,但是deepin语音记事本和deepin设置里面无法录音,下次研究一下deepin设置源码,看看他的录音是如何实现的
按照这个方法,我的麦克风也正常了,感谢分享!
按照这个方法,我的麦克风也正常了,感谢分享!
虽然凑合能用,但还是有问题,最后发现问题好像是在于udev,还在研究中😂😂😂
开始编译安装了最新的pulseaudio,结果还是没有声音

看起来好像是udev在搜索设备创建dev文件夹下文件的时候出了问题,麦克风没有正确匹配到,所以我准备研究一下udev
我用ubuntu kylin启动电脑,设置里面是能够正常识别麦克风的!
pacmd也识别的更加准确,显示了英特尔智音设备

然后我就全局搜索了一下这个字符串,看看这个设备名是怎么来的

原来是根据pci编号来查询出来的设备名!!!而且这个文件也是systemd的一部分


准备重新编译udev,结果udev是systemd的一部分,看来要重新编译最新的systemd!!!
ubuntu下systemd版本是这个:

deepin的systemd版本比较低

重新编译看看吧
好家伙,编译安装最新的systemd以后,声音的输出输入设备全部没了,网络设备无线网卡也没了。

我决定转Ubuntu kylin了,待机功耗真的低,风扇也不狂转了

经过一晚上的研究,udev这边生成了/dev/snd下面的设备文件,和ubuntu下面的一模一样,没有任何问题
alsa驱动生成了/proc/asound下面的设备文件,和ubuntu下面的一模一样,没有任何问题
ubuntu下面的pulseaudio却可以通过module-udev-detect.so识别到声卡为intel Smart Sound Technology Audio Controller,并且正确的设置默认输入source
所以问题在于pulseaudio的udev-detect.so
或者说是pulseaudio的版本太老了,要更新了!!!
现在可以通过手动写pulse_profile_set文件的方式,指定一个声卡的输入源,等我试试
终于搞定了!!!!!麦克风兼容性问题终于解决了!!!
总得来说,就是利用pulseaudio的load module特性,再次载入一次声卡,并且根据自己写的配置文件重新设置可用的sink和source
方法:
在/usr/share/pulseaudio/profile-sets文件夹下面复制一份default.conf命名为default-juju.conf, 并且在中间插入三个元素
[Profile output:Inter-Speaker+intput:Inter-Mic]
description = Inter-sink-and-source-profiles
output-mappings = Inter-Speaker
input-mappings = Inter-Mic
priority = 10
[Mapping Inter-Speaker]
device-strings = hw:%f,0
channel-map = left,right
paths-output = analog-output-speaker multichannel-ouput #至于什么混音器mixer,我到现在还没怎么搞明白,就用pulseaudio现成的混音器,多指定几个,它会选择一个最合适的的!!!!!
priority = 9
direction = output
[Mapping Inter-Mic]
device-strings = hw:%f,6
channel-map = left,right
paths-input = analog-input-internal-mic multichannel-input #至于什么混音器mixer,我到现在还没怎么搞明白,就用pulseaudio现成的混音器,多指定几个,它会选择一个最合适的的!!!!!
priority = 9
direction = input
如图所示

然后在/etc/pulse/default.pa文件末尾重新载入一次声卡
load-module module-alsa-card device_id=0 card_name=juju profile_set=default-juju.conf
声卡名称随意啊
然后杀死pulseaudio守护进程,它会自己重启并且执行default.pa中的指令
pulseaudio -k
于是我们就用pacmd能看到两个声卡了
juju@juju-PC:/usr/share/pulseaudio/alsa-mixer/profile-sets$ pacmd list-cards
2 card(s) available.
index: 0
name:
driver:
........
index: 1
name:
driver:
.......
profiles:
input:Inter-Mic: Inter-Mic 输入 (priority 59, available: unknown)
off: 关 (priority 0, available: unknown)
active profile:
sources:
alsa_input.0.Inter-Mic/#2: sof-hda-dsp Inter-Mic
ports:
multichannel-input: 多声道输入 (priority 0, latency offset 0 usec, available: unknown)
properties:
然后我们在deepin设置里面也可以看到有两个输入选择,第二个输入是有声音的!!!

当然我们也可以直接用pacmd 直接执行添加声卡的命令,执行一次多一个声卡,所以我上面有三个输入
pacmd load-module module-alsa-card device_id=0 name=juju profile_set=default-juju.conf
现在总算看起来顺眼了,用deepin自带的语音记事本也可以录音了!!!
想借楼问一下,输出没声音,要用3.5mm的耳机插头拔插一下就有声音了,这个要怎么个解决或者排查思路?
想借楼问一下,输出没声音,要用3.5mm的耳机插头拔插一下就有声音了,这个要怎么个解决或者排查思路?
我估计问题还是在pulseaudio切换的时候吧

语音记事本和桌面智能助手每一次都要手动调试才能录音如何不用调试能录音。分享


在/etc/pulse/default.pa最后加上set-default-source alsa_input.hw_0_6
在/etc/pulse/default.pa最后加上set-default-source alsa_input.hw_0,6系统没有声音桌面智能助手和语音记事本正常可以录音:


在/etc/pulse/default.pa最后加上set-default-source alsa_input.hw_0,6系统没有声音桌面智能助手和语音记事本正常可以录音:


set 你的第二张声卡device 为default source就可以了,大概就是那个语法,可以研究一下pulseaudio去
高人指点:每一次都要手动调一下才能正常启动桌面智能助手和语音记事本才能录音
set 你的第二张声卡device 为default source就可以了,大概就是那个语法,可以研究一下pulseaudio去
第二张声卡device 为在那个文件中更改为default source


中文 
听说deepin更新到debian10.6了,感觉可能麦克风(无声音问题)有戏
于是从ubuntudde重装回来最新的deepin20.1,准备继续肝麦克风的问题
笔记本是小新air14 2020 i5-1035G1,装的是5.8的内核
刚刚一个最新的发现,感觉有一点希望了,看看有没有大神能最后顶一下
用alsa自带的工具arecord -l列出所有的录音设备:
然后试了一下arecord命令行录音,结果成功了,播放有声音!!!!
(解释一下,0,6就是用card0的6号设备录音,实测6号设备DMIC48kHz、7号设备DMIC16kHz都可以录音)
看看自带的音乐播放器波形图,是有起伏的,播放出来是有声音的!!!
但是现在设置里面麦克风是没有声音的,语音记事本也无法录音,装了一下pavucontrol也不显示声音,所以,还有哪里有问题,求大神助攻!!!