配置

主机:Windows11

WSL2虚拟机:Ubuntu 22.04.5 LTS

背景说明

我们短学期的小车是声音全流程控制的,所以音频这里至关重要。但是由于小车硬件的问题,麦克风会时不时断连,调试很艰难

这里我想到了树莓派里也是虚拟机,我电脑上也有虚拟机,是不是可以直接在电脑上调试

由于使用的是WSL2虚拟机,无法直接连接主机的音频设备

经过查阅网上的解决方案和实际情况考察,总结如下:

  • 使用连接工具pluseaudio,将其在windows系统和WSL2中分别安装,并进行音频设备信息的传输,即可实现在WSL2中使用电脑的音频设备

Windows系统配置

安装pluseaudio

下载链接

下载到电脑的任意位置,然后直接解压(最好不要解压在C盘,原因不多赘述)

修改pluseaudio的配置文件

以下是已经实践成功的配置,你可以先将原本的配置文件保存,再尝试我的配置

\pulseaudio-1.1\etc\pulse\default.pa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/pulseaudio -nF
# ======================= 核心音频配置 =======================
.nofail

### 预加载样本
load-sample x11-bell %WINDIR%\Media\Ring01.wav
load-sample-dir-lazy %WINDIR%\Media\*.wav

.fail

### 音频驱动(二选一)
## 方案A:手动指定驱动(推荐WSL2使用)
load-module module-waveout sink_name=output source_name=input record=1

## 方案B:自动检测驱动(原生Linux使用)
# .ifexists module-detect.so
# load-module module-detect
# .endif

### 网络配置(WSL2关键配置)
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.19.0.0/20 auth-anonymous=1 listen=0.0.0.0 port=4713

### 禁用不必要模块
# load-module module-device-restore # 与WSL2冲突
# load-module module-stream-restore # 与WSL2冲突
# load-module module-card-restore # 与WSL2冲突
# load-module module-augment-properties

### JACK支持(按需启用)
# .ifexists module-jackdbus-detect.so
# load-module module-jackdbus-detect
# .endif

### 默认设备设置
# set-default-sink output
# set-default-source input

\pulseaudio-1.1\etc\pulse\daemon.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# ======================= 守护进程配置 =======================
[daemon]
daemonize = no ; 前台运行便于调试
exit-idle-time = -1 ; 永不自动退出
load-default-script-file = yes ; 加载default.pa

[logging]
log-level = debug ; 调试日志级别
log-target = file:E:\Pulseaudio-1.1\pulse.log ; 日志输出路径

[stream]
default-sample-format = s16le ; 16位小端格式
default-sample-rate = 16000 ; 16kHz采样率
default-sample-channels = 1 ; 单声道

[network]
; auth-ip-acl = 127.0.0.1;172.19.0.0/20 ; IP白名单

[performance]
; realtime-scheduling = yes ; Windows无需此配置
; high-priority = yes ; 已在代码中设置
; nice-level = -11 ; Windows无效

# ============= 已禁用配置(保留原始注释) =============
; allow-module-loading = yes
; use-pid-file = yes
; enable-shm = yes
; lock-memory = no
; resample-method = speex-float-3
; flat-volumes = yes

保存并关闭文件

运行

使用管理员权限打开一个终端,cd到\pulseaudio-1.1\bin

输入:.\pulseaudio.exe --exit-idle-time=-1 -vvvv

底部出现麦克风标志视为运行成功

虚拟机系统配置

下载pluseaudio

1
2
sudo apt update
sudo apt install pulseaudio

输入

1
export PULSE_SERVER=tcp:127.0.0.1

其中127.0.0.1可能要换为windows系统的ip地址

运行

1
2
source ~/.bashrc
paplay -p /mnt/c/Windows/Media/Ring01.wav

如果可以听到声音,则证明配置成功

示例命令

1
arecord -D pulse -f S16_LE -r 16000 -c 1 -t raw

参数解释:

  • -D pulse:指定使用 PulseAudio 作为音频设备
  • -f S16_LE:16 位小端字节序
  • -r 16000:采样率 16000 Hz
  • -c 1:单声道
  • -t raw:输出为原始裸数据(非 WAV)