<?xml version="1.0"?>
<!DOCTYPE content [ <!ENTITY nbsp " "> ]>
<rdf:RDF xml:base="http://snarfed.org/rdf"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">

<rdf:Description rdf:about="http://snarfed.org">
  <dc:title> snarfed.org  </dc:title>
  <dc:description> draw group stream of consciousness </dc:description>
  <dc:creator> Ryan Barrett &lt;snarfed at ryanb dot org&gt; </dc:creator>
  <dc:language> en </dc:language>
  <dc:format> text/html </dc:format>
  <dc:rights> Copyright 2002-2007 Ryan Barrett </dc:rights>
</rdf:Description>

<rdf:Description rdf:about="http://snarfed.org/space/synchronizing%20mp3%20playback">
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Ryan Barrett &lt;snarfed at ryanb dot org&gt; </dc:creator>
  <dc:date> 2003-01-01T05:00:00Z </dc:date>
  <dc:language> en </dc:language>
  <dc:format> text/html </dc:format>
  <dc:rights> Copyright 2002-2007 Ryan Barrett </dc:rights>

  <content>
    <p><img src="/space/notes.png" alt="notes.png" title="" /></p>

<h3>Background</h3>

<p>Once upon a time, we thought a killer app for hall parties would be an MP3
player synchronizer. We actually wrote one, as part of our p2p network,
<a href="/space/p4">P4</a>. It plugged into <a href="http://winamp.com/">Winamp</a> and synched its
playback with other P4 users on the network. This allowed lots of computers to
sync up and play the same songs, at the same time, as if they were tuned to the
same radio station. It sounded like one giant stereo with lots and lots of
speakers.</p>

<p>We had considered alternatives. First, we tried tuning lots of computers to the
same streaming MP3 server. Unfortunately, they ended up out of sync due to
buffering. Another low-tech alternative was to yell "Play!" and have everyone
try to start an MP3 at the same time. We actually tried this, and quickly
verified that it's more or less impossible.</p>

<p>In the end, <a href="/space/p4">P4</a>'s syncher worked, but it was brittle and not at
all easy to use. I tried again without P2P, and ended up with a solid synching
engine, but couldn't find a player with low enough plugin latency. When the
sync plugin says "seek here!", it needs to happen in around 50ms, all the way
from the player down through the sound card driver.
<a href="http://winamp.com/">Winamp</a> can do this, but not
<a href="http://itunes.com/">iTunes</a>, nor any *nix players we found.</p>

<p>Still, if you're interested, feel free download the source,
<a href="/space/p4sync-0.1.tar.bz2">p4sync-0.1.tar.bz2</a>. It comes with the sync
engine, plugin framework, and working plugins for the *nix music players
<a href="http://xmms.org/">XMMS</a>, <a href="http://zinf.org/">Zinf</a>, and
<a href="http://musicpd.org/">MPD</a>. <a href="/space/about">Drop me a line</a> if you have any
questions!</p>

<h3>Related Work</h3>

<p>The <a href="http://winamp.com/plugins/details.php?id=15667">NetSync Winamp plugin</a>
attempts to solve the synchronization problem too. However, it's low-tech; it's
the network equivalent of shouting "Play!" and hoping everyone presses the
button at the same time. Because of this, its sync quality is often in the mid
to high hundreds of milliseconds, which is unacceptable.</p>

<p>The <a href="http://www.kquery.com/index.php?page=software_info&amp;subpage=1&amp;id=8">BASS Network
Player</a>, from
<a href="http://kquery.com/">K* Software</a>, takes a different approach. It's a
self-contained MP3 player, with network synchronization built in. When I've
managed to get it working, its sync quality seems to be better than NetSync's.
However, it can be very flaky and difficult to use.</p>

<p>Also, it's not a plugin for your normal MP3 player. This is a noticeable
drawback, since it lacks most of the features (usability, playlist management,
plugins, different file formats, visualizations, etc.) that we've come to expect
from MP3 players.</p>

<p><a href="http://slimdevices.com/">Slim Devices</a>, best known for the
<a href="http://slimp3.com/pi_specs.html">Squeezebox</a>, a dedicated set-top box MP3
player, recently released the software that powers it under the GPL. It's called
<a href="http://slimp3.com/pi_features.html">SlimServer</a>, and one of its touted features
is the ability to synchronize MP3 streams on multiple clients. It's somewhat
non-trivial to install, so I haven't fully evaluated it yet...but it looks
promising.</p>

<p>Finally, <a href="http://www.myradus.com/Product_MediaPlayerPuppeteerForm.aspx">Media Player
Puppeteer</a> claims
to synchronize iTunes over a network, and allows for remote control. On the plus
side, it syncs playlists and songs fairly well. However, like the others, its
sync quality is unacceptable. Even with only two computers, when we tested, we
heard a noticeable echo. MPP also requires iTunes, Windows, and the .NET
framework, which limits its target audience severely.</p>

<h3>Challenges</h3>

<p><strong>Network latency</strong>. MP3 streaming technologies (such as
<a href="http://shoutcast.com">ShoutCast</a>) already exist. However, they assume that a
central server will be broadcasting a stream of music to many computers that are
geographically disparate. Its goal is to maintain an uninterrupted stream of
music flowing to each computer. As a result, it pushes out music as fast as
possible and stores the extra music in a buffer to ensure continutity. It
assumes each user will experience latency (lag), so the buffer ensures that no
user runs out of music to listening to. Unfortunately, this buffering almost
guarantees that no two users listening to the same stream will be in sync.</p>

<p><strong>Playback rate</strong>. The syncher used <a href="http://winamp.com/">Winamp</a> v.2.x as its
mp3 player. By using Winamp's API, we were able to determine that <em>different
computers play mp3's at noticably different rates!</em> This means, if you are able
to start synchonized playback between two computers, they may well skew out of
sync midway through the song, and you'll hear a noticeable echo.</p>

<p><strong>Player API latency</strong>. We also noticed that there was an occasional delay, as
large as hundreds of milliseconds, between when we told Winamp to seek and when
it actually seeked. Worse, this delay was highly variable. Needless to say, if
our goal is accurate synchronization, this is deadly. We're not sure if the
delay was caused by Windows' IPC, Winamp, or unavoidable hardware delays like
the hard drive controller. We haven't tested any other players to see if they
experience similar delays.</p>

<h3>Solution</h3>

<p>The key insight is, synchronizing computers within milliseconds over a
best-effort network is a <em>hard</em> problem. I doubt any of the p4sync developers is
smart enough to solve it from scratch. Luckily, computer science researchers
back in the '80s figured out how to do it, and designed <a href="http://ntp.org/">NTP</a>.
Since then, most people have piggybacked over NTP for their synchronization
needs.</p>

<p>So, just like everyone else, we cheat and use NTP (actually
<a href="/space/libmsntp">SNTP</a>) to solve the hard problem. Who am I to look a gift
horse in the mouth?</p>

<p>Seriously, though, there's only one trick to p4sync, and that is how it uses
NTP. One host acts as the p4sync server. The other p4sync clients synchronize
their system clocks to the server's clock, using SNTP. When the server starts
playing a song, it records the time, to the millisecond. The clients then
retrieve that timestamp, calculate the difference between current time from that
timestamp, and seek forward that far into the song.</p>

<p>It's really all quite simple. No, really.</p>

<p>We use existing, tried-and-true technologies for everything except the music
synching. We use <a href="/space/libmsntp">libmsntp</a> for synching system clocks. The
server timestamp and the current song and playlist are sent over HTTP, using
<a href="http://www.demailly.com/~dl/wwwtools.html">http-tiny</a> and
<a href="http://libwebserver.sourceforge.net/">libwebserver</a>. The MP3 players are
existing players with large installed bases, initially <a href="http://www.microsoft.com/windows/windowsmedia/default.aspx">Windows Media
Player</a>,
<a href="http://winamp.com/">Winamp</a>, <a href="http://itunes.com/">iTunes</a>, and
<a href="http://xmms.org/">XMMS</a>. So, most of the p4sync code is nothing more than glue.</p>

<h3>Party Structure</h3>

<p>Each party needs exactly one host. The rest of the computers are guests.</p>

<p>The host is the server. It is the authoritative source of the currently playing
song, as well as determines the speed at which to play it.</p>

<p>Each guest is responsible for downloading the songs in the playlist of the party
as well as playing back the songs. Guests ask the host which song to play, and
when that song started playing.</p>

<p>The official time is determined by the host's system clock, which guests sync to
using SNTP. This means that any network lag will be compensated by knowing the
true time. If a guest is playing a song too slowly, it can periodically skip
ahead every now and then to re-sync.</p>

<h3>Future plans</h3>

<ul>
<li><p>Investigate methods to guarantee that MP3s play back at a constant rate,
regardless of player or host.</p></li>
<li><p>Distribute playlists and songs from the host to the guests.</p></li>
<li><p>Automatic host discovery, possible using
<a href="http://developer.apple.com/darwin/projects/bonjour/index.html">Bonjour</a>
(formerly <a href="http://developer.apple.com/darwin/projects/rendezvous/">Rendezvous</a>,
aka <a href="http://zeroconf.org/">ZeroConf</a>).</p></li>
</ul>

<h3>History</h3>

<p>p4sync used to be <a href="https://sourceforge.net/projects/p4sync/">hosted at
SourceForge</a>. Snarfed has its own web
space and <a href="/space/2004-01-08">subversion repository</a>, though, so SourceForge
ended up being redundant. We've closed the project there, but we definitely
appreciated their hospitality. So long, SourceForge, and thanks for all the
fish!</p>

<p>-<a href="/space/Maulik"> Maulik</a> and <a href="/space/Ryan">Ryan</a></p>

<p>See also:</p>

<ul>
<li><a href="/space/p4">p4</a></li>
<li><a href="/space/libmsntp">libmsntp</a></li>
<li><a href="/space/libwebserver shutdown patch">libwebserver shutdown patch</a></li>
</ul>

  </content>

  <rdf:Seq>

<rdf:li>
<rdf:Description rdf:about="#1133907251.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-1 </dc:title>
  <dc:creator> bjorn400 </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
Hi, I have been keeping tabs on this report.  Thanks for the great info.  I like vlc player for local multicast streaming, because my roomates use ibooks, and I use a self built pc. Of course it eventually falls out of sync in the hundreds of a second range as you describe.  Pretty annoying.  I look forward to more info on how to minimize this sync gap.  Thanks! -bjorn

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1140574042.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-2 </dc:title>
  <dc:creator> Guest </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
Great work guys keepit up :)
I will definatly be interested in a final version.
will it be freeware???<p class="paragraph"/>
 <i class="italic">- DonkyBoY</i>

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1140669160.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-3 </dc:title>
  <dc:creator> ryan </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
thanks! if and when we make an official release, it will definitely be free, both
<span class="nobr"><a href="http://www.voresoel.dk/main.php?id=70">as in beer</a></span>
and
<span class="nobr"><a href="http://www.gnu.org/philosophy/free-sw.html">as in freedom</a></span>.<p class="paragraph"/>development has slowed down some, though, since the plugin latency in the vast
majority of players is too high. when a plugin says "seek here!", it needs to
actually happen, from the player down through the sound card driver, in under
100ms at a bare minimum. winamp can do this, but not itunes, nor any *nix
players i've found. :/<p class="paragraph"/>
still, we might come back to it. until then, you're welcome to
<span class="nobr"><a href="http://ryan.barrett.name/p4sync-0.1.tar.bz2">try out the latest version</a></span>! it come with the core sync library and experimental plugins for
<span class="nobr"><a href="http://xmms.org/">xmms</a></span>,
<span class="nobr"><a href="http://zinf.org/">zinf</a></span>, and
<span class="nobr"><a href="http://musicpd.org/">mpd</a></span>,
available for most *nix platforms.<p class="paragraph"/>
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1142518099.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-4 </dc:title>
  <dc:creator> Guest </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
I was excited to find this page, but worried when I noticed there was no posting date, and downright disappointed to hear that development has stalled.  I have exactly the problem you describe:  Two computers in disparate parts of the house, which I want to be able to play synchronized music from my own library or tune to an Internet radio station.  I have a local Shoutcast server to feed a common stream, and my local network latency is low enough that via remote access, I can kick off playback on both machines nearly simultaneously.  Unfortunately, drift is dramatic:  One the order of 5 seconds an hour!  Within five minutes, I can already hear a distinct echo.<p class="paragraph"/>I'll download it and check it out, but does your latest version make any attempt to keep two playback machines in sync, or does it only try to synch the initial start of playback?<p class="paragraph"/>Thanks,
Jim<p class="paragraph"/><p class="paragraph"/> <i class="italic">- Jim</i>

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1142927531.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-5 </dc:title>
  <dc:creator> ryan </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
hi jim! absolutely, it continuously syncs the players, not just at the beginning. as i mentioned in the "playback rate" section, we noticed the skew that you noticed too, so we had to account for it.

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1145925133.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-6 </dc:title>
  <dc:creator> Guest </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
Any chance of an alpha yet, guys?  I'm really interested in seeing this work.  I've tried muxing with Shoutcast, running two instances of Winamp on the server (one to run shoutcast, the other to client) and simultaneously listening on a remote machine.  It works to within 250ms I'd say if you stop and start the stream to reset both clients but it's still noticeable.<p class="paragraph"/>Thanks!<p class="paragraph"/> <i class="italic">- FSL</i>

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1145932731.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-7 </dc:title>
  <dc:creator> ryan </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
sure! as i mentioned a few comments above, you're welcome to
<span class="nobr"><a href="http://ryan.barrett.name/p4sync-0.1.tar.bz2">try out what we have right now</a></span>.
it has the core sync library and plugins for
<span class="nobr"><a href="http://xmms.org/">xmms</a></span>,
<span class="nobr"><a href="http://zinf.org/">zinf</a></span>, and
<span class="nobr"><a href="http://musicpd.org/">mpd</a></span>,
available for most *nix platforms.<p class="paragraph"/>sadly, though, due to the IPC latency in most players, development is on hold indefinitely.

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1151978095.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-8 </dc:title>
  <dc:creator> Guest </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
Sorry to hear that development is on hold.  This is a cool concept, and I'd love to see it working.<p class="paragraph"/>One of my best memories from college was synching up gregorian chant over the network with my roomate, then playing Unreal Tournament.  We'd fill the whole apartment with the sounds of chanting and headshots.    I can't remember what tool we used back then, but the echo was significant.<p class="paragraph"/>Good times.<p class="paragraph"/> <i class="italic">- <span class="nobr"><a href="http://plasmator.net">Bob</a></span></i>

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1153892153.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback-9 </dc:title>
  <dc:creator> Guest </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    
I'm no programer, but could you use some fuzzy logic to steer the timing back to perfect sync.  Get it to play slightly faster or slower as needed instead of seeking a hundredth here or there.  I.e. Client says oops, Im starting to get ahead of the server, better slow it down 4 notches, Oops now I'm starting to get behind better speed it up 2 notches, etc.<p class="paragraph"/>Or, If you know what the ultimate deviation of the client and server was by the end of the track couldn't you have the client learn the diffference and adjust the playback speed to suite.  Then the more files you play the more accurate it becomes.  You could create a log of playback rates for different bit rates etc.<p class="paragraph"/>Also, I looked at your latest version, but I have no idea how to try this with say winamp, you might post a laymans guide to plugging it in and running it. FWIW, if you got it working in just one player many would be happy.<p class="paragraph"/> <i class="italic">- Humanzee</i>

  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1163372265.39">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Alex </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I tooo agree if you can get it to work with just 1 player, like winamp you would make many many people happy, and I would pay for a working version of a winamp plugin that can do this<br />
<br />
<em>Alex</em>
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1163372267.44">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Alex </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I tooo agree if you can get it to work with just 1 player, like winamp you would make many many people happy, and I would pay for a working version of a winamp plugin that can do this<br />
<br />
<em>Alex</em>
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1165083614.95">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Eric </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Same here.&nbsp; $$$$$$ from me.&nbsp; I want this bad.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1166461483.72">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Lars Werner </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    It is good to see that someone picks up where others stop. As the author of NetSync I know how hard these problems are.<br />
<br />
I don't work on NetSync anymore, and I've also learned on College about realtime computersystems. What NetSync, P4 or any other plugins are trying to accive is quite impossible if you don't use a realtime OS in both ends. But you can get pretty near.<br />
<br />
If someone wants to redo the NetSync I would recommend to use UDP diagrams and continiously update the slaves with the current playback position and try to "sync it" as good as you can. It would be quicker than the orginal that uses TCP.<br />
<br />
Cheers,<br />
Lars Werner<br />
<a href="http://lars.werner.no">http://lars.werner.no</a>
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1172753733.44">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Myself </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I just learned about <a href="http://freenet-homepage.de/dl4yhf/spectra1.html">SpectrumLab</a>, which is ham radio software with some incredible features. One is the ability to calibrate your soundcard's sample rate clock, when fed a precise reference via the line-in jack. Some of their techniques might be relevant here.<br />
<br />
One more effect to consider is network latency, particularly over wireless. Don't just send one packet and expect it to arrive immediately. Send a thousand, and take the one with the lowest apparent latency. (Since packets can't travel back in time, that's guaranteed to be the one that's closest to reality.) If your round-trip times are consistently under a millisecond I guess it doesn't matter, but most wireless networks clock in much higher, particularly if they're running accelerator modes, which, ironically enough, improve throughput at the expense of latency.<br />
<br />
I'm fascinated by the existence of this software, and will download and play with it later. I'd love to sync several copies of Winamp around the house, and I'm not opposed to soldering hand-picked crystals into old SoundBlasters for each machine if that's what it takes to minimize drift. ;)
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1174505856.68">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> jtimouri </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Hey guys I am happy to find you all. This is my situation: exact copies of music cds on two different hard drives in two different computers (the computers and hard drives are twins). I want to use one of the computers to play left channel stereo, the other right channel. Clearly there are timing issues, but no network latency issue. Nice to know that others have experimented with solutions that might be applicable.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1175111364.62">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> tgrandahl </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Like everyone else, im happy to find someone that has not just blown this off as impossible. Is this the only known project like this?
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1175335956.62">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Brandon Irwin </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Hello,<br />
<br />
I ended up doing the same thing you did with the clock sync...but...like you I found that the latency for winamp to start playing or seek is what ruined everything. Had accuracy down to 5 milliseconds at incredible worse between the comps, but, didn't do any good cause of winamp.<br />
<br />
I think the best bet would be to make an audio output plugin where you could precisely control when a sample is played. Doing it this way, syncing could probably be done every 100 or so milliseconds if you wanted without noticing. Too bad you use c and I use delphi :-\<br />
<br />
Lol, as I'm typing this, I hear my amd computer running ahead of the two pentiums as it plays this synced mp3 with the software I made. wtf is up with that anyways? <br />
<br />
Good luck!<br />
brandon D0T irwin @gm ail dot com
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1177772671.83">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Goldfish </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Awesome, this is the only live tread i can find on this topic.&nbsp; My aim is to have kickass flat parties with synched up music playing from a terminal pc in every room, but I don't want to install a separate audio network (with an amp at EVERY terminal would be so expensive) when we already have a LAN in.&nbsp; <br />
<br />
A progress update would be cool, especially since this tread seems to be the last port of call for our problem :(
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1178940390.0">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Nick </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Hey guys, this project sounds very good indeed!&nbsp; In my searches i've found some hardware related stuff that can sync music, but what you guys are doing is basically what i'm looking for because it is free software... You mentioned something about seeing a work in progress version??...&nbsp; I would be willing to bug test to the extent of my comoputer knowledge.&nbsp; My flat mate funs a mac and I run windows...
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1178940433.42">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Nick </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    By the way, my e-mail is nrasmith@bigpond.com
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1188669324.12">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Tubby Pirate </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I found a solution that works well for me. I bought a dLO TransPod for my car and mired an extra power supply to the extension arm. Now I attach the TransPod to the extension arm (which is bolted to my desk) and plug a patch cord into the speaker jack on the comp and into the input on the TransPod. All the radios in my house can play the same music with zero lag. It works very well and has decent range. The only downside is that you cna't change the song from any room other than the one with the computer in it. The sound quality is just as good as a real radio station so it leaves a little to be desired when played through my home theatre system. If anyone wants some more info, email me at FletcherTBomb@aol.com. I'd be happy to send you pics. This is only an interim solution until someone makes sync software work.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1188791264.9">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Matt </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    What about pinging each node on the net and say each has &lt;5ms like a LAN. From there send out a signal to each based on some calculation ("I'm 1ms round trip so I'll start at THIS point, I'm 3ms so I'll start at THIS point") to start the song. Obviously the host would be the last to start playing relative to the latency of all the others. Again, introducing anomalies like other nodes putting loads on the net would interfere with this "perfect" LAN, but lets say it was isolated for this reason. Given a common 100/1000 type network, it would seem that this is a software&nbsp; problem more than anything . FWIW, I'm not a software engineer by any means.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1188791571.48">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Matt </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Holy fuck. I thought sites had protection for double posting, let alone quadruple posting! Sorry!
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1190549674.27">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> http://csett86.wordpress.com/ </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I really apprechiate the work going into this project, but its very sad to hear, that you stopped development before reaching a working winamp plugin. I would love to see that, especially because you wrote, that the winamp api calls are fast enough.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1193605213.5">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Braun </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I too would pay money for this type of a plugin for winamp.&nbsp; I'm sure a LOT of people would.&nbsp; Look at how popular things like Sonos and Squeezebox are becoming.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1193953171.71">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Rycon </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Damn I was really looking forward to using this, I tried NetSync but i just couldnt get it work in a practicle sense, I could somtimes get it to sync correctly but most of the time there was a noticable echo, plus like I said its not practicle to use during a party. Wish you were still developing it Lars Werner.<br />
<br />
Any chance of a revisit to this project?
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1195231365.95">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Kaboom22 </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    The solution to the problem is VLC. Create a stream with the --control netsync option and stream to a multicast IP ( i used 239.255.1.1).<br />
<br />
For server:<br />
"&lt;path to vlc.exe&gt;" -vvv "&lt;path to playlist file&gt;" --sout udp:239.255.1.1 --control netsync --netsync-master<br />
<br />
For client:<br />
"&lt;path to vlc.exe&gt;" udp://@239.255.1.1 --control netsync --netsync-master-ip &lt;ip address of server&gt;<br />
<br />
(keep quotes, remove &lt;&gt;) run two copys of vlc on the master if you want to hear the stream on that machine (run 1 client and 1 server). I just made two batch files with that info in for easy access.<br />
<br />
Streaming quality is excelent and delay is only really noticeable if you listen hard for it.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1196448258.34">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Bradbeard </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Nice try, Ryan.&nbsp; The truth is you'll NEVER be able to get this to work unless you remove the network and API latency issues.&nbsp; There needs to be a calibration tool that thoroughly determines API latency, THEN you need to have the MP3 downloaded (can be pre-cached from the server or network share) to remove network latency altogether.&nbsp; Network latency (especially on wireless networks) can never be overcome although I've come very close using gigabit based Ethernet.<br />
<br />
FYI:&nbsp; Slimserver has all the same issues.&nbsp; It's close, but still unacceptable.&nbsp; VLC is a fantastic tool, but the results are still unacceptable by my standards <br />
<br />
Don't give up, guys!&nbsp; It's only a matter of time... I think the best solution will be one that uses combined SNTP and real-time MP3 analysis/sync.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1196473450.31">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> ryan </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    uh, bradbeard, try reading the <i>whole</i> article. it makes the same obversations, and comes to the same conclusion. the source in the <a href="/space/p4sync-0.1.tar.bz2">tarball</a> even includes an <a href="/space/libmsntp">SNTP library</a> i wrote for use in this project.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1205151637.94">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> Georg </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    What about AIRPORT EXPRESS from Apple in Combination with Itunes or this <a href="http://rogueamoeba.com/airfoil/mac/">http://rogueamoeba.com/airfoil/mac/</a> ?<br />
<br />
<br />
Does anyone tried this yet? I heard lots of good reviews about it!
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1207946474.21">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> The Jut </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    Maulik / Ryan--<br />
<br />
I was recently looking into how to stream the same music to multiple players on a floor (or in our case, wing). With surprising results, I found that there was enough bandwidth to do the following in VLC:<br />
<br />
vlc -vvv --ttl 1 --sout-all --sout-keep --sout=#rtp{mux=ts,dst=224.30.68.1,port=1234} playlist.m3u<br />
<br />
I experimented a little bit with some other methods, but found this was the easiest. I was also able to make a batch file for windows users so they can just drop their sound/playlist file onto an icon and have it start playing:<br />
<br />
vlc -vvv --ttl 1 --sout-all --sout-keep --sout=#rtp{mux=ts,dst=224.30.68.1,port=1234} %1<br />
<br />
Essentially the same thing, with a %1 in place of the playlist.m3u to accept the command line argument.<br />
<br />
Although the sound quality can deteriorate, we've found that on fast networks it doesn't seem to have any trouble.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1209514758.19">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> naamarti </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    I have used airtunes (airport express) and found that there is a noticeable delay right off the bat.&nbsp; I did not measure it, but it is audibly clear seconds into a song on a snare or kick beat.&nbsp; Aside from this, they do not tend to play nicely with non-apple hardware.
  </content>
</rdf:Description>
</rdf:li>

<rdf:li>
<rdf:Description rdf:about="#1224262194.02">
  <dc:source> http://snarfed.org/ </dc:source>
  <dc:title> synchronizing mp3 playback </dc:title>
  <dc:creator> djacidjac </dc:creator>
  <dc:date> cmt_pubDate </dc:date>
  <dc:format> text/html </dc:format>

  <content>
    This task is huge. Look into what audio technicians use to sync audio at a dedicated workstation, then consider the implications of doing that over a network. (of course, they need to sync down to the sample.) I think the best solution would be some kind of dedicated hardware that sent a sync signal. But if we could manage to get less than 5ms (preferably &lt;3ms) at the worst using network software then that'd do the trick for most user's listening and watching habbits. I'm going to dig into this for my home network by the way. Thanks!
  </content>
</rdf:Description>
</rdf:li>

  </rdf:Seq>
</rdf:Description>
</rdf:RDF>
