由于朋友的项目需要用到audio组件,而我又安利他了WSL为了面子也得把这个搞定

配置

  1. 下载 PulseAudio on Windows
  2. 设置允许接受的客户端地址:

    打开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
  3. 设置最大监听时间:

    打开etc\pulse\daemon.conf文件,找到第39行, 修改为
    exit-idle-time = -1
  4. WSL安装pulseaudio
    sudo apt install pulseaudio
  5. 设置环境变量
    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>

Reference

最后修改:2021 年 07 月 29 日 05 : 19 PM
真的不买杯奶茶嘛....qwq