<?xml version="1.0" encoding="UTF-8"?>
<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>matt.west.co.tt</title>
	<atom:link href="http://matt.west.co.tt/feed/" rel="self" type="application/rss+xml" />
	<link>http://matt.west.co.tt</link>
	<description>adventures of a retro electro media hacker type person</description>
	<lastBuildDate>Thu, 10 May 2012 18:13:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>JSSpeccy (tiny bugfix)</title>
		<link>http://matt.west.co.tt/spectrum/jsspeccy-tiny-bugfix/</link>
		<comments>http://matt.west.co.tt/spectrum/jsspeccy-tiny-bugfix/#comments</comments>
		<pubDate>Thu, 10 May 2012 18:13:24 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[JSSpeccy]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=271</guid>
		<description><![CDATA[A long-overdue maintenance update to JSSpeccy to apply a bugfix independently found by Antonio Villena and Andrew without-a-surname: IM 2 interrupt handlers were broken because I had an 0xfff where there should have been an 0xffff. Thanks both! As ever, see the subversion repo for source. (Incidentally, JSSpeccy v2 was in the works a while [...]]]></description>
			<content:encoded><![CDATA[<p>A long-overdue maintenance update to <strong><a href="http://jsspeccy.zxdemo.org/">JSSpeccy</a></strong> to apply a bugfix independently found by Antonio Villena and <a href="http://matt.west.co.tt/spectrum/jsspeccy/comment-page-2/#comment-306716">Andrew</a> without-a-surname: IM 2 interrupt handlers were broken because I had an 0xfff where there should have been an 0xffff. Thanks both!</p>
<p>As ever, see <a href="http://svn.matt.west.co.tt/svn/jsspec/">the subversion repo</a> for source. (Incidentally, <a href="https://github.com/gasman/jsspeccy2">JSSpeccy v2</a> was in the works a while back &#8211; will dust that off again at some point&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/spectrum/jsspeccy-tiny-bugfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Synchronizatron 3000</title>
		<link>http://matt.west.co.tt/music/synchronizatron-3000/</link>
		<comments>http://matt.west.co.tt/music/synchronizatron-3000/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 21:25:59 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=258</guid>
		<description><![CDATA[In advance of my appearance at the Ultrachip Festival in Edinburgh next month (19th-20th August! Two nights of awesomeness from the UK&#8217;s finest chiptune musicians! Free entry! W00t!), I thought this would be a good time to reveal the secret weapon at the heart of my live shows. Ladies and gentlemen, behold… the Synchronizatron 3000. [...]]]></description>
			<content:encoded><![CDATA[<p>In advance of my appearance at the <strong><a href="http://www.ultrachip.co.uk/">Ultrachip Festival</a></strong> in Edinburgh next month <em>(19th-20th August! Two nights of awesomeness from the UK&#8217;s finest chiptune musicians! Free entry! W00t!)</em>, I thought this would be a good time to reveal the secret weapon at the heart of my live shows. Ladies and gentlemen, behold… <strong>the Synchronizatron 3000</strong>.</p>
<div style="text-align: center;"><img src="http://matt.west.co.tt/images/synchronizatron_400px.jpg" alt="" width="400" height="533"></div>
<p>Out of all my projects, I like this one a lot. I like it because it brought me out of my comfort zone and into the murky world of hardware design (aided by the <a href="http://arduino.cc/">Arduino</a> project which does a fine job of making that world accessible to electronics noobs like me). I also like it because it elegantly solves a problem that, in all likelihood, nobody in the world but me has. But most of all, I like it because it has a pair of blinky LEDs on the top which serve no meaningful purpose.<br />
<span id="more-258"></span><br />
A couple of the songs in my set are played using two Spectrums together, to get an unthinkable 6 (SIX!) channels of sound. At <a href="http://ay-riders.speccy.cz">AY Riders</a> concerts in the past, we synchronised them through the low-tech method of having two of us with our fingers poised over the space bar while one of us counted us in. This method has two drawbacks: firstly, if the timing is even slightly out, it&#8217;s very noticeable. Secondly, different models of Spectrum have slightly different clock speeds, which causes them to slowly drift out of sync over the duration of the song. My two &#8216;performance&#8217; Spectrums are an original 128+ and my <a href="http://matt.west.co.tt/spectrum/speccy2010/">Speccy2010</a>, which are about as different as you can get &#8211; so that wasn&#8217;t going to cut it.</p>
<p>The job of the Synchronizatron 3000 is to provide a common external 50Hz clock signal for the two Spectrums to use, in place of their own timers. This signal gets fed in through whichever port happens to be convenient &#8211; for the Speccy2010, it&#8217;s the joystick port, which handily also provides a +5V line for powering the whole thing &#8211; and for the 128+, it&#8217;s the cassette (EAR) port. Using the cassette port adds another hurdle, because it&#8217;s designed to receive audio-frequency signals, so (presumably due to bandpass filters and other things I don&#8217;t understand) it won&#8217;t respond to simply flipping the signal high and low every 50th of a second &#8211; so instead, it rapidly alternates between generating an 8000Hz tone and silence. The code is really laughably simple:</p>
<pre>
void setup() {
  // initialize the digital pin as an output.
  pinMode(13, OUTPUT); // clock signal
  pinMode(9, INPUT);   // on/off switch
  pinMode(10, OUTPUT); // off (red) LED
  pinMode(11, OUTPUT); // on (green) LED
}

void loop() {
  if (digitalRead(9)) {  // switched on
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);
    tone(13, 8000); // burst of high frequency
    delay(5);   // play it for 5ms
    noTone(13); // set signal off
    delay(15);  // wait for 15ms
  } else {  // switched off
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);
  }
}
</pre>
<p>The Z80 code on the Spectrum side to listen to those pulses goes something like this &#8211; it&#8217;s somewhat similar to what the Spectrum&#8217;s own tape loading routines do when listening for the end of a &#8216;beeeeeee&#8217; in &#8216;beeeeeee bip! beeeeeee bipipipipi…&#8217;, except that here it gets done 50 times a second:</p>
<pre>
	call init_music
loop:
wait_low:
	call get_pulse      ; check for presence of a tone
	jr nz,wait_low      ; don't proceed until the tone has stopped
wait_high:
	call get_pulse      ; now wait for the tone to start up again
	jr z,wait_high      ; - don't proceed until we detect a pulse
	call play_music     ; play the next 'frame' of music -
	                    ; - we want to do this every 1/50s
	jr loop             ; repeat ad infinitum

get_pulse:
	in a,(254)          ; read the cassette port:
	and 0x40            ; - bit 6 of port 254
	ld d,a              ; save its initial value in d
	ld b,255            ; see if it changes over the next 255 iterations over this loop:
get_pulse_loop:
	in a,(254)          ; re-read the cassette port
	and 0x40
	cp d                ; compare with initial value
	ret nz              ; return (with zero flag reset) if there's been a change
	djnz get_pulse_loop
	ret                 ; return (with zero flag set) after 255 iterations with no change
</pre>
<p>Having successfully proved the concept with the full Arduino board, accompanying breadboard and rats-nest of wires, transferring the whole thing to a standalone circuit on stripboard was dead easy &#8211; even easier than the <a href="http://arduino.cc/en/Main/Standalone">regular instructions</a> for doing that, because the Speccy2010 joystick port already gives us a regulated 5V line that saves us from having to rig one up ourselves on the board.</p>
<div style="text-align: center;"><img src="http://matt.west.co.tt/images/synchronizatron_circuit.jpg" alt="(the stripboard schematic, with obligatory coffee stain)" title="the stripboard schematic, with obligatory coffee stain" width="400" height="533"></div>
<p><em>Thanks to <a href="https://twitter.com/loleg">Oleg</a>, <a href="https://twitter.com/btscroggs">Ben</a> and the rest of the <a href="http://wiki.oxfordhackspace.org.uk/doku.php">Oxford Hack Space</a> crowd for their technical, organisational and moral support while cooking this up!</em></p>
<p>It all worked splendidly on the night <a href="http://matt.west.co.tt/music/gasman-live-at-outline-2011/">in Eersel</a>, and you&#8217;ll be able to witness it in action again if you come along to Ultrachip next month. Go on, you know you want to…<br />
<img src="http://www.cmptrllr.co.uk/wp-content/uploads/2011/07/ultrachip-2011-2x.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/synchronizatron-3000/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gasman live at Outline 2011!</title>
		<link>http://matt.west.co.tt/music/gasman-live-at-outline-2011/</link>
		<comments>http://matt.west.co.tt/music/gasman-live-at-outline-2011/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 22:14:37 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Demoscene]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=251</guid>
		<description><![CDATA[After the triumphant AY Riders gig at the Forever demoparty back in March, I had a hankering for some more Speccy-and-keytar-and-vocoder live performance action, so I jumped at the chance to play my first EVVAR solo set at last weekend&#8217;s Outline party in the Netherlands. Outline is by no means one of the largest parties, [...]]]></description>
			<content:encoded><![CDATA[<p>After the triumphant <a href="http://ay-riders.speccy.cz/">AY Riders</a> gig at the <a href="http://forever.zeroteam.sk/">Forever</a> demoparty back in March, I had a hankering for some more Speccy-and-keytar-and-vocoder live performance action, so I jumped at the chance to play my first EVVAR solo set at last weekend&#8217;s <a href="http://outlinedemoparty.nl/">Outline</a> party in the Netherlands. Outline is by no means one of the largest parties, but there&#8217;s something magic about the atmosphere there which has made it one of the most eagerly awaited events in my calendar over the last couple of years. Most demo parties will give you the opportunity to chill outside in the sun with a beer or slave away at a hot CPU to finish off your creations, but it&#8217;s rare that the two activities flow together so smoothly as they do at Outline.</p>
<p>And with everyone&#8217;s spirits kept high, it means that when the evening activity kicks off, you have the most awesome audience you could possibly hope for. Big ups to TMC for the video, m0d for the other video which should be surfacing soon, Ziphoid for streaming the gig on <a href="http://scenesat.com/">SceneSat Radio</a>, and of course Havoc, D-Force and the rest of the Outline team for making it all happen&#8230;</p>
<p><iframe width="480" height="303" src="http://www.youtube.com/embed/C7wY4xq0psA" frameborder="0" allowfullscreen></iframe></p>
<h3>Setlist</h3>
<ul>
<li>1:51 Gasman &#8211; Out Of Neverland</li>
<li>6:18 Gasman &#8211; Torch Dragon</li>
<li>8:41 Celine Dion &#8211; My Heart Will Go On</li>
<li>10:23 Gasman &#8211; Cybernoid&#8217;s Revenge</li>
<li>14:23 Madonna (arr. TDM + Factor6) &#8211; Hung Up</li>
<li>20:17 Gasman &#8211; Oldskool Crusader</li>
<li>23:47 Michael Jackson &#8211; Thriller (featuring Okkie)</li>
<li>30:30 Purple Motion (arr. TDM + Factor6) &#8211; Satellite One</li>
</ul>
<h3>balls, touching</h3>
<p>And after all that, I still had some spare energy to do some casual hacking around with sine waves and come up with an entry for the 128 byte intro compo. As you&#8217;ll see from the video, 128 byte intros are one of those peculiarly demoscene-ish things that demand a certain frame of mind to be enjoyed properly, to the point where it gets a tad surreal for outsiders. If nothing else, you can certainly count on the Outline audience to provide a soundtrack to a silent production.</p>
<p><iframe width="480" height="303" src="http://www.youtube.com/embed/w_b2aS_ndZE" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://pouet.net/prod.php?which=57068"><i>balls, touching</i> on Pouët</a></p>
<p>(&#8230;and before you ask, the title does indeed come from an infantile demoscene in-joke about genitalia. I&#8217;d actually only planned for there to be one ball, but then one of those fortuitous coding accidents from adding or removing an odd instruction happened, and I knew I had to run with it.)</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/gasman-live-at-outline-2011/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Easterbirdie</title>
		<link>http://matt.west.co.tt/music/easterbirdie/</link>
		<comments>http://matt.west.co.tt/music/easterbirdie/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 21:22:47 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=248</guid>
		<description><![CDATA[I wrote a Speccy chiptune for the Revision party this weekend (where it was presented on the 29th anniversary of the release of the ZX Spectrum, no less). The whole thing was done live at the party in the space of about six hours, and it&#8217;s very much in my signature style. Download gasman_-_easterbirdie.mp3 Download: [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a Speccy chiptune for the <a href="http://revision-party.net/">Revision party</a> this weekend (where it was presented on the 29th anniversary of the release of the ZX Spectrum, no less). The whole thing was done live at the party in the space of about six hours, and it&#8217;s very much in my signature style.</p>
<p><a href="http://music.matt.west.co.tt/speccy/gasman_-_easterbirdie.mp3">Download gasman_-_easterbirdie.mp3</a></p>
<p>Download:</p>
<ul>
<li><a href="http://music.matt.west.co.tt/speccy/gasman_-_easterbirdie.tap.zip">Easterbirdie (ZX Spectrum .tap format)</a></li>
<li><a href="http://music.matt.west.co.tt/speccy/gasman_-_easterbirdie.mp3">Easterbirdie (MP3 format)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/easterbirdie/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://music.matt.west.co.tt/speccy/gasman_-_easterbirdie.mp3" length="3340306" type="audio/mpeg" />
		</item>
		<item>
		<title>The Three Little Pigs: an Alternative Vote fairytale</title>
		<link>http://matt.west.co.tt/stuff/three-little-pigs/</link>
		<comments>http://matt.west.co.tt/stuff/three-little-pigs/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 00:23:19 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=237</guid>
		<description><![CDATA[I&#8217;ve grown tired of hearing the No2AV campaign talk about how the proposed Alternative Vote system is too complicated for people to understand. They know perfectly well that it isn&#8217;t, but just spreading the claim is enough to muddy the waters and put people off trying to understand it, because, by golly, if the Prime [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve grown tired of hearing the No2AV campaign talk about how the proposed Alternative Vote system is too complicated for people to understand. They know perfectly well that it isn&#8217;t, but just spreading the claim is enough to muddy the waters and put people off trying to understand it, because, by golly, if the Prime Minister thinks it&#8217;s complicated then what chance do we have?</p>
<p>At the same time, though, I don&#8217;t feel that the Yes campaign have been particularly strong at responding to that claim: by over-simplifying it through weak analogies (&#8220;it&#8217;s like going to the shops for a chocolate bar, and finding that they don&#8217;t have your first choice, so you have to go for your second choice instead &#8211; but you still only get the one chocolate bar&#8221;) people are being left with the impression that the pro-AV crowd are glossing over important details, and the suspicion that it&#8217;s probably a lot murkier once you start digging under the surface (which people aren&#8217;t going to do, because we&#8217;re all too busy to read up on voting systems, and someone said that it was really complicated. And so on ad infinitum).</p>
<p>So, to do my bit to support the cause, and hopefully quash the &#8220;it&#8217;s too complicated!&#8221; mantra once and for all, I&#8217;ve attempted to explain AV in full, through the medium of a children&#8217;s story.</p>
<p>I&#8217;m no Lewis Carroll &#8211; this is really just an idea that I thought was worth putting into words &#8211; so I&#8217;m releasing it under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons attribution</a> licence. If this captures your imagination, and you have literary / copy-editing skills, please do go ahead and weave your magic on it. Or make some illustrations, or print out a bunch of copies and make a load of money off it, or persuade your celebrity friends to make an audiobook version of it. Or even, if you&#8217;re so inclined, rework it into a pro-first-past-the-post story. What this debate needs is more down-to-earth constructive arguments, from both sides.</p>
<p>Are you sitting comfortably? Then we&#8217;ll begin:</p>
<div style="font-family: Georgia, serif; font-size: 1.3em; line-height: 1.4em;">
<h3>The Three Little Pigs: an Alternative Vote fairytale</h3>
<h4>by Matt Westcott</h4>
<p>Once upon a time, there was a farm. On this farm, there lived some pigs, some cows, some chickens and some horses.</p>
<p>The animals on the farm were very unhappy, because the farm was run by the Big Bad Wolf and his four wolfy friends. They were very cruel to the animals on the farm, and every harvest time, they would take all of the farm&#8217;s crops for themselves. All the other animals longed for the day when the Big Bad Wolf wouldn&#8217;t be running the farm any more.</p>
<p>Every summer the animals would get together in the yard outside the big farmhouse for a special ceremony. Each animal would get to choose who they wanted to run the farm for the following year. One by one, they would go up to wise old Mr Owl and tell him their choice, and wise Mr Owl would count up the votes and decide who would be king of the farm.</p>
<p>One summer, Billy, Benny and Bobby, the three little pigs, decided that they&#8217;d had enough of the Big Bad Wolf. Each of them thought long and hard about what to do… and slowly, one by one, they each had the same idea. &#8220;If I get the animals to choose me as king of the farm,&#8221; thought Billy, Benny and Bobby, &#8220;I&#8217;ll run the farm in a much fairer way. I&#8217;ll make sure all of the animals have enough food, and together we&#8217;ll all live happily ever after.&#8221;</p>
<p>And so, on a beautiful summer morning, Billy the pig went to visit Dora, Debra and Dinah, the chickens, to tell them about his plans. &#8220;If I become king of the farm,&#8221; said Billy, &#8220;I&#8217;ll send the Big Bad Wolf and his four wolfy friends back to the forest. At harvest time, we&#8217;ll take the farm&#8217;s crops to the market, and with the money we make, we&#8217;ll paint the hen-house red.&#8221; &#8220;Oh, Billy, what a wonderful idea!&#8221; exclaimed Dora. &#8220;We&#8217;ll vote for you, we promise!&#8221;</p>
<p>Meanwhile, Benny the pig went to visit Myrtle and Molly, the cows, to tell them about his plans. &#8220;If I become king of the farm,&#8221; said Billy, &#8220;I&#8217;ll send the Big Bad Wolf and his four wolfy friends back to the forest. At harvest time, we&#8217;ll take the farm&#8217;s crops to the market, and with the money we make, we&#8217;ll paint the cow-shed blue.&#8221; &#8220;Mmm… That does sound like a good idea,&#8221; said Myrtle as she chewed on a strand of hay. &#8220;We&#8217;ll certainly vote for you!&#8221;</p>
<p>Meanwhile, Bobby the pig went to visit Henry the horse, to tell him about his plans. &#8220;If I become king of the farm,&#8221; explained Bobby, &#8220;I&#8217;ll send the Big Bad Wolf and his four wolfy friends back to the forest. At harvest time, we&#8217;ll take the farm&#8217;s crops to the market, and with the money we make, we&#8217;ll paint the stables yellow.&#8221; &#8220;I say! What a jolly good idea!&#8221; said Henry. &#8220;I&#8217;ll be voting for you, that&#8217;s for sure!&#8221;</p>
<p>And so the day came when the animals would choose who was to become king of the farm. The chickens were the first to come up to wise old Mr Owl and tell him their choices. &#8220;Hello, Dora,&#8221; said wise Mr Owl. &#8220;Hello, Debra, Hello, Dinah. Whooo do you choooose?&#8221;</p>
<p>&#8220;We choose Billy!&#8221; said Dora, Debra and Dinah. &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>The cows were next to visit wise old Mr Owl. &#8220;Hello, Myrtle,&#8221; said wise Mr Owl. &#8220;Hello, Molly. Whooo do you chooose?&#8221;</p>
<p>&#8220;We choose Benny!&#8221; said Myrtle and Molly. &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>Next, it was the turn of Henry the horse. &#8220;Hello, Henry,&#8221; said wise Mr Owl. &#8220;Whooo do you chooose?&#8221;</p>
<p>&#8220;I choose Bobby!&#8221; said Henry. &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>Finally, the Big Bad Wolf&#8217;s four wolfy friends came up to wise Mr Owl to make their choices. &#8220;Hello, Wolfson. Hello, Wolfingham. Hello, Wolferton. Hello, Wolfhamstow,&#8221; said wise Mr Owl. &#8220;Whooo do you chooose?&#8221;</p>
<p>&#8220;WE WANT THE BIG BAD WOLF!&#8221; they all shouted together. &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>The animals all gathered round to hear who would be king of the farm for the next year. &#8220;In fourth place, with one vote &#8211; Bobby the pig&#8221;, began wise Mr Owl. &#8220;In third place, with two votes &#8211; Benny the pig. In second place, with three votes &#8211; Billy the pig. Which means that this year&#8217;s king of the farm, with four votes, is… The Big Bad Wolf.&#8221;</p>
<p>All the animals gasped with surprise.</p>
<p>&#8220;Oh, Mr Owly!&#8221; cried Dora. &#8220;None of us wanted the Big Bad Wolf to win. We chose Billy because we so dearly wanted our beautiful new hen-house, but really we would have been happy with Benny or Bobby. I know that Henry and Myrtle and Molly feel the same way too. The only animals who wanted the Big Bad Wolf to win were his four wolfy friends!&#8221;</p>
<p>&#8220;I&#8217;m sorry, Dora… that&#8217;s how the rules work,&#8221; explained wise Mr Owl. &#8220;The Big Bad Wolf got more votes than any of the three little pigs, so he becomes king of the farm.&#8221;</p>
<p>Autumn came, and at harvest time, the Big Bad Wolf and his four wolfy friends were worse than ever. Once again, they kept all the farm&#8217;s crops for themselves, and the animals went hungry. Winter came, and rainstorms battered the hen-house, the cow-shed, and the stables, leaving the walls rusted and the old paint flaking off. Spring came, and the three little pigs were determined not to give up &#8211; they decided they would stand up against the Big Bad Wolf once again.</p>
<p>And so, on another beautiful summer morning, Billy the pig went to the hen-house to visit Dora, Debra and Dinah. Once again, he told them that if he became king of the farm, he would share out the crops more fairly, and with the money they made at market, they would paint the hen-house red. &#8220;Oh, Billy, it still sounds like a wonderful idea,&#8221; said Dora, &#8220;but how will we make that happen if the Big Bad Wolf wins again?&#8221; &#8220;We&#8217;ll make it work out &#8211; somehow,&#8221; replied Billy.</p>
<p>Meanwhile, Benny the pig went down to the cow-shed to visit Myrtle and Molly. Once again, he told them that if he became king of the farm, he would share out the crops more fairly, and with the money they made at market, they would paint the cow-shed blue. &#8220;It still sounds like an awfully good idea,&#8221; said Myrtle, &#8220;but how will we make that happen if the Big Bad Wolf wins again?&#8221; &#8220;We&#8217;ll make it work out &#8211; somehow,&#8221; replied Benny.</p>
<p>Meanwhile, Bobby the pig went down to the stables to meet Henry the horse. Once again, he told Henry that if he became king of the farm, he would share out the crops more fairly, and with the money they made at market, they would paint the stables yellow. &#8220;It&#8217;s still a jolly good idea,&#8221; said Henry, &#8220;but how will we make that happen if the Big Bad Wolf wins again?&#8221; &#8220;We&#8217;ll make it work out &#8211; somehow,&#8221; replied Bobby.</p>
<p>Soon, the day came round when the animals would choose who was to become king of the farm. They all gathered round in the yard outside the big farmhouse to hear wise old Mr Owl make an announcement. &#8220;We&#8217;ll be doing things a bit differently this year,&#8221; he explained. &#8220;This time, you&#8217;ll still give me your favourite choice, but you can also tell me your second choice, third choice, and even fourth choice.&#8221;</p>
<p>The animals all chattered with excitement at the news. The chickens were the first to come up to wise old Mr Owl. &#8220;Hello, Dora,&#8221; said wise Mr Owl. &#8220;Hello, Debra, Hello, Dinah. Whooo do you choooose?&#8221;</p>
<p>&#8220;We choose Billy,&#8221; said Dora, Debra and Dinah, &#8220;but our second choice is Benny, and our third choice is Bobby.&#8221; &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>The cows were next to visit wise old Mr Owl. &#8220;Hello, Myrtle,&#8221; said wise Mr Owl. &#8220;Hello, Molly. Whooo do you chooose?&#8221;</p>
<p>&#8220;We choose Benny,&#8221; said Myrtle and Molly, &#8220;but our second choice is Bobby, and our third choice is Billy.&#8221; &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>Next, it was the turn of Henry the horse. &#8220;Hello, Henry,&#8221; said wise Mr Owl. &#8220;Whooo do you chooose?&#8221;</p>
<p>&#8220;I choose Bobby,&#8221; said Henry, &#8220;but my second choice is Billy, and my third choice is Benny.&#8221; &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>Finally, the Big Bad Wolf&#8217;s four wolfy friends came up to wise Mr Owl to make their choices. &#8220;Hello, Wolfson. Hello, Wolfingham. Hello, Wolferton. Hello, Wolfhamstow,&#8221; said wise Mr Owl. &#8220;Whooo do you chooose?&#8221;</p>
<p>&#8220;WE WANT THE BIG BAD WOLF!&#8221; they all shouted together. &#8220;Very well,&#8221; said wise old Mr Owl.</p>
<p>The animals gathered in the yard, eager to hear who would be the new king of the farm. &#8220;I have some very interesting news,&#8221; declared wise Mr Owl. &#8220;The Big Bad Wolf had the most votes, but there was no clear winner. He only received four votes, out of a total of ten.</p>
<p>&#8220;This means that we need to go to a second round. Bobby the pig only received one vote, so we&#8217;ll take him out of the contest, and count the votes again. Now, the Big Bad Wolf still has four votes. Billy the pig has four votes, and Benny the pig has two votes.</p>
<p>&#8220;Well I never! We still don&#8217;t have a clear winner! That means we need to take Benny the pig out of the contest, and go to a third round. Benny and Bobby are out now, so we need to use Myrtle and Molly&#8217;s third choice. Counting it all up, then &#8211; the Big Bad Wolf still has four votes, and the new king of the farm, with six votes, is… Billy the pig!&#8221;</p>
<p>All the animals on the farm cheered. All the animals, that is, except the Big Bad Wolf and his four wolfy friends &#8211; because they knew that their time of treating the other animals unfairly was at an end.</p>
<p>The following harvest time, the farm had its biggest crop ever. The wolves were no longer around to take it away from them, and when the animals took it to market, they were delighted to find that they&#8217;d made enough money to paint not just the hen-house, but the cow-shed and the stables too. The animals enjoyed their newly decorated homes, and they all lived happily ever after.</p>
</div>
<hr />
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by/3.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">The Three Little Pigs: an Alternative Vote fairytale</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://matt.west.co.tt/stuff/three-little-pigs/" property="cc:attributionName" rel="cc:attributionURL">Matt Westcott</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 Unported License</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/stuff/three-little-pigs/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>FAWM 2011 retrospective / Geek Pop</title>
		<link>http://matt.west.co.tt/music/fawm-2011/</link>
		<comments>http://matt.west.co.tt/music/fawm-2011/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 23:37:08 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[FAWM]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=225</guid>
		<description><![CDATA[February has been and gone, bringing with it my now customary jaunt into the world of February Album Writing Month. I fell some way short of the 14 song target this time, which I&#8217;ll blame on considerably increasing my production values this year, and not at all on being a lazy git. I&#8217;m holding back [...]]]></description>
			<content:encoded><![CDATA[<p>February has been and gone, bringing with it my now customary jaunt into the world of <a href="http://fawm.org/">February Album Writing Month</a>. I fell some way short of the 14 song target this time, which I&#8217;ll blame on considerably increasing my production values this year, and not at all on being a lazy git.</p>
<p>I&#8217;m holding back a few of the songs from general release, because they&#8217;ll be going towards <em>this</em> month&#8217;s exciting musical happening: <strong>the <a href="http://geekpop.podbean.com/">Geek Pop</a> virtual festival!</strong> Yes, all the greatest musical minds from the worlds of science and technology will be gathered in one place on the internet &#8211; and somehow I&#8217;ve ended up being one of them, performing on the Comical Flask stage alongside such luminaries as MJ &#8220;Hey Hey 16K&#8221; Hibbett. And because it&#8217;s a virtual festival, you don&#8217;t even need to drink beer out of a nasty plastic beaker or walk two miles to the nearest shower. Hurrah! Keep your browsers peeled (or something) at the Geek Pop website for the big unveiling on March 11th, or mosey on down to Wilton&#8217;s Music Hall, London on the 10th for the <a href="http://geekpop.podbean.com/2011/01/20/geek-pop-2011-launch-tickets-on-sale-now/">live launch gig</a>.</p>
<p>In the meantime, here&#8217;s some almost-as-good-or-equally-good-but-not-as-geeky music I also wrote last month&#8230;</p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370215&amp;show_comments=true&amp;auto_play=false&amp;color=ff7700"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370215&amp;show_comments=true&amp;auto_play=false&amp;color=ff7700" type="application/x-shockwave-flash" width="100%"></embed></object>   <span><a href="http://soundcloud.com/matt-westcott/avogadros-number">Avogadro&#8217;s Number</a> by <a href="http://soundcloud.com/matt-westcott">Matt Westcott</a></span></p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370442"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370442" type="application/x-shockwave-flash" width="100%"></embed></object>  <span><a href="http://soundcloud.com/matt-westcott/big-conversation">Big Conversation</a> by <a href="http://soundcloud.com/matt-westcott">Matt Westcott</a></span></p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370576"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F11370576" type="application/x-shockwave-flash" width="100%"></embed></object>  <span><a href="http://soundcloud.com/matt-westcott/in-the-future">In The Future</a> by <a href="http://soundcloud.com/matt-westcott">Matt Westcott</a></span></p>
<p>(Looking for the lyrics? Get them at <a href="http://fawm.org/fawmers/mattwestcott/">my FAWM profile page</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/fawm-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Speccy2010: A Complete Guide For Non-Russian-Speakers</title>
		<link>http://matt.west.co.tt/spectrum/speccy2010/</link>
		<comments>http://matt.west.co.tt/spectrum/speccy2010/#comments</comments>
		<pubDate>Sat, 26 Feb 2011 21:22:59 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=214</guid>
		<description><![CDATA[IMPORTANT UPDATES ON THE DELIVERY SITUATION: 2011-03-10: Have had a report that Syd is no longer able to send boards outside the Ukraine due to a change in the law which came in this week. Trying to confirm the details right now, but clearly this is a major downer if it is indeed true :-( [...]]]></description>
			<content:encoded><![CDATA[<p><strong>IMPORTANT UPDATES ON THE DELIVERY SITUATION:</strong></p>
<p>2011-03-10: Have had <a href="http://matt.west.co.tt/spectrum/speccy2010/comment-page-1/#comment-171737">a report</a> that Syd is no longer able to send boards outside the Ukraine due to a change in the law which came in this week. Trying to confirm the details right now, but clearly this is a major downer if it is indeed true :-( Obviously, Syd is the best person to advise on the current state of orders. (And if you have any more news on the situation, please pass it on to me via comments or <a href="mailto:matt@west.co.tt">email</a>)</p>
<p>2011-03-11: A later report from gringo128 (<a href="http://matt.west.co.tt/spectrum/speccy2010/comment-page-1/#comment-171895">comment below</a>) suggests that this only affects the EMS delivery service &#8211; Syd is now sending boards by standard mail, which is a bit slower (two weeks rather than 5-10 days) but still offers online tracking (and is hopefully adequately insured too, but please check before ordering). Hoping I can bring you news of their successful arrival some time soon&#8230;</p>
<p>2011-03-16: The good news: Another Speccy2010 board has safely arrived in the UK by DHL, and Craig, the lucky recipient, has made <a href="http://www.youtube.com/amigajunkie#p/u/6/PFlrzV-k9WI">a follow-up video of unboxing number two</a>. The bad news: The current batch has now sold out, and Syd has stated that he&#8217;s decided not to send boards abroad in future, due to the complications this time round. For now all we can do is wait for the situation to change, or someone to step in to take on the role of international distributor (could that be you, dear reader&#8230;?). In the meantime, keep an eye on zx.pk.ru and here for news of any new developments.</p>
<hr />
<p><em><strong>Updated 2011-03-04</strong>: <a href="http://matt.west.co.tt/files/speccy2010-faq/">English translation of the Speccy2010 FAQ</a> published</em></p>
<p><em><strong>Updated 2011-03-05</strong>: Added info about troubleshooting over the serial port.</em></p>
<p>This is the story of how I got hold of a Speccy2010 board, one of the most exciting developments to hit the Spectrum world in recent times. It&#8217;s a Spectrum clone developed in the Ukraine, which replicates the original 48 and 128K Spectrums, along with the Pentagon and Scorpion models popular across Russia. It connects to a TV or monitor by composite video, S-Video or VGA, and lets you load emulator images (tape, snapshot, or TR-DOS disk) from an SD card. The whole thing is the size of a packet of crisps, and is built around an FPGA programmable logic chip which can be reflashed with new firmware versions (again via the SD card) to gain new capabilities as and when they are developed. In short, it&#8217;s exactly what people are asking for whenever they post to a Spectrum web forum asking &#8220;Why doesn&#8217;t someone build a next-generation Spectrum?&#8221; And you can buy one, today.</p>
<p><iframe title="YouTube video player" width="480" height="300" src="http://www.youtube.com/embed/cAVTkZkHbR8" frameborder="0" allowfullscreen></iframe></p>
<p>Tempted? Well, here&#8217;s the deal. This isn&#8217;t mass-produced commodity hardware &#8211; Syd, the developer, is building these by hand in small runs &#8211; so don&#8217;t expect any formal commercial support or handy &#8220;enter your credit card details here&#8221; online order forms. (Don&#8217;t worry &#8211; ordering isn&#8217;t difficult, just… different.) The boards are fully tested before despatch, and Syd will try to help with any issues you have with it (as will I), but beyond that, it&#8217;s sold &#8220;as is&#8221; &#8211; there&#8217;ll be no refund if it turns out to be incompatible with your monitor, or doesn&#8217;t run your favourite game or whatever. The whole thing cost me £150 (175 EUR, 240 USD) including all delivery / transaction fees, and on top of that you might pay something like £20-30 for the power supply, keyboard, cables, SD cards and other accessories, depending on what you have lying around already. So, it&#8217;s somewhere above the &#8220;geeky impulse purchase from Firebox&#8221; price range you may have been hoping for, but still a very decent price for a piece of kit for a hobby you&#8217;re half-way serious about. If your sense of adventure doesn&#8217;t stretch this far, stop reading now. For the rest of us, here&#8217;s what you have to do…</p>
<p><span id="more-214"></span></p>
<p><strong>Sign up on the <a href="http://zx.pk.ru/">zx.pk.ru</a> forums.</strong> This is the major online community for Russian-speaking Spectrum fans, and is the place where incoming Speccy2010 orders are co-ordinated. If you&#8217;re not lucky enough to speak Russian yourself, I&#8217;d suggest using Chrome, for its ability to auto-translate pages as you browse. Unfortunately they have a somewhat &#8216;paranoid&#8217; registration system in place, presumably to cut down on spam signups, and you may need to wait a day or two for the administrators to manually activate your account before you can post.</p>
<p><strong>Head over to the <a href="http://zx.pk.ru/showthread.php?t=12835">Speccy2010 ordering thread</a>.</strong> Have a quick read through if you want to familiarise yourself with how orders are processed, what the current lead time is and so on &#8211; you&#8217;ll get used to the quirky Google translations after a while, but the main one to be aware of is that &#8220;collected fees&#8221; means &#8220;assembled board&#8221;. (It also has a nasty habit of translating the abbreviation for &#8216;rubles&#8217; to &#8216;USD&#8217;, so don&#8217;t be alarmed if you see the price quoted as 3000 USD…) When you&#8217;re ready to take the plunge, post a message to that thread (in English &#8211; no need to run it through an auto-translator) asking Syd to add you to the list for an assembled machine, and specifying what country you&#8217;re in. You&#8217;ll get an acknowledgement back with an estimate of when it&#8217;ll be ready. I only had to wait a week and a bit &#8211; looking back at posts from the last couple of months, it looks like 3-4 weeks has been the typical turnaround time.</p>
<p><strong>Arrange delivery and payment details.</strong> Syd sent me a PM/email telling me the board was ready, and quoting a price of 125 USD for the unit, and 50 USD delivery to the UK by EMS, Express Mail Service (which is the option I went for, although he was happy to consider alternatives). Making the payment was where it got interesting: online services such as PayPal aren&#8217;t available for recipients in Russia and the Ukraine, which left wire transfer as the most practical option. Western Union are the internationally recognised market leaders, but their operations in the UK are a bit odd: the agent locations that you visit to make your payment are a random assortment of newsagents, Turkish café bars and hairdressers. I&#8217;m sure they&#8217;re all perfectly <em>nice</em> newsagents, bars and hairdressers, but they don&#8217;t feel like the sort of places I want to make important financial transactions. :-) The second biggest player (in the UK, at least) is MoneyGram, which is available at Post Offices and branches of Thomas Cook. Much more reassuring &#8211; and what&#8217;s more, their transfer fee for sending $175 to the Ukraine was only £9.99, rather than the £19.60 quoted on the Western Union website. Syd agreed to accept payment by MoneyGram, so we were all sorted.</p>
<p><strong>Make the payment.</strong> This is where I have to introduce the elephant in the room: ask anyone who&#8217;s been on the internet for any length of time what&#8217;s the first thing that comes into their head when you say &#8220;wire transfer&#8221;, and the answer will probably be &#8220;Nigeria&#8221;. There&#8217;s a good reason why scammers like wire transfer so much: once the money has changed hands, the sender has very little recourse if the deal goes pear-shaped. No credit card chargebacks, no PayPal dispute resolution &#8211; the money is in the recipient&#8217;s pocket as cold hard cash. The advice you&#8217;ll see all over the internet is &#8220;never send money by wire transfer to someone you haven&#8217;t met in person&#8221; &#8211; and here we&#8217;re about to merrily disregard that advice. I can&#8217;t stress this enough &#8211; this is at your own risk.</p>
<p>In reality, it comes down to the same matter of trust as buying anything on eBay or Amazon: you&#8217;re relying on the merchant to deliver what they promise, and you&#8217;d never expect, or want, to have to go through a disputes procedure. You can take my account here as the equivalent of a hearty &#8220;AAA+++ Excellent transaction!!!&#8221; feedback message on eBay, and by looking back through that forum thread on zx.pk.ru, you&#8217;ll (hopefully) be able to confirm that Syd has a universally positive track record of satisfied customers, and use that as a basis to decide for yourself whether the opportunity to get hold of an awesome piece of Spectrum kit outweighs following the sensible advice of the internet.</p>
<p>I chose the red pill. :-)</p>
<p>So, with the massive disclaimer out of the way, making a MoneyGram payment turns out to be pretty straightforward. The friendly person behind the counter will give you a form where you fill in your name and address, amount to send, and the recipient&#8217;s name, city and country. There&#8217;s a set of tick boxes marked &#8220;Options to collect funds&#8221; where the correct one is &#8220;MoneyGram Agent Location&#8221;, and you have the option of entering a &#8220;test question&#8221; for the recipient, which I left blank. On my form I entered the amount to send in USD, but when the cashier re-entered it all into their system they needed to know the amount in pounds &#8211; so before you get there, it&#8217;s worth checking on the <a href="https://www.moneygram.com/">MoneyGram website</a> (via the &#8216;How much?&#8217; link) so that you have a figure to hand, rounded up by a pound or two to cover any margin of error (but you&#8217;ll have the chance to confirm the exact dollar amount before they hit the big red &#8216;send&#8217; button). You&#8217;ll make that payment along with the £10 transaction fee &#8211; I was almost caught out because the whole thing has to be paid in cash, not by card, but handily Post Office counters will allow you to withdraw money from certain banks (including mine, Lloyds TSB) on the spot, which is effectively the same thing as paying by card.</p>
<p>When you&#8217;re done, you&#8217;ll get back a receipt with the all-important &#8220;MoneyGram Ref. No&#8221; listed on it &#8211; email this to Syd (it&#8217;s probably helpful to let him know the final dollar amount transferred too), and he&#8217;ll collect his well-earned money and send out your package.</p>
<p><strong>Wait for it to arrive.</strong> Packages sent by EMS from the Ukraine to the UK will be handled by <a href="http://www.parcelforce.com/">Parcelforce</a>, on whose website you&#8217;re destined to spend the next 5-10 days <a href="http://xkcd.com/281/">being this person</a>. Unless you somehow manage to beat the system, you&#8217;ll see it make its way to your local depot, whereupon its status will change to &#8220;Held &#8211; Awaiting payment of charges&#8221;. Shortly afterwards, you&#8217;ll get a letter from Parcelforce with a reference number in it, detailing the customs charges you need to pay &#8211; £31, in my case. You can pay this online through the Parcelforce website, and, hopefully, be able to schedule a delivery for the following day.</p>
<p>I dare say that people who regularly import exotic products will have an armoury of dodges for getting around customs charges &#8211; having it declared as a personal gift, understating the value of the goods… whatever. Personally, I&#8217;d say that after coming all this way, it would be exceedingly silly to risk having the package confiscated all for the sake of saving a few quid &#8211; but it&#8217;s your call.</p>
<p><strong>Unpack!</strong> In your parcel, you&#8217;ll receive the all-important Speccy2010 board, a snug plastic box to put it in (although you&#8217;ll need to cut your own holes for the connectors) and a sticker to go on the box (because it wouldn&#8217;t be a real Spectrum without that four-colour stripe, would it…?). The other essential items you need, not included in the package, are:</p>
<ul>
<li>A power adapter &#8211; the regular barrel type (with a 2.1mm pin), with +5V tip and ground outside, rated at 1A or more. I ended up spending £23 on <a href="http://www.maplin.co.uk/ac-dc-multi-voltage-2500ma-switched-mode-power-supply-49063">the most expensive one at Maplin</a>, because on past experience every random bit of electrical equipment I buy always needs a slightly better one than I&#8217;ve got already &#8211; and it&#8217;s really small as well, which is good. You could probably get a suitable power supply much cheaper if you shopped around &#8211; in fact, it looks like the one I bought is now on offer for £15 for the next month. Basts! As it happens, I already had one that did 4.5V rather than 5V, and it seemed to work just as well.</li>
<li>A VGA, PAL composite video, PAL S-Video or SCART RGB monitor, and corresponding cable. The VGA, composite and S-Video connectors are the standard 15-pin D socket, phono, and 4-pin mini DIN sockets respectively; SCART RGB requires a custom cable to the VGA port, as detailed in the <a href="http://matt.west.co.tt/files/speccy2010-faq/">Speccy2010 FAQ</a> (see also: <a href="http://code.google.com/p/speccy2010/downloads/detail?name=speccy2010-doc-20110124-rev0048.7z&#038;can=2&#038;q=">original Russian version</a>).</li>
<li>An SD card, and some way of writing to it. I tried a 512Mb one (the smallest, cheapest one you can get at Maplin) and a 4Gb SDHC card, and both worked perfectly fine.</li>
<li>A PS/2 keyboard.</li>
</ul>
<p>Optional extras:</p>
<ul>
<li>A USB cable (Type A/flat to Type B/square), for debugging over serial terminal and reflashing the boot loader (none of which you&#8217;ll have to do, hopefully)</li>
<li>Audio speakers (3.5mm stereo output)</li>
<li>A PS/2 mouse</li>
<li>1-2 joysticks (9-pin D, Atari/Sega standard)</li>
</ul>
<p><strong>Prepare an SD card with the necessary software.</strong> Alongside the FPGA, the board has an ARM microcontroller which comes pre-flashed with a small boot loader &#8211; when the Speccy2010 is powered up, this loads the remainder of the firmware (for both the ARM and FPGA) from the SD card. The files you need are roms.7z and the latest speccy2010-bin package from the <a href="http://code.google.com/p/speccy2010/downloads/list">Speccy2010 Google Code downloads page</a>. You&#8217;ll need something that can unpack .7z files &#8211; <a href="http://www.7-zip.org/">7-Zip</a> on Windows, or <a href="http://www.stuffit.com/mac-expander.html">Stuffit Expander</a> on Mac (also available as a free download on the Mac App Store). With everything unpacked and copied to the SD card (formatted as FAT16 or FAT32, which it almost certainly will be already), it should look like this:</p>
<pre>
|- speccy2010.bin
|- speccy2010.hlp
|- speccy2010.rbf
|- roms
    |- 48.rom
    |- pentagon.rom
    |- system.rom
    |- trdos.rom
    |- trdos503.rom
</pre>
<p>You&#8217;ll also want some actual software to run on there, of course &#8211; the Speccy2010 can load .sna snapshots, .tap and .tzx tape images, and .trd, .scl and .fdi TR-DOS disk images.</p>
<p><strong>Connect up and switch on.</strong> Insert the SD card, connect up the keyboard (it&#8217;s the socket closest to the corner) and monitor, then plug in the power. Wait 10-20 seconds for the process of flashing the firmware to complete &#8211; then, if the screen doesn&#8217;t come up right away, use one of the following key combinations to select the appropriate video output:</p>
<ul>
<li>CTRL + 1: Composite / S-Video</li>
<li>CTRL + 2: RGB SCART</li>
<li>CTRL + 3: VGA 50Hz (note: may not be supported by all VGA monitors)</li>
<li>CTRL + 4: VGA 60Hz (more compatible than VGA 50Hz, but will increase overall running speed by 20%)</li>
<li>CTRL + 5: VGA 75Hz (as above, but increases running speed by 50%)</li>
</ul>
<p>Note that the above combinations use the keys 1-5, not F1-F5. The selected option will be remembered for future start-ups. Once you have the screen up, you can use F9 to bring up the configuration menu and F12 for the file selector. Further control keys are detailed in <a href="http://matt.west.co.tt/files/speccy2010-faq/">the FAQ</a>.</p>
<p><strong>Troubleshooting:</strong> If you can&#8217;t get the display to come up, the serial console output (sent over the USB port) may give you some clues as to why not. To access this, you&#8217;ll first need to install a driver on the PC to make the Speccy2010 visible as a serial device: the snappily-titled <a href="http://www.ftdichip.com/Drivers/VCP.htm">FTDI VCP (Virtual COM Port) driver</a>. This is available for Windows, Mac and Linux, with a straightforward install process in each case. When that&#8217;s in place, attach the Speccy2010 via USB cable to your PC (with power to the Speccy2010 disconnected at this point; the USB-to-serial chip is powered entirely over USB, it would seem). On Windows, a new COM port should pop up; on Linux and Mac, a couple of new devices will appear under /dev/: <tt>/dev/tty.usbserial-A700fbVb</tt> and <tt>/dev/cu.usbserial-A700fbVb</tt>, in my case.</p>
<p>You&#8217;re now ready to connect to this new port with a terminal application &#8211; Syd suggests <a href="http://hp.vector.co.jp/authors/VA002416/teraterm.html">Tera Term</a> for Windows, and for Mac and Linux, <a href="http://www.gnu.org/software/screen/">GNU Screen</a> does the job nicely. (It&#8217;s bundled with OS X, and probably a quick package install away on Linux.) To connect over Screen, use the command line:</p>
<pre>screen /dev/tty.usbserial-A700fbVb 115200</pre>
<p>- passing in the filename to the tty device as it appears on your computer. (115200 is the transfer rate, if you&#8217;re wondering.)</p>
<p>You can now power up the Speccy2010, while keeping a watchful eye on the terminal output. (Incidentally, the FAQ specifically suggests disconnecting and reconnecting jumper XS10 &#8211; the one just behind the power connector &#8211; when you want to power up; it just cuts the 5V line. I&#8217;m not sure why this is better than unplugging / replugging, and it doesn&#8217;t seem to make any difference, but I thought I&#8217;d better mention it&#8230;) Hopefully, you&#8217;ll get the message &#8220;Speccy2010 boot ver 1.0!&#8221; followed by some diagnostics to tell you how far it&#8217;s getting through the boot-up process. If you don&#8217;t get anything at all, that could be a sign that your ARM microcontroller doesn&#8217;t have the boot loader flashed on it yet&#8230; in which case, I&#8217;ll have to refer you to the <a href="http://matt.west.co.tt/files/speccy2010-faq/">FAQ</a>. It looks like you&#8217;ll need Windows, as the command-line utility for flashing the firmware appears to be a closed-source .exe&#8230; but I didn&#8217;t need to worry about that, as mine was pre-flashed, and hopefully yours will be too &#8211; and hopefully the way that the important code is loaded from SD card will mean that we won&#8217;t have to worry about reflashing over USB in future either.</p>
<hr />
<p><a rel="license" href="http://creativecommons.org/licenses/by-nd/2.0/uk/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nd/2.0/uk/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">The Speccy2010: A Complete Guide For Non-Russian-Speakers</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://matt.west.co.tt/spectrum/speccy2010/" property="cc:attributionName" rel="cc:attributionURL">Matt Westcott</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nd/2.0/uk/">Creative Commons Attribution-NoDerivs 2.0 UK: England &#038; Wales License</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/spectrum/speccy2010/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>London Spectrum meetup, 12 February 2011</title>
		<link>http://matt.west.co.tt/events/london-spectrum-meetup-feb-2011/</link>
		<comments>http://matt.west.co.tt/events/london-spectrum-meetup-feb-2011/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 23:10:31 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Spectrum]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=207</guid>
		<description><![CDATA[It&#8217;s time once again for the denizens of comp.sys.sinclair and World Of Spectrum (along with anyone else with an unhealthy obsession with Sinclair ZX Spectrums) to meet up to discuss new developments, old games, nostalgia, crisps, beer and everything else in the world of retro-computing. The date: Saturday 12th February 2011, from 2pm. The venue: [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time once again for the denizens of <a href="http://groups.google.com/group/comp.sys.sinclair/">comp.sys.sinclair</a> and <a href="http://www.worldofspectrum.org/forums/">World Of Spectrum</a> (along with anyone else with an unhealthy obsession with Sinclair ZX Spectrums) to meet up to discuss new developments, old games, nostalgia, crisps, beer and everything else in the world of retro-computing.</p>
<p>The date: <strong>Saturday 12th February 2011</strong>, from 2pm. The venue: <strong><a href="http://www.thegipsymothgreenwich.co.uk/">The Gypsy Moth, Greenwich</a></strong>. Come along one and all!</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/events/london-spectrum-meetup-feb-2011/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Burton&#8217;s Wagon Wheels (Are Smaller Than They Used To Be)</title>
		<link>http://matt.west.co.tt/music/burtons-wagon-wheels-are-smaller-than-they-used-to-be/</link>
		<comments>http://matt.west.co.tt/music/burtons-wagon-wheels-are-smaller-than-they-used-to-be/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 19:55:53 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=200</guid>
		<description><![CDATA[In one of my rare non-FAWM outings, I&#8217;ve written a new song. A protest song. About biscuits. Burton&#8217;s Wagon Wheels (Are Smaller Than They Used To Be) by Matt Westcott Burtons Wagon Wheels are smaller than they used to be They&#8217;re taking us for suckers at the biscuit factory The PR guys deny it, but [...]]]></description>
			<content:encoded><![CDATA[<p>In one of my rare non-<a href="http://fawm.org/">FAWM</a> outings, I&#8217;ve written a new song. A protest song. About biscuits.</p>
<p><object width="480" height="290"><param name="movie" value="http://www.youtube.com/v/xFRwEtBP0Gc?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xFRwEtBP0Gc?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="290"></embed></object></p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F8055111&#038;secret_url=false"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F8055111&#038;secret_url=false" type="application/x-shockwave-flash" width="100%"></embed></object>  <span><a href="http://soundcloud.com/matt-westcott/burtons-wagon-wheels">Burton&#8217;s Wagon Wheels (Are Smaller Than They Used To Be)</a> by <a href="http://soundcloud.com/matt-westcott">Matt Westcott</a></span> </p>
<p><span id="more-200"></span></p>
<p>Burtons Wagon Wheels are smaller than they used to be<br />
They&#8217;re taking us for suckers at the biscuit factory<br />
The PR guys deny it, but any fool can see<br />
That Burtons Wagon Wheels are smaller than they used to be</p>
<p>Now the marketers at Burtons would have us all believe<br />
That it&#8217;s an artefact of questionable childhood memories<br />
And that we have recollections of eating a confection<br />
Disproportionately larger than our hands</p>
<p>But a moment&#8217;s contemplation will expose that as a lie<br />
For if it were so, then clearly it would equally apply<br />
To Penguin biscuits, door handles and other random junk<br />
But you never hear anyone complaining that those things have shrunk</p>
<p>And that&#8217;s because<br />
Burtons Wagon Wheels are smaller than they used to be<br />
They&#8217;re taking us for suckers at the biscuit factory<br />
The PR guys deny it, but any fool can see<br />
That Burtons Wagon Wheels are smaller than they used to be</p>
<p>The Wagon Wheels you get today have a radius suggestive<br />
of the typical dimensions of a Hob-Nob or digestive<br />
It&#8217;s a universal standard, that our ancestors have handed<br />
Down through history across the Western world</p>
<p>But we all know that there was one exception to this scheme<br />
&#8216;Cause otherwise, it makes no sense for it ever to have been<br />
A defining characteristic of the Wagon Wheel at all<br />
On which to question our power of recall&#8230;</p>
<p>And was there not a line in Orwell&#8217;s Nineteen Eighty-Four<br />
About how chocolate rations are reduced from what they were before?<br />
Big Brother claims that they have risen, and by feat of hypnotism<br />
The population takes him at his word</p>
<p>So don&#8217;t let us be duped by this dystopian regime<br />
Rise up to fight against the evil biscuit tyranny<br />
And force them to admit the fact that any fool can see:<br />
That Burtons Wagon Wheels are smaller than they used to be</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/burtons-wagon-wheels-are-smaller-than-they-used-to-be/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jasmid &#8211; MIDI synthesis with Javascript and HTML5 audio</title>
		<link>http://matt.west.co.tt/music/jasmid-midi-synthesis-with-javascript-and-html5-audio/</link>
		<comments>http://matt.west.co.tt/music/jasmid-midi-synthesis-with-javascript-and-html5-audio/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 23:40:41 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Demoscene]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://matt.west.co.tt/?p=190</guid>
		<description><![CDATA[The executive summary: At last weekend&#8217;s Barcamp London 8, I presented a talk entitled &#8220;Realtime audio generation for the web (because there&#8217;s not enough MIDI on webpages these days&#8221;. In it, I went over the current options for generating audio within the browser, and presented my latest hack in that direction, jasmid: a Javascript app [...]]]></description>
			<content:encoded><![CDATA[<p><strong>The executive summary:</strong> At last weekend&#8217;s <a href="http://eight.barcamplondon.org/">Barcamp London 8</a>, I presented a talk entitled &#8220;Realtime audio generation for the web (because there&#8217;s not enough MIDI on webpages these days&#8221;. In it, I went over the current options for generating audio within the browser, and presented my latest hack in that direction, <strong>jasmid</strong>: a Javascript app that can read standard MIDI files, render them to wave audio (with, at present, some <em>very</em> simple waveforms) and play them directly from the browser, completely independently of your OS&#8217;s MIDI support.</p>
<ul>
<li><a href="https://github.com/gasman/jasmid">jasmid on Github</a></li>
<li><a href="http://jsspeccy.zxdemo.org/jasmid/">Online demo</a></li>
</ul>
<p>Read on for the complete notes/transcript of the talk (in hopefully more coherent form than the talk itself &#8211; next time I promise to spend less time on the flashy demo and more time figuring out exactly what I&#8217;m going to say&#8230;)<br />
<span id="more-190"></span></p>
<p>Right now everyone&#8217;s jolly excited about the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#audio">HTML5 audio element</a>. At last we have a standard-compliant way to drop audio clips into web pages that avoids all the gunk with external plugins and replaces it with a simple tag (well, once you&#8217;ve fought through the details of which browsers support MP3 versus Ogg anyway). It has a comprehensive API to handle all the details of buffering, programatically pausing, playing and skipping and so on &#8211; but one thing it stops short of is being able to generate the audio data on the fly, within the browser.</p>
<p>Why would you want that? Well, I can&#8217;t say why <em>you&#8217;d</em> want it, but I can tell you what I&#8217;m hoping to do with it: I&#8217;m involved in the <i>demo scene</i>, a community of programmers, artists and musicians who create digital art &#8211; something roughly like music videos, but with visuals generated in real time &#8211; and I&#8217;m working on <a href="http://demozoo.org/">a forthcoming website</a> that will showcase those productions. This community originates from the days of the Commodore 64, when people cracked games and added little intro animations to promote themselves, which became more and more elaborate as rival groups tried to outdo each other, until they evolved into full-scale artistic creations and the game cracking side of things took a back seat. And among the artefacts to come out of this community is a hell of a lot of music &#8211; we&#8217;re talking hundreds of thousands of tracks, all preserved in the native formats of the Commodore 64, and the Amiga, and all sorts of other things. And it would be quite neat to be able to play all of these from within my website.</p>
<p>I&#8217;m using this site as an excuse to play around with cool technologies, and at first I figured that this was an ideal job for <a href="http://aws.amazon.com/ec2/">Amazon EC2</a> &#8211; set up a bunch of instances churning away in the background converting these files to MP3. However, when I started to learn about ways to generate audio in the browser, it made sense to take advantage of that and save myself a whole lot of up-front processing (not to mention bandwidth).</p>
<p>At the forefront of this new development is the <a href="https://wiki.mozilla.org/Audio_Data_API">Mozilla Audio Data API</a>, available in the latest nightly builds of Firefox. This extends the HTML5 audio API with a few new methods, the central ones being mozSetup &#8211; which allows you to initialise an empty audio stream with a specified sample rate and number of channels &#8211; and mozWriteAudio, which lets you pass in an array of floats representing some sample data to add to that stream. Like all good up-and-coming browser innovations, we can reasonably assume that once the Mozilla developers have got this API stable enough they&#8217;re going to submit it to WHATWG for inclusion in the HTML5 spec &#8211; but for the moment, it has somewhat limited adoption. There is a remedy for that though&#8230;</p>
<p>At my last Barcamp London, two years ago now, I gave the first public showing of <a href="http://jsspeccy.zxdemo.org">JSSpeccy</a>, my ZX Spectrum emulator written in Javascript, which has been something of a runaway internet hit &#8211; and I&#8217;ve been somewhat surprised by the number of people taking it <em>seriously</em>, rather than as the crazy pointless hack I built it as (not least, the guy who ripped it off and sold it on the App Store as the first ever iPhone Spectrum emulator, despite it running at about 30% speed *cough*). But one guy who&#8217;s picked up the concept of emulation in Javascript and taken it much further than I&#8217;d ever dreamed possible is <a href="http://benfirshman.com/">Ben Firshman</a>, who created <a href="http://benfirshman.com/projects/jsnes/">JSNES</a>, the Javascript <del datetime="2011-02-03T14:19:49+00:00">SNES</del> NES emulator, featuring a whole host of advanced optimisations and new features, including audio support.</p>
<p><img src="http://matt.west.co.tt/images/jsnes.jpg" alt="" /></p>
<p>To achieve this, he created the <a href="https://github.com/bfirsh/dynamicaudio.js">dynamicaudio.js</a> library, which sits on top of Mozilla&#8217;s Audio Data API, but also provides an invisible Flash widget for other browsers to fall back upon. Armed with this work, I was able to build the first step towards my goal: <a href="http://jsspeccy.zxdemo.org/jsmodplayer/">jsmodplayer</a>, a player for the MOD music format originally introduced on the Amiga. It&#8217;s a rather messy format to implement, with every man and his dog coming up with their own custom extensions to it in a very ad-hoc way, but at its heart it consists of a set of uncompressed wave samples (typically a second or two in length), and a script detailing when to trigger them and at what pitch. Put enough of those trigger events together, throw in some effects like volume control and pitch slide, and you have a song.</p>
<p>Now, as we all know from the Apple versus Adobe tiff, Flash is not exactly universal across the platforms we care about &#8211; so we haven&#8217;t covered all of our bases yet. However, for certain applications, there&#8217;s a possible third path (albeit one that I haven&#8217;t properly investigated yet), using another recent browser addition: <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">data: URIs</a>. Unlike typical URLs, which point to some external location that contains the data we want, a data: URI embeds that data directly, as a string of base64 or URL-encoded data. This means that we could generate a string containing a valid WAV file from Javascript (or indeed an MP3 or Ogg file, although generating those from Javascript is a little bit hardcore), and use that as the source of an &lt;audio&gt; element.</p>
<p>This does depend on us being able to generate the audio up-front before starting playback, so it&#8217;s arguably not truly &#8216;real time&#8217; &#8211; something like an emulator, which is generating audio in response to user interaction, couldn&#8217;t really do this. It&#8217;s good enough for our straightforward audio player, though.</p>
<p>For a while there was an unfortunate flaw in this plan: Chrome didn&#8217;t currently support WAV as an audio format. <a href="http://code.google.com/p/chromium/issues/detail?id=23916">The bug tracker ticket relating to this</a> featured some rather flimsy arguments defending this decision, such as &#8220;if we support WAV, people will start widely serving audio across the web as uncompressed WAV files&#8221; (um&#8230; just like everyone on the internet is using BMP files, which are supported by all major browsers, right?). Given the tendency of bug tickets to wander off onto unrelated subjects, it&#8217;s hard to tell what the eventual conclusion to this is &#8211; but if I&#8217;m reading it right, we can happily use WAVs as of Chrome 7.</p>
<p>(At this point, someone rightly mentioned that Internet Explorer imposes a 32K limit on URLs, so that won&#8217;t get you much of a wave file &#8211; especially with base64 or URL encoding to contend with. As such, all we can really do is hope that IE users will tend to have the Flash option available. Personally, I think it makes a refreshing change that we can even <em>consider</em> IE in our cutting-edge browser hacks once again&#8230;)</p>
<p>In fact, there&#8217;s another mechanism for feeding data into URLs dynamically, which I&#8217;d all but forgotten until I started preparing this talk: if you have a &#8216;javascript:&#8217; URL which returns a string when executed, that string will be used as the data. This trick was most prominently used in <a href="http://www.wolf5k.com/">Wolfenstein 5K</a> (long before the wider world caught on to the joys of Javascript size coding contests&#8230;), which constructed its display as an XBM image, an obscure text-based format. Before <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html">canvas</a> came along, I spent many happy hours trying to replicate that trick with GIF images, discovering along the way that Internet Explorer didn&#8217;t like strings containing zero bytes, which sent me down the garden path of constructing valid GIFs containing no zeros. Ah, happy days. In short, I don&#8217;t even know if this works at all with &lt;audio&gt;, and even if it does, it&#8217;s almost certainly as much of a dead end as it was back in 2004&#8230;</p>
<p><img src="http://matt.west.co.tt/images/fpc.png" alt="" /></p>
<p>One project of mine where I really <em>should</em> have seen the value of generating the audio up-front was <a href="http://matt.west.co.tt/demoscene/fake-plastic-cubes/">Fake Plastic Cubes</a>, a demo I wrote this summer to play around with the size reduction tricks I&#8217;d seen coming out of the <a href="http://10k.aneventapart.com/">10K Apart</a> and <a href="http://js1k.com/home">JS1k</a> contests, and to try and come up with something audiovisual in as small a size as possible. On the audio side, that meant ditching samples entirely, and doing the synthesis from first principles, building the sound up from plain sine waves &#8211; but in a classic case of project management fail, I spent a week building a really wonderful synthesiser framework and rushed everything else at the last minute, meaning that I had no chance to actually make something nice on top of it. As a result, it&#8217;s totally unpolished, and the animation keeps stuttering for a split second while it generates the next chunk of audio. It&#8217;s only a tiny fraction of the available processor time, but it&#8217;s enough to be very, very noticeable. I really should have just generated the entire audio track on startup and <em>then</em> kicked off the visuals &#8211; but there was no time for that, or to play around with <a href="http://www.whatwg.org/specs/web-workers/current-work/">web workers</a> which would seem to be another potential way to generate audio as a background process&#8230;</p>
<p>I also didn&#8217;t have time to compose a decent soundtrack, or experiment with the synth enough to come up with interesting sounds, or implement a vaguely sensible way to enter musical notes (as a dodgy workaround, I remapped the names of the notes in the scale to <a href="https://github.com/gasman/fakeplasticcubes/blob/master/src/synth.js">their positions on a QWERTY keyboard</a> and prodded out a melody from those</a>). Fortunately, I didn&#8217;t have to let a good routine go to waste: a week or so back, I encountered <a href="http://www.sergimansilla.com/blog/dinamically-generating-midi-in-javascript/">Sergi Mansilla&#8217;s jsmidi project</a>, which provides an easy way to create standard MIDI files from Javascript. However, it turns out that MIDI support in browsers has more or less stagnated &#8211; while wave audio goes from strength to strength, MIDI is still stuck in the world of OS-specific plugins &#8211; so there was a clear opportunity for some Javascript synthesiser love there. And so I&#8217;ve come up with <a href="https://github.com/gasman/jasmid">jasmid</a>, a JS library for reading MIDI files and playing them back through its own audio synthesis engine.</p>
<p>A MIDI file consists of a simple header, followed by a list of tracks &#8211; each of which is a list of timestamped events, which are usually note on/off events but could be a tempo change, change of instrument or various other things. The timestamps are actually a bit weird: you&#8217;d expect them to be given in something like microseconds, but they&#8217;re actually expressed as a number of &#8216;ticks&#8217;, where the MIDI file specifies a particular number of ticks per beat, and the tempo of the song is given in beats per second, which can change over time just to add further confusion. Ultimately it probably does make sense, because it means you can accurately use any rational number (within reason) as a tempo, and that&#8217;s handy for professional MIDI equipment that has to keep exact time for extended periods &#8211; it&#8217;s just an initial hurdle that you have to get over. Once you&#8217;ve got that in place, a MIDI synthesiser boils down to a set of generator functions that can emit audio waves for as long as you tell them to, and a main loop which picks events off the queue, running the generators until it&#8217;s time to process the next event.</p>
<p>For this first release, the generated sounds are not particularly interesting &#8211; just plain sine waves with a bit of attack/decay volume control applied &#8211; but now that we&#8217;ve got the initial framework in place it should be relatively straightforward to add more diverse sounds, and the synth engine should hopefully be flexible enough to support effects like harmonics and reverb.</p>
<p>Finally, as a glimpse of what&#8217;s in store for in-browser audio creation in the future, keep an eye on the <a href="http://mozillalabs.com/rainbow/">Mozilla Rainbow</a> project, which provides APIs for capturing audio and video from microphones / webcams. For the last few years I&#8217;ve been taking part in <a href="http://fawm.org/">February Album Writing Month</a>, a song writing community where collaborations over the internet play a major part &#8211; perhaps it won&#8217;t be too long until we&#8217;re doing that over a Google-Docs-style online equivalent of Audacity / GarageBand&#8230;?</p>
]]></content:encoded>
			<wfw:commentRss>http://matt.west.co.tt/music/jasmid-midi-synthesis-with-javascript-and-html5-audio/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

