龙空技术网

基于Pulse Audio在设备间传输声音

碳基科技 111

前言:

现时咱们对“ubuntu声音输出”大致比较关注,兄弟们都需要学习一些“ubuntu声音输出”的相关内容。那么小编也在网上搜集了一些关于“ubuntu声音输出””的相关文章,希望同学们能喜欢,各位老铁们一起来了解一下吧!

Pulse Audio

PulseAudio,以前称为Polypaudio,是POSIX和WIN32系统的声音服务器。它是ESD声音服务器的替代品,具有更好的延迟,混合/重采样质量和整体体系结构。

Ubuntu设备间传输声音

服务端配置

安装 pulse audio preferences tool.

$ sudo apt-get install paprefs
使用paprefs配置pulse-audio

运行paprefs,取消选中所有选项卡上的所有选项(不止图中的Network Server选项卡),除了以下两个:

“Enable network access to local sound devices” “Don't require authentication"

若需要本机的Pulse Audio Server能被Client搜索发现,需勾选“Allow other machines on the LAN to discover local sound devices”:

重启 pulse audio server

$ pulseaudio -k

客户端

首先,可以从命令行测试客户端能否连上Pulse Audio Server:

paplay --server=x.x.x.x:4713 test.wav

系统配置:

安装 paprefs运行paprefs,配置如下,勾选“Network Access"选项卡中的"Make discoverable PulseAudio network sound devices available locally"。在Settings音频配置界面中就可以发现多了一个远端输出设备,选中即可使用。Windows接收Ubuntu的声音下载PulseAudio for Windows ,是1.1版本,2013年后没更新,freedesktop.org/wiki/Software/PulseAudio/Ports/Windows/Support/配置文件: 'etc\pulse\default.pa'

若不想录制与发送麦克风的录音,关闭此选项。每次麦克风录制完,服务会失效,得重启。

Line 42FROM	load-module module-waveout sink_name=output source_name=inputTO	load-module module-waveout sink_name=output source_name=input record=0

配置监听IP:

Line 61FROM	#load-module module-native-protocol-tcpTO	load-module module-native-protocol-tcp listen=0.0.0.0 auth-anonymous=1
配置文件:Edit 'etc\pulse\daemon.conf',默认机制是客户端断开20秒后此服务端就退出。
Line 39FROM	; exit-idle-time = 20TO	exit-idle-time = -1
启动服务,其会申请网络权限

以上即配置OK,在客户端Ubuntu中配置PULSE_SERVER环境变量即可使用。

Windows接收WSL2 Ubuntu的声音

配置同上节的“Windows接收Ubuntu的声音”。

使用,若我们的Pulse Audio Server比WSL2先启动,则WSL2 Ubuntu自带的wslu包会自动发现本机的Pulse Audio Server服务,并自动配置PULSE_SERVER环境变量。

WSL_INTEGRATION_CACHE=$HOME/.cache/wslu/integrationif find -L $WSL_INTEGRATION_CACHE -newer /etc/resolv.conf 2> /dev/null | grep -q -m 1 '.'; then    . $WSL_INTEGRATION_CACHEelif type pactl > /dev/null 2>&1 || type xvinfo > /dev/null 2>&1; then    # detect WSL host    if type systemd-detect-virt > /dev/null 2>&1 && test "$(systemd-detect-virt -c)" != wsl -a -e /etc/resolv.conf; then        WSL_HOST=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null)        WSL_HOST_X_TIMEOUT=0.2        WSL_HOST_PA_TIMEOUT=0.3    else        WSL_HOST=${WSL_HOST:-localhost}        WSL_HOST_X_TIMEOUT=0.6        WSL_HOST_PA_TIMEOUT=0.8    fi    # create emty cache    [ -d $HOME/.cache/wslu ] || mkdir -p $HOME/.cache/wslu    echo -n "" > $WSL_INTEGRATION_CACHE    # set DISPLAY if there is an X11 server running    if type xvinfo > /dev/null 2>&1 && env DISPLAY=${WSL_HOST}:0 timeout $WSL_HOST_X_TIMEOUT xvinfo > /dev/null 2>&1; then        export DISPLAY=${WSL_HOST}:0        export LIBGL_ALWAYS_INDIRECT=1        echo -e "export DISPLAY=$DISPLAY\nexport LIBGL_ALWAYS_INDIRECT=1" >> $WSL_INTEGRATION_CACHE    fi    # set up audio if pulse server is reachable only via tcp    if type pactl > /dev/null 2>&1 \           && (! timeout $WSL_HOST_PA_TIMEOUT pactl info > /dev/null 2>&1 || timeout $WSL_HOST_PA_TIMEOUT pactl info 2> /dev/null | grep -q 'Default Sink: auto_null' ) \           && env PULSE_SERVER=tcp:${WSL_HOST} timeout $WSL_HOST_PA_TIMEOUT pactl info > /dev/null 2>&1; then        export PULSE_SERVER=tcp:${WSL_HOST}        echo -e "export PULSE_SERVER=$PULSE_SERVER" >> $WSL_INTEGRATION_CACHE    fi    unset WSL_HOST    unset WSL_HOST_X_TIMEOUT    unset WSL_HOST_PA_TIMEOUTfiunset WSLU_INTEGRATION_CACHE
串流浏览器音频

启动Chrome浏览器时加环境变量PULSE_SERVER,即可将Chrome的音频串流至Pulse Audio Server上。

Ubuntu接收Android手机的音频Ubuntu端安装

sudo apt install pulseaudio-module-bluetoothpactl load-module module-bluetooth-discover
Ubuntu通过蓝牙连接Android手机。在连接的Android蓝牙设置中,点击用于:“媒体音频”。现在就可以工作了。可以在Ubuntu面板中核实:

标签: #ubuntu声音输出 #ubuntu pulseaudio