I may not get to it tonight, but definitely by tomorrow night I will email out what I have. Basically it is a lot of text parsing to read the output from the command line interface. I haven't REALLY tested it yet, just fiddling around on my local machine.

I have the wire and fish tape already, just need the time to pull the wires through the walls. Then the real testing will begin (girlfriend testing!). I can't wait for whole home audio!

Matt



Jim Duda wrote:
Matt,
I'm ready to start looking at the python scripts you have put together. I'd like to see how you handle the socket interface for
setting and clearing the mutes.  I appreciate your code share.
Thanks, Jim
    "Matt Patterson" <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote
    in message news:[EMAIL PROTECTED]
    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.

    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.

    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.

    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.

    Matt


    Jim Duda wrote:
    Wow!, but, not sure I'm there yet.
When you play from some player, do you play to sink zone1... or p1... Where does the sound come out? Don't you just have 1 sound card
    here with 2 front-channels?
Thanks for you patience, it hasn't quite clicked in my head yet. Jim

        "Matthew Patterson" <[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>> wrote in message
        news:[EMAIL PROTECTED]
        I'm sorry, I think I mispoke in the last email, I meant
        combine sink. Here's some sample config:

        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:

        # remap things so it seems like we have 4 stereo zones
        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
        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
        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
        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

        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:

        # we leave only one of the outputs unmuted at startup, that
        is our player selection
        load-module module-combine sink_name=p1 master=zone1
        slaves=zone2,zone3,zone4
        #set-sink-input-mute 4 1
        set-sink-input-mute 5 1
        set-sink-input-mute 6 1
        set-sink-input-mute 7 1
        load-module module-combine sink_name=p2 master=zone1
        slaves=zone2,zone3,zone4
        set-sink-input-mute 8 1
        #set-sink-input-mute 9 1
        set-sink-input-mute 10 1
        set-sink-input-mute 11 1
        load-module module-combine sink_name=p3 master=zone1
        slaves=zone2,zone3,zone4
        set-sink-input-mute 12 1
        set-sink-input-mute 13 1
        #set-sink-input-mute 14 1
        set-sink-input-mute 15 1
        load-module module-combine sink_name=p4 master=zone1
        slaves=zone2,zone3,zone4
        set-sink-input-mute 16 1
        set-sink-input-mute 17 1
        set-sink-input-mute 18 1
        #set-sink-input-mute 19 1

        Does that help?

        Matt




        Jim Duda wrote:
        Matt,
I don't understand how the remap_sink module helps (or works
        for that matter).  I'm having trouble getting my head around
        the inputs and outputs of this module.
Would you mind posting an example of how you use remap_sink? Thanks, Jim
            "Matt Patterson" <[EMAIL PROTECTED]
            <mailto:[EMAIL PROTECTED]>> wrote in message
            news:[EMAIL PROTECTED]
            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.

            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 :)

            I haven't played with the tunnel sink module.

            Matt


            Jim Duda wrote:
            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:
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:
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
            [email protected]
            https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

            _______________________________________________
            pulseaudio-discuss mailing list
            [email protected]
            https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
            
------------------------------------------------------------------------
            _______________________________________________
            pulseaudio-discuss mailing list
            [email protected]
            https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

        ------------------------------------------------------------------------

        _______________________________________________
        pulseaudio-discuss mailing list
        [email protected]
        https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
        ------------------------------------------------------------------------
        _______________________________________________
        pulseaudio-discuss mailing list
        [email protected]
        https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

    ------------------------------------------------------------------------

    _______________________________________________
    pulseaudio-discuss mailing list
    [email protected]
    https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

    ------------------------------------------------------------------------
    _______________________________________________
    pulseaudio-discuss mailing list
    [email protected]
    https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

------------------------------------------------------------------------

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

Reply via email to