<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>vinyl &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/vinyl/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 05 Aug 2025 07:04:35 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>vinyl &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Broadcasting vinyl over my LAN - ALSA2ChromeCast]]></title>
		<link>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/</link>
					<comments>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 05 Aug 2020 11:41:10 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[vinyl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36129</guid>

					<description><![CDATA[Previously, on the Terence Eden Adventures:   I accidentally won a load of vinyl on eBay, and I bought the cheapest record player I could find.   The record player has USB output. So I shoved it into a Rock Pi S - an SBC similar to a Raspberry Pi - to broadcast vinyl all over my house via ChromeCast! Here&#039;s how.  Detect the audio  Install alsa-utils if they&#039;re not already present.  Find your…]]></description>
										<content:encoded><![CDATA[<p>Previously, on the Terence Eden Adventures:</p>

<ul>
<li><a href="https://shkspr.mobi/blog/2020/07/building-a-record-wall/">I accidentally won a load of vinyl on eBay</a>, and</li>
<li><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/">I bought the cheapest record player I could find</a>.</li>
</ul>

<p>The record player has USB output. So I shoved it into a <a href="https://shkspr.mobi/blog/2020/04/tech-review-rock-pi-s/">Rock Pi S</a> - an SBC similar to a Raspberry Pi - to broadcast vinyl all over my house via ChromeCast! Here's how.</p>

<h2 id="detect-the-audio"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#detect-the-audio">Detect the audio</a></h2>

<p>Install <code>alsa-utils</code> if they're not already present.</p>

<p>Find your hardware with</p>

<pre><code class="language-bash">arecord -l
</code></pre>

<p>One of the outputs should be:</p>

<pre><code class="language-bash">card 2: Microphone [USB Microphone], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
</code></pre>

<p>In this case, we want Hardware Card 2, Device 0. From now on, we'll refer to this as <code>hw:2,0</code>. Yours may be different.</p>

<p>Record a sample from the input. Make sure the record player is playing music!</p>

<pre><code class="language-bash">arecord  --device=&amp;quot;hw:2,0&amp;quot; -d 10 -f dat -t wav test.wav
</code></pre>

<p>That will record a 10 second WAV file at the best possible audio resolution. Check that it has worked by playing back the WAV on a different computer.</p>

<h2 id="install-icecast"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#install-icecast">Install Icecast</a></h2>

<p><a href="https://icecast.org/">Icecast</a> is a terrible bit of software with no sensible user documentation or guide. Install it with:</p>

<pre><code class="language-bash">sudo apt install icecast2
</code></pre>

<p>It should prompt you for some information. And then it will start in the background automagically.  If not, run:</p>

<pre><code class="language-bash">/etc/init.d/icecast2 start
</code></pre>

<p>You can edit the default config with:</p>

<pre><code class="language-bash">sudo nano /etc/icecast2/icecast.xml
</code></pre>

<p>Here's a minimal config. This  The admin username is <code>admin</code> and all the passwords are <code>password</code> - you probably want to change that!
The hostname is set to the IP address of the Pi, <code>192.168.0.123</code>:</p>

<pre><code class="language-xml">&lt;icecast&gt;
    &lt;hostname&gt;192.168.0.123&lt;/hostname&gt;
    &lt;location&gt;Earth&lt;/location&gt;
    &lt;admin&gt;icemaster@localhost&lt;/admin&gt;
    &lt;limits&gt;
        &lt;clients&gt;100&lt;/clients&gt;
        &lt;sources&gt;2&lt;/sources&gt;
        &lt;queue-size&gt;524288&lt;/queue-size&gt;
        &lt;client-timeout&gt;30&lt;/client-timeout&gt;
        &lt;header-timeout&gt;15&lt;/header-timeout&gt;
        &lt;source-timeout&gt;10&lt;/source-timeout&gt;
        &lt;burst-on-connect&gt;1&lt;/burst-on-connect&gt;
        &lt;burst-size&gt;65535&lt;/burst-size&gt;
    &lt;/limits&gt;
    &lt;authentication&gt;
        &lt;source-password&gt;password&lt;/source-password&gt;
        &lt;relay-password&gt;password&lt;/relay-password&gt;
        &lt;admin-user&gt;admin&lt;/admin-user&gt;
        &lt;admin-password&gt;password&lt;/admin-password&gt;
    &lt;/authentication&gt;
    &lt;listen-socket&gt;
        &lt;port&gt;8000&lt;/port&gt;
    &lt;/listen-socket&gt;
    &lt;http-headers&gt;
        &lt;header name="Access-Control-Allow-Origin" value="*"/&gt;
    &lt;/http-headers&gt;
    &lt;fileserve&gt;1&lt;/fileserve&gt;
    &lt;paths&gt;
        &lt;basedir&gt;/usr/share/icecast2&lt;/basedir&gt;
        &lt;logdir&gt;/var/log/icecast2&lt;/logdir&gt;
        &lt;webroot&gt;/usr/share/icecast2/web&lt;/webroot&gt;
        &lt;adminroot&gt;/usr/share/icecast2/admin&lt;/adminroot&gt;
        &lt;alias source="/" destination="/status.xsl"/&gt;
    &lt;/paths&gt;
    &lt;logging&gt;
        &lt;accesslog&gt;access.log&lt;/accesslog&gt;
        &lt;errorlog&gt;error.log&lt;/errorlog&gt;
        &lt;loglevel&gt;3&lt;/loglevel&gt;
        &lt;logsize&gt;10000&lt;/logsize&gt;
    &lt;/logging&gt;
    &lt;security&gt;
        &lt;chroot&gt;0&lt;/chroot&gt;
    &lt;/security&gt;
&lt;/icecast&gt;
</code></pre>

<p>To restart after making changes, run:</p>

<pre><code class="language-bash">/etc/init.d/icecast2 restart
</code></pre>

<p>If you visit <code>http://your_server_ip:8000</code> then you should see a boring interface. You can't do anything with it yet.</p>

<h2 id="install-ice2"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#install-ice2">Install Ice2</a></h2>

<p>Icecast is a server - but you <em>also</em> need a client to broadcast audio to the server. Annoying that Icecast doesn't come with one. And annoying that there's no tutorial to tell you all this.</p>

<pre><code class="language-bash">sudo apt install ice2
</code></pre>

<p>I followed <a href="https://github.com/Juul/icecast-usb-microphone-guide">this tutorial</a>. Basically, create a file called <code>ice.xml</code> with this in it:</p>

<pre><code class="language-xml">&lt;ices&gt;
    &lt;stream&gt;
        &lt;input&gt;
            &lt;module&gt;alsa&lt;/module&gt;
            &lt;param name="rate"&gt;48000&lt;/param&gt;
            &lt;param name="channels"&gt;2&lt;/param&gt;
            &lt;param name="device"&gt;hw:2,0&lt;/param&gt;
        &lt;/input&gt;
        &lt;metadata&gt;
            &lt;name&gt;@edent's record player&lt;/name&gt;
            &lt;genre&gt;Live Vinyl&lt;/genre&gt;
            &lt;description&gt;Listen to what's on my record player&lt;/description&gt;
            &lt;url&gt;http://192.168.0.123:8000&lt;/url&gt;
        &lt;/metadata&gt;
        &lt;instance&gt;
            &lt;hostname&gt;192.168.0.123&lt;/hostname&gt;
            &lt;port&gt;8000&lt;/port&gt;
            &lt;password&gt;password&lt;/password&gt;
            &lt;mount&gt;/vinyl.ogg&lt;/mount&gt;
            &lt;yp&gt;1&lt;/yp&gt;
            &lt;encode&gt;
                &lt;quality&gt;10&lt;/quality&gt;
                &lt;samplerate&gt;48000&lt;/samplerate&gt;
                &lt;channels&gt;2&lt;/channels&gt;
            &lt;/encode&gt;
            &lt;downmix&gt;0&lt;/downmix&gt;
        &lt;/instance&gt;
    &lt;/stream&gt;
    &lt;background&gt;1&lt;/background&gt;
    &lt;logpath&gt;.&lt;/logpath&gt;
    &lt;logfile&gt;ices.log&lt;/logfile&gt;
    &lt;logsize&gt;2048&lt;/logsize&gt;
    &lt;loglevel&gt;4&lt;/loglevel&gt;
    &lt;consolelog&gt;0&lt;/consolelog&gt;
&lt;/ices&gt;
</code></pre>

<p>Now run <code>ices2 ice.xml</code> - it will run in the background.</p>

<p>The admin page of Icecast should now have something like this:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Screenshot-from-2020-07-27-19-10-39.png" alt="Icecast admin page." width="703" height="375" class="aligncenter size-full wp-image-36131">
You can now play the audio via the HTML5 player on the page - or open the M3U in VLC.</p>

<h2 id="chromecast-broadcast"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#chromecast-broadcast">ChromeCast Broadcast</a></h2>

<p>For my home AV set-up, the easiest way to broadcast audio to my amp is to use its built-in ChromeCast Audio.</p>

<p>There are loads of solutions, but the easiest to use was <a href="https://pypi.org/project/PyChromecast/">PyChromeCast</a>. Once installed, it can stream audio from IceCast to a ChromeCast. Bit convoluted, but it works!</p>

<p>To discover ChromeCasts on your network, run <code>python3</code> then enter these commands:</p>

<pre><code class="language-python">import time
import pychromecast
pychromecast.discovery.discover_chromecasts()
</code></pre>

<p>You'll get a list of ChromeCasts on your network. Mine showed:</p>

<pre><code class="language-_">[('192.168.0.789', 4321, UUID('5632e20d-1030-4885-ad3d-496504b7c820'), 'Pioneer VSX-933', 'Pioneer VSX-933 ABC1234')]
</code></pre>

<p>We want the ChromeCast's ID - which is the 4 digit int.  Back to Python</p>

<pre><code class="language-python">pychromecast.get_chromecasts(4321)
</code></pre>

<p>You'll get a bit more debug data:</p>

<pre><code class="language-_">[Chromecast('192.168.0.789', port=4321, device=DeviceStatus(friendly_name='Pioneer VSX-933 ABC1234', model_name='Pioneer VSX-933', manufacturer='Onkyo And Pioneer', uuid=UUID('5632e20d-1030-4885-ad3d-496504b7c820'), cast_type='cast'))]
</code></pre>

<p>This supports <code>cast</code> - good!</p>

<p>Now we can send the audio to the ChromeCast</p>

<pre><code class="language-python">cast = pychromecast.get_chromecasts(4321)[0]
cast.wait()
mc = cast.media_controller
mc.play_media('http://192.168.0.123:8000/vinyl.ogg', 'audio/ogg')
</code></pre>

<p>Success! Vinyl ➡️ USB ➡️ ALSA ➡️ IceCast ➡️ Ogg ➡️ Ethernet ➡️ WiFi ➡️ ChromeCast ➡️ Speakers.</p>

<h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#is-it-worth-it">Is it worth it?</a></h2>

<p>Depends. Do you like lossy, crackly vinyl, smushed down to OGG, flown across a network, then digitally reprocessed into luscious 5.1 surround sound with a 4.5 second lag?</p>

<p>Meh.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36129&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Inside a £30 record player ★★★★☆]]></title>
		<link>https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/</link>
					<comments>https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 02 Aug 2020 11:58:24 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[vinyl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36086</guid>

					<description><![CDATA[I accidentally bought a load of vinyl records. So I decided to buy the cheapest, shittiest, turntable possible.  This is the E1372. Made by Jia Yin King Technologies.   This is sold under a variety of names and costs about £30 including postage from China.  It&#039;s a plastic shell, motor, and ADC (Analogue to Digital Converter), which is powered via USB.  It is the cheapest brand new player I could …]]></description>
										<content:encoded><![CDATA[<p><a href="https://shkspr.mobi/blog/2020/07/building-a-record-wall/">I accidentally bought a load of vinyl records</a>. So I decided to buy the cheapest, shittiest, turntable possible.</p>

<p>This is the E1372. Made by <a href="http://www.jiayinking.com/">Jia Yin King Technologies</a>.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Crappy-record-player.jpg" alt="A crappy plastic record player photoshopped so it looks like it is in a rave." width="512" height="488" class="aligncenter size-full wp-image-36013"></p>

<p>This is sold under a variety of names and <a href="https://amzn.to/30ujDph">costs about £30 including postage from China</a>.</p>

<p>It's a plastic shell, motor, and ADC (Analogue to Digital Converter), which is powered via USB.  It is the cheapest brand new player I could find.  Here's a disassembly walkthough, an analysis of how well it works, and some Linux info.</p>

<h2 id="audio-quality"><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/#audio-quality">Audio Quality</a></h2>

<p>Vinyl is not a great format for high-fidelity audio. The constant rotational velocity design means that the sound quality gets progressively worse towards the centre of the record. Most of my 1960s vinyl is designed to be played on <em>shitty</em> gramophones and through <em>abominable</em> speakers. Early Beatles music was specifically mastered to sound good on crackly AM radios and craptacular Dansette record players.</p>

<p>Anyone who says vinyl is better than a CD is a muppet.</p>

<p>That said, here's the opening of Sgt Pepper - the best goddamned record of all time - piped straight from USB and captured as mono audio wav.</p>

<p></p><figure class="audio">
	<figcaption>🔊</figcaption>
	
	<audio controls="" loading="lazy" src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/sgt-pepper-mono-web.wav">
		<p>💾 <a href="https://shkspr.mobi/blog/wp-content/uploads/2020/07/sgt-pepper-mono-web.wav">Download this audio file</a>.</p>
	</audio>
</figure><p></p>

<p>I've not applied any volume correction, de-noising, or adjustment.  I think it sounds... You know what... That sounds pretty OK to me!</p>

<p>It also outputs stereo.
</p><figure class="audio">
	<figcaption>🔊</figcaption>
	
	<audio controls="" loading="lazy" src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Here-Comes-The-Sun-stereo-web.wav">
		<p>💾 <a href="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Here-Comes-The-Sun-stereo-web.wav">Download this audio file</a>.</p>
	</audio>
</figure>
Listen to the pan on that!<p></p>

<p>The right channel is consistently louder than the left by a few dB.</p>

<p>I used my phone to measure the RPM - it seemed to be a few percent fast.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/rpm-graph.jpeg" alt="A graph showing variance in speed." width="680" height="523" class="aligncenter size-full wp-image-36097">
I have cloth-ears, so I can't really tell if music is pitched up.</p>

<h2 id="look-inside"><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/#look-inside">Look Inside</a></h2>

<p>Flip it on the side, peel off the rubber feet to expose the screws.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/bottom.jpeg" alt="Bottom of a record player." width="1200" height="675" class="aligncenter size-full wp-image-36088">
Once those four are undone, the bottom slips off, revealing the guts.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Inside.jpeg" alt="The guts of the player - it is mostly empty." width="900" height="506" class="aligncenter size-full wp-image-36089">
On the left, a thin switch which opens when the needle arm is sent back.
A motor at the bottom, belt driving the turntable,
And a <em>teeny</em> circuit board.
Wanna take a close up? Course you do!
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/phono.jpeg" alt="Soldered wires on a cirvuit board." width="900" height="467" class="aligncenter size-full wp-image-36090">
That's how the needle / cartridge is wired in. I was kinda hoping it would be socketed as I hate soldering / desoldering.
It uses a common earth, rather than separates.</p>

<p>Let's take a look at the main board.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/circuit-board.jpeg" alt="A circuit board." width="1200" height="977" class="aligncenter size-full wp-image-36091"></p>

<p>If you're searching for this board, it's labelled as <code>K-2217</code> <code>280-002217-101-10</code>.
Uses a H12000M crystal (I think). The VR151 in the centre adjusts the speed of the motor.</p>

<p>The main brains of the operation is this microchip.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/chip.jpeg" alt="A microchip." width="459" height="392" class="aligncenter size-full wp-image-36092">
Again, for keyword searchers, this is a JYK 2011C 123D1N942. I think. JYK - JiaYinKing - are the OEM who make all sorts of record players.</p>

<p>I'm <a href="https://twitter.com/noilsoncaio/status/1287025241265516544">told</a> that this is likely to be a <a href="https://www.ti.com/lit/ds/symlink/pcm2900.pdf">PCM2902E</a>. That's a common USB / Amp chip.</p>

<p>The motor is <em>also</em> JYK branded.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/motor.jpeg" alt="A small motor." width="680" height="459" class="aligncenter size-full wp-image-36093">
It says it is capable of 3 different speeds. 1130, 1520, 2360 RPM. Other models of this player have a 33/45 switch for playing different speeds of records. The ratio 1130:1520 is roughly the same as 33.3:45 I assume 2360 is for 78RPM records?
Keywords: <code>EG-53SD-3F</code></p>

<h2 id="linux-info"><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/#linux-info">Linux Info</a></h2>

<p>The USB info is <code>2034:0105</code> - that's it.</p>

<p>Pulse detects it as a stereo input device, and Audacity happily recorded audio from it.
To playback through your computer speakers or Bluetooth, set the record player as your audio input and run:</p>

<pre><code class="language-bash">arecord -f cd - | aplay -
</code></pre>

<h2 id="verdict"><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/#verdict">Verdict</a></h2>

<p><a href="https://amzn.to/30ujDph">For £30 including delivery</a>, it's pretty good! Sure, the sound output isn't audiophile quality, but you get phono output <em>and</em> USB out.  The speed is a bit wobbly, but probably no worse than an original 1960s player.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36086&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
	</channel>
</rss>
