Building A Multi-Room MP3 Server? 14
Jason Peacock asks: "Say you have a house set up with multi-room sound already (speakers in each room, central multi-zone tuner, control panels in each room) and it's also wired for a computer network. You'd like to add the ability to play different MP3's in each room. First thoughts are to install a server, put a sound card in for each zone, connect these to the zone tuners, then get some software that can play multiple MP3s, outputting them to different sound cards. Or just run multiple instances of an mp3 player, each instance configured for a different sound card. What's the best way to control this using remote terminals (Win2k boxes) in the house? Final challenge: can this be done with Win2k on the MP3 serving box? I'm interested in hearing both solutions (Linux & Windows)." If computers will be running in each zone, why not have an MP3 player on each which can take control of its speakers and play MP3s streamed from the central server (each zone would have its own port). This shouldn't be too difficult to implement and should work with any combination of operating systems that support streaming servers and clients. Anyone else have other solutions?
Re:MP3 jukebox... (Score:1)
Here's some stuff (in PHP) I did to get a web interface to XMMS:
$ cat /etc/sudoers
/usr/bin/X11/xmms
/usr/bin/X11/xmms -p" ); /usr/bin/X11/xmms -u" ); /usr/bin/X11/xmms -f" ); /usr/bin/X11/xmms -r" ); /usr/bin/X11/xmms -s" );
www-data ALL = (rames) NOPASSWD:
$ cat ~/public_html/control_xmms.php | grep [important stuff]
if( $operation == "play" ) {
exec( "sudo -u rames
echo "Play >\n";
} else if( $operation == "pause" ) {
exec( "sudo -u rames
echo "Pause ||\n";
} else if( $operation == "fwd" ) {
exec( "sudo -u rames
echo "Fwd >>\n";
} else if( $operation == "rev" ) {
exec( "sudo -u rames
echo "Fwd <<\n";
} else if( $operation == "stop" ) {
exec( "sudo -u rames
} else {
echo "INVALID XMMS OPERATION.";
}
Thought you might find it interesting or useful.
--Robert
couple more ways... (Score:1)
1) have a central repository (filesystem) and either use nfs or smb mounts (under linux) or smb mounts (aka fileshares) under nt. then just run the mp3 player on each system and pick the songs you want from the shared directory/filesystem and have it play through the local speakers/amp
2) have a central mp3 server that not only stores the songs, it plays them too using the multiple sound cards in the server as you had planned. have a web interface running on web server that allows you to choose what playlist to play through which cards. this would (almost) certainly require running linux or a unix on the server side as i'm not aware of any scriptable mp3 players on nt. (although there might be one).
one server total, multiple outputs:
1) just run multiple copies of xmms, each playing to a different soundcard.
if you don't have local sound cards in each room (as in the very first solution), you will almost certainly have difficulty playing more than one or two mp3's simultaneously unless your computer is very very fast.
also, get sound cards with very good buffering/caching (ala soundblaster live); i've noticed it makes a huge difference on my system (ie my desktop with c-500 & sb live (linux) never "skips" but my dell laptop with p3-700 & ess maestro (win2k) repeatedly "skips".
huh...i don't understand! (Score:1)
Multiple instances of XMMS (Score:1)
Works for me!
Re:Some ideas... (Score:1)
Interesting... (Score:2)
RioReciever [riohome.com]
MP3 jukebox... (Score:2)
Take a look at it at: arlo.dhs.org [dhs.org]
USB Sound (Score:2)
Re:Some ideas... (Score:2)
With a computer monitoring X-10, you can have radio-linked remotes or wired X-10 switches sending codes for the computer to interpret, such as "Next CD", "Next Track", or "Say Menu".
A computer does not have to monitor if you're speaking directly to X-10 devides, such as using X-10 relays to do switching.
X10.Com [x10.com] also has assorted other home audio/video products, particularly wireless links (it's not clear if there is more than one "channel" nor if receivers can be tuned between "channels"). There also are some ways to send "remote control" signals around the house -- apparently the Anywhere 2000 Remote sends both IR and RF signals, but there also are IR repeater devices available for other remotes. Incidentally, if you use this referall link [x10.com] you can get a coupon for a discount from most of their items.
Some ideas... (Score:2)
First off, I planned on two interfaces. One would be a modified version of the myriad of CGI based software for building playlists. You can't get more cross-platform than a web page, although in my case that isn't needed (all machines in my house run Linux primarily).
The other interface was going to be X10 based. Both their MouseRemotes or any of their wall-panel type devices would work well.
I've tinkered a lot with IBM's free ViaVoice software RTK/SDK's under Linux, and it is far better than any other TTS I've tried, including Lucent's online setup. I was going to make a voice readout interface for the remote controls.
As for hardware, I was going to do the same...a simple, central machine, with a crapload of sound cards in it.
In my personal case, I'll probably do this with my current system when I 'retire' it. K62/450, 128MB ram. I intend to get a 60GB maxtor for it (only $269 each locally, and I get 21.4MB/s transfers on it on a Gigabyte slot-A MB at work), and also use it as my central NFS server for other purposes.
MP3 Players and the like (Score:2)
sounds pretty basic (Score:3)
The tougher question is how to intelligently select different playlists (or even songs) for different rooms on the fly. ie The person sitting in the kitchen wants to hear their new Tragically Hip album during dinner..how do you select that? (with ease)
here's one answer (to start off)
have a seperate playlist for all the different bands you have in your MP3 collection..press a button on your remote control to say you are choosing playlists, now use the numbers on the remote (like a phone pad) to get to the correct letter (in this case "T"), have the mp3 server say the name of the band, and you accept or reject the names until you get to the The Hip..(still kinda slow and painful)
2)
have some sort of PIN code that each person in the house has, so when they enter a room, punch in their PIN, their playlist pops up...they have a couple preselected playlists that they can then shuffle through to get to the one they want. ( alot of initial setup)
3)
if their are computers running in each zone...piss easy, they can select the music.
as a side question, how are you guys handling the wiring for multi room music? I am really looking to go wireless, but haven't found a good system yet. Any good DIY stuff? And any recomendations for recievers to control the multi room speakers?
Serial LCD + keypad (Score:3)
Distributed vs. Centralized playback (Score:3)
For the first approach you would likely need ethernet wiring for the whole house and a PC in every room. This is not very practical and causes a lot of clutter. I do this with 4 PCs. I have samba or windows servers running on every machine so mp3s from any machine can be accessible from all over the place. Samba really ties things together, I recommend it if you will be mixing operating systems. I'd also recommend getting a mini-keyboard and trackball for every room. Or, if your a programmer, download IBM's ViaVoice SDK and whip up some voice control software, it's not that hard and you could hide the PC in a closet. Very nifty
Even niftier - use one main server and run speaker cables to every room from your amplifier. You will need to devise some kind of central control mechanism of course. Here's where my kinda but not so far-fetched idea for a dream setup comes in. I'm not sure what the wireless networking options are for the palm and visor, but this idea could really use such a thing. You'd basically write some software for the Palm that talked over the network to your server, which would play the mp3s. Palm apps are written in GNU C, so it would be pretty simple to whip up this little app. The wireless ethernet card is the only missing linked. Anyone know if such a product exists? There's always the Palm Ethernet Cradle [palm.com]. Someone would have to write a daemon that would listen in for play requests. Some commands the daemon might listen for from palms:
"ls"
"cd
"!play |(Cake) - Ain't No Good.mp3| zone4"
"!stop zone4"
"master volume 233 zone1"
"status zone3"
etc.. You could even telnet to the servers port and issue these commands from anywhere
For multi-zone use you could easily rig up a really up your parallel port with a relay controller to switch zones among the multiple sound cards. A relay is simply electronically controlled magnetic switch. A darlington transistor followed by a relay on each pin of your parallel port would allow for 13 electronic switches. Switching a relay is too much load for your parallel port, so it would switch the darlington using a small current and then the darlington would switch the relay since it requires a larger current. You can get cheap $2 IC chips with 8 darlingtons in them. And programming the parallel port for this kind of application is pretty simple too, it's just a matter of setting the right bits to put a voltage difference on a particular pin. Check the Linux Howtos, there is one on Parallel Port Programming.
This project could get pretty interesting. If I had a palm and the time, I'd already be working on this, but like many people here I've got a lot more ideas than time to work on all of them. I'd love to see something like this pursued though.
emice