将Widora-NEO作为pulseaudio网络声音播放端



  • 可以将widora-neo作为pulseaudio网络声音播放端, 在ubuntu上实现节目播放和音量调控, 步骤如下:

    1. 在widora-neo上安装 pulseaudio-daemon, pulseaudio-profiles, pulseaudio-tools 模块.

    2. 在 /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/* )
    
    1. 修改 /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
    
    1. 重新启动pulseaudio: /etc/init.d/pulseaudio restart

    2. 在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端作为默认的声卡了。

    3. 在使用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接口引起的。

    4. 发现与Ubuntu的rhythmbox配合得比较好。有的播放器在偶尔断网恢复后无法继续播放了。

    5. 如果想在ubuntu端通过话筒喊话,执行 arecord | aplay 命令,再选择aplay的输出对象即可。
      0_1522562393484_pulsexx.JPG

    6. 同样可以从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 
    

    这样设置后就可以进行双向同时传输了!
    0_1522570404578_xee.jpg

    以上设置可以参考:
    https://wiki.openwrt.org/doc/howto/pulseaudio
    https://wiki.archlinux.org/index.php/PulseAudio_

    成功后就可以在ubuntu上实现定点播放了...
    0_1522458209712_widora_pulse.JPG
    0_1522458969840_widora_pulse2.JPG

    遗憾的是目前仅linux系统对pulseaudio网络声音服务有较好的支持,andriod手机上还缺少相关应用。如果有Ubuntu Phone就很值得尝试一下了!

    注意:

    1. 网络必须保证双向通畅,如果网络不流畅的话, pulseaudio服务端会连不上或中途掉线, 这时候ubuntu端需要重连, widora端也可能需重启pulseaudio服务。
    2. server端pulseaudio可能与声卡支持的采样率有关?? 比如声卡只支持44.1k的采样率,那么client端的mplayer播放时候需要重采样到44.1k, mplayer -ao pulse -srate 44100 mms://218.28.9.99/gushi, 不然mplayer会报错。 这个现象仅碰到过一次。
    3. 选择widora_mode client 模式比较好。
    4. 只要widora上的pulseaudio不退出,ubuntu上的pulseaudio就会一直发音频数据给widora,即使widora没有被ubuntu选择为当前播放器。
      0_1522496366341_pulse2.jpg


  • 编译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下的脚本命令。


 

Looks like your connection to 技术支持论坛 was lost, please wait while we try to reconnect.