由于朋友的项目需要用到audio
组件,而我又安利他了WSL
,为了面子也得把这个搞定。
配置
- 下载 PulseAudio on Windows
- 设置允许接受的客户端地址:
打开etc\pulse\default.pa
文件,找到第61行, 将load-module module-native-protocol-tcp
修改为load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
- 设置最大监听时间:
打开etc\pulse\daemon.conf
文件,找到第39行, 修改为exit-idle-time = -1
WSL
安装pulseaudio
sudo apt install pulseaudio
- 设置环境变量
echo 'export PULSE_SERVER=tcp:127.0.0.1' >> ~/.profile
运行
powershell
或者cmd
使用管理员运行bin\pulseaudio.exe
。
测试
在pulseaudio.exe
在后台运行的情况下:
扬声器测试
ffplay <audio-file>
麦克风测试
录音:
arecord demo.wav
播放一下:
ffplay demo.wav
写个脚本方便调用
#region 关键代码:强迫以管理员权限运行
$currentWi = [Security.Principal.WindowsIdentity]::GetCurrent()
$currentWp = [Security.Principal.WindowsPrincipal]$currentWi
if( -not $currentWp.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
$boundPara = ($MyInvocation.BoundParameters.Keys | foreach{
'-{0} {1}' -f $_ ,$MyInvocation.BoundParameters[$_]} ) -join ' '
$currentFile = (Resolve-Path $MyInvocation.InvocationName).Path
$fullPara = $boundPara + ' ' + $args -join ' '
Start-Process "$psHome\powershell.exe" -ArgumentList "$currentFile $fullPara" -verb runas
return
}
#endregion
<path-to-pulse-audio.exe> --exit-idle-time=-1 -vvvv
pause
记得替换掉<path-to-pulse-audio.exe>