|
a/doc/scmulti.html |
|
b/doc/scmulti.html |
|
... |
|
... |
743 |
<div id="preamble">
|
743 |
<div id="preamble">
|
744 |
<div class="sectionbody">
|
744 |
<div class="sectionbody">
|
745 |
<div class="paragraph"><p>General information about <strong>upmpdcli</strong> support for <strong>Songcast</strong> can be found
|
745 |
<div class="paragraph"><p>General information about <strong>upmpdcli</strong> support for <strong>Songcast</strong> can be found
|
746 |
<a href="sc2mpd.html">here</a>. This page explains how to set up a multiroom
|
746 |
<a href="sc2mpd.html">here</a>. This page explains how to set up a multiroom
|
747 |
synchronized audio system using <strong>upmpdcli</strong> and <strong>Songcast</strong>.</p></div>
|
747 |
synchronized audio system using <strong>upmpdcli</strong> and <strong>Songcast</strong>.</p></div>
|
|
|
748 |
<div class="admonitionblock">
|
|
|
749 |
<table><tr>
|
|
|
750 |
<td class="icon">
|
|
|
751 |
<div class="title">Note</div>
|
|
|
752 |
</td>
|
|
|
753 |
<td class="content">multicast and WIFI don’t mix well in many cases. If you have
|
|
|
754 |
wireless Receivers experiencing sound drop issues, try selecting unicast in
|
|
|
755 |
the Songcast advanced configuration panel on the desktop.</td>
|
|
|
756 |
</tr></table>
|
|
|
757 |
</div>
|
748 |
</div>
|
758 |
</div>
|
749 |
</div>
|
759 |
</div>
|
750 |
<div class="sect1">
|
760 |
<div class="sect1">
|
751 |
<h2 id="_multiple_receivers">Multiple Receivers</h2>
|
761 |
<h2 id="_multiple_receivers">Multiple Receivers</h2>
|
752 |
<div class="sectionbody">
|
762 |
<div class="sectionbody">
|
753 |
<div class="paragraph"><p>Multiple <strong>Songcast</strong> <em>Receiver</em> hosts can connect to the same <em>Sender</em>, so
|
763 |
<div class="paragraph"><p>Multiple <strong>Songcast</strong> <em>Receiver</em> hosts can connect to the same <em>Sender</em>, so
|
754 |
that they will all be playing the same audio.</p></div>
|
764 |
that they will all be playing the same audio. They form a group only in the
|
|
|
765 |
sense that they play from the same URI, and are not otherwise linked.</p></div>
|
755 |
<div class="paragraph"><p>The Mac and Windows <strong>Songcast</strong> apps only let you activate one
|
766 |
<div class="paragraph"><p>The Mac and Windows <strong>Songcast</strong> apps only let you activate one
|
756 |
<em>Receiver</em> though.</p></div>
|
767 |
<em>Receiver</em> though.</p></div>
|
757 |
<div class="paragraph"><p><strong>upmpdcli</strong> now includes a small application which can list the state of
|
768 |
<div class="paragraph"><p>The <strong>upmpdcli</strong> package now includes the <strong>scctl</strong> command line utility, which
|
758 |
the local <strong>Songcast</strong> Receivers, make a Receiver play from the same URI as
|
769 |
can list the state of the local <strong>Songcast</strong> <em>Receivers</em>, make a <em>Receiver</em>
|
759 |
another one (for building multiroom groups), or return a Media Renderer
|
770 |
play from the same URI as another one (for building multi-room groups), or
|
760 |
from Receiver to normal operation.</p></div>
|
771 |
return a <em>Media Renderer</em> from <em>Receiver</em> to normal operation.</p></div>
|
761 |
<div class="paragraph"><p>The functions can be accessed either from the <strong>scctl</strong> command line utility,
|
772 |
<div class="paragraph"><p>As the Songcast application is only available on Windows or Mac desktops,
|
762 |
or from a local Web application (as Songcast is mostly used from a Windows
|
|
|
763 |
or Mac PC, it would be inconvenient to have to access the Linux command
|
773 |
it would be inconvenient to have to access the Linux command line to
|
|
|
774 |
control the multi-room groups, and the <strong>upmpdcli</strong> package also includes a
|
|
|
775 |
small Web application which can be accessed from a desktop web browser to
|
764 |
line to control the multiroom groups).</p></div>
|
776 |
control the groups.</p></div>
|
765 |
<div class="paragraph"><p>This has only be tested with <strong>upmpdcli</strong> and its <a href="sc2mpd.html">sc2mpd</a>
|
777 |
<div class="paragraph"><p>This has only be tested with <strong>upmpdcli</strong> and its <a href="sc2mpd.html">sc2mpd</a>
|
766 |
<strong>Songcast</strong> auxiliary process as Receiver implementation, but I’d guess that
|
778 |
<strong>Songcast</strong> auxiliary process as Receiver implementation, but I’d guess that
|
767 |
there is a good chance it would work with others.</p></div>
|
779 |
there is a good chance it would work with others.</p></div>
|
768 |
</div>
|
780 |
</div>
|
769 |
</div>
|
781 |
</div>
|
770 |
<div class="sect1">
|
782 |
<div class="sect1">
|
771 |
<h2 id="_synchronisation_issues">Synchronisation issues</h2>
|
783 |
<h2 id="_synchronisation_issues">Synchronisation issues</h2>
|
772 |
<div class="sectionbody">
|
784 |
<div class="sectionbody">
|
773 |
<div class="paragraph"><p>The short version is: all sc2mpd instances must be configured to play
|
785 |
<div class="paragraph"><p>The short version is: all <strong>sc2mpd</strong> instances must be configured to play
|
774 |
directly to Alsa. See the <a href="sc2mpd.html#Configuration">configuration
|
786 |
directly to Alsa. See the <a href="sc2mpd.html#Configuration">configuration
|
775 |
section</a>.</p></div>
|
787 |
section</a>.</p></div>
|
776 |
<div class="paragraph"><p>Longer version: Songcast is a real-time audio stream. As the Sender and
|
788 |
<div class="paragraph"><p>Longer version: <strong>Songcast</strong> is a real-time audio stream. As the <em>Sender</em> and
|
777 |
Receiver sample clocks (the 44.1 or 48 KHz clocks) are independant, audio
|
789 |
<em>Receiver</em> sample clocks (the 44.1 or 48 KHz clocks) are independant, audio
|
778 |
reproduction on the two systems will slowly drift. If nothing is done,
|
790 |
reproduction on the two systems will slowly drift. If nothing is done,
|
779 |
after a time, the Receiver will have to skip samples or add a period of
|
791 |
after a time, the <em>Receiver</em> will have to skip samples or add a period of
|
780 |
silence (depending if its clock is slower or faster), which is quite
|
792 |
silence (depending if its clock is slower or faster), which is quite
|
781 |
audible and ennoying, and will happen "from time to time", depending of how
|
793 |
audible and ennoying, and will happen "from time to time", depending of how
|
782 |
much the clocks differ.</p></div>
|
794 |
much the clocks differ.</p></div>
|
783 |
<div class="paragraph"><p>The only way to control this is to adjust the rate of reproduction on the
|
795 |
<div class="paragraph"><p>The only way to control this is to adjust the rate of reproduction on the
|
784 |
Receiver, which can be done in two ways:</p></div>
|
796 |
<em>Receiver</em>, which can be done in two ways:</p></div>
|
785 |
<div class="ulist"><ul>
|
797 |
<div class="ulist"><ul>
|
786 |
<li>
|
798 |
<li>
|
787 |
<p>
|
799 |
<p>
|
788 |
Linn hardware uses timestamps embedded in the audio stream to adjust
|
800 |
<strong>Linn</strong> hardware uses timestamps embedded in the audio stream to adjust
|
789 |
their hardware sample clock.
|
801 |
their hardware sample clock.
|
790 |
</p>
|
802 |
</p>
|
791 |
</li>
|
803 |
</li>
|
792 |
<li>
|
804 |
<li>
|
793 |
<p>
|
805 |
<p>
|
794 |
sc2mpd in Alsa mode uses sample rate conversion to adjust the stream.
|
806 |
<strong>sc2mpd</strong> in <em><tt>alsa</tt></em> mode uses sample rate conversion to adjust the stream.
|
795 |
</p>
|
807 |
</p>
|
796 |
</li>
|
808 |
</li>
|
797 |
</ul></div>
|
809 |
</ul></div>
|
798 |
<div class="paragraph"><p>This is not specific to Songcast of course, all real time audio network
|
810 |
<div class="paragraph"><p>This is not specific to <strong>Songcast</strong> of course, all real time audio network
|
799 |
transports have to do something similar.</p></div>
|
811 |
transports have to do something similar.</p></div>
|
800 |
<div class="paragraph"><p>Independantly of the clock issue, all Receivers should use approximately
|
812 |
<div class="paragraph"><p>Independantly of the clock issue, all <em>Receivers</em> should use approximately
|
801 |
the same amount of buffering for the audio to be reasonably synchronous
|
813 |
the same amount of buffering for the audio to be reasonably synchronous
|
802 |
(with no more shifts than moving around would produce anyway). This is
|
814 |
(with no more shifts than moving around would produce anyway). This is
|
803 |
impossible to achieve when going through mpd, and the second reason why
|
815 |
impossible to achieve when going through mpd, and the second reason why
|
804 |
sc2mpd must be set in Alsa mode for multiroom setups. In mpd mode, the
|
816 |
<strong>sc2mpd</strong> must be set in <em><tt>alsa</tt></em> mode for multiroom setups. In <em><tt>mpd</tt></em>
|
805 |
receivers can be out of sync by several seconds.</p></div>
|
817 |
mode, the <em>Receivers</em> can be out of sync by several seconds.</p></div>
|
806 |
</div>
|
818 |
</div>
|
807 |
</div>
|
819 |
</div>
|
808 |
<div class="sect1">
|
820 |
<div class="sect1">
|
809 |
<h2 id="_setting_things_up">Setting things up</h2>
|
821 |
<h2 id="_setting_things_up">Setting things up</h2>
|
810 |
<div class="sectionbody">
|
822 |
<div class="sectionbody">
|
|
... |
|
... |
820 |
<tt>friendlyname</tt>, this is quite useful when managing several systems.
|
832 |
<tt>friendlyname</tt>, this is quite useful when managing several systems.
|
821 |
</p>
|
833 |
</p>
|
822 |
</li>
|
834 |
</li>
|
823 |
<li>
|
835 |
<li>
|
824 |
<p>
|
836 |
<p>
|
825 |
<tt>scplaymethod</tt> = alsa
|
837 |
<tt>scplaymethod</tt> = <em><tt>alsa</tt></em>
|
826 |
</p>
|
838 |
</p>
|
827 |
</li>
|
839 |
</li>
|
828 |
<li>
|
840 |
<li>
|
829 |
<p>
|
841 |
<p>
|
830 |
<tt>scalsadevice</tt>: use <tt>aplay -L</tt> to chose an appropriate device.
|
842 |
<tt>scalsadevice</tt>: use <tt>aplay -L</tt> to chose an appropriate device.
|
|
... |
|
... |
832 |
</li>
|
844 |
</li>
|
833 |
</ul></div>
|
845 |
</ul></div>
|
834 |
</li>
|
846 |
</li>
|
835 |
<li>
|
847 |
<li>
|
836 |
<p>
|
848 |
<p>
|
837 |
Activate the web interface on one of the Receivers (or on any machine
|
849 |
Activate the web interface on one of the <em>Receivers</em> (or on any machine
|
838 |
with upmpdcli installed actually). Edit <tt>/etc/default/scweb</tt> to
|
850 |
with upmpdcli installed actually). Edit <tt>/etc/default/scweb</tt> to
|
839 |
configure the interface (see comments in there) and start it with
|
851 |
configure the interface (see comments in there) and start it with
|
840 |
<tt>/etc/init.d/scweb-service start</tt>.
|
852 |
<tt>service scweb start</tt>.
|
841 |
</p>
|
853 |
</p>
|
842 |
</li>
|
854 |
</li>
|
843 |
<li>
|
855 |
<li>
|
844 |
<p>
|
856 |
<p>
|
845 |
Activate a Receiver from the PC <strong>Songcast</strong> interface. Play something and
|
857 |
Activate a <em>Receiver</em> from the PC <strong>Songcast</strong> interface. Play something and
|
846 |
leave it playing.
|
858 |
leave it playing.
|
847 |
</p>
|
859 |
</p>
|
848 |
</li>
|
860 |
</li>
|
849 |
<li>
|
861 |
<li>
|
850 |
<p>
|
862 |
<p>
|
851 |
Connect to the Web interface (host and port chosen above) with a
|
863 |
Connect to the Web interface (host and port chosen above) with a
|
852 |
browser, and use it to list, activate, or disconnect the Receivers.
|
864 |
browser, and use it to list, activate, or disconnect the <em>Receivers</em>.
|
853 |
</p>
|
865 |
</p>
|
854 |
</li>
|
866 |
</li>
|
855 |
</ul></div>
|
867 |
</ul></div>
|
856 |
<div class="paragraph"><p>Once the slave Receivers are associated with the Sender, they should stay
|
868 |
<div class="paragraph"><p>Once the slave <em>Receivers</em> are associated with the <em>Sender</em>, they should stay
|
857 |
in this state until you change it. So you can stop/start Songcast on the
|
869 |
in this state until you change it. So you can stop/start <strong>Songcast</strong> on the
|
858 |
PC, and they will usually just follow.</p></div>
|
870 |
PC, and they will usually just follow.</p></div>
|
859 |
<div class="paragraph"><p>An "associated" Receiver is just one which plays from the same URI, it
|
871 |
<div class="paragraph"><p>An "associated" <em>Receiver</em> is just one which plays from the same URI, it
|
860 |
keeps no other relation to the "Master". Only one Receiver is a bit special
|
872 |
keeps no other relation to the "Master". Only one <em>Receiver</em> is a bit special
|
861 |
because it is the one known from the PC, but there is no specific reason to
|
873 |
because it is the one known from the PC, but there is no specific reason to
|
862 |
use it as Master, the Master is only used to get the URI. Avoid changing
|
874 |
use it as Master, the Master is only used to get the URI. Avoid changing
|
863 |
the state of the "PC"'s Receiver from outside the PC <strong>Songcast</strong> interface,
|
875 |
the state of the "PC"'s <em>Receiver</em> from outside the PC <strong>Songcast</strong> interface,
|
864 |
this can only confuse things.</p></div>
|
876 |
this can only confuse things.</p></div>
|
865 |
</div>
|
877 |
</div>
|
866 |
</div>
|
878 |
</div>
|
867 |
<div class="sect1">
|
879 |
<div class="sect1">
|
868 |
<h2 id="_more_detail_about_the_web_interface">More detail about the Web interface</h2>
|
880 |
<h2 id="_more_detail_about_the_web_interface">More detail about the Web interface</h2>
|
|
... |
|
... |
879 |
interface:</p></div>
|
891 |
interface:</p></div>
|
880 |
<div class="literalblock">
|
892 |
<div class="literalblock">
|
881 |
<div class="content">
|
893 |
<div class="content">
|
882 |
<pre><tt>python2 ./scweb-standalone.py</tt></pre>
|
894 |
<pre><tt>python2 ./scweb-standalone.py</tt></pre>
|
883 |
</div></div>
|
895 |
</div></div>
|
884 |
<div class="paragraph"><p>This will start a server on localhost, on port 8780 by default which is
|
896 |
<div class="paragraph"><p>This will start a server on localhost, on port 8680 by default which is
|
885 |
good for testing, but not very useful. Use the -a 0.0.0.0 option to let the
|
897 |
good for testing, but not very useful. Use the -a 0.0.0.0 option to let the
|
886 |
server answer on all local addresses (or specify the address to use a
|
898 |
server answer on all local addresses (or specify the address to use a
|
887 |
specific interface):</p></div>
|
899 |
specific interface):</p></div>
|
888 |
<div class="literalblock">
|
900 |
<div class="literalblock">
|
889 |
<div class="content">
|
901 |
<div class="content">
|
890 |
<pre><tt>python2 ./scweb-standalone.py -a 0.0.0.0</tt></pre>
|
902 |
<pre><tt>python2 ./scweb-standalone.py -a 0.0.0.0</tt></pre>
|
891 |
</div></div>
|
903 |
</div></div>
|
892 |
<div class="paragraph"><p>-p can be used to specify a port.</p></div>
|
904 |
<div class="paragraph"><p>-p can be used to specify a port.</p></div>
|
893 |
<div class="paragraph"><p>Once started, connecting to the server from any browser should hopefully
|
905 |
<div class="paragraph"><p>Once started, connecting to the server from any browser should hopefully
|
894 |
display a reasonably self-explanatory interface.</p></div>
|
906 |
display a reasonably self-explanatory interface.</p></div>
|
|
|
907 |
<div class="paragraph"><p>Recent <strong>upmpdcli</strong> packages install the web app as a service named
|
|
|
908 |
<strong>scweb</strong>. The service is not started by default though, you need to edit
|
|
|
909 |
<tt>/etc/default/scweb</tt>.</p></div>
|
895 |
</div>
|
910 |
</div>
|
896 |
</div>
|
911 |
</div>
|
897 |
</div>
|
912 |
</div>
|
898 |
<div id="footnotes"><hr /></div>
|
913 |
<div id="footnotes"><hr /></div>
|
899 |
<div id="footer">
|
914 |
<div id="footer">
|
900 |
<div id="footer-text">
|
915 |
<div id="footer-text">
|
901 |
Last updated 2015-05-06 10:18:31 CEST
|
916 |
Last updated 2015-05-19 16:15:38 CEST
|
902 |
</div>
|
917 |
</div>
|
903 |
</div>
|
918 |
</div>
|
904 |
</body>
|
919 |
</body>
|
905 |
</html>
|
920 |
</html>
|