将Widora-NEO作为pulseaudio网络声音播放端
-
可以将widora-neo作为pulseaudio网络声音播放端, 在ubuntu上实现节目播放和音量调控, 步骤如下:
-
在widora-neo上安装 pulseaudio-daemon, pulseaudio-profiles, pulseaudio-tools 模块.
-
在 /etc/init.d/pulseaudio 中增加如下内容:
...... USE_PROCD=1 PROG=/usr/bin/pulseaudio ##----- additional ----- chown -R :51 /dev/snd chmod -R g+rw /dev/snd start_service() { ......
(如有必要再执行 chmod 777 /dev/snd 和 chmod 777 /dev/snd/* )
- 修改 /etc/pulse/system.pa文件,在最后增加:
##--- additional ---- load-module module-alsa-sink device=hw:0 (注:如果选用第2个声卡,那么 device=hw:1, 或则用alsa的mixer: device =dmix ) load-module module-native-protocol-tcp auth-anonymous=1
-
重新启动pulseaudio: /etc/init.d/pulseaudio restart
-
在ubuntu系统上:
5.1 pulseaudio通常是系统启动后自动加载运行的,也可以手工运行:pulseaudio --start, 然后就可以连接widora-neo上的pulseaudio声音服务了。
5.2 执行命令:
pacmd load-module module-tunnel-sink server=192.168.3.24 (widora-neo的IP)
5.3 打开ubuntu的系统声音设置,就可以看到多了一个名为192.168.3.24的声卡,选择这个声卡。 在ubuntu上运行一个或多个播放器(gnome-mplayer, clementine, rhythmbox等都可以), 就可以在widora-neo这端听到声音了。
5.4 如果在/etc/pulse/client.pa 文件中增加:default-server = 192.168.3.24, 那么ubuntu系统开机时就会自动将远程pulseaudio端作为默认的声卡了。 -
在使用widora-neo自带的声卡时如果有杂音,可以在widora-neo端适当减小音量,或打开/usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common 文件, 将里面的volume = merge 修改成 volume=ignore (server和client端都要做? 似乎无用) , 再重启动一下pulseaudio 。
秘籍: 在widora-neo端同时运行mplayer,杂音会消失。
终极秘籍: /etc/pulse/system.pa中将load-module module-alsa-sink device=hw:0 修改成 load-module module-alsa-sink device=dmix (可以尝试下在/etc/asound.conf增加buffer_size 等)
最后一招: 先清cache: echo 3 > /proc/sys/vm/drop_caches 再执行:mplayer -ao alsa
可能不同的声卡情况不同,我用usb声卡就没有杂音。在widora-neo本地播放音乐用自带的声卡也没有杂音,推断应该是pulseaudio的配置或者其与alsa接口引起的。 -
发现与Ubuntu的rhythmbox配合得比较好。有的播放器在偶尔断网恢复后无法继续播放了。
-
如果想在ubuntu端通过话筒喊话,执行 arecord | aplay 命令,再选择aplay的输出对象即可。
-
同样可以从widora的mic处回传监听声音,只要在system.pa中加入dsnoop,象下面这样:
### --- additional ---- load-module module-alsa-source device=dsnoop load-module module-alsa-sink device=dmix load-module module-native-protocol-tcp auth-anonymous=1
在ubuntu端执行如下命令, 先后连接widora_neo上的source和sink服务:
pacmd load-module module-tunnel-source server=192.168.3.24 pacmd load-module module-tunnel-sink server=192.168.3.24
这样设置后就可以进行双向同时传输了!
以上设置可以参考:
https://wiki.openwrt.org/doc/howto/pulseaudio
https://wiki.archlinux.org/index.php/PulseAudio_成功后就可以在ubuntu上实现定点播放了...
遗憾的是目前仅linux系统对pulseaudio网络声音服务有较好的支持,andriod手机上还缺少相关应用。如果有Ubuntu Phone就很值得尝试一下了!
注意:
- 网络必须保证双向通畅,如果网络不流畅的话, pulseaudio服务端会连不上或中途掉线, 这时候ubuntu端需要重连, widora端也可能需重启pulseaudio服务。
- server端pulseaudio可能与声卡支持的采样率有关?? 比如声卡只支持44.1k的采样率,那么client端的mplayer播放时候需要重采样到44.1k, mplayer -ao pulse -srate 44100 mms://218.28.9.99/gushi, 不然mplayer会报错。 这个现象仅碰到过一次。
- 选择widora_mode client 模式比较好。
- 只要widora上的pulseaudio不退出,ubuntu上的pulseaudio就会一直发音频数据给widora,即使widora没有被ubuntu选择为当前播放器。
-
-
编译pulseaudio之前将 feeds/packages/sound/pulseaudio/Makefile文件中的 --disable-dbus 和 --disable-bluez 注释掉, 杂音似乎消失了。。。
下面是在 Widora Openwrt环境下 使用pulseaudio的一点心得到:
编译之前将 feeds/packages/sound/pulseaudio/Makefile文件中的 --disable-dbus 和 --disable-bluez 选项注释掉。
1. /etc/pulse/system.pa 下面的必须注释掉,不然pulse无法启动。
## Automatically load driver modules depending on the hardware available #.ifexists module-detect.so ### Use the static hardware detection module (for systems that lack udev/hal support) #load-module module-detect #.endif ### Load several protocols #.ifexists module-esound-protocol-unix.so #load-module module-esound-protocol-unix #.endif #load-module module-native-protocol-unix
2. /etc/pulse/default.pa 配置
2.1 下面的必须注释掉,不然pulse无法以daemon方式启动,出现pa_context_connect fail 错误### If autoexit on idle is enabled we want to make sure we only quit ### when no local session needs us anymore. #.ifexists module-console-kit.so #load-module module-console-kit #.endif
2.2 下面的必须保留
### Load several protocols .ifexists module-esound-protocol-unix.so load-module module-esound-protocol-unix .endif load-module module-native-protocol-unix ### Network access (may be configured with paprefs, so leave this commented ### here if you plan to use paprefs) load-module module-esound-protocol-tcp load-module module-native-protocol-tcp ### Automatically suspend sinks/sources that become idle for too long load-module module-suspend-on-idle
3. system.pa add following 配置:
### --- additional ---- load-module module-alsa-source device=dsnoop load-module module-alsa-sink device=dmix load-module module-native-protocol-tcp auth-anonymous=1
4. paplay和pacmd命令都需要pulseaudio运行在session daemon模式下.
运行: pulseaudio -D --exit-idle-time=-1
其中 --exit-idle-time=-1 是为了防止pulseaudio在播放中途莫名其妙地自己退出。
pulseaudio 运行后要等到 wm8960_preinit 出现后才可以 运行paplay 和 pacmd !!!!! PULSE其实是在后台调度ALSA, 所以感觉启动速度相对较慢。root@Widora:/etc/pulse# pulseaudio -D --exit-idle-time=-1 W: [pulseaudio] main.c: This program is not intended to be run as root (unless --system is specified). [ 3812.460000] ****** wm8960_postinit ****** [ 3812.480000] playback free_dma_buffer [ 3812.480000] ptri2s_config->mmap_index:8 [ 3812.580000] capture free_dma_buffer [ 3812.590000] ptri2s_config->mmap_index:8 root@Widora:/etc/pulse# [ 3817.720000] ummap MMAP[8]=0x85DE0000 [ 3817.720000] capture free_dma_buffer [ 3817.730000] ptri2s_config->mmap_index:16 [ 3817.730000] ****** wm8960_preinit ****** [ 3818.280000] ummap MMAP[0]=0x85DA0000 [ 3818.280000] playback free_dma_buffer [ 3818.290000] ptri2s_config->mmap_index:16 root@Widora:/etc/pulse# paplay --raw /home/xx.wav --rate=48000 [ 3825.250000] ****** wm8960_postinit ****** [ 3825.270000] playback free_dma_buffer [ 3825.270000] ptri2s_config->mmap_index:16 root@Widora:/etc/pulse# [ 3838.110000] ummap MMAP[0]=0x85DA0000 [ 3838.110000] playback free_dma_buffer [ 3838.120000] ptri2s_config->mmap_index:8
5. paplay 运行PCM raw文件时需要指定rate
比如 :
paplay --raw /home/xx.wav --rate=48000
不然,声音会失真,并且会抛出错误。
而pacmd可以直接播放PCM raw,比如:
pacmd play-file /home/xx.wav 0
这个应该与ALSA和PULSE的默认采样率配置相关。6 以/etc/init.d/pulseaudio 运行的pulse daemon无法用./pulseaudio stop命令退出,只能用killall -9 pulseaudio.
这个具体要看init.d下的脚本命令。