提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、pulseaudio 是什么?
- 二、部署步骤
- 1.下载PulseAudio
- 2.前提条件
- 3.开始配置
- 1.配置pulseaudio
- 2.配置麦克风权限
- 3.配置WSL2外放
- 4.配置WSL2麦克风
- 总结
前言
最近在搞一个Linux项目,由于WSL2中需要用到声音外放,无奈只能潜心研究。后来就使用了一种折中的方式替代,那就是pulseaudio。目前来讲WSL2对硬件外设的支持还是不太友好,关于USB的支持我之前在其他文章中已经论述过了,这里不讨论。
一、pulseaudio 是什么?
PulseAudio(以前叫Polypaudio)是一个跨平台的、可通过网络工作的声音服务,其一般使用于Linux和FreeBSD操作系统。它可以用来作为一种简易改进的开放声音后台(ESD)替换。
PulseAudio运行于Microsoft Windows和POSIX兼容系统(如Linux和FreeBSD)。PulseAudio是自由软件,基于GNU宽通用公共许可证 (LGPL)2.1协议。
一言以蔽之:一种跨平台,通过网络传输声音的工具。我们今天不讨论实现原理,就单讲怎么部署。
二、部署步骤
1.下载PulseAudio
PulseAudio.zip
为了尽可能减少配置,我上传了一个无需配置的压缩包。
2.前提条件
这里由于测试使用的是ffplay,而ffplay需要打开一个图形界面,如果你的WSL2不带GUI,会出现一个段错误
。所以前提是你的WSL2需要支持GUI。
理论上,只要你能调用播放命令即可,哪怕没有GUI也是可以的,但是前提是你需要通过代码实现或者其它命令实现。只不过ffplay是我能想到的最简单的方法了,要不然你就要装一个播放器了。
怎么配置GUI,请看我的其它文章Windows11 配置GUI
3.开始配置
1.配置pulseaudio
解压pulseaudio.zip到桌面或者任何一个可以访问的目录,这里我选择解压到桌面。需要特别说明的是最好使用我的pulseaudio.zip
,这个软件本身版本很多,不能保证所有的版本都是可以的。而且,我的zip解压就可以用,不需要额外配置,至少我是一次跑通。
解压完之后进入pulseaudio\bin
,然后在这个目录开一个powershell或terminal,之后执行bin下面的pulseaudio.exe
./pulseaudio.exe
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
W: [(null)] pulsecore/core.c: failed to allocate shared memory pool. Falling back to a normal memory pool.
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
W: [(null)] pulsecore/core-util.c: Secure directory creation not supported on Win32.
E: [(null)] daemon/main.c: Failed to load directory.
出现上面的报错提示不用惊慌,不会影响声音输出,至少我的环境没有影响。
注:这个页面不要关掉,它是个服务,需要一直挂在那里,最小化就行了。
2.配置麦克风权限
windows10或11上外放是不需要特殊权限的,但是使用麦克风需要赋予麦克风权限
,具体方法请往下看。
Windows11:
首先,Win+i进入设置页面
其次,在左边的侧边栏找到隐私和安全性
最后,一直往下划,找到麦克风
点进去
Windows 10:
首先,Win+i打开设置
其次,在面板里找到隐私
并进入
最后,在左侧边栏找到麦克风
注意:一定要在测试前先打开Windows上的pulseaudio
3.配置WSL2外放
这里,我用的是Ubuntu-18.04版本,Ubuntu-20.04应该也是可以的(没有实测)。
打开一个powershell
#powershell输入wsl进入环境
wsl
#安装多个wsl分发版
wsl -d <分发版>
进入wsl环境之后,如果没有安装ffmpeg的先安装ffmpeg。
sudo apt update
sudo apt install ffmpeg
接下来配置一个环境变量
vim .bashrc
#添加环境变量
export PULSE_SERVER=tcp:$(cat /etc/resolv.conf | grep nameserver | cut -c 12-23)
#保存
wq
#生效
source .bashrc
检查下变量:
echo $PULSE_SERVER
#我的
tcp:172.20.144.1
每个人可能都不一样,这个就是/etc/resolv.conf
里面的nameserver
最后一步,随便找一个wav文件或MP3复制到用户目录
ffplay -i "1.wav|1.mp3"
注意:如果你的文件包含空格的话,一定要用双引号括住,不然文件会被解析成多个参数。
这个时候你应该就可以听到音乐了,一定要先把右下角的声音打开。
4.配置WSL2麦克风
这里我用到了一个snap应用audio-recoder
,如果你恰好和我一样打开了systemd并安装了snap,你可以很轻松安装一个录音软件。
sudo snap install --edge audio-recorder
安装好之后打开应用:
audio-recorder
按照我的配置就行了,点击Start recording
开始录音,点击Stop recording
停止录音。播放的话很简单,用上面的ffplay就可以了。
虽然是tcp,我的电脑没有感觉到太明显的延迟,可能性能越强的电脑体验越好吧。
总结
1、Windows11别忘记打开声音,麦克风别忘了给权限
2、可能有一定延迟,因为是通过网络传输的。
3、效果的话只能见仁见智了,如果不能满足要求就安装一个实实在在的Ubuntu吧!