<?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>Zach Archer Blog</title> <atom:link href="http://blog.zacharcher.com/feed/" rel="self" type="application/rss+xml" /><link>http://blog.zacharcher.com</link> <description>Friend to analog and digital alike</description> <lastBuildDate>Tue, 10 Jan 2012 06:24:29 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Synthetic Speech in Flash: the Source Code</title><link>http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/</link> <comments>http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/#comments</comments> <pubDate>Tue, 10 Jan 2012 05:49:27 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[as3]]></category> <category><![CDATA[code]]></category> <category><![CDATA[robots]]></category> <category><![CDATA[source]]></category> <category><![CDATA[speech]]></category> <category><![CDATA[synthetic]]></category> <category><![CDATA[talking]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=326</guid> <description><![CDATA[Remember the Flash synthetic speech demo, which turned into a talking robot app? Here's the source code: Download it! Please note: This code comes with no warranty, nor support, whatsoever. None. Zip. Nada. If your talking robots become self-aware and enslave humanity, then I will not be held responsible. But if you're in the mood [...]]]></description> <content:encoded><![CDATA[<p>Remember the <a
href="http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/">Flash synthetic speech demo</a>, which turned into a <a
href="http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/">talking robot app</a>? Here's the source code: <strong><a
href="http://zacharcher.com/lab/20120109_as3_speech/as3_speech.zip">Download it</a></strong>!</p><p><img
class="aligncenter" src="http://zacharcher.com/lab/20120109_as3_speech/supercali.png" alt="SUPERCALIFRAGILISTICEXPEALIDOSHUS" width="380" height="328" /></p><p>Please note: This code comes with no warranty, nor support, whatsoever. None. Zip. Nada. If your talking robots become self-aware and enslave humanity, then I will not be held responsible. But if you're in the mood for tinkering, here's how it's strung together:</p><ul><li>The sound is generating using <a
href="http://en.wikipedia.org/wiki/Linear_predictive_coding">Linear Predictive Coding</a> ("LPC").</li><li>First, some Python code: The <em>analyze_lpc.py</em> script analyzes <em>phonemes.dat</em> (which is just a headerless version of <em>phonemes.aif</em>). Individual phonemes are separated by moments of silence, so the script splits the sound file on those. Each phoneme is converted to LPC data, using code that I ported from <a
href="http://soundlab.cs.princeton.edu/software/rt_lpc/">the rt_lpc project</a>. I felt like I understood the mathematics 3 years ago, but I doubt I could explain it today.</li><li>Now, in Flash: Launch the <em>DictCompressor</em> application, and watch the trace messages. Click the screen to open the browser window, then select your <em>cmudict___.txt</em> pronouncing dictionary. (You can obtain the latest CMUdict <a
href="http://www.speech.cs.cmu.edu/cgi-bin/cmudict">here</a>.) Flash will convert this to a (smaller) <em>cmudict.dat</em> file, which is what <em>LPCsynth.swf</em> loads.</li><li><em>LPCsynth</em> is the application that talks. The <em>LPCSynthHarness.sayItNow()</em> method creates an array of <em>LPCFrames</em>, which are "spoken" in the <em>sampleData()</em> method.  This was never intended for public distribution, so the code is not exactly stellar (the talking bit should be extracted into its own class).</li></ul><p>Is this interesting? Did your Flash Player become self-aware after hearing its own voice? Let me know!</p><p>It's funny, originally this was intended for the <a
href="http://controlzinc.com/">controlzinc.com</a> website. The robot voice would sing as you clicked, crooning about your mousing habits. I still can't decide if that idea was brilliant, or terrible.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/&amp;title=Synthetic Speech in Flash: the Source Code' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Synthetic Speech in Flash: the Source Code+http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Synthetic Speech in Flash: the Source Code&amp;uri=http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Book Review: Mixing Secrets For the Small Studio</title><link>http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/</link> <comments>http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/#comments</comments> <pubDate>Sun, 25 Sep 2011 18:51:10 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Music]]></category> <category><![CDATA[book]]></category> <category><![CDATA[eq]]></category> <category><![CDATA[mixing]]></category> <category><![CDATA[review]]></category> <category><![CDATA[studio]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=320</guid> <description><![CDATA[This book, written by producer Mike Senior, is fantastic: If only Mixing Secrets For The Small Studio had existed 10 years ago, my music would have been impeccable! (Well, I like to think so.) This book is a magical tome for anyone who records or produces music on a budget. It's packed with big reveals, [...]]]></description> <content:encoded><![CDATA[<p>This book, written by producer Mike Senior, is fantastic:</p><p
style="text-align: center;"><img
class="aligncenter" src="http://zacharcher.com/blog_pics/2011/mixing-secrets-for-the-small-studio.jpg" alt="" width="320" height="480" /></p><p>If only <em>Mixing Secrets For The Small Studio</em> had existed 10 years ago, my music would have been impeccable! (Well, I like to think so.) This book is a magical tome for anyone who records or produces music on a budget. It's packed with big reveals, and explains the science behind each mixing technique. Forget the accumulated hit-or-miss wisdom of the internet; after reading this book, I found that I could produce substantially better mixes <em>immediately</em>. That's amazing. (My mixes still aren't <em>great</em>, but I'm working on it!)</p><p>Here are my favorite takeaways from the 20 chapters. I'm writing this to lock these concepts in my head. I'm skimming lots of material, because there's so much valuable information packed into this book, I can't possibly recap all of it.</p><p><span
id="more-320"></span><strong>Part 1: Hearing and Listening</strong></p><p>My Rokit KRK-8 studio monitors are distorting my mixes. They're "ported," meaning they have an open-air port cut into the body. The manufacturer claims that this helps the air move freely. As a consequence, this creates noisy air turbulence, and muddies the bass frequencies. That's bad. The book suggests plugging the ports with socks; the sound might become clearer! Try it, listen carefully, trust your ears...</p><p>The goal of soundproofing your studio is to tame reverberant frequencies. You don't want an echoless space. Also, stereo is overrated, try mixing in mono. If this advice sounds heretical, consider the typical consumer's listening environment: Computer speakers, stuffed in a bookcase, clear across the room. Car speakers, blaring inside a noisy, reflective space. Restaurant speakers, bolted to the ceiling in semi-random locations. Your mix <em>should</em> sound good in mono, because most people will <em>never</em> give it a proper stereo listening. And there will always be room reflections in any listening space, so don't completely Nerf your room. Allow your walls to sweeten the sound.</p><p>Headphones are a special exception. The book cautions that some headphones have inadequate bass response (as do some studio monitors, of course). Music may sound oddly "clean" without the natural reflections of a room. Personally, I love modern headphones. I bought a pair of Beyerdynamic DT 770 headphones this summer. It was the single best musical purchase I've ever made. They have clear, deep bass response, which rattles my skull a bit. The treble is impressive, and it reaches very high into the range of human hearing. I can finally hear the full audio spectrum (unlike running my Rokit KRK-8's through a Mackie mixer), so the headphones have been a godsend for me. I can't imagine returning to my KRK-8's in my oddly-shaped studio space.</p><p>The biggest takeaway from this section is learning how to use other songs as reference material. Create a workflow where you can rapidly switch between your mix, and several reference tracks, to keep your ears fresh. Listen to how your mix compares with the professional's. The author repeats this throughout the book: It is possible to create stunning mixes in a small studio environment. Checking your work with professional mixes is crucial.</p><p><strong>Part 2: Mix Preparation</strong></p><p>It's okay to use pitch correction, rhythm correction (such as Ableton Live's time markers), recreate the bassline on a synthesizer and mix it in, or rearrange the band's song. Oh, yes indeed. They're paying you to produce good music, and if that means fixing their mistakes, and using smoke and mirrors, then so be it!</p><p>Consider the overall flow of the song. Each instance of the chorus could have a different intensity. Perhaps they'll get (perceptably) louder, except for the "drop chorus" at the end: Play the chorus once, with some instruments cut out, then play another chorus with <em>everything</em> driving the song home.</p><p>You may need to "mult" recorded tracks, which means splitting them up into separate layers, with different processing for each layer. The rhythm guitar should subtly slip into the background when the vocalist is singing, for example. Now that I'm aware of multing, I can't help but hear it used everywhere!</p><p><strong>Part 3: Balance</strong></p><p>Every layer will need a high-pass filter, probably no steeper than 18db/octave. Raise the filter frequency until the track feels like something is missing, then lower the frequency a bit. This will liberate the precious low-frequency spaces, so the kick drum and bass won't have to fight the other instruments in a bath of bass mud.</p><p>Now it's time to balance the levels. Mute every track. Slowly unmute the trocks, one at a time. Start with the most important section; start with the most important instrument. Adjust the track's volume so it fits with the mix, then don't touch it afterwards. After you've leveled every track, your mix should now sound <em>pretty good</em>.</p><p>Compression is primarily used to stabilize the balance of individual layers. Some tracks will have a steady balance without compression, and that's okay! Leave them alone. Other tracks may need one compressor to reduce momentary spikes in amplitude; another compressor to help even out the amplitudes of individual notes; etc. Try using parallel compression (aka "New York compression"), sending a track through a heavy compressor on a second channel, which will help even out the sound yet preserve its original character.</p><p>Expanders (and gates) are typically not essential. If they're used, put them before compressors in your effects chain. If your drum beat needs more punch, try sending the track to a parallel channel, gating it (to isolate just the attacks), and applying EQ and a little distortion before mixing it back in.</p><p>Equalization ("EQ") is a broad topic. Before delving into it, I'll disagree with one point up front: The book claims that any EQ plugin is about as good as any other. Most modern DAWs are equipped with plugins that provide low-pass, high-pass, shelving, peaking, and notch filters. My opinion is that <em>some EQ plugins sound substantially better than others</em>. I have never enjoyed the sound of Ableton Live's EQ 8, I feel that it sucks precious high-end frequencies and detail out of anything it touches. EQ 3 is better, although it's less flexible, and the filter curves are steeper, which is not always what you want. Shameless product placement: My new favorite is <a
href="http://www.tone2.com/html/filterbank3_vsti_vst_au_synthe.html">Tone2's FilterBank3</a>.</p><p>To EQ the mix, mute every track, then unmute and EQ them in order of importance. You're trying to avoid frequency masking, a phenomenon where layers obscure each other. Avoid graphic EQ, and try shelving filters before using peaks. Use low "Q" values, so your filters will have wide, smooth curves.</p><p>Bass instruments: Try adding high-end brightness to the bass guitar. Try reducing the kick drum around 400hz, creating a hole for the bass guitar to punch through.</p><p>If a track's dynamics aren't doing a good job, apply EQ before the dynamics. (It's not uncommon to use both pre- and post-dynamics EQ, although this is more difficult to wrap one's head around.)</p><p>Linear EQ should generally be avoided, since it smears the clarity &amp; definition of transients (momentary bursts of sound, such as drum attacks).</p><p>And, this chapter answered an old riddle for me: Why are we told to use EQ cuts, and avoid EQ boosts? Because when you apply EQ to a range of frequencies, that frequency range suffers phase alterations. This can rob sounds of their clarity. As you boost phase-altered frequencies, you're emphasizing muddier, out-of-phase frequencies. So a high-shelf cut (with a gain after it) really is preferable to the "equivalent" low-shelf boost. In a multi-mic environment, EQ boosts can be catastrophic, since instruments will leak into neighboring microphones with slight delays (i.e. different phases!), and may induce bad comb filter effects. Thank you, Mike Senior. I salute you for your clear explanation.</p><p>This surprised me: distortion is often used as a mixing tool! EQ can only modify frequencies that already exist, whereas distortion filters can add brightness and sparkle to the high-end. If your distortion plugin lacks a wet-dry control, the book suggests using parallel processing, by sending the track to an effects channel, and mixing it back in.</p><p>Multiband dynamics plugins have their uses, but are "mostly just an extension of what we've already covered in previous chapters." If you're clever, there are ways to achieve multiband dynamic effects without a dedicated plugin. For instance, if your bass guitar notes have uneven sustains, try extracting the lowest frequencies using a low-pass filter, and then compressing those, and mixing them back in. Watch out for a "hollow" quality, which indicates that phase artifacts are entering the mix.</p><p>Side-chained dynamics can be useful. The book explains "ducking," which is akin to extreme side-chained compression: When the vocalist is singing louder than a certain threshold, the guitar "ducks" a fixed amount. The brilliant thing is, if you don't have a ducking filter, you can create one using a side-chained gate: Send the guitar through a gate (side-chained to the vocals), and then <em>invert the output</em>. When gate opens, the inverted signal mixes with the original guitar channel and <em>reduces</em> the overall amplitude. Amazing. You can get creative, too: Try adding a linear-phase high-pass filter to the gate's output, so only the high frequencies duck out when the vocals are active. You get the idea.</p><p><strong>Part 4: Sweetening to taste</strong></p><p>Reverb, chorus, and delays cannot salvage a bad mix. However, they can sweeten a good mix, and make it great.</p><p>My big takeaway from the chapter on reverbs is that you can move instruments away from the foreground, into the background by sending them through a common "blend reverb." The reverb should have about 10-20ms of predelay. Reverbs <em>should</em> be CPU-intensive, as the better ones use lots of simulated reflections, and this requires more CPU power.</p><p>My big takeaway from the chapter on delays is that reverbs are overrated! Delays offer the same benefits as reverbs, but occupy less "space" in the mix.</p><p>The chapter on stereo enhancement is extensive, but the main point is that stereo <em>width</em> is more important than stereo <em>panning</em>. There are a number of ways to achieve stereo width effects using plugins (even rotary speaker plugins are discussed!). If the guitarist plays the same riff repeatedly, try hard-panning two instances of the riff, left and right. Try an M&amp;S plugin, which splits a layer into the sum and stereo difference; pan the sum to the center, and apply all the crazy effects you want to the difference. Try adding some stereo "room tone," which can be a recording of tape hiss, background noise in a room, or the crackling of a vinyl record. Try duplicating the vocals, pitch shifting them a few cents apart, and panning them hard left &amp; right.</p><p>Finally, there's a chapter on the "endgame," which is final compression, equalization, and automating individual notes &amp; transients by hand. The big shocker for me was that <em>a little hard clipping is acceptable</em>. This is used in commercial music, and it can add a little sparkle to the sound. That's wild.</p><p>Definitely, definitely reference your mix with other people's tracks. Try sitting in silence for a minute, and hearing the song in your mind. Now play your mix; does it sound like what's in your head?</p><p>The book recommends a myriad of useful plugins, including shareware and freeware! The pages are also sprinkled with creative advice from professional producers.</p><p>Really, if you produce music at home, you're insane if you skip this book. It really is that enlightening. Get it! Use it! Everyone deserves to make high-quality music, and it can be done on the cheap with today's technology.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/&amp;title=Book Review: Mixing Secrets For the Small Studio' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Book Review: Mixing Secrets For the Small Studio+http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Book Review: Mixing Secrets For the Small Studio&amp;uri=http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/09/25/book-review-mixing-secrets-for-the-small-studio/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>My Midines Review: It Never Arrived</title><link>http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/</link> <comments>http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/#comments</comments> <pubDate>Wed, 21 Sep 2011 21:18:03 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[8-bit]]></category> <category><![CDATA[midines]]></category> <category><![CDATA[nes]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=313</guid> <description><![CDATA[Chris Kann, the owner of wayfar.org, sells a device called the Midines. It's a Nintendo cartridge that plays the Nintendo Entertainment System like a musical instrument, I kid you not. You insert the Midines cartridge into your NES, plug MIDI cables into the Midines, and off you go, into a world of bloops and blips. [...]]]></description> <content:encoded><![CDATA[<p>Chris Kann, the owner of wayfar.org, sells a device called the <a
href="http://www.wayfar.net/0xf00000_overview.php">Midines</a>. It's a Nintendo cartridge that plays the Nintendo Entertainment System like a musical instrument, I kid you not. You insert the Midines cartridge into your NES, plug MIDI cables into the Midines, and off you go, into a world of bloops and blips.</p><p><img
class="aligncenter" title="The Midines probably looks like this" src="http://zacharcher.com/lab/20110921_nes_instruments/midines_never_arrived.jpeg" alt="The Midines probably looks like this" width="400" height="300" /></p><p>I paid $99 for a Midines in the year 2008, and... <em>I have still not received it</em>. I have sent Chris Kann at least a dozen emails, and never received a single reply. In 2008, I did track him down on IRC -- he mentioned that he was going through some hard times, but now it is 3 years later, and he has been completely silent.</p><p><span
id="more-313"></span></p><p>I wondered if I offended him personally, but it turns out that <a
href="https://8bc.org/forums/viewtopic.php?id=21206">many</a>, <a
href="http://createdigitalmusic.com/2006/02/analog-industries-gets-a-midines-nintendo-music-cart/">many</a>, <a
href="https://8bc.org/forums/viewtopic.php?id=25870">many</a>, <a
href="https://8bc.org/forums/viewtopic.php?id=14061">many</a> (etc) people have sent money, and received nothing. A critical mass of people complained to PayPal, who finally shut down his account, so he switched to using Google Cart Service this year.</p><p>If I receive a Midines, then I'll be happy to give it a proper review! In the meantime, I urge everyone to use their own research &amp; judgment before sending money to strangers.</p><p>Meanwhile, whether you own a Midines or not, you can make NES-style chiptunes for free. I created an Ableton Live Pack with all 5 NES waveforms: <a
href="http://zacharcher.com/lab/20110921_nes_instruments/NES%20Instruments%20-%20Ableton%20Live%20Pack.zip">Download it here</a>. You can also <a
href="http://zacharcher.com/lab/20110921_nes_instruments/NES%20Waveforms.zip">download the raw AIFFs</a>. Here's a silly track that demonstrates how it sounds:</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%2F23855238"></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%2F23855238" type="application/x-shockwave-flash" width="100%"></embed></object> <span><a
href="http://soundcloud.com/2mm/nes-instruments">NES Instruments</a> by <a
href="http://soundcloud.com/2mm">Too Many Moths</a></span></p><p>The 5 waveforms are: 1-bit noise (the drum beat), a 4-bit triangle wave (the bass), and pulse waves at three different widths: 50%, 25%, and 12.5%. Here's how the pulses look, next to the noise:</p><p><img
alt="" src="http://zacharcher.com/lab/20110921_nes_instruments/nes_waveforms.png" title="Some NES Waveforms" class="aligncenter" width="443" height="350" /></p><p>The triangle wave is a bit tricky. The NES provides 4-bit volume control for the other channels, but the triangle wave always plays at maximum volume. In my Live Pack, I generated a triangle wave using Operator, downsampled it using Redux, and then filtered the high frequencies to curb the Redux artifacts. This was a subjective process, I tweaked the filter until it sounded correct.</p><p>I recommend altering the instrument envelopes, to create smooth attacks and gradual delays. Also, try using vibrato and tremelo (changing the pitch or amplitude with an LFO). This will improve the character of the instruments immensely.</p><p>If you want a more authentic sound, try limiting yourself to 2 pulse channels at a time, since that's all the NES can support. You can also send the instruments through convolution reverb, using a <a
href="http://fokkie.home.xs4all.nl/IR.htm">small speaker impulse</a>. This may sound more like an 1980's television speaker. Enjoy!</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/&amp;title=My Midines Review: It Never Arrived' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=My Midines Review: It Never Arrived+http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=My Midines Review: It Never Arrived&amp;uri=http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/09/21/my-midines-review-it-never-arrived/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Son of Strange Attractors</title><link>http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/</link> <comments>http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/#comments</comments> <pubDate>Sun, 17 Apr 2011 07:33:40 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Graphics]]></category> <category><![CDATA[attractors]]></category> <category><![CDATA[strange]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=306</guid> <description><![CDATA[I rewrote my strange attractor generator, in Flash: Try it. Click to generate new attractors. The attractor coefficients are still chosen randomly. But now, attractors that explode/collapse are rejected. Also, attractors that create "boring" shapes (by drawing the same pixels repeatedly) are discarded. It's a little slow, but I'm sure the speed could be improved using [...]]]></description> <content:encoded><![CDATA[<p>I rewrote my strange attractor generator, in Flash:</p><p
style="text-align: center;"><a
href="http://zacharcher.com/lab/20110416_attractor/attractor.swf"><img
class="aligncenter" title="Strange Attractor" src="http://zacharcher.com/lab/20110416_attractor/attractor_thumb.png" alt="" width="327" height="335" /></a></p><p
style="text-align: left;"><a
href="http://zacharcher.com/lab/20110416_attractor/attractor.swf">Try it</a>. Click to generate new attractors.</p><p
style="text-align: left;">The attractor coefficients are still chosen randomly. But now, attractors that explode/collapse are rejected. Also, attractors that create "boring" shapes (by drawing the same pixels repeatedly) are discarded. It's a little slow, but I'm sure the speed could be improved using Pixel Bender.</p><p
style="text-align: left;">Also, <a
href="http://zacharcher.com/lab/20110416_attractor/attractor_source.zip">here's the source code</a>. (Compile with Flash CS5.)</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/&amp;title=Son of Strange Attractors' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Son of Strange Attractors+http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Son of Strange Attractors&amp;uri=http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/04/16/son-of-strange-attractors/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Video Reel 2011</title><link>http://blog.zacharcher.com/2011/04/15/video_reel_2011/</link> <comments>http://blog.zacharcher.com/2011/04/15/video_reel_2011/#comments</comments> <pubDate>Sat, 16 Apr 2011 07:04:44 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Games]]></category> <category><![CDATA[Graphics]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[interactive]]></category> <category><![CDATA[moths]]></category> <category><![CDATA[reel]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=291</guid> <description><![CDATA[Yes indeed, I created my own showreel! Watch: regular, or HD version. (Vimeo, 4:00) The clips have a bias towards art and animation, because: 1). It shows well in a video, 2). This reel was created for an application to an artist's colony. (More on that later.) The intro &#38; outro animations (the flying moths) [...]]]></description> <content:encoded><![CDATA[<p>Yes indeed, I created my own showreel!</p><p
style="text-align: center;"><a
href="http://vimeo.com/22465804"><img
class="aligncenter" title="A few moths" src="http://zacharcher.com/blog_pics/2011/moth_animation_thumb.jpg" alt="" width="368" height="275" /></a></p><p>Watch: <a
href="http://vimeo.com/22308668">regular</a>, or <a
href="http://vimeo.com/22465804">HD version</a>. (Vimeo, 4:00)</p><p>The clips have a bias towards art and animation, because: 1). It shows well in a video, 2). This reel was created for an application to an artist's colony. (More on that later.)</p><p><span
id="more-291"></span>The intro &amp; outro animations (the flying moths) were created specifically for the reel. They're my favorite clips, yet they took less than a day to assemble. The moths were left-over from an old project (you'll see an experimental <a
href="http://soundcloud.com/2mm">Too Many Moths</a> interface within the video), and I felt the convergence motion was a strong opener.</p><p>The moths were composited in Flash. They were arranged semi-randomly, then the image was "baked" onto their wings &amp; body. I flew them backwards, and recorded their positions on each frame. Then I reset the moths and flew them forward, again tracking their flight paths.</p><p>Actually, this was done in memory, so it was very quick. My laptop needed 3 seconds to arrange, bake, &amp; move 120 moths. Then the harness presented me with the frozen frame, so I could evaluate how well the moths covered the images. If the coverage was bad, I hit a key to build new moths from scratch.</p><p>When I found a nice arrangement, I hit another key which stepped through the animation, and rendered each frame at a ridiculously high resolution (2160x1440, to cope with scaling problems in Adobe Premiere, unfortunately). The frames were <a
href="https://github.com/mikechambers/as3corelib">encoded as .PNG's</a> and <a
href="http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/">uploaded to a PHP script running on localhost</a>, which saved the 200+ images to disk. The intro took about 20 minutes to render &amp; export. The outro, being more complicated, took over an hour.</p><p>Looking at the reel, I'm happy to present so many types of work — animation, audio programming, visual design, interactives, games, kiosks, websites. These four years have been amazing.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/04/15/video_reel_2011/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/04/15/video_reel_2011/&amp;title=Video Reel 2011' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Video Reel 2011+http://blog.zacharcher.com/2011/04/15/video_reel_2011/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Video Reel 2011&amp;uri=http://blog.zacharcher.com/2011/04/15/video_reel_2011/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/04/15/video_reel_2011/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/04/15/video_reel_2011/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>A Formant Sequencer in Flash</title><link>http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/</link> <comments>http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/#comments</comments> <pubDate>Tue, 15 Mar 2011 01:12:10 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[editor]]></category> <category><![CDATA[formant]]></category> <category><![CDATA[fs1r]]></category> <category><![CDATA[synthesis]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=284</guid> <description><![CDATA[I started an open source project: fseq-flash is a formant sequence editor. Current features include: Import AIFF files Audition and edit formant sequences in real time Export .syx files for the Yamaha FS1R Click to launch. Press the space bar to play the sound. You can push your formant sequence to the Yamaha FS1R, using [...]]]></description> <content:encoded><![CDATA[<p>I started an open source project: <a
href="http://code.google.com/p/fseq-flash/">fseq-flash</a> is a formant sequence editor. Current features include:</p><ul><li>Import AIFF files</li><li>Audition and edit formant sequences in real time</li><li>Export .syx files for the <a
href="http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/">Yamaha FS1R</a></li></ul><p
style="text-align: center;"><a
title="fseq-flash" href="http://zacharcher.com/lab/fseq/fseq-flash.html"><img
class=" aligncenter" title="Import an AIFF, convert to Formant Sequence" src="http://zacharcher.com/lab/fseq/screenshots/fseq_import.png" alt="" width="408" height="341" /></a></p><p><a
title="fseq-flash" href="http://zacharcher.com/lab/fseq/fseq-flash.html">Click to launch. Press the space bar to play the sound.</a></p><p>You can push your formant sequence to the Yamaha FS1R, using software such as <a
href="http://synth-voice.sakura.ne.jp/fs1r_editor_english.html">K_Take's FS1R Editor</a>. Click the "Save .syx" button, and follow the instructions in K_Take's documentation. This is a lot of fun, and breathes new life into the FS1R.</p><p>This project became much deeper than anticipated! The code includes FFT analysis (thanks <a
href="http://gerrybeauregard.wordpress.com/2010/08/03/an-fft-in-as3/">Gerry Beauregard</a>), pitch detection, a formant detection algorithm, and an AIFF parser to read AIFF files. The interface was a challenge to design and implement, and there are still many unfinished features (see the <a
href="http://code.google.com/p/fseq-flash/issues/list">issues list</a>).</p><p>My energy is shifting to other work, so I'll enhance fseq-flash when time permits.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/&amp;title=A Formant Sequencer in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=A Formant Sequencer in Flash+http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=A Formant Sequencer in Flash&amp;uri=http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/03/14/a-formant-sequence-editor-in-flash/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Dissecting the Korg Radias</title><link>http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/</link> <comments>http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/#comments</comments> <pubDate>Fri, 04 Mar 2011 22:41:28 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[wordpress]]></category> <category><![CDATA[korg]]></category> <category><![CDATA[radias]]></category> <category><![CDATA[synthesizer]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=270</guid> <description><![CDATA[The Korg Radias synthesizer was released in 2006, discontinued after a 4-year run, and seems to have polarized all its users. Some dismiss it as "digital crap", others hail it as a "future classic". Who is right? Are these people snobby analog purists? Is the other group Korg's minions, paid to drum up favor for [...]]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter" title="Korg Radias" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/korg_radias.jpeg" alt="" width="600" height="231" /></p><p>The Korg Radias synthesizer was released in 2006, discontinued after a 4-year run, and seems to have polarized all its users. Some dismiss it as "digital crap", others hail it as a "future classic". Who is right? Are these people snobby analog purists? Is the other group Korg's minions, paid to drum up favor for this little silver beast?</p><p><span
id="more-270"></span></p><p>I purchased the rack-mount model, the Radias-R, in 2006. I was relatively new to the world of "virtual analog" synthesis, and the sound of the Radias seduced me because it was so <em>different</em>. Think: bright, smooth, icy, crystalline, electrical.</p><p>There are many reasons to appreciate this synth. I'll summarize a few, because I want to skip to the heart of this post: The Radias contains 64 sampled waveforms ("SynthPCM"), and they're are a lovely, creative bunch, with lots of rich, cybernetic character. (Someone enjoyed designing these, I bet.) The comb filter is surprisingly useful and rich. Korg's free editing software is a joy to use.</p><p>Other features are likable, despite a few flaws: The 39 (!) knobs on the front panel don't rotate endlessly. The insert effects are impressive, but some of the best effects (the amp simulators) are restricted to monoaural output. The unison &amp; stereo spread features are great, but you can't target them via the modulation matrix (yet you can twist those knobs in realtime).</p><p>There's also a snappy vocoder, which can vocode live input, or record input as "formant motion" and play it back. Unfortunately, recording is difficult, and must be triggered on the hardware. You can't scrub, or change the formant motion speed. The Radias can store 16 formant motions, but only 8 presets are provided. I hate to admit this, but most of them are tacky... (One of the presets speaks, "Yo! Everybody in the house, say 'Raaaaadias!'")</p><h3>How Does It Sound?</h3><p>The most important feature of the Radias -- which you will either love or hate -- is the character of its sound. My opinion is that anyone who describes the Radias as "deep" or "warm" is wrong, just plain wrong. The Radias is the opposite of warm, fuzzy analog. It is deeply cold, in an air-sanitizing sort of way. If iciness can be sexy, this is it.</p><p>The sound has a certain sonic distance, as if the phase of one speaker is inverted (but of course, it's not). The basic waveforms seem a bit sterile, even after summoning some analog trickery (detuning the oscillators, etc.) The sound is so smooth that it's practically transparent. This synth sits well in the background. With its bright character, I've been able to drop it into many mixes, and it magically sits well with minimal equalization. But my attempts to feature the Radias as the frontman have never felt satisfactory.</p><p>How did Korg craft this particular sound? I ran some experiments to figure this out. Here is my conclusion:</p><p><em>In most cases, the waveforms are not synthesized in realtime.</em><em> They're pre-sampled.</em></p><h3>The Formant provides a clue</h3><p>The Radias has 9 oscillator types, including a <a
href="http://en.wikipedia.org/wiki/Formant">Formant</a> oscillator. (A formant is similar to a bandpassed sawtooth wave.) Here's the spectrum of a formant produced by the Radias, with the narrowest formant width available. (This spectrum was analyzed in Ableton Live.) This looks acceptable, you can see the prominent peak around 800hz:</p><p><img
class="aligncenter" title="Radias formant (1)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/formant1.png" alt="" width="283" height="168" /></p><p>However, when we increase the formant width, instead of producing a wider hump ... The peak splits into two peaks, with the same narrow widths as before:</p><p><img
class="aligncenter" title="Radias formant (2)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/formant2.png" alt="" width="283" height="168" /></p><p>By increasing the formant width further, the peaks move even farther apart:</p><p><img
class="aligncenter" title="Radias formant (3)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/formant3.png" alt="" width="283" height="168" /></p><p>Although the sound is pleasant, this is not a true formant. This behavior indicates that the Radias' "formant" is actually composed of two waveforms. These waveforms have been pre-sampled at various resonant peaks. The Radias produces its "formant" by playing two of these samples simultaneously.</p><h3>The Sawtooth misbehaves</h3><p>Another Radias oscillator type is the Sawtooth wave. When played at mid-range and high frequencies, the Radias delivers the expected sound -- a series of overtones marching up to infinity:</p><p><img
class="aligncenter" title="Radias sawtooth (1)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/saw1.png" alt="" width="283" height="168" /></p><p>But something undesirable happens when we move down the keyboard. When playing lower notes, the high-end treble frequencies roll off:</p><p
style="text-align: center;"><img
class="aligncenter" title="Radias sawtooth (2)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/saw2.png" alt="" width="283" height="168" /></p><p>Further down, it sounds even more muffled:</p><p><img
class="aligncenter" title="Radias sawtooth (3)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/saw3.png" alt="" width="283" height="168" /></p><p><img
class="aligncenter" title="Radias sawtooth (4)" src="http://zacharcher.com/blog_pics/2011/radias_spectrums/saw4.png" alt="" width="283" height="168" /></p><p>The Sawtooth waves are not being generated in realtime. They, too, are sampled. This sort of frequency roll-off implies that a sample is being played at a low frequency, and interpolated (a.k.a. "anti-aliased") to smooth the output. I'm not sure which <a
href="http://en.wikipedia.org/wiki/Window_function">window function</a> Korg chose for the interpolation, but it is the driving force behind the Radias' character, as it filters every sound. Also note that the other fundamental waveforms (Square, Triangle and Sine) are sampled as well.</p><p>I suspect that waveform modulations (such as square wave's pulse width modulation) may be pre-sampled as well, since they exhibit the same roll-off. By sweeping the pulse width, the Radias may be interpolating between waveforms (like using <a
href="http://en.wikipedia.org/wiki/Wavetable_synthesis">wavetables</a>). I can't seem to produce an audio demo to support this claim, so the wavetables may have hundreds of samples in them, too many for the human ear to discern.</p><p>However, the two effects based on frequency modulation ("Cross" and "VPM") do modulate in realtime. They produce appropriate spectrums, even when the oscillators run at low frequencies.</p><p>The Radias features a "morphing" filter, which can move between two filter shapes (for example, a lowpass and a highpass). This is probably achieved by processing the incoming signal with two "cardinal" filters (LPF24, LPF12, HPF, or BPF), and mixing their results together. I can't prove this, but the spaces between the cardinal points seem a little dull, as if phase artifacts are creeping into the treble, or the anti-aliasing artifacts are doubled.</p><p>These experiments helped me understand how the Radias acquired its sound. Short, single-cycle waveforms are looped and anti-aliased, resulting in smooth, hygenic timbres. Some of the longer samples (in the "SynthPCM" group) have more density, but they're still filtered by the anti-aliasing algorithm, which makes them sound airy and hollow. The Unison and Analog Detune features can add density, but in my experience, they don't add much thickness or richness, as it's merely playing multiple copies of the same smoothed waveform.</p><p>Hopefully this post doesn't read like Radias-bashing. I was more interested to discover Korg's tricks than anything else. The Radias is suited to some very specific genres and roles, and I wouldn't recommend it to everyone. Still, the sweet GUI editor makes this the most "fun", accessible synth in my collection, and I keep returning to the Radias for this reason alone.</p><p>To hear some creative Radias patches, check out Jexus' great YouTube demos: <a
href="http://www.youtube.com/watch?v=9c4FdD2_ucc">part 1</a>, <a
href="http://www.youtube.com/watch?v=peqliOuxhrM">part 2</a>.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/&amp;title=Dissecting the Korg Radias' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Dissecting the Korg Radias+http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Dissecting the Korg Radias&amp;uri=http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2011/03/04/dissecting-the-korg-radias/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Filtered Noise Sequencer</title><link>http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/</link> <comments>http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/#comments</comments> <pubDate>Fri, 31 Dec 2010 01:46:26 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[wordpress]]></category> <category><![CDATA[bandpass]]></category> <category><![CDATA[filtered]]></category> <category><![CDATA[noise]]></category> <category><![CDATA[sequencer]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=255</guid> <description><![CDATA[Here's something fun -- I made a 16-step sequencer in Flash, that plays filtered noise (or sine waves, when the filter is narrow): Filtered Noise Sequencer Drag and resize the blue blocks to change the filter frequency and width. This sequencer is not using expensive bandpass filters. The oscillators are sine waves, which are frequency [...]]]></description> <content:encoded><![CDATA[<p>Here's something fun -- I made a 16-step sequencer in Flash, that plays filtered noise (or sine waves, when the filter is narrow):</p><p
style="text-align: center;"><a
href="http://zacharcher.com/lab/20101230_noise_seq/noise_seq.html"><img
class="aligncenter" title="Filtered Noise Sequencer!" src="http://zacharcher.com/lab/20101230_noise_seq/noise_seq_thumb.png" alt="" width="324" height="255" /></a><br
/> <a
href="http://zacharcher.com/lab/20101230_noise_seq/noise_seq.html">Filtered Noise Sequencer</a></p><p
style="text-align: left;">Drag and resize the blue blocks to change the filter frequency and width.</p><p
style="text-align: left;">This sequencer is not using expensive bandpass filters. The oscillators are sine waves, which are <a
href="http://en.wikipedia.org/wiki/Frequency_modulation_synthesis">frequency modulated</a> with white noise. It may not sound inherently musical, but you can produce great hihats, bass thuds, and airy pitched noises.</p><p
style="text-align: left;">Here's the <a
href="http://zacharcher.com/lab/20101230_noise_seq/noise_seq.zip">source code</a>. (Requires Flash CS5 to compile.) Have fun!</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/&amp;title=Filtered Noise Sequencer' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Filtered Noise Sequencer+http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Filtered Noise Sequencer&amp;uri=http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/12/30/filtered-noise-sequencer/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>A Curious Lack of Light</title><link>http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/</link> <comments>http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/#comments</comments> <pubDate>Wed, 22 Dec 2010 05:28:41 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Music]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[wordpress]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=248</guid> <description><![CDATA[A winter solstice, a lunar eclipse, and a new Too Many Moths EP by yours truly... Three tracks. Enjoy the industrial dubbiness! A Curious Lack of Light by tooManyMoths More&#160;&#187;]]></description> <content:encoded><![CDATA[<p>A winter solstice, a lunar eclipse, and a new Too Many Moths EP by yours truly... Three tracks. Enjoy the industrial dubbiness!</p><p><object
height="225" width="100%"><param
name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F485249"></param><param
name="allowscriptaccess" value="always"></param> <embed
allowscriptaccess="always" height="225" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F485249" type="application/x-shockwave-flash" width="100%"></embed></object><br/><br
/> <span><a
href="http://soundcloud.com/2mm/sets/a-curious-lack-of-light">A Curious Lack of Light</a> by <a
href="http://soundcloud.com/2mm">tooManyMoths</a></span></p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/&amp;title=A Curious Lack of Light' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=A Curious Lack of Light+http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=A Curious Lack of Light&amp;uri=http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/12/21/a-curious-lack-of-light/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Twang&#8230; in Flash?!</title><link>http://blog.zacharcher.com/2010/09/27/twang-in-flash/</link> <comments>http://blog.zacharcher.com/2010/09/27/twang-in-flash/#comments</comments> <pubDate>Mon, 27 Sep 2010 22:02:32 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[twang]]></category> <category><![CDATA[twang player]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=241</guid> <description><![CDATA[Yep, this is a "Twang Player" prototype, built in Flash. There's only one embedded song, a groggy rendition of the ditty from the first video: (click to launch) The next version of Twang will record &#38; save songs (this is done), and share them in some capacity (a bit more complicated). So that's where the [...]]]></description> <content:encoded><![CDATA[<p>Yep, this is a "Twang Player" prototype, built in Flash. There's only one embedded song, a groggy rendition of the ditty from the <a
href="http://www.youtube.com/watch?v=jnCMg6MAu8E">first video</a>:</p><p
style="text-align: center;"><a
href="http://zacharcher.com/lab/twang/flash/twang_player.swf"><img
class="aligncenter" title="Twang Player Screenshot" src="http://zacharcher.com/lab/twang/flash/twang_player_screenshot.jpg" alt="" width="460" height="300" /></a>(<a
href="http://zacharcher.com/lab/twang/flash/twang_player.swf">click to launch</a>)</p><p
style="text-align: left;">The next version of Twang will record &amp; save songs (this is done), and share them in some capacity (a bit more complicated). So that's where the Twang Player comes in. The Flash version looks like it wants to be touched &amp; strummed. I need to revisit the design and convey that Twang Player is just a music box, you can't compose anything in the browser! ...Yet.</p><p
style="text-align: left;">There are performance issues on some of my machines, too. This version uses Vector.&lt;Number&gt; objects to handle data, but it looks like <a
href="http://www.derschmale.com/2009/07/23/some-flash-pixel-bender-performance-tips-benchmarks/">ByteArray or even BitmapData structures are the way to go</a>.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/09/27/twang-in-flash/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/09/27/twang-in-flash/&amp;title=Twang&#8230; in Flash?!' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Twang&#8230; in Flash?!+http://blog.zacharcher.com/2010/09/27/twang-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Twang&#8230; in Flash?!&amp;uri=http://blog.zacharcher.com/2010/09/27/twang-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/09/27/twang-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/09/27/twang-in-flash/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Brakebills, Twang, Stuff!</title><link>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/</link> <comments>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/#comments</comments> <pubDate>Sat, 26 Jun 2010 15:37:14 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[iPhone]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[Swag]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[brakebills]]></category> <category><![CDATA[guitar]]></category> <category><![CDATA[iphone]]></category> <category><![CDATA[lev grossman]]></category> <category><![CDATA[modelling]]></category> <category><![CDATA[physical]]></category> <category><![CDATA[the magicians]]></category> <category><![CDATA[twang]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=229</guid> <description><![CDATA[Oh em gee. So much to report. First, do you know Lev Grossman? He's an incredibly talented author who recently toured Portland. If you haven't read his book The Magicians, then stop whatever you're doing and procure a copy immediately. Without trying to spoil anything, the major college in the book is named the Brakebills [...]]]></description> <content:encoded><![CDATA[<p>Oh em gee. So much to report.</p><p>First, do you know Lev Grossman? He's an incredibly talented author who recently toured Portland. If you haven't read his book <a
href="http://www.amazon.com/Magicians-Novel-Lev-Grossman/dp/0452296293/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1277564831&amp;sr=8-1">The Magicians</a>, then stop whatever you're doing and procure a copy <em>immediately</em>. Without trying to spoil anything, the major college in the book is named the <strong>Brakebills College for Magical Pedagogy</strong>. Lev saw the Brakebills T-shirt that I designed for my sweetheart's birthday present:</p><p><a
href="http://www.zazzle.com/brakebills_key_bee_tshirt-235460102699664916"><img
class="aligncenter" title="Brakebills Shirt" src="http://zacharcher.com/lab/brakebills/brakebills_shirt.jpg" alt="" width="461" height="526" /></a></p><p>Long story short, <a
href="http://levgrossman.com/2010/06/holy-crow-brakebills-shirts-are-here/">my Brakebills shirts are now officially endorsed by the author!</a> Please buy twenty of them, or thirty if the spirit moves you. Zazzle's print quality is great. The colors are vivid, and the ink has survived many washings. Rabid fans are buying and even <a
href="http://twitter.com/PriceDoc_brett/status/17041429615">customizing them</a>! I love the internet.</p><p>Lev blogged some of my other work, too ("the guy who does this has the enviably fake-sounding name of Zach Archer"). It's true, I have an awesome pro wrestler name.</p><p>Second, my new iPhone app has landed in the App Store:</p><p
style="text-align: center;"><a
href="http://itunes.apple.com/us/app/twang/id353688232?mt=8"><img
class="aligncenter" title="Twang" src="http://zacharcher.com/lab/twang/twang_screen2.png" alt="" width="480" height="320" /></a></p><p><a
href="http://itunes.apple.com/us/app/twang/id353688232?mt=8">Twang</a> is a handheld guitar. It's easier to play than a real guitar, and is very expressive. Instead of using audio samples, Twang uses <a
href="http://en.wikipedia.org/wiki/Physical_modelling_synthesis">physical modelling</a> techniques to create a more natural, dynamic sound. No two plucks are identical. <a
href="http://www.youtube.com/watch?v=jnCMg6MAu8E">Watch my grainy first video</a> if you disbelieve.</p><p>In the next version of Twang, left-handed people will be able to switch Twang's orientation, and serious musicians can dampen or mute strings with their fingers. And probably more! This version is already in development, and may be submitted in a week or two? <a
href="http://twitter.com/controlzinc">Follow Control Z, Inc on Twitter</a> if you have a ravenous thirst for updates!</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;title=Brakebills, Twang, Stuff!' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Brakebills, Twang, Stuff!+http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Brakebills, Twang, Stuff!&amp;uri=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Aquatic Sound Generator in Flash</title><link>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/</link> <comments>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/#comments</comments> <pubDate>Wed, 16 Jun 2010 18:07:48 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[aquasound]]></category> <category><![CDATA[audio]]></category> <category><![CDATA[formant]]></category> <category><![CDATA[fs1r]]></category> <category><![CDATA[generative]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=219</guid> <description><![CDATA[Here's something from the vaults. Aquasound was built with these requirements in mind: Generate sounds that aquatic animals might make Sounds can be "combined" somehow Sounds can emote This was never used in production. I wonder if I could turn this into something? Like a paid iPhone app? ;) Double-click the envelopes to add/remove control [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://zacharcher.com/lab/aquasound/aquasound.swf"><img
class="aligncenter" title="Aquasound" src="http://zacharcher.com/lab/aquasound/aquasound_pic.png" alt="" width="432" height="405" /></a></p><p>Here's something from the vaults. Aquasound was built with these requirements in mind:</p><ul><li>Generate sounds that aquatic animals might make</li><li>Sounds can be "combined" somehow</li><li>Sounds can emote</li></ul><p>This was never used in production. I wonder if I could turn this into something? Like a paid iPhone app? ;)</p><p>Double-click the envelopes to add/remove control points. Drag lines up &amp; down to change their curviture. The best feature is the "Combine With" dropdown, which splices the current sound with your selection. Also the "Emote" menu will play sounds with different expression.</p><p>The audio algorithm is reverse-engineered from <a
href="http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/">my beloved FS1R</a>. I generated formants in two ways (toggle the "Tonal" checkbox to hear both), the "atonal" version is closer to ring modulation than actual formants. It's more fun if you don't understand what the controls are doing, but if you insist: Pitch controls the overall pitch of the sound. Freq controls the center frequency of the formant (like a bandpass filter). LFOFreq and LFOWeight control a low-frequency sine wave, which can be applied to other controls via their "___LFOAmt" curves. Amp is amplitude, Width is formant width (think: width of the bandpass filter), Skirt adds distortion. Each voice has two formant generators, check "Formant Active" to enable them.</p><p>May all your bloops and crackles be happy ones!</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;title=Aquatic Sound Generator in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Aquatic Sound Generator in Flash+http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Aquatic Sound Generator in Flash&amp;uri=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Reconstructing Images With Text</title><link>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/</link> <comments>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/#comments</comments> <pubDate>Thu, 18 Feb 2010 09:58:38 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Graphics]]></category> <category><![CDATA[image]]></category> <category><![CDATA[letters]]></category> <category><![CDATA[processing]]></category> <category><![CDATA[python]]></category> <category><![CDATA[reconstruction]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=203</guid> <description><![CDATA[I was inspired by Roger Alsing's supposed "genetic" image compression. It begs for further experimentation! Here's my second batch of image reconstruction using Times New Roman characters. The algorithm is a brute-force affair: New characters are colored &#38; positioned randomly. Any characters that make the canvas look more like the original image are saved. And [...]]]></description> <content:encoded><![CDATA[<p>I was inspired by <a
href="http://rogeralsing.com/2008/12/11/genetic-gallery/">Roger Alsing's supposed "genetic" image compression</a>. It begs for further experimentation!</p><p>Here's my second batch of image reconstruction using Times New Roman characters. The algorithm is a brute-force affair: New characters are colored &amp; positioned randomly. Any characters that make the canvas look more like the original image are saved. And that's about it. Oh, and the font sizes start large (5120pt) and end small (10pt), so that fine details have a chance of survival.</p><p><a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_1.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_1.jpg" alt="monarch_1" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_2.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_2.jpg" alt="monarch_2" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_3.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_3.jpg" alt="monarch_3" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_4.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_4.jpg" alt="monarch_4" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_5.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_5.jpg" alt="monarch_5" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_6.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_6.jpg" alt="monarch_6" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_7.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_7.jpg" alt="monarch_7" /></a> <img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/monarch.jpg" alt="monarch_original" /></p><p><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/mona.jpg" alt="mona_original" /> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMona_204.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMona.jpg" alt="mona_reconstruction" /></a><br
/> <a
href="http://www.youtube.com/watch?v=RIB8QOytKcY&amp;fmt=14">Time lapse of the Mona Lisa reconstruction on YouTube, with silly music.</a></p><p><a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_0.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_0.jpg" alt="moth_0" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_1.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_1.jpg" alt="moth_1" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_2.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_2.jpg" alt="moth_2" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_3.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_3.jpg" alt="moth_3" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_4.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_4.jpg" alt="moth_4" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_5.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_5.jpg" alt="moth_5" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_6.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_6.jpg" alt="moth_6" /></a> <a
href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_7.png"><img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_7.jpg" alt="moth_7" /></a> <img
src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/moth.jpg" alt="moth_original" /></p><p>My first batch uses a different algorithm. Each canvas allocates a certain quantity of letters, and progressively mutates them, trying to mimic the original image as closely as possible. This technique is more akin to image compression. This batch is still in progress, it's very slow. I'll post these when they're ready!</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;title=Reconstructing Images With Text' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Reconstructing Images With Text+http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Reconstructing Images With Text&amp;uri=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Here Comes the Metal Mouth</title><link>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/</link> <comments>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/#comments</comments> <pubDate>Mon, 04 Jan 2010 00:40:53 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Cocoa]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Synth]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=195</guid> <description><![CDATA[My first iPhone app has been submitted to the app store for review! Metal Mouth is a text-to-speech synthesizer that mimics the talking devices of the 80's (Speak &#038; Spell, "Wizard needs food, badly", etc.) The functionality is similar to my Synthetic Speech In Flash demo, but with many new features (male &#038; female voices, [...]]]></description> <content:encoded><![CDATA[<p>My first iPhone app has been submitted to the app store for review! <strong>Metal Mouth</strong> is a text-to-speech synthesizer that mimics the talking devices of the 80's (Speak &#038; Spell, "Wizard needs food, badly", etc.) The functionality is similar to my <a
href="http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/">Synthetic Speech In Flash demo</a>, but with many new features (male &#038; female voices, auto-tune, pitch &#038; time scratching) and a snappy interface with talking robots.</p><p><img
src="http://zacharcher.com/lab/20100103_metal_mouth_preview/0_hello_doctor.png" alt="Hello, Doctor." /></p><p><img
src="http://zacharcher.com/lab/20100103_metal_mouth_preview/1_inside_your_phone.png" alt="I'm inside your phone." /></p><p>This took about 5 weeks to develop. Meanwhile, I've started another app, and I envision releasing Metal Mouth 2.0 in a few months, with more voices, and the ability to record audio.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;title=Here Comes the Metal Mouth' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Here Comes the Metal Mouth+http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Here Comes the Metal Mouth&amp;uri=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Strange Attractors in Flash</title><link>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/</link> <comments>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/#comments</comments> <pubDate>Sun, 13 Dec 2009 00:10:16 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Graphics]]></category> <category><![CDATA[fractal]]></category> <category><![CDATA[strange attractor]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=184</guid> <description><![CDATA[Have you seen (or played) the demo for Polynomial, the space shooter? Quick! Watch the video: I spent a couple hours generating strange attractors in Flash, just a simple 2D version for now. Click to play: Click the black region to generate new polynomial coefficients and redraw. You will have to click many times to [...]]]></description> <content:encoded><![CDATA[<p>Have you seen (or played) the demo for <a
href="http://dmytry.pandromeda.com/games/index.html">Polynomial</a>, the space shooter? Quick! Watch the video:</p><p><object
width="560" height="340"><param
name="movie" value="http://www.youtube.com/v/2Q6RaOgmanc&#038;hl=en_US&#038;fs=1&#038;"></param><param
name="allowFullScreen" value="true"></param><param
name="allowscriptaccess" value="always"></param><embed
src="http://www.youtube.com/v/2Q6RaOgmanc&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p><p>I spent a couple hours generating strange attractors in Flash, just a simple 2D version for now. Click to play:<br
/> <a
href="http://zacharcher.com/lab/20091212_strange_attractor/StrangeAttractor.html"><br
/> <img
src="http://zacharcher.com/lab/20091212_strange_attractor/attractor_image.png" alt="Here Be Strange Attractors" /></a></p><p>Click the black region to generate new polynomial coefficients and redraw. <strong>You will have to click many times to generate something interesting</strong>. That's the nature of fractals, I'm afraid. Some coefficients are automatically thrown out if the drawing exceeds a certain size. Unfortunately, the inverse is not true: the code isn't smart enough to trash any drawings that shrink to microscopic size.</p><p>I believe that you can stabilize any coefficients by scaling the values of each coefficient, gradually nudging them larger/smaller until the drawing is stable. I'll try this when I get more time. I've been gung-ho on my first proper iPhone app, trying to finish it before Christmas! Stay tuned...</p><p>Also, <a
href="http://zacharcher.com/lab/20091212_strange_attractor/strange_attractor.zip">here's the source code for the strange attractor harness</a>! Enjoy.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;title=Strange Attractors in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Strange Attractors in Flash+http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Strange Attractors in Flash&amp;uri=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Hateful Bits T-Shirt</title><link>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/</link> <comments>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/#comments</comments> <pubDate>Wed, 09 Sep 2009 08:14:38 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Swag]]></category> <category><![CDATA[design]]></category> <category><![CDATA[hateful bits]]></category> <category><![CDATA[t-shirt]]></category> <category><![CDATA[zazzle]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=180</guid> <description><![CDATA[I designed a T-shirt! These are printed and sold through Zazzle. I can't wait to get mine: Hateful Bits (version 2) by zkarcher "I HATE YOU WITH ALL 4 OF MY BITS. GRRRRRRRRRRRR" &#160; More&#160;&#187;]]></description> <content:encoded><![CDATA[<p>I designed a T-shirt! These are printed and sold through Zazzle. I can't wait to get mine:</p><div
style="text-align:center;line-height:150%"><a
href="http://www.zazzle.com/hateful_bits_version_2_tshirt-235111331412809216?gl=zkarcher&amp;group=mens&amp;lifestyle=classic&amp;rf=238624978076471791"><img
style="border:0;" src="http://rlv.zcache.com/hateful_bits_version_2_tshirt-d235111331412809216adc0r_325.jpg" alt="Hateful Bits (version 2) shirt" /></a><br
/> <a
href="http://www.zazzle.com/hateful_bits_version_2_tshirt-235111331412809216?gl=zkarcher&amp;group=mens&amp;lifestyle=classic&amp;rf=238624978076471791">Hateful Bits (version 2)</a> by <a
href="http://www.zazzle.com/zkarcher*">zkarcher</a><br
/> "I HATE YOU WITH ALL 4 OF MY BITS. GRRRRRRRRRRRR"</div><p>&nbsp;</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;title=Hateful Bits T-Shirt' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Hateful Bits T-Shirt+http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Hateful Bits T-Shirt&amp;uri=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Flash 3D: A change of heart?</title><link>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/</link> <comments>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/#comments</comments> <pubDate>Fri, 04 Sep 2009 10:31:40 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Games]]></category> <category><![CDATA[3d]]></category> <category><![CDATA[away3d]]></category> <category><![CDATA[game]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=173</guid> <description><![CDATA[Yesterday, I posted a damning critique of Flash's native 3D. Today I noticed that if you right-click on yesterday's SWF and show the redraw regions, you can see that it's redrawing the contents of the entire stage, even though I put the scene in a scrollRect. Is it seriously rendering a scene that's thousands of [...]]]></description> <content:encoded><![CDATA[<p>Yesterday, I posted <a
href="http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/">a damning critique of Flash's native 3D</a>.</p><p>Today I noticed that if you right-click on <a
href="http://zacharcher.com/lab/20090831_3d/09b_touch_to_glow.swf">yesterday's SWF</a> and show the redraw regions, you can see that it's redrawing the contents of the entire stage, even though I put the scene in a scrollRect. Is it seriously rendering a scene that's thousands of pixels wide before displaying it ?!?!?!? Oh, no. No they DIDN'T.</p><p>Today I ported the scene to the <a
href="http://away3d.com/">Away3D</a> rendering engine. Here's the result:</p><p
style="text-align: center;"><a
href="http://zacharcher.com/lab/20090831_3d/10_away3d_follow.swf"><img
class="aligncenter" title="Away3D screenshot" src="http://zacharcher.com/lab/20090831_3d/p/10_screenshot.png" alt="" width="453" height="339" /></a></p><p>It's beautiful, and provides access to low-level drawing routines, light sources, normal maps, ... It was speedy at first, then slowed down considerably when I added the glowing floors. (Each glow is 16+ triangles right now, for various reasons including: I can't render objects in my own custom order.) This makes <a
href="http://zacharcher.com/lab/20090831_3d/09test.html">yesterday's version look performant</a>, I'm reluctant to admit.</p><p>Possible next steps:</p><ul><li>Reduce the native 3D rendering area, see if performance improves?</li><li>Grow beyond Flash, embrace the future and try <a
href="http://unity3d.com/">Unity 3D</a>?</li><li>Dump this project, finish that iPhone game I started, make a million dollars in 2 weeks?</li></ul><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;title=Flash 3D: A change of heart?' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Flash 3D: A change of heart?+http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Flash 3D: A change of heart?&amp;uri=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Flash 3D makes me sad</title><link>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/</link> <comments>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/#comments</comments> <pubDate>Thu, 03 Sep 2009 11:43:05 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Games]]></category> <category><![CDATA[3d]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=164</guid> <description><![CDATA[I've been dabbling with Flash 10's native 3D support. Try my engine: Click to set the focus. Use the arrow keys to move. Touch blocks to illuminate. I'm disappointed with two things: 1). How much time is required to create a 3D engine, even a grid-based one like mine. I've been wrestling this project for [...]]]></description> <content:encoded><![CDATA[<p>I've been dabbling with Flash 10's native 3D support. Try my engine:</p><p><a
href="http://zacharcher.com/lab/20090831_3d/09b_touch_to_glow.swf"><img
class="aligncenter" title="Blue LEDs" src="http://zacharcher.com/lab/20090831_3d/p/09_screenshot.png" alt="" width="428" height="324" /></a></p><p>Click to set the focus. Use the arrow keys to move. Touch blocks to illuminate.</p><p>I'm disappointed with two things:</p><p>1). How much time is required to create a 3D engine, even a grid-based one like mine. I've been wrestling this project for 4+ hours every day, for a week. I feel like I must be lagging behind, but there are ten thousand things that will go wrong when developing in 3D. The paradigm is uniquely punishing, there are always edge cases where some polygons aren't drawn correctly. This project hasn't been a joy.</p><p>Also:</p><p>2). <strong>Flash's native 3D is not suited for a high-performance application like this one.</strong> It would be fine if I was only spinning a few DisplayObjects in space. However, the scene above displays up to 125 Bitmaps simultaneously. (Light all 25 bulbs (3 Bitmaps each), stand in the corner facing them, and the 25-segment walls.) 125 Bitmaps would be child's play in OpenGL. But after you light a few blocks, Flash Player chokes pretty hard.</p><p><a
href="http://zacharcher.com/lab/20090831_3d/09c_glow_blendmode.swf">Here's another version that uses a BlendMode on the lightbulbs</a>. It looks great, but its performance is even less acceptable.</p><p><a
href="http://zacharcher.com/lab/20090831_3d/02.swf">Here's an early version that uses my own 3D computations, and the Graphics API</a>. Also it has a limited field of view, which I widened for the latest builds. The performance is surprisingly high. I abandoned my custom 3D <a
href="http://zacharcher.com/lab/20090831_3d/04.swf">when I reached this point</a>; drawing lines around each cube face was expensive, so I switched to Bitmaps, and the native 3D.</p><p>The cube faces are set to width &amp; height of 100. However, the bitmaps are higher resolution, a 200x200 region is shown. They're being downsampled at 100x100 before they're rendered, not by my choice.</p><p>At runtime, I get periodic warnings like these:</p><blockquote><p>Warning: 3D DisplayObject will not render.  Its dimensions (8238, 1628) are too large to be drawn.</p></blockquote><p>What?! How is this happening? I swear that any blocks behind the camera are being removed from the Stage. (Actually, this is difficult to verify. If I shrink the scene, Flash magically applies the 3D perspective with a weird projection, and distorts everything in Lovecraftian dimensions.) Please, Adobe, tell me that you're not rendering the scene at 8000 pixels wide, then scaling it down to my 700x400 window, frame after frame?</p><p>Also note that you, the developer, are responsible for drawing the DisplayObjects in the correct depth order (farthest to nearest), Flash doesn't handle it automatically. This is known as "<a
href="http://en.wikipedia.org/wiki/2.5D">2.5D</a>", and it's wildly inconvenient.</p><p>So, I'm pretty disappointed with Flash 10's native 3D. Even with my limited 3D experience, I dislike how it renders the scene (<a
href="http://summitprojectsflashblog.wordpress.com/2009/05/19/flash-10-cs4-native-3d-blurry/">I'm not alone in this</a>) and the performance is obviously sub-par. This technology will not bring 3D games to the web, it <em>cannot</em>.</p><p>I need to decide whether to endure its shortcomings for 4 more weeks, or if I should abandon this project altogether. There are moments when you realize you've outgrown something you used to love, and this may be one of mine.</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;title=Flash 3D makes me sad' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Flash 3D makes me sad+http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Flash 3D makes me sad&amp;uri=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Synthetic Speech in Flash</title><link>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/</link> <comments>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/#comments</comments> <pubDate>Thu, 27 Aug 2009 10:46:44 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Synth]]></category> <category><![CDATA[audio]]></category> <category><![CDATA[linear predictive coding]]></category> <category><![CDATA[lpc]]></category> <category><![CDATA[speech]]></category> <category><![CDATA[synthesis]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=161</guid> <description><![CDATA[Recently, I learned about Linear Predictive Coding ("LPC"). This technique is used in classic arcade games (such as Gauntlet) and the Speak &#38; Spell to synthesize speech. Here's my first attempt at LPC speech in Flash: (click &#38; explore) It's great, except for one tiny problem: It sounds horrific. Can you feel the cold, robotic [...]]]></description> <content:encoded><![CDATA[<p>Recently, I learned about <a
href="http://en.wikipedia.org/wiki/Linear_predictive_coding">Linear Predictive Coding ("LPC")</a>. This technique is used in classic arcade games (such as <em>Gauntlet</em>) and the <em>Speak &amp; Spell</em> to synthesize speech.</p><p>Here's my first attempt at LPC speech in Flash: (click &amp; explore)</p><p><a
href="http://zacharcher.com/lab/20090827_lpc_speech/LPCsynth.swf"><img
class="aligncenter" title="LPC harness" src="http://zacharcher.com/lab/20090827_lpc_speech/lpc_harness.png" alt="" width="236" height="254" /></a></p><p>It's great, except for one tiny problem: It sounds horrific. Can you feel the cold, robotic love? This voice will stalk your nightmares.</p><p>The phonemes were derived from an unrehearsed recording of my voice. I'm confident that it can be improved. Note that direct LPC encodings of my voice, <a
href="http://zacharcher.com/lab/20090827_lpc_speech/zach_voice_test.mp3">such as this one</a>, sound more acceptable.</p><p><em><strong>EDIT:</strong> I made an iPhone version, "Metal Mouth", with lots of features. Here it is on <a
href="http://www.youtube.com/watch?v=g2NwVMjrY2o">YouTube</a> and the <a
href="http://itunes.apple.com/us/app/metal-mouth/id348741365?mt=8">iTunes Store</a>!</em></p><p><em><strong>EDIT #2:</strong> <a
href="http://blog.zacharcher.com/2012/01/09/synthetic-speech-in-flash-the-source-code/">The source code is available here</a>.</em></p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;title=Synthetic Speech in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Synthetic Speech in Flash+http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Synthetic Speech in Flash&amp;uri=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <enclosure
url="http://zacharcher.com/lab/20090827_lpc_speech/zach_voice_test.mp3" length="264600" type="audio/mpeg" /> </item> <item><title>Toaster Bro alpha: 10 days later</title><link>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/</link> <comments>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/#comments</comments> <pubDate>Fri, 20 Mar 2009 08:23:54 +0000</pubDate> <dc:creator>Zach</dc:creator> <category><![CDATA[Flash]]></category> <category><![CDATA[Games]]></category> <category><![CDATA[gamedev]]></category> <category><![CDATA[nes]]></category> <category><![CDATA[process]]></category> <category><![CDATA[schedule]]></category> <category><![CDATA[toaster bro]]></category> <guid
isPermaLink="false">http://blog.zacharcher.com/?p=148</guid> <description><![CDATA[Did I mention my new game, "Toaster Bro"? Play Toaster Bro alpha version 1! (You will need Flash Player 10.) Ten days have elapsed since I shared this version with friends (who are unwittingly being used as play testers). It's time for a "wrap-up" meeting, because I want to examine what went wrong/right, and instead [...]]]></description> <content:encoded><![CDATA[<p>Did I mention my new game, "Toaster Bro"? <a
href="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/ToasterBro_0.1alpha.swf">Play Toaster Bro alpha version 1!</a></p><p><a
href="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/ToasterBro_0.1alpha.swf"><img
src="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/p/instructions.png" alt="" /></a></p><p>(You will need Flash Player 10.)</p><p>Ten days have elapsed since I shared this version with friends (who are unwittingly being used as play testers). It's time for a "wrap-up" meeting, because I want to examine what went wrong/right, and instead of a meeting it's a blog post:</p><p><span
id="more-148"></span>The <a
href="http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/">tile engine has existed for half a year</a>. Toaster Bro began its life as "Roomhack", one of the pet projects <a
href="http://blog.sixsided.org/">Miles</a> and I dreamed up -- could we create a game that was <a
href="http://en.wikipedia.org/wiki/Turing_complete">Turing complete</a>? In the tradition of <a
href="http://en.wikipedia.org/wiki/Robot_Odyssey">Robot Odyssey</a>, we wanted to create an experience that was both programmable and entertaining.</p><p>During the development of <a
href="http://jayisgames.com/archives/2008/01/space_kitteh.php">Space Kitty</a>, we used its script engine to change the rules of the game at runtime. Once, we configured a cat to act as an "attack cat", which chased (and kicked) the player. We discovered new modes of gameplay -- how long can you say aloft? Can you slingshot yourself around a dense star? (Ultimately, we ran out of time before we could make the Kitty-verse bigger. We're currently discussing a Space Kitty sequel.)</p><p>The script engine whet our appetite -- what if the player could modify the rules of <em>the game itself</em>? What happens to the gameplay? Can it remain challenging and fun? We talked about this for days, weeks... Hashing out ideas for an "ultimate" hacker game. I think we're still talking about it.</p><p>I imagined such a game would resemble a dark, apocalyptic 3/4 view basement crawl, reminiscent of:</p><p><img
src="http://i232.photobucket.com/albums/ee231/PapillonReel/Link%20to%20the%20Past%20Part%207/LegendofZelda-ALinktothePast149.png" alt="" /></p><p>So I built the tile engine. The plot &amp; aesthetic of the game were still unknown. Tavvv challenged me to invent a "missing" console from the NES-SNES era, devise hardware specs for it, and develop the game in accordance to the hardware specs. Constraints fuel creativity, right? I settled on SNES-era hardware, with a custom color engine, and improved sound. Television artifacts &amp; blur could be exaggerated to make the game creepier; bosses would have extra blur and distortions, so you couldn't get a clear image of them. <em>The lurking horror.</em> This concept was eventually dropped, once I realized that I'm not ready to develop a Turing-complete game... <em>yet</em>. I'll come back to this project in the future, I'm sure.</p><p>"The tile game" evolved into a shooter, much like Smash TV but with a heavy-handed political bent. That still didn't feel right, even with "a spider-tank with Richard Nixon's head" in tow. In the middle of this confusion, we realized that putting hackable terminals in a tile-based game detracted from the appeal of both. Is there a way to allow hacking, within the context of a tile engine? From this fray emerged the Toaster Bro mechanic. I rolled a quick proof-of-concept. It seemed like we were on to something.</p><p>Then the game sat in stasis for a few months, while I worked and tended to life. I wanted to finish one solid level, and I imagined a 4-week timeline:</p><ul><li><strong>Week 1: Engine Malarky.</strong> Moving between rooms, easier wire drawing, electricity &amp; fire shouldn't hurt you, remove crufty code.</li><li><strong>Week 2: Levels &amp; Art.</strong>. Finalize the plot &amp; characters, somewhat. Replace stand-in art with "real" art. On-screen text. Create a bunch of rooms.</li><li><strong>Week 3: Audio, splash screen, boss fight, begin testing.</strong></li><li><strong>Week 4: Music, ???</strong></li></ul><p>This seemed like a good plan. Work began, but here's how things really went down:</p><p><strong>Week 1:</strong> Plugged lots of holes in the engine, but a single week wasn't enough to tackle everything. There are major structural implications when you modify your game's core. Still no way to change blocks at runtime, yet. I need a scripting engine, but I want one with <a
href="http://en.wikipedia.org/wiki/Infix_notation">infix notation</a> (Space Kitty used various <a
href="http://en.wikipedia.org/wiki/Reverse_Polish_notation">postfix notation</a> languages, before Miles settled on an implementation of the <a
href="http://en.wikipedia.org/wiki/PostScript">PostScript language</a> I think? It made my brain bleed.) I didn't allot time for creating a scripting engine, but clearly there was a need for it.</p><p><strong>Week 2:</strong> I'm not sure how the 8-bit NES aesthetic won out, but I liked it because it entailed <em>fewer artistic decisions</em>. The aesthetic had an entire era of gaming backing it. This seemed like a wise choice, because I'm not an accomplished artist, nor designer. I'm partially colorblind, in fact. Could I still cobble together pixel art?</p><p>I bought a Wacom tablet and books on animation, hoping to produce an acceptable look &amp; feel. By the way, nearly every graphic in the game has been redrawn at least once. You should have seen the original sideways animation for Toaster Bro, it took a few tries to make him look non-crippled.</p><p>So I had a decent lead on the art, but bugs kept popping up. Fundamental pieces of the puzzle were still missing (no scripting engine, no on-screen text, player can't die).</p><p><strong>Week 3:</strong> I caught a bad cold, so I spent most of this week supine on the couch. I forced the "game" on a few people, and collected their feedback. All the responses were valuable, and people raised issues that I hadn't considered. One tester said he couldn't view the entire window, he was on a MacBook with its standard (small) screen. Oops! Sorry about that... I reduced the console's "pixel" size.</p><p>The upshot of being sick was having lots of quiet time, during which I (slowly, groggily) puzzled out the scripting engine. Here's what the scripting language looks like now, this is extracted from the first room on the Dark Chocolate level:</p><pre><code>function clubDoor_electricity {
	i.isDoorOpen = true;
	call o.setBlock '__' 7 4; // empty space
	call o.setBlock '__' 7 5;
	call o.playSound 'doorOpen';
	call o.emotePlayer 'happy' 75;
}
function clubDoor_stop {
	if(i.isDoorOpen == true) {
		i.isDoorOpen = false;
		call o.setBlock '$L' 7 4; // lock
		call o.setBlock '$L' 7 5;
		call o.playSound 'doorClose';
		call o.emotePlayer 'sad' 75;
	}
}</code></pre><p>The interpreter supports a large syntax, including: loops, switch/case statements, tons of operators, enterFrame yields, userInput yields, recursion ... You get the idea. Variables are always referenced through a few specific objects, right now these are: <strong>t</strong>hread, <strong>i</strong>nterpreter, <strong>o</strong>wner (this is the Room that created the Interpreter instance), <strong>l</strong>evel, and <strong>g</strong>lobal (or <strong>g</strong>ame). (These are all dynamic objects except for <strong>o</strong>wner.) The script engine is decoupled from the code, I wrote a harness for it.</p><p>Also the <a
href="http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/">8-bit NTSC artifacts</a> happened during week 3, somehow.</p><p>At this point, the game had a mere 3 rooms, all unsightly geometric slogs used for testing. Uh oh.</p><p><strong>Week 4:</strong> Still a bit sick, and my real-world work schedule poked its head in, and needed some attention. The list of bugs &amp; issues was huge; 30 items, including toughies like art and program flow.</p><p>I forced myself to draw the dreaded sprite animations. Infrequently, this was relaxing and zen-like. But in the wrong state of mind, it was taxing and disheartening. I'm using the <a
href="http://blog.zacharcher.com/2007/10/13/understanding-colormatrixfilter/">palette swap trick</a> from Space Kitty, so I stared at grotesque red, green and blue images all day, and felt sorry for myself. Definitely out of my league.</p><p>Also I hacked together a level editor using Flex components, accessible through a magic keystroke. It's buggy and non-intuitive, but it's better than editing the room layouts as raw ascii! Here's how the final room in Mom's Kitchen is stored:</p><pre><code>[P,d [P,d [P,d [P,d [P,d [f,d ..,d ..,d ..,d ..,d [d,d [P,d [P,d [P,d [P,d [P,d
[P,d [P,d [P,d [P,d [P,d [f,d ..,d ..,a ..,a ..,d [d,d [P,d [P,d [P,d [P,d [P,d
[j,d [P,d [P,d [P,d [P,d [F,d ..,d ..,a ..,a ..,d [D,d [P,d [P,d [P,d [P,d [k,d
[J,d [h,d [h,d [h,d [h,d [i,d ..,d ..,d ..,d ..,d [g,d [h,d [h,d [h,d [h,d [K,d
[f,d ..;n ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;p [d,d
[f,d ..;q ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a #a,a #a,a #a,a #a,a ..,a ..,a ..,a ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a #a,a #a,a #t,a #a,a ..,a ..,a ..,a ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a __,a ..,a ..,a ..,a ..,a ..,a ..,a ..,d ..;q [d,d
[F,d ..;q __,d __,d __,d __,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d __,d ..;q [D,d
[i,d ..;r ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;s [g,d</code></pre><p>I resolved to ride my bike every day, to avoid getting sick again. So far so good, but now I ride to coffee shops and spend a metric crapload of money dining out of the house. The hidden price of wellness...</p><p><strong>Week 5:</strong> The list grew even longer. Lots of bugs, lots of missing features that I didn't consider -- the heart containers, the health bar. Dark Chocolate's level was half done. The entity behaviors were unstable; the damage system was finicky, every Entity required too much configuration to properly interact with others. This needed an overhaul. I'd started thinking about unit testing, which I'd never tried before.</p><p>I drew Dark Chocolate, but with no behavioral code, he didn't move. Fun fact: I saw his animation in a dream.</p><p><strong>Week 6:</strong> Dark Chocolate's level was finished, mostly. The boss fight took a day and a half to get right. You still couldn't "win" a level. I always joked that the goal was to plug in a toaster. Hmmmmm...</p><p><strong>Weeks 7-9:</strong> Sound design, on-screen text, Mom's kitchen (the training level), giant toasters. Redrawing sprites. Bigger croissants (the laser-guards). Spotlights. Refactoring lots of code. The scripting engine is versatile, but not easy to use. In week 7, it was much clunkier than the syntax listed above. There were no <code>switch</code> statements, you had to write a list of consecutive <code>if</code> statements instead.</p><p>Days passed. The spit 'n polish phase took <em>forever</em>. I sympathize with whoever said, "your code is always 85% done". It sure felt that way.</p><p>Also I finally implemented unit testing. I tried <a
href="http://www.asunit.org/">ASUnit</a> first, but it's not very Flash-like; I believe it's a direct port of JUnit (as evidenced by the Java code in its comments). If I'd realized <a
href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit">FlexUnit</a> was still in development, then I would have jumped on it, but... Long story short: I wanted to display failed tests on the stage, and ASUnit made that difficult. So I threw out the ASUnit code, kept my custom TestCase subclasses, and wrote my own Flash-centric versions of a TestRunner and TestCase (they both extend Sprite).</p><p>I can compile Toaster Bro in two ways: I have a Main.as class which will compile in the Flash IDE. But there's also a Roomhack.mxml wrapper which creates a "developer" build, integrating the testing framework and level editor. When the developer build is launched, it runs every TestCase. If a TestCase fails, and if it has added children, then it's displayed on the stage, with diagnostic messages &amp; an execution trace. Failed TestCases can be dismissed with a click. I'm not "in love" with unit testing yet, perhaps because writing the tests <em>after</em> the code was tedious. I'm sure it will save my butt in the future, tho.</p><p><strong>Week 10:</strong> Toaster Bro alpha is unleashed on the world!</p><p>Overall, feedback has been positive. Like Space Kitty, most people want the game to be longer. The negative feedback has been very helpful, pointing out specific problems which aren't obvious to me, since I view the application as a whole now.</p><p>So, after writing this gigantic treatise, I figured I'd have some insights on how to improve the process. And you know what? <em>I don't</em>.</p><p>Gamasutra had <a
href="http://www.gamasutra.com/features/20051026/gabler_pfv.htm">an excellent article on rapid prototyping</a>, and their process echoes what we experienced on Toaster Bro and Space Kitty: Creativity can't be scheduled, and you'll spend a huge chunk of time germinating the idea in your head. We had 2 months to develop Space Kitty; we spent almost exactly 1 month dreaming up the idea. After that, the initial prototype took a day or two, and we were rolling.</p><p>With Toaster Bro, nearly half of the "serious" development time went towards polishing the game and making it presentable. This was a surprise, even though most of my interactive work has followed this pattern, too. The functional code is fairly easy to develop, but then you must meet the clients' standards, and hammer the UI to find the rough spots.</p><p>Sound effects gave Toaster Bro an air of legitimacy. The difference was like night and day. Without sound effects, it was a shaky graphics demo; with sound effects, it felt <em>alive</em>. Hard to explain unless you've witnessed it.</p><p>Testers will comment on all the broken windows they find. I still hear about the missing sound effects in Toaster Bro (and yes, there are plenty!) But that's okay, their feedback is always valuable. Occasionally they'll have solid ideas on how best to <em>fix</em> a broken window, too.</p><p>What happens now? I have to produce more levels, art, and script. I'd like to believe that my productivity will ramp up, with so much of the infrastructure and assets completed. Sadly, I don't think it works that way. I have big ideas for the remaining Toaster Bro levels, and these involve intense scripting. The second room of Mom's Kitchen (where Toaster Bro learns how to use a wire, via 4 simple dialogs) is 131 lines of script, and it's still not done -- Mom should rush in and cheer after you activate the toaster, right? I can only imagine the length of the equivalent code in AS3. I want big effects &amp; easter eggs. It will be difficult to develop and test these.</p><p>Whatever skills you have, I recommend bringing these into your projects, and emphasizing them, even leaning on them. I produce groovy electronic music, so <a
href="http://zacharcher.com/lab/toaster_bro/chiptunes_test/">I made a bunch of chiptunes</a> early on, to help center my thinking. Some aren't useable for Toaster Bro, they're too active -- they have the pace of Mega Man, rather than Zelda. It was good to realize that, it helped shape my thinking.</p><p>More to come?...</p><div
class='bookmarkify'><a
name='bookmarkify'></a><div
class='linkbuttons'><a
href='http://www.facebook.com/share.php?u=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/' title='Save to Facebook' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/facebook.png' style='width:16px; height:16px;' alt='[Facebook] ' /></a> <a
href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;title=Toaster Bro alpha: 10 days later' title='Reddit' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a
href='http://twitter.com/home/?status=Toaster Bro alpha: 10 days later+http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a
href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Toaster Bro alpha: 10 days later&amp;uri=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img
src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a> <a
title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded> <wfw:commentRss>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
