|
a/doc/upabx.html |
|
b/doc/upabx.html |
|
... |
|
... |
2 |
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
2 |
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4 |
<head>
|
4 |
<head>
|
5 |
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
5 |
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
6 |
<meta name="generator" content="AsciiDoc 8.6.9" />
|
6 |
<meta name="generator" content="AsciiDoc 8.6.9" />
|
7 |
<title>UPABX: the useless UPnP ABX testing tool</title>
|
7 |
<title>UPABX: a UPnP ABX testing tool</title>
|
8 |
<style type="text/css">
|
8 |
<style type="text/css">
|
9 |
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
9 |
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
10 |
|
10 |
|
11 |
/* Default font. */
|
11 |
/* Default font. */
|
12 |
body {
|
12 |
body {
|
|
... |
|
... |
731 |
/*]]>*/
|
731 |
/*]]>*/
|
732 |
</script>
|
732 |
</script>
|
733 |
</head>
|
733 |
</head>
|
734 |
<body class="article">
|
734 |
<body class="article">
|
735 |
<div id="header">
|
735 |
<div id="header">
|
736 |
<h1>UPABX: the useless UPnP ABX testing tool</h1>
|
736 |
<h1>UPABX: a UPnP ABX testing tool</h1>
|
737 |
<span id="author">Jean-Francois Dockes</span><br />
|
737 |
<span id="author">Jean-Francois Dockes</span><br />
|
738 |
<span id="email"><code><<a href="mailto:jf@dockes.org">jf@dockes.org</a>></code></span><br />
|
738 |
<span id="email"><code><<a href="mailto:jf@dockes.org">jf@dockes.org</a>></code></span><br />
|
739 |
<span id="revdate">2017-11-16</span>
|
739 |
<span id="revdate">2017-11-16</span>
|
740 |
</div>
|
740 |
</div>
|
741 |
<div id="content">
|
741 |
<div id="content">
|
742 |
<div id="preamble">
|
742 |
<div id="preamble">
|
743 |
<div class="sectionbody">
|
743 |
<div class="sectionbody">
|
744 |
<div class="paragraph"><p><strong>upabx</strong> is a tool for performing
|
744 |
<div class="paragraph"><p><strong>upabx</strong> is a tool for performing
|
745 |
<a href="https://en.wikipedia.org/wiki/ABX_test">ABX listening tests</a> using one
|
745 |
<a href="https://en.wikipedia.org/wiki/ABX_test">ABX listening tests</a> using one
|
746 |
or several UPnP renderers, and, possibly, a hardware switchbox.</p></div>
|
746 |
or several UPnP renderers, and, possibly, a hardware switchbox.</p></div>
|
747 |
<div class="paragraph"><p>It is useless because all reasonable hardware sound the same (to me),
|
|
|
748 |
except for speakers and listening rooms. <strong>upabx</strong> does not support switching
|
|
|
749 |
the latter (bad bad lazy developper), and there are better tools for
|
|
|
750 |
comparing encodings and other software factors.</p></div>
|
|
|
751 |
<div class="paragraph"><p>In other terms: you could use <strong>upabx</strong> to compare your extremely expensive
|
|
|
752 |
DAC with a Raspberry PI Hifiberry board, but they sound the same. If you
|
|
|
753 |
want to compare 128 vs 320 Kb/S MP3, use the
|
|
|
754 |
<a href="http://www.foobar2000.org/components/view/foo_abx">foobar2000 ABX
|
|
|
755 |
comparator plugin</a> or something like it, it will do a better job.</p></div>
|
|
|
756 |
<div class="paragraph"><p>See <a href="#dacbattle">at the end</a> for a practical example, comparing two DACs
|
|
|
757 |
(none of the very expensive kind).</p></div>
|
|
|
758 |
<div class="paragraph"><p>If you are still with me though…</p></div>
|
|
|
759 |
</div>
|
|
|
760 |
</div>
|
|
|
761 |
<div class="sect1">
|
|
|
762 |
<h2 id="_what_the_software_does">What the software does</h2>
|
|
|
763 |
<div class="sectionbody">
|
|
|
764 |
<div class="paragraph"><p>The program controls:</p></div>
|
747 |
<div class="paragraph"><p>The program controls:</p></div>
|
765 |
<div class="ulist"><ul>
|
748 |
<div class="ulist"><ul>
|
766 |
<li>
|
749 |
<li>
|
767 |
<p>
|
750 |
<p>
|
768 |
What is played (maybe different for A/B if comparing e.g. compression
|
751 |
What is played (maybe different for A/B if comparing e.g. compression
|
|
... |
|
... |
791 |
<div class="paragraph"><p>These are defined in two sets in parameters, which define the test. The
|
774 |
<div class="paragraph"><p>These are defined in two sets in parameters, which define the test. The
|
792 |
definition file also supports text describing what is connected to what and
|
775 |
definition file also supports text describing what is connected to what and
|
793 |
what it is we try to test.</p></div>
|
776 |
what it is we try to test.</p></div>
|
794 |
<div class="paragraph"><p>A <a href="#:ABXMKTEST">companion program</a> provides an easy GUI for creating test
|
777 |
<div class="paragraph"><p>A <a href="#:ABXMKTEST">companion program</a> provides an easy GUI for creating test
|
795 |
definition files, including retrieving the URL from any renderer on which
|
778 |
definition files, including retrieving the URL from any renderer on which
|
796 |
it is playing.</p></div>
|
779 |
it is playing or paused.</p></div>
|
797 |
</div>
|
780 |
</div>
|
798 |
</div>
|
781 |
</div>
|
799 |
<div class="sect1">
|
782 |
<div class="sect1">
|
800 |
<h2 id="_the_abx_test_graphical_user_interface">The ABX test Graphical User Interface</h2>
|
783 |
<h2 id="_the_abx_test_graphical_user_interface">The ABX test Graphical User Interface</h2>
|
801 |
<div class="sectionbody">
|
784 |
<div class="sectionbody">
|
|
... |
|
... |
821 |
<div class="paragraph"><p>The A and B samples can be the same URL playing on different renderers
|
804 |
<div class="paragraph"><p>The A and B samples can be the same URL playing on different renderers
|
822 |
(needs switch or mixer), or different URLs (for comparing encodings or
|
805 |
(needs switch or mixer), or different URLs (for comparing encodings or
|
823 |
performances), or the same renderer and URL if you are using a hardware
|
806 |
performances), or the same renderer and URL if you are using a hardware
|
824 |
switch to compare preamplifiers or amplifiers. More on the sample
|
807 |
switch to compare preamplifiers or amplifiers. More on the sample
|
825 |
parameters <a href="#testparams">further down</a>.</p></div>
|
808 |
parameters <a href="#testparams">further down</a>.</p></div>
|
|
|
809 |
</div>
|
|
|
810 |
</div>
|
|
|
811 |
<div class="sect1">
|
|
|
812 |
<h2 id="ABXMKTEST">The upabxmktest test creation utility</h2>
|
|
|
813 |
<div class="sectionbody">
|
|
|
814 |
<div class="imageblock">
|
|
|
815 |
<div class="content">
|
|
|
816 |
<img src="upabxmktest-1.png" alt="upabxmktest-1.png" />
|
|
|
817 |
</div>
|
|
|
818 |
</div>
|
|
|
819 |
<div class="paragraph"><p>The utility makes it easy to create test files. Especially, it will find
|
|
|
820 |
out the list of renderers present on the network, and it will retrieve an
|
|
|
821 |
URL and the associated metadata from a Renderer, so you can set the track
|
|
|
822 |
to play for each of the A/B sections just by setting it to play (or pause)
|
|
|
823 |
somewhere, and fetching it from the GUI.</p></div>
|
|
|
824 |
<div class="paragraph"><p>Set the parameters to use in the <em>A</em> section, then set the changed parameters
|
|
|
825 |
in the <em>B</em> section.</p></div>
|
|
|
826 |
<div class="paragraph"><p>The URL <em>Choose</em> buttons will open a popup, where you will be able to
|
|
|
827 |
select a renderer from a list. The utility will then fetch the URL and
|
|
|
828 |
metadata for the track currently playing or paused on the Renderer.</p></div>
|
|
|
829 |
<div class="paragraph"><p>When you are done, use the <em>File</em> menu to save the test definition. The
|
|
|
830 |
file format details are described in an <a href="#testconfig">annex</a>.</p></div>
|
|
|
831 |
</div>
|
|
|
832 |
</div>
|
|
|
833 |
<div class="sect1">
|
|
|
834 |
<h2 id="TESTRESULTS">Test results</h2>
|
|
|
835 |
<div class="sectionbody">
|
|
|
836 |
<div class="paragraph"><p>The test results are stored in <em>~/.local/share/upabx</em> and are named like
|
|
|
837 |
<em>date</em>-<em>time</em>-<code>result</code>. They look like the following:</p></div>
|
|
|
838 |
<div class="listingblock">
|
|
|
839 |
<div class="content">
|
|
|
840 |
<pre><code>[ Contents of the test parameters file included here]
|
|
|
841 |
|
|
|
842 |
|
|
|
843 |
Mon Nov 13 17:45:37 2017 Choice: B : True
|
|
|
844 |
Mon Nov 13 17:45:59 2017 Choice: A : True
|
|
|
845 |
Mon Nov 13 17:46:16 2017 Choice: A : True
|
|
|
846 |
Mon Nov 13 17:46:36 2017 Choice: B : True
|
|
|
847 |
Mon Nov 13 17:46:55 2017 Choice: A : True
|
|
|
848 |
Mon Nov 13 17:47:11 2017 Choice: B : True
|
|
|
849 |
Mon Nov 13 17:47:26 2017 Choice: A : True
|
|
|
850 |
Mon Nov 13 17:47:42 2017 Choice: A : True
|
|
|
851 |
Mon Nov 13 17:47:52 2017 Choice: A : True
|
|
|
852 |
Mon Nov 13 17:48:00 2017 Choice: B : True
|
|
|
853 |
|
|
|
854 |
Mon Nov 13 17:48:00 2017 Test completed: 10/10</code></pre>
|
|
|
855 |
</div></div>
|
|
|
856 |
</div>
|
|
|
857 |
</div>
|
|
|
858 |
<div class="sect1">
|
|
|
859 |
<h2 id="globalconf">The global configuration</h2>
|
|
|
860 |
<div class="sectionbody">
|
|
|
861 |
<div class="paragraph"><p>Most of the program parameters are found in the test parameter files (see
|
|
|
862 |
next). However, some values are defined in a global configuration file
|
|
|
863 |
(<em>~/.config/upabx/upabx.conf</em>). The file contains <em>name = value</em> lines.</p></div>
|
|
|
864 |
<div class="dlist"><dl>
|
|
|
865 |
<dt class="hdlist1">
|
|
|
866 |
switchhost
|
|
|
867 |
</dt>
|
|
|
868 |
<dd>
|
|
|
869 |
<p>
|
|
|
870 |
Host name or IP address for the switch interface.
|
|
|
871 |
</p>
|
|
|
872 |
</dd>
|
|
|
873 |
<dt class="hdlist1">
|
|
|
874 |
seqlen
|
|
|
875 |
</dt>
|
|
|
876 |
<dd>
|
|
|
877 |
<p>
|
|
|
878 |
Default test sequence length (which itself has a default:
|
|
|
879 |
10). This can be redefined in the test configuration for individual tests.
|
|
|
880 |
</p>
|
|
|
881 |
</dd>
|
|
|
882 |
<dt class="hdlist1">
|
|
|
883 |
switchport
|
|
|
884 |
</dt>
|
|
|
885 |
<dd>
|
|
|
886 |
<p>
|
|
|
887 |
TCP port for the switch interface (default: 8080).
|
|
|
888 |
</p>
|
|
|
889 |
</dd>
|
|
|
890 |
</dl></div>
|
|
|
891 |
<div class="paragraph"><p>Only <code>switchhost</code> needs to be defined and only if you are actually using a
|
|
|
892 |
hardware switch.</p></div>
|
826 |
</div>
|
893 |
</div>
|
827 |
</div>
|
894 |
</div>
|
828 |
<div class="sect1">
|
895 |
<div class="sect1">
|
829 |
<h2 id="_building_operating_environment">Building, operating environment</h2>
|
896 |
<h2 id="_building_operating_environment">Building, operating environment</h2>
|
830 |
<div class="sectionbody">
|
897 |
<div class="sectionbody">
|
|
... |
|
... |
857 |
amps). <strong>upabx</strong> interfaces with a small <a href="#switchapp">local web
|
924 |
amps). <strong>upabx</strong> interfaces with a small <a href="#switchapp">local web
|
858 |
application</a>, typically running on a Raspberry Pi, for controlling the
|
925 |
application</a>, typically running on a Raspberry Pi, for controlling the
|
859 |
switch (the GUI does not need to run on the same host as the switch
|
926 |
switch (the GUI does not need to run on the same host as the switch
|
860 |
controller). Any kind of relay which can interface more or less directly
|
927 |
controller). Any kind of relay which can interface more or less directly
|
861 |
with Raspberry Pi GPIO pins should be workable.</p></div>
|
928 |
with Raspberry Pi GPIO pins should be workable.</p></div>
|
862 |
</div>
|
|
|
863 |
</div>
|
|
|
864 |
<div class="sect1">
|
|
|
865 |
<h2 id="ABXMKTEST">The upabxmktest test creation utility</h2>
|
|
|
866 |
<div class="sectionbody">
|
|
|
867 |
<div class="imageblock">
|
|
|
868 |
<div class="content">
|
|
|
869 |
<img src="upabxmktest-1.png" alt="upabxmktest-1.png" />
|
|
|
870 |
</div>
|
|
|
871 |
</div>
|
|
|
872 |
<div class="paragraph"><p>The utility makes it easy to create test files. Especially, it will find
|
|
|
873 |
out the list of renderers present on the network, and it will retrieve an
|
|
|
874 |
URL and the associated metadata from a Renderer, so you can set the track
|
|
|
875 |
to play for each of the A/B sections just by setting it to play (or pause)
|
|
|
876 |
somewhere, and fetching it from the GUI.</p></div>
|
|
|
877 |
<div class="paragraph"><p>Set the parameters to use in the <em>A</em> section, then set the changed parameters
|
|
|
878 |
in the <em>B</em> section.</p></div>
|
|
|
879 |
<div class="paragraph"><p>The URL <em>Choose</em> buttons will open a popup, where you will be able to
|
|
|
880 |
select a renderer from a list. The utility will then fetch the URL and
|
|
|
881 |
metadata for the track currently playing or paused on the Renderer.</p></div>
|
|
|
882 |
<div class="paragraph"><p>When you are done, use the <em>File</em> menu to save the test definition. The
|
|
|
883 |
file format details are described in an <a href="#testconfig">annex</a>.</p></div>
|
|
|
884 |
</div>
|
|
|
885 |
</div>
|
|
|
886 |
<div class="sect1">
|
|
|
887 |
<h2 id="_test_results">Test results</h2>
|
|
|
888 |
<div class="sectionbody">
|
|
|
889 |
<div class="paragraph"><p>The test results are stored in <em>~/.local/share/upabx</em> and are named like
|
|
|
890 |
<em>date</em>-<em>time</em>-<code>result</code>. They look like the following:</p></div>
|
|
|
891 |
<div class="listingblock">
|
|
|
892 |
<div class="content">
|
|
|
893 |
<pre><code>[ Contents of the test parameters file included here]
|
|
|
894 |
|
|
|
895 |
|
|
|
896 |
Mon Nov 13 17:45:37 2017 Choice: B : True
|
|
|
897 |
Mon Nov 13 17:45:59 2017 Choice: A : True
|
|
|
898 |
Mon Nov 13 17:46:16 2017 Choice: A : True
|
|
|
899 |
Mon Nov 13 17:46:36 2017 Choice: B : True
|
|
|
900 |
Mon Nov 13 17:46:55 2017 Choice: A : True
|
|
|
901 |
Mon Nov 13 17:47:11 2017 Choice: B : True
|
|
|
902 |
Mon Nov 13 17:47:26 2017 Choice: A : True
|
|
|
903 |
Mon Nov 13 17:47:42 2017 Choice: A : True
|
|
|
904 |
Mon Nov 13 17:47:52 2017 Choice: A : True
|
|
|
905 |
Mon Nov 13 17:48:00 2017 Choice: B : True
|
|
|
906 |
|
|
|
907 |
Mon Nov 13 17:48:00 2017 Test completed: 10/10</code></pre>
|
|
|
908 |
</div></div>
|
|
|
909 |
</div>
|
|
|
910 |
</div>
|
|
|
911 |
<div class="sect1">
|
|
|
912 |
<h2 id="globalconf">The global configuration</h2>
|
|
|
913 |
<div class="sectionbody">
|
|
|
914 |
<div class="paragraph"><p>Most of the program parameters are found in the test parameter files (see
|
|
|
915 |
next). However, some defaults are defined in a global configuration file
|
|
|
916 |
(<em>~/.config/upabx/upabx.conf</em>). The file just contains <em>name = value</em> lines.</p></div>
|
|
|
917 |
<div class="dlist"><dl>
|
|
|
918 |
<dt class="hdlist1">
|
|
|
919 |
seqlen
|
|
|
920 |
</dt>
|
|
|
921 |
<dd>
|
|
|
922 |
<p>
|
|
|
923 |
Default test sequence length.
|
|
|
924 |
</p>
|
|
|
925 |
</dd>
|
|
|
926 |
<dt class="hdlist1">
|
|
|
927 |
switchhost
|
|
|
928 |
</dt>
|
|
|
929 |
<dd>
|
|
|
930 |
<p>
|
|
|
931 |
Host name or IP address for the switch interface.
|
|
|
932 |
</p>
|
|
|
933 |
</dd>
|
|
|
934 |
<dt class="hdlist1">
|
|
|
935 |
switchport
|
|
|
936 |
</dt>
|
|
|
937 |
<dd>
|
|
|
938 |
<p>
|
|
|
939 |
TCP port for the switch interface.
|
|
|
940 |
</p>
|
|
|
941 |
</dd>
|
|
|
942 |
</dl></div>
|
|
|
943 |
</div>
|
929 |
</div>
|
944 |
</div>
|
930 |
</div>
|
945 |
<div class="sect1">
|
931 |
<div class="sect1">
|
946 |
<h2 id="switchapp">The hardware switch interface application</h2>
|
932 |
<h2 id="switchapp">The hardware switch interface application</h2>
|
947 |
<div class="sectionbody">
|
933 |
<div class="sectionbody">
|
|
... |
|
... |
1004 |
<strong>upabx</strong> <a href="#globalconf">global configuration file</a>.</p></div>
|
990 |
<strong>upabx</strong> <a href="#globalconf">global configuration file</a>.</p></div>
|
1005 |
</div>
|
991 |
</div>
|
1006 |
</div>
|
992 |
</div>
|
1007 |
</div>
|
993 |
</div>
|
1008 |
<div class="sect1">
|
994 |
<div class="sect1">
|
1009 |
<h2 id="switchhard">The hardware switch</h2>
|
|
|
1010 |
<div class="sectionbody">
|
|
|
1011 |
<div class="paragraph"><p>I am not a hardware engineer, and I’m sure that there is not much to like
|
|
|
1012 |
in my switchbox :)</p></div>
|
|
|
1013 |
<div class="paragraph"><p>The big relays need too much command power to be controlled directly from
|
|
|
1014 |
the GPIO, so there is a small interface relay between them and the Pi.</p></div>
|
|
|
1015 |
<div class="paragraph"><p>Also they need 12V, (which is ennoying, it should be possible to arrange to
|
|
|
1016 |
run everything on 5V), in consequence, the whole thing is powered by a
|
|
|
1017 |
small external 5/12v PC power supply.</p></div>
|
|
|
1018 |
<div class="paragraph"><p>I am using pre-integrated modules for the low power relays (line control
|
|
|
1019 |
and speaker interface relay), they have a transistor for GPIO-compatible
|
|
|
1020 |
control levels, a flyback diode and maybe an indicator LED, all on a small
|
|
|
1021 |
circuit board, and DIY them would not save a lot of money…</p></div>
|
|
|
1022 |
<div class="paragraph"><p>Most expensive section of the whole thing ? Line and speaker connectors.</p></div>
|
|
|
1023 |
<div class="paragraph"><p>The box looks complicated because there are many wires. But really, it is
|
|
|
1024 |
very simple:</p></div>
|
|
|
1025 |
<div class="ulist"><ul>
|
|
|
1026 |
<li>
|
|
|
1027 |
<p>
|
|
|
1028 |
The chosen GPIO pins are connected to the small relay inputs.
|
|
|
1029 |
</p>
|
|
|
1030 |
</li>
|
|
|
1031 |
<li>
|
|
|
1032 |
<p>
|
|
|
1033 |
5V (and possibly 12 V) are distributed where needed (Raspberry PI, relays
|
|
|
1034 |
VCC).
|
|
|
1035 |
</p>
|
|
|
1036 |
</li>
|
|
|
1037 |
<li>
|
|
|
1038 |
<p>
|
|
|
1039 |
The intermediate relay output goes to the big relay command input.
|
|
|
1040 |
</p>
|
|
|
1041 |
</li>
|
|
|
1042 |
<li>
|
|
|
1043 |
<p>
|
|
|
1044 |
The switched lines to the relay contacts.
|
|
|
1045 |
</p>
|
|
|
1046 |
</li>
|
|
|
1047 |
</ul></div>
|
|
|
1048 |
<hr>
|
|
|
1049 |
<a href="pictures/switchbox.html">
|
|
|
1050 |
<img style="margin-right:10px;" src="pictures/switchbox-thumb.jpg"
|
|
|
1051 |
alt="The switch box" align="left"></a>
|
|
|
1052 |
<div class="paragraph"><p>The switch box. On the left, the Raspberry PI presents its ethernet port
|
|
|
1053 |
through the back plate. And the power supply terminal. In the centre, the
|
|
|
1054 |
big speaker/power amp relays. On the right, the line relay (will be
|
|
|
1055 |
replaced by a pair so that I can switch both signals and earths):</p></div>
|
|
|
1056 |
<br clear="all">
|
|
|
1057 |
<hr>
|
|
|
1058 |
<a href="pictures/speaker.html">
|
|
|
1059 |
<img style="margin-right:10px;" src="pictures/speaker-thumb.jpg"
|
|
|
1060 |
alt="The speaker relays" align="left"></a>
|
|
|
1061 |
<div class="paragraph"><p>One of the big speaker/power line relays. The small interface relay
|
|
|
1062 |
controlled by the GPIO piggy-backs on it, fixed by double-sided tape. One
|
|
|
1063 |
can also see the main relay flyback diode.</p></div>
|
|
|
1064 |
<div class="paragraph"><p><a href="http://www.conrad.fr/ce/fr/product/507566/Relais-enfichable-Hongfa-HF92F-012D-2C21S-12-VDC-30-A-2-inverseurs-RT-1-pcs/SHOP_AREA_17391">supplier
|
|
|
1065 |
page for the big relays</a> (in French, sorry, but I’m sure that you can get
|
|
|
1066 |
an idea anyway and find an equivalent in your country). Finding one which
|
|
|
1067 |
can be controlled with 5V will make your life easier.</p></div>
|
|
|
1068 |
<div class="paragraph"><p><a href="https://www.aliexpress.com/item/DR21B01-DC-5V-DPDT-Signal-Relay-Module-Dual-Channel-selector-switch-Board-for-LED-MCU-Motor/32688085237.html?spm=2114.13010608.0.0.UfLrLm">Example
|
|
|
1069 |
of relay board for the interface between the GPIO and the big relay</a>.</p></div>
|
|
|
1070 |
<br clear="all">
|
|
|
1071 |
<hr>
|
|
|
1072 |
<a href="pictures/line.html">
|
|
|
1073 |
<img style="margin-right:10px;" src="pictures/line-thumb.jpg"
|
|
|
1074 |
alt="The line-level relay" align="left"></a>
|
|
|
1075 |
<div class="paragraph"><p>The line-level
|
|
|
1076 |
relay module. <a href="http://www.ebay.fr/itm/201109114068?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT">For
|
|
|
1077 |
example</a>. I want to replace it with
|
|
|
1078 |
<a href="https://www.ebay.fr/itm/Two-DPDT-Signal-Relay-Module-Board-DC5V-Version/201138699034?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649">a
|
|
|
1079 |
double one</a> to avoid having to link all the signal earths.</p></div>
|
|
|
1080 |
<br clear="all">
|
|
|
1081 |
</div>
|
|
|
1082 |
</div>
|
|
|
1083 |
<div class="sect1">
|
|
|
1084 |
<h2 id="dacbattle">Battle of the DACs</h2>
|
|
|
1085 |
<div class="sectionbody">
|
|
|
1086 |
<a href="pictures/hifiberry-explorer.html">
|
|
|
1087 |
<img style="margin-right:10px;" src="pictures/hifiberry-explorer-thumb.jpg"
|
|
|
1088 |
alt="Rpi+hifiberry odroid+explorer" align="left"></a>
|
|
|
1089 |
<div class="paragraph"><p>And now for a real example. Comparing a HifiBerry DAC+ pro mounted on an
|
|
|
1090 |
rpi3, with the Meridian Explorer 2, connected to the USB output of an
|
|
|
1091 |
Odroid C2. Both systems are running mpd + upmpdcli. The Headphone amp is an
|
|
|
1092 |
O2.</p></div>
|
|
|
1093 |
<div class="paragraph"><p>I am using a 96/24 FLAC 2L demo track for the comparison: "Vivaldi Cantata Rv
|
|
|
1094 |
679. Aria Cupido te Vedi"</p></div>
|
|
|
1095 |
<br clear="all">
|
|
|
1096 |
<div class="paragraph"><p>The test configuration file:</p></div>
|
|
|
1097 |
<div class="listingblock">
|
|
|
1098 |
<div class="content">
|
|
|
1099 |
<pre><code>description = Comparison of hifiberry dac+pro with Meridian Explorer 2, \
|
|
|
1100 |
using the 2L Vivaldi 96/24 FLAC sample
|
|
|
1101 |
|
|
|
1102 |
# Hifiberry DAC+ pro
|
|
|
1103 |
renderer = UpMpd-r31
|
|
|
1104 |
line = A
|
|
|
1105 |
|
|
|
1106 |
url = http://192.168.4.4:9790/minimserver/*/mp3/test-tracks/2L/VIVALDI_Cantata_Rv_679__Che_Giova_Il_Sospirar,_Povero_Core_-_Aria__Cupido,_Tu_Vedi-flac-96-24.flac
|
|
|
1107 |
|
|
|
1108 |
|
|
|
1109 |
[test]
|
|
|
1110 |
|
|
|
1111 |
# Explorer
|
|
|
1112 |
renderer = odroid32
|
|
|
1113 |
line = B</code></pre>
|
|
|
1114 |
</div></div>
|
|
|
1115 |
<a href="pictures/level-matching.html">
|
|
|
1116 |
<img style="margin-right:10px;" src="pictures/level-matching-thumb.jpg"
|
|
|
1117 |
alt="Rpi+hifiberry odroid+explorer" align="left"></a>
|
|
|
1118 |
<div class="paragraph"><p>It is very important to match the output levels. Conveniently, my
|
|
|
1119 |
Sennheiser has pluggable connections with nice bare contacts which I can
|
|
|
1120 |
easily hook up to the multimeter. Otherwise, a custom mini-jack to banana
|
|
|
1121 |
plug cable would be handy.</p></div>
|
|
|
1122 |
<div class="paragraph"><p>Both DACS have hardware volume controls, which I use. The Hifiberry is set
|
|
|
1123 |
at 100/100, the Explorer 2 at 96/100 (in MPD terms). Testing with a 50 Hz
|
|
|
1124 |
tone, I could not adjust better than 0.43 V vs 0.45 V, which should be
|
|
|
1125 |
roughly equivalent to a 0.6 dB difference ? This might need a little more
|
|
|
1126 |
attention, also measuring at other frequencies (hopefully, these 2
|
|
|
1127 |
should be flat at 50hz), but it’s all moot because anyway…:</p></div>
|
|
|
1128 |
<br clear="all">
|
|
|
1129 |
<div class="paragraph"><p>I did not even bother to run the ABX sequence: both DACs sound exactly the
|
|
|
1130 |
same to me.</p></div>
|
|
|
1131 |
<div class="paragraph"><p>Useless ABX tool :)</p></div>
|
|
|
1132 |
<div class="paragraph"><p>I am not claiming any absolute result though: I do have very bad
|
|
|
1133 |
hearing, and, as you know, we can’t prove a negative :)</p></div>
|
|
|
1134 |
<div class="paragraph"><p>And I’d be quite interested by your comments (see the Disqus section at the
|
|
|
1135 |
end).</p></div>
|
|
|
1136 |
</div>
|
|
|
1137 |
</div>
|
|
|
1138 |
<div class="sect1">
|
|
|
1139 |
<h2 id="testconfig">Annex: test definition file details</h2>
|
995 |
<h2 id="testconfig">Annex: test definition file details</h2>
|
1140 |
<div class="sectionbody">
|
996 |
<div class="sectionbody">
|
1141 |
<div class="paragraph"><p>Tests are defined in simple configuration files. The configuration file
|
997 |
<div class="paragraph"><p>Tests are defined in simple configuration files. The configuration file
|
1142 |
name for a test is passed to the GUI on the command line.</p></div>
|
998 |
name for a test is passed to the GUI on the command line.</p></div>
|
1143 |
<div class="paragraph"><p>This section describes the file contents in detail, but you will usually
|
999 |
<div class="paragraph"><p>This section describes the file contents in detail, but you will usually
|
|
... |
|
... |
1252 |
</p>
|
1108 |
</p>
|
1253 |
</dd>
|
1109 |
</dd>
|
1254 |
</dl></div>
|
1110 |
</dl></div>
|
1255 |
<div class="paragraph"><p>If neither <em>line</em> nor <em>spk</em> are set, <strong>upabx</strong> will not try to access the
|
1111 |
<div class="paragraph"><p>If neither <em>line</em> nor <em>spk</em> are set, <strong>upabx</strong> will not try to access the
|
1256 |
hardware switch interface.</p></div>
|
1112 |
hardware switch interface.</p></div>
|
1257 |
<div id="disqus_thread"></div>
|
|
|
1258 |
<script type="text/javascript">
|
|
|
1259 |
var disqus_shortname = 'lesbonscomptes';
|
|
|
1260 |
(function() {
|
|
|
1261 |
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
|
|
1262 |
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
|
|
1263 |
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
|
|
1264 |
})();
|
|
|
1265 |
</script>
|
|
|
1266 |
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
|
|
1267 |
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
|
|
1268 |
</div>
|
1113 |
</div>
|
1269 |
</div>
|
1114 |
</div>
|
1270 |
</div>
|
1115 |
</div>
|
1271 |
</div>
|
1116 |
</div>
|
1272 |
<div id="footnotes"><hr /></div>
|
1117 |
<div id="footnotes"><hr /></div>
|
1273 |
<div id="footer">
|
1118 |
<div id="footer">
|
1274 |
<div id="footer-text">
|
1119 |
<div id="footer-text">
|
1275 |
Last updated
|
1120 |
Last updated
|
1276 |
2018-01-15 10:28:02 CET
|
1121 |
2018-02-03 16:42:14 CET
|
1277 |
</div>
|
1122 |
</div>
|
1278 |
</div>
|
1123 |
</div>
|
1279 |
</body>
|
1124 |
</body>
|
1280 |
</html>
|
1125 |
</html>
|