<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-1>
<META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Matt,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I'm ready to start looking at the python scripts 
you have put together.&nbsp; I'd like to see how you handle the socket interface 
for </FONT></DIV>
<DIV><FONT face=Arial size=2>setting and clearing the mutes.&nbsp; I appreciate 
your code share.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Thanks,</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Jim</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV>"Matt Patterson" &lt;<A 
  href="mailto:matt@v8zman.com">matt@v8zman.com</A>&gt; wrote in message <A 
  href="news:47FBD3D3.9010007@v8zman.com">news:47FBD3D3.9010007@v8zman.com</A>...</DIV>Yes, 
  when I wrote this I had just one sound card with 2 channels, but I used the 
  remap module to simulate having 4 stereo sound cards. On my final rendition 
  there is no remap module usage, I just target the channels directly.<BR><BR>I 
  think the easiest way to think about this is to know my meaning behind zones 
  and p's (players). Zones are the output zones, like living room, office, etc. 
  Players are the instances of mpd (or whatever you music playing app is). The 
  way I have it set up below, every player is connected to every zone, so if you 
  were to play from one player, every output gets the sound in sync. I then 
  wrote a simple app to selectively mute the sink input streams (which are the 
  streams associated with the zones) for each zone so that only one player is 
  heard in any given zone at one time. <BR><BR>What this gives me is the ability 
  to listen to the same thing in any given zone as what is playing in any other 
  zone, or something totally different.<BR><BR>One thing that will make 
  visualizing and playing with this MUCH easier is the disable the auto 
  suspender module which will kill off all the streams. When they are left alive 
  you can see what is connected to what and understand how it all 
  works.<BR><BR>Matt<BR><BR><BR>Jim Duda wrote: 
  <BLOCKQUOTE cite=mid:ftgdce$7n9$1@ger.gmane.org type="cite">
    <META content="MSHTML 6.00.2900.3268" name=GENERATOR>
    <DIV><FONT face=Arial size=2>Wow!, but, not sure I'm there yet.</FONT></DIV>
    <DIV>&nbsp;</DIV>
    <DIV><FONT face=Arial size=2>When you play from some player, do you play to 
    sink zone1... or p1...&nbsp; </FONT></DIV>
    <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
    <DIV><FONT face=Arial size=2>Where does the sound come out?&nbsp;&nbsp;Don't 
    you just have 1 sound card here with 2 front-channels?</FONT></DIV>
    <DIV>&nbsp;</DIV>
    <DIV><FONT face=Arial size=2>Thanks for you patience, it hasn't quite 
    clicked in my head yet.</FONT></DIV>
    <DIV>&nbsp;</DIV>
    <DIV><FONT face=Arial size=2>Jim</FONT></DIV>
    <BLOCKQUOTE 
    style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
      <DIV>"Matthew Patterson" &lt;<A href="mailto:matt@v8zman.com" 
      moz-do-not-send="true">matt@v8zman.com</A>&gt; wrote in message <A 
      href="news:47FB86E6.1010606@v8zman.com" 
      moz-do-not-send="true">news:47FB86E6.1010606@v8zman.com</A>...</DIV>I'm 
      sorry, I think I mispoke in the last email, I meant combine sink. Here's 
      some sample config:<BR><BR>When simulating my matrix switch idea, before I 
      got the multiple sound cards I used remap to make it seem like I had 4 
      stereo sound cards. You can use this same idea to make one 6 channel card 
      appear as 3 stereo cards:<BR><BR># remap things so it seems like we have 4 
      stereo zones<BR>load-module module-remap-sink sink_name=zone1 
      master=alsa_output.pci_8086_2668_alsa_playback_0 channels=2 
      master_channel_map=front-left,front-right 
      channel_map=front-left,front-right<BR>load-module module-remap-sink 
      sink_name=zone2 master=alsa_output.pci_8086_2668_alsa_playback_0 
      channels=2 master_channel_map=front-left,front-right 
      channel_map=front-left,front-right<BR>load-module module-remap-sink 
      sink_name=zone3 master=alsa_output.pci_8086_2668_alsa_playback_0 
      channels=2 master_channel_map=front-left,front-right 
      channel_map=front-left,front-right<BR>load-module module-remap-sink 
      sink_name=zone4 master=alsa_output.pci_8086_2668_alsa_playback_0 
      channels=2 master_channel_map=front-left,front-right 
      channel_map=front-left,front-right<BR><BR>Then I used the combine module 
      to join all the zones together 4 times so there would be four inputs per 
      zone, which can be muted to control what is heard:<BR><BR># we leave only 
      one of the outputs unmuted at startup, that is our player 
      selection<BR>load-module module-combine sink_name=p1 master=zone1 
      slaves=zone2,zone3,zone4<BR>#set-sink-input-mute 4 
      1<BR>set-sink-input-mute 5 1<BR>set-sink-input-mute 6 
      1<BR>set-sink-input-mute 7 1<BR>load-module module-combine sink_name=p2 
      master=zone1 slaves=zone2,zone3,zone4<BR>set-sink-input-mute 8 
      1<BR>#set-sink-input-mute 9 1<BR>set-sink-input-mute 10 
      1<BR>set-sink-input-mute 11 1<BR>load-module module-combine sink_name=p3 
      master=zone1 slaves=zone2,zone3,zone4<BR>set-sink-input-mute 12 
      1<BR>set-sink-input-mute 13 1<BR>#set-sink-input-mute 14 
      1<BR>set-sink-input-mute 15 1<BR>load-module module-combine sink_name=p4 
      master=zone1 slaves=zone2,zone3,zone4<BR>set-sink-input-mute 16 
      1<BR>set-sink-input-mute 17 1<BR>set-sink-input-mute 18 
      1<BR>#set-sink-input-mute 19 1<BR><BR>Does that 
      help?<BR><BR>Matt<BR><BR><BR><BR><BR>Jim Duda wrote: 
      <BLOCKQUOTE cite=mid:ftfpp7$lt6$1@ger.gmane.org type="cite">
        <META content="MSHTML 6.00.2900.3268" name=GENERATOR>
        <STYLE></STYLE>

        <DIV>
        <DIV><FONT face=Arial size=2>Matt,</FONT></DIV>
        <DIV>&nbsp;</DIV>
        <DIV><FONT face=Arial size=2>I don't understand how the remap_sink 
        module helps (or works for that matter).&nbsp; I'm having trouble 
        getting my head around the inputs and outputs of this 
        module.</FONT></DIV>
        <DIV>&nbsp;</DIV>
        <DIV><FONT face=Arial size=2>Would you mind posting an example of how 
        you use remap_sink?</FONT></DIV>
        <DIV>&nbsp;</DIV>
        <DIV><FONT face=Arial size=2>Thanks,</FONT></DIV>
        <DIV>&nbsp;</DIV>
        <DIV><FONT face=Arial size=2>Jim</FONT></DIV>
        <DIV>&nbsp;</DIV></DIV>
        <BLOCKQUOTE 
        style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
          <DIV>"Matt Patterson" &lt;<A href="mailto:matt@v8zman.com" 
          moz-do-not-send="true">matt@v8zman.com</A>&gt; wrote in message <A 
          href="news:47FAB22D.7000408@v8zman.com" 
          moz-do-not-send="true">news:47FAB22D.7000408@v8zman.com</A>...</DIV>Yeah, 
          sounds like you have the rtp thing. I assume you realize you can have 
          multiple multicast addresses so there can be simultaneous streams that 
          don't collide/get mixed.<BR><BR>I don't think there is a way you can 
          avoid the mesh (multicast is basically a mesh, just for free) unless 
          you designate a server machine. In which case you could set up a 
          single tunnel sink to each client machine and then have all the 
          switching happen on that machine. I use the remap module to split each 
          sink into 4 inputs (could be a tunnel sink), then connect each input 
          to a different mpd instance, and control what is heard out each device 
          by muting 3 of the 4 inputs. I end up with 16 remapped sinks in this 
          case (4 output devices * 4 remapped sinks each). I will be adding a 
          5th zone to my whole home audio soon, so that will make it 25. The 16 
          sinks/streams seems to cause no undue load on the system (Core 2 Duo 
          2180), we'll see how 25 does :)<BR><BR>I haven't played with the 
          tunnel sink module.<BR><BR>Matt<BR><BR><BR>Jim Duda wrote: 
          <BLOCKQUOTE cite=mid:47FAAFFE.6010104@duda.tzo.com type="cite"><PRE wrap="">Matt,

Thanks for the feedback.

I understand your point about using the command line interface module. 
I actually would end up using the socket approach from perl once I had 
it all working properly.

I believe I understand how the rtp approach would work. I think what you 
are doing is as follows.  All stream senders would send on the rtp_send 
side, connecting the rtp_send.monitor to the default alsa sink (for 
local sound).  All other machines would have an rtp_recv, and send the 
output of rtp_recv to the default alsa sink.  Each of these rtp_recv 
would be muted by default.  If machine B wants to join in, machine B 
would unmute it's rtp_recv and thereby get the stream.  Do I have a 
basic understanding of how this approach would work?  I have played with 
this to some degree, so I think I understand.

I assume using the tunnels would work in a similar fashion.  However, 
you need to build a mesh of tunnel connections.  In my case, with 4 
nodes, the mesh is 3 tunnels for each mode, 4*3=12 tunnels in total. 
Each receiving node would then mute each tunnel by default, turning on 
the one it wants.  The annoying part of this approach is that you have 
to decide which source you want to connect to, whereas, with the rtp 
approach, you simply join the "collective".

I have played with the combined_sinks somewhat too.  However, since 
upgrading to FC8, the pulseaudio server keeps crashing when I attempt to 
use a combined sink.  I've been trying to get a core dump to Lennart, 
but I haven't been able to get gdb to help me out, I keep getting some 
problems with some threading library (or something of that nature).

I'm now trying to understand how the paprefs gui mechanism works.  I 
haven't been able to get any of the options to be enabled for operation, 
all the controls are grayed out, trying to understand why.

Jim




Matt Patterson wrote:
  </PRE>
            <BLOCKQUOTE type="cite"><PRE wrap="">I played with something similar but my goal was an audio multiplex 
switch all on the same machine to the rtp lag issue was less apparent. 
As for controlling it, I just wrote a simple python app that connects to 
the unix socket (same thing pacmd does) and I issue commands to load 
modules, mute inputs, etc so things can be controlled. I then wrote a 
php wrapper around the python app so my web based audio control could 
come about.

To go this route you have to make sure the command line interface is 
available either via TCP or Unix socket (I chose unix socket). If you 
like I would be happy to send my hacktastic python code to help get 
things moving.

I believe that using the tunnels allows you to have the sync feature 
where rtp doesn't, so maybe play around with getting them working???

Matt


Jim Duda wrote:
    </PRE>
              <BLOCKQUOTE type="cite"><PRE wrap="">There was a similar thread, back around New Year's regarding Network 
Audio.  I've read the entire thread a few times.  I'm having similar 
problems, yet different.

I'm looking for some advice as to how best to use network audio with pulse.

I have multiple linux computers in my house, four to be specific.  One 
operates as a file server, one as a desktop, and the other two as 
diskless think clients which basically operate as media players.

I use these computers in a home automation network in my house using the 
misterhouse home automation software (misterhouse.net).

All machines are running stock fedora 8.  The two thin clients, are not 
running the full suite of services which a desktop would.  For example, 
they are not currently running avahi or hal (but could if necessary).  I 
can certainly turn on what needs to be running.

I'm hoping to perform the following using pulseaudio.

Let's call my machines A, B, C, D.

Let's assume that some stream is started on machine A, playing in the 
living room.  I would like to be able to have that same stream play on 
machines A and B simultaneously.  I don't care if I have to go to stream 
A and say send to machine B now, or, go to machine B and ask B to fetch 
a stream from machine A.  I can make both work.  I want to be able to 
drop the stream to B at anytime.  I realize that if the source stream 
stops, then all streams would in essence stop too.

I need to be able to access the controls to switch streams using a 
command line application which I can call from perl using the system 
call.  I've seen the stream switch in pavucontrol.  I've seen the 
move-sink-input in pactl (but failed to get it to work, I guess I don't 
understand how the params work as I always get some error message).

At some other time, I may want to have machine C join in the stream with 
machines B, C.

How is this best to accomplish?
1) Should I use combine_sink on the source machine?
2) Should I use rtp?
3) Should I use tunnel_sink?

I've played with rtp.  Although it works, the audio isn't synchronized. 
    Maybe it should be synchronized, but I haven't found that to be 
true.  I can hear latency delay between multiple machines.

I know how to play across the network, using the pulseaudio alsa plugin.

I'm now trying to play with the network options in the paprefs 
application.  On my main server and desktop, all the network audio 
options in paprefs, configure local sound server, are all grayed out.

Each machine has these modules installed from FC8.
sudo yum list '*pulse*'

Installed Packages
akode-pulseaudio.i386             2.0.2-4.fc8            installed
alsa-plugins-pulseaudio.i386      1.0.15-3.fc8.1         installed
pulseaudio.i386                   0.9.8-5.fc8            installed
pulseaudio-core-libs.i386         0.9.8-5.fc8            installed
pulseaudio-esound-compat.i3       0.9.8-5.fc8            installed
pulseaudio-libs.i386              0.9.8-5.fc8            installed
pulseaudio-libs-devel.i386        0.9.8-5.fc8            installed
pulseaudio-libs-glib2.i386        0.9.8-5.fc8            installed
pulseaudio-libs-zeroconf.i386     0.9.8-5.fc8            installed
pulseaudio-module-gconf.i386      0.9.8-5.fc8            installed
pulseaudio-module-jack.i386       0.9.8-5.fc8            installed
pulseaudio-module-x11.i386        0.9.8-5.fc8            installed
pulseaudio-module-zeroconf.i386   0.9.8-5.fc8            installed
pulseaudio-utils.i386            0.9.8-5.fc8             installed

Available Packages
audacious-plugins-pulseaudio.i386 1.3.5-3.fc8            fedora
fluxbox-pulseaudio.i386           1.0.0-2.fc8            updates
gstreamer-plugins-pulse.i386      0.9.5-0.4.svn20070924. fedora
kde-settings-pulseaudio.noarch    3.5-38.fc8             updates
pulseaudio-module-bluetooth.i386  0.9.8-5.fc8            updates
pulseaudio-module-lirc.i386       0.9.8-5.fc8            updates

Both the avahi and gconf modules are loaded as displayed in the Modules 
section of the Paprefs Manager display.  What else is necessary?

I have auth-anonymouns=1 loaded for both native-protocol-unix and native 
-protocol-tcp.

I've read all the documentation on the pulse wiki many times.  I've 
browsed through all the postings on the mailing list over the past 6 months.

I'm just playing now with the server and desktop which have full blown 
stock fc8 installs, just to figure out how all this works, then I'll 
incorporate the thin clients later.

The whole package is rather complicated and I haven't had much success 
in putting it all together.

I've done my homework.  I just cannot get it working ...

Thanks,

Jim



_______________________________________________
pulseaudio-discuss mailing list
<A class=moz-txt-link-abbreviated href="mailto:pulseaudio-discuss@mail.0pointer.de" moz-do-not-send="true">pulseaudio-discuss@mail.0pointer.de</A>
<A class=moz-txt-link-freetext href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss" moz-do-not-send="true">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A>
  
      </PRE></BLOCKQUOTE></BLOCKQUOTE><PRE wrap=""><!---->
_______________________________________________
pulseaudio-discuss mailing list
<A class=moz-txt-link-abbreviated href="mailto:pulseaudio-discuss@mail.0pointer.de" moz-do-not-send="true">pulseaudio-discuss@mail.0pointer.de</A>
<A class=moz-txt-link-freetext href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss" moz-do-not-send="true">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A>
  </PRE></BLOCKQUOTE>
          <HR>
          _______________________________________________<BR>pulseaudio-discuss 
          mailing list<BR><A class=moz-txt-link-abbreviated 
          href="mailto:pulseaudio-discuss@mail.0pointer.de" 
          moz-do-not-send="true">pulseaudio-discuss@mail.0pointer.de</A><BR><A 
          class=moz-txt-link-freetext 
          href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss" 
          moz-do-not-send="true">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A><BR></BLOCKQUOTE><PRE wrap=""><HR width="90%" SIZE=4>
_______________________________________________
pulseaudio-discuss mailing list
<A class=moz-txt-link-abbreviated href="mailto:pulseaudio-discuss@mail.0pointer.de" moz-do-not-send="true">pulseaudio-discuss@mail.0pointer.de</A>
<A class=moz-txt-link-freetext href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss" moz-do-not-send="true">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A>
  </PRE></BLOCKQUOTE>
      <P></P>
      <HR>
      _______________________________________________<BR>pulseaudio-discuss 
      mailing list<BR><A class=moz-txt-link-abbreviated 
      href="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</A><BR><A 
      class=moz-txt-link-freetext 
      href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A><BR></BLOCKQUOTE><PRE wrap=""><HR width="90%" SIZE=4>
_______________________________________________
pulseaudio-discuss mailing list
<A class=moz-txt-link-abbreviated href="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</A>
<A class=moz-txt-link-freetext href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</A>
  </PRE></BLOCKQUOTE>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>pulseaudio-discuss 
  mailing 
  list<BR>pulseaudio-discuss@mail.0pointer.de<BR>https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss<BR></BLOCKQUOTE></BODY></HTML>