<?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>musicalgeometry &#187; MIDI</title>
	<atom:link href="http://www.musicalgeometry.com/archives/category/midi/feed" rel="self" type="application/rss+xml" />
	<link>http://www.musicalgeometry.com</link>
	<description>sound, code, &#38; DIY tech</description>
	<lastBuildDate>Sat, 24 Jul 2010 16:32:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Create An Ad-Hoc Network For TouchOSC On Your Mac</title>
		<link>http://www.musicalgeometry.com/archives/361</link>
		<comments>http://www.musicalgeometry.com/archives/361#comments</comments>
		<pubDate>Wed, 25 Mar 2009 06:38:48 +0000</pubDate>
		<dc:creator>Jason Job</dc:creator>
				<category><![CDATA[MIDI]]></category>
		<category><![CDATA[OSC]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.musicalgeometry.com/?p=361</guid>
		<description><![CDATA[After coding for iPhone for the last month and a half, I figured it was time I finally got one of the coveted devices for myself. This week I have been having fun setting it up, checking my email, and browsing the &#8230; <a href="http://www.musicalgeometry.com/archives/361">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After coding for iPhone for the last month and a half, I figured it was time I finally got one of the coveted devices for myself. This week I have been having fun setting it up, checking my email, and browsing the app store. They really are a marvel of technology and raise my expectaions in terms of elegance and functionality for all devices.</p>
<div id="attachment_413" class="wp-caption alignnone" style="width: 170px"><a href="http://www.musicalgeometry.com/wp-content/uploads/2009/03/screenshot-20090406-230341.png"><img class="size-medium wp-image-413 " title="TouchOSC" src="http://www.musicalgeometry.com/wp-content/uploads/2009/03/screenshot-20090406-230341-200x300.png" alt="iPhone running TouchOSC" width="160" height="240" /></a><p class="wp-caption-text">iPhone running TouchOSC</p></div>
<p>Today, in addition to working hard on my upcoming app release (which I am very excited about) I have been playing with the TouchOSC app from <a href="http://hexler.net/">hexler.net</a>. TouchOSC, available from the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=288120394&amp;mt=8">Apple App Store</a>, provides several touchable interfaces including virtual faders, cross-faders, knobs, pads, keys, buttons, grids and x-y pads; all of which send OSC data over Wi-Fi using UDP. It is kind of  like a mini <a href="http://www.jazzmutant.com/lemur_overview.php">JazzMutant Lemur</a> in your pocket.</p>
<p>The OSC data from TouchOSC can be used in software capable of receiving OSC messages, such as <a href="http://www.cycling74.com/products/max5http://www.cycling74.com/products/max5">MaxMSP</a> or <a href="http://processing.org/">Processing</a>, or you can parse the OSC data to MIDI and then on to any MIDI controllable software such as <a href="http://www.ableton.com/">Ableton Live</a>. To translate the OSC to MIDI on a Mac I highly recommend you check out <a href="http://www.osculator.net/wp/">OSCulator</a>. If you own Max you could build yourself a maxpat to do the same thing but OSCulator is prebuilt and there are some excellent presets available on the <a href="http://hexler.net/">hexler.net</a> website. Mac users will find instructions on using TouchOSC with Osculator and Ableton Live <a href="http://www.osculator.net/wp/2009/01/27/use-your-iphone-or-ipod-with-ableton-live/?n=Main/IPhoneOSCulatorAndAbletonLiveTutorial">here</a>. Windows users will find instructions to do something similar using a combination of Pure Data and MIDI Yoke <a href="http://www.shipiboconibo.com/2009/02/how-to-iphone-touchosc-pure-data-ableton-live/">here</a>.</p>
<p>Setting up TouchOSC on your home wi-fi network is a piece of cake. All you have to do is open the TouchOSC Network settings and set the host and the  outgoing and incoming ports. The ports can be whatever you want to use; I use 8000 for outgoing and 9000 for the incoming port. The host should just be YOURCOMPUTENAME.local. This worked flawlessly for me the first time I tried it.</p>
<p>If however you are not at home, or are somewhere without wi-fi, and you want to use TouchOSC with your MacBook or MacBookPro, you need to create an ad-hoc wireless network. All an ad-hoc network is is a wireless network where the communciation between devices is direct, rather than through an access point or a router. Here are the steps to create an ad-hoc network and set up TouchOSC to communicate with your Mac:</p>
<p>1. Open up System Preferences-&gt;Network.</p>
<p>2. Click on the Network Name drop down and select  Create Network.</p>
<p>3. Give your network a name. A password is optional though probably a good idea.</p>
<p>4. Click on Advanced<em>.</em></p>
<p>5. Click on the TCP/IP tab.</p>
<p>6. Click the Configure IPv4 drop down and select Manual.</p>
<p>7. Enter an IP and NetMask for your computer. I use 192.168.2.1 and 255.255.255.0.</p>
<p>8. Click OK and then Apply and close System Preferences.</p>
<p>9. On your iPhone open Settings-&gt;Wi-Fi and select the network you just created.</p>
<p>10. Click the arrow to the right of the network name.</p>
<p>11. Select Static for your IP type and enter your IP and NetMask for the iPhone. I use 192.168.2.2 for the IP. The NetMask must be the same as for the network which is 255.255.255.0.</p>
<p>12. Exit your iPhone settings and open TouchOSC.</p>
<p>13. Touch the field under the heading Network.</p>
<p>14. Enter the IP address you created for your Mac. In my case this is 192.168.2.1.</p>
<p>15. Make sure your ports are as you want them. Remember, the ports can be whatever you want to use, just make sure that they agree with whatever you are communicating with, ie OSCulator, MaxMSP, Processing etc. I use 8000 for the outgoing port and 9000 for the incoming port.</p>
<p>16. Touch the done button and then once you are at the mainscreen of TouchOSC, select your Layout and touch done again.</p>
<p>It sometimes takes a few seconds to connect to the network and open the TouchOSC Layout but once it opens you should be able to communicate with your Mac over the ad-hoc wireless network. To test out the ad-hoc network try using OSCulator or one of the Max patches provided on <a href="http://hexler.net/">hexler.net</a>. This is what worked for me; hopefully you will find that these instructions get you up and running TouchOSC over an ad-hoc network too. If you have any problems please leave a comment and I will do my best to help you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.musicalgeometry.com/archives/361/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Software Debouncing Multiple Latching Switches With Arduino</title>
		<link>http://www.musicalgeometry.com/archives/248</link>
		<comments>http://www.musicalgeometry.com/archives/248#comments</comments>
		<pubDate>Mon, 12 Jan 2009 06:29:57 +0000</pubDate>
		<dc:creator>Jason Job</dc:creator>
				<category><![CDATA[MIDI]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.musicalgeometry.com/?p=248</guid>
		<description><![CDATA[This last week I have been working on making the operation of my MIDI controller prototype more robust. One of my tasks has been to debounce and latch the states of my pushbutton toggle switches. Though you could use hardware &#8230; <a href="http://www.musicalgeometry.com/archives/248">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This last week I have been working on making the operation of my MIDI controller prototype more robust. One of my tasks has been to debounce and latch the states of my pushbutton toggle switches. Though you could use hardware for debouncing and latching I chose to do it with software. Doing it this way is cheaper, requires less space on a PCB and is fairly easily accomplished with todays microcontrollers.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/musicalgeometry/3763763709/"><img class=" " style="border: 1px solid black;" title="A lone pushbutton switch" src="http://farm3.static.flickr.com/2436/3763763709_400e22d74e.jpg" alt="A lone pushbutton switch" width="500" height="375" /></a><p class="wp-caption-text">A lone pushbutton switch</p></div>
<p>Before setting out to debounce my pushbuttons I did some searching on Google and discovered an excellent article on debouncing called simply, <a href="http://www.ganssle.com/debouncing.pdf">A Guide To Debouncing</a>. It covers multiple techniques for both hardware and software debouncing.</p>
<p>After reading the article, I decided to go with a software counting algorithm. I did some more research but I wasn&#8217;t happy with the examples that I found. All of them involved debouncing a single switch. I wanted to debounce an entire port of switches. To do this you could just repeat the debouncing code for each switch but I decided to write a single piece of code to handle an entire port.</p>
<p>Below is my solution using PORTB on an Arduino. PORTB is a six pin port. This could easily be ported to be used on any AVR microcontroller or indeed any other microcontroller that can be programmed in C.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/musicalgeometry/3763762659/"><img class="  " style="border: 1px solid black;" title="Arduino NG" src="http://farm4.static.flickr.com/3523/3763762659_6df9ff15c7.jpg" alt="Arduino NG" width="500" height="375" /></a><p class="wp-caption-text">My Arduino NG</p></div>
<p>All the pushbuttons in my example are active high with pull down resistors. The code could easily be adapted for active low. (Note that my prototype actually only has two buttons connected to it. I set up wires with pull downs to act as switches for the remaining pins)</p>
<p>First we define the number of switches on our port (in this case six), then the debounce depth. Debounce depth is the number of consecutive times that a switch must be read to have a certain value (HIGH or LOW, 1 or 0) before a press of that switch is validated.</p>
<pre><code>#define numButtons 6
#define debounceDepth 10</code></pre>
<p>Next we set up the variables we will need. The first one is used to read the PORTB value into. The second is to keep a memory of the last debounceDepth number of reads. The next keeps tabs on whether the pushbutton switch has been released after pressing. This variable provides a form of hysterisis so that we don&#8217;t get multiple toggles on one button press. The buttonPressFilter is a bitwise ANDed sum of all of the debounceDepth number of memories. The result in the buttonPressFilter is what determines if a pushbutton switch has been validly pressed.</p>
<pre><code>char buttonRead;
char buttonMemory[debounceDepth] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int buttonHasReleased[numButtons] = {true,true,true,true,true,true};
char buttonPressFilter = 0xFF;
int buttonState[numButtons] = {0,0,0,0,0,0};</code></pre>
<p>So that is the end of initialization. Now onto the code that you would put in your loop. The buttonPressFilter is an 8-bit variable with each of the lower 6 bits representing the state of a pushbutton switch, pressed or not-pressed. (Remember, PORTB on Arduino only has 6 pins) Each time we loop through here, we reset the buttonPressFilter to start as all 1&#8242;s. As it is bitwise ANDed with the previous button memories, any button read of a zero value will fall through as a zero, the rest will be left as 1&#8242;s. It basically &#8216;filters&#8217; out any button presses that are not yet stable.</p>
<pre><code>buttonPressFilter = 0xFF;</code></pre>
<p>Here we shift all the memory by one, dumping the oldest reading to make room for the new reading. Then we AND all the old memories together.</p>
<pre><code>for(i=(debounceDepth-1); i&gt;0; i--) {
    buttonMemory[i] = buttonMemory[i-1];
    buttonPressFilter &amp;= buttonMemory[i];
}</code></pre>
<p>Here we read the current status of the switches on PORTB.</p>
<pre><code>buttonRead = PINB;</code></pre>
<p>Now for each pushbutton switch we check if the current read indicates a press. If it does, then we set its memory bit, otherwise we clear it.</p>
<pre><code>for(i=0; i&lt;numButtons; i++) {
    if((buttonRead &amp; bitMask[i]) != 0) { // if current read shows button is pressed
        buttonMemory[0] |= bitMask[i];     // set the memory bit for that button
    } else {
        buttonMemory[0] &amp;= ~(bitMask[i]); // otherwise clear the memory bit for that button
    }
}</code></pre>
<p>Take account of the newest read into memory.</p>
<pre><code>buttonPressFilter &amp;= buttonMemory[0]; // AND the final memory bits into the buttonPressFilter</code></pre>
<p>Now the buttonPressFilter contains the current pressed or non-pressed state of the switches. If any switch has had a consistent value for debounceDepth number of times, then toggle the state in the buttonState array and do whatever it is you want your button to do.</p>
<pre><code>for(i=0; i&lt;numButtons; i++) {
    if((buttonPressFilter &amp; bitMask[i]) != 0) {
        if(buttonHasReleased[i] == true) {
            if(buttonState[i] == 0) {
                // ENTER CODE HERE FOR WHAT YOU WANT TO HAPPEN WHEN BUTTON IS ON
                buttonState[i] = 1;
            } else {
                // ENTER CODE HERE FOR WHAT YOU WANT TO HAPPEN WHEN BUTTON IS OFF
                buttonState[i] = 0;
            }
        }
        buttonHasReleased[i] = false;
    } else {
        buttonHasReleased[i] = true;
    }
}</code></pre>
<p>One final thing to mention is that the debounceDepth value is something that you need to experiment with for the specific switches in your project. Currently with my cheap pushbuttons sitting in a cardboard chassis and wired to a breadboard, I need a value of 10 to get stable results. Using better switches, a stable chassis and a PCB I expect this number to drop.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.musicalgeometry.com/archives/248/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DIY Cardboard MIDI Controller</title>
		<link>http://www.musicalgeometry.com/archives/181</link>
		<comments>http://www.musicalgeometry.com/archives/181#comments</comments>
		<pubDate>Sun, 28 Dec 2008 07:32:47 +0000</pubDate>
		<dc:creator>Jason Job</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[MaxMSP]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.musicalgeometry.com/?p=181</guid>
		<description><![CDATA[Today I built a DIY cardboard MIDI controller. I used an Atmega168 with code written in Arduino and programmed on an Arduino NG. The whole circuit is breadboarded and connects to the computer via a single USB cable. The serial &#8230; <a href="http://www.musicalgeometry.com/archives/181">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today I built a DIY cardboard MIDI controller. I used an Atmega168 with code written in Arduino and programmed on an Arduino NG. The whole circuit is breadboarded and connects to the computer via a single USB cable. The serial output of the MIDI controller is parsed by a MaxMSP patch to the IAC Driver on my MacBookPro. I tested the controller with Ableton Live and it worked without a problem. I also included an LCD display that shows the current value of the controller knobs as they are tweaked and holds the last value of the last knob turned. The pushbuttons send MIDI continuous controller messages that alternate between 0 and 127 and an LED reflects the current value.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/musicalgeometry/3764562284/"><img class="  " style="border: 1px solid black;" title="DIY cardboard MIDI controller" src="http://farm4.static.flickr.com/3510/3764562284_fc8c471f5d.jpg" alt="DIY cardboard MIDI controller" width="500" height="375" /></a><p class="wp-caption-text">DIY cardboard MIDI controller</p></div>
<p>I am planning on using this Arduino based prototype to experiment with fine tuning the firmware for a line of boutique and custom MIDI controllers. The final project will be ported to C using the AVR C library and I will make the whole project open source.</p>
<p>Here is a look at the back. I just used whatever pots I had, so they aren&#8217;t matched. The LCD is a serial one from <a href="http://www.sparkfun.com">SparkFun</a>.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/musicalgeometry/3763765559/"><img class="  " style="border: 1px solid black;" title="Underbelly of the cardboard MIDI controller" src="http://farm3.static.flickr.com/2632/3763765559_d6df57c6d2.jpg" alt="Underbelly of the cardboard MIDI controller" width="500" height="375" /></a><p class="wp-caption-text">Underbelly of the cardboard MIDI controller</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.musicalgeometry.com/archives/181/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oxygen 49 FWD/REV Transport Buttons In Live</title>
		<link>http://www.musicalgeometry.com/archives/158</link>
		<comments>http://www.musicalgeometry.com/archives/158#comments</comments>
		<pubDate>Thu, 13 Nov 2008 19:30:05 +0000</pubDate>
		<dc:creator>Jason Job</dc:creator>
				<category><![CDATA[MIDI]]></category>
		<category><![CDATA[ableton]]></category>
		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://www.musicalgeometry.com/?p=158</guid>
		<description><![CDATA[If you have ever tried to use the Forward or Reverse transport buttons on an M-Audio Oxygen MIDI controller in Ableton Live, you will have had the unpleasant experience of losing control of the play-head. When this happens, the play-head &#8230; <a href="http://www.musicalgeometry.com/archives/158">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you have ever tried to use the Forward or Reverse transport buttons on an M-Audio Oxygen MIDI controller in Ableton Live, you will have had the unpleasant experience of losing control of the play-head. When this happens, the play-head continuously jumps forward and back in an uncontrolled and unstoppable manner. The only way to get back to normal is to quit Live and restart. Below I describe the setup of an Oxygen 49 so that Forward and Reverse can take on a more useful and logical function. This also applies for the Oxygen 8 v2 and the Oxygen 61.</p>
<div class="wp-caption alignnone" style="width: 510px"><a href="http://www.flickr.com/photos/musicalgeometry/3763766751/"><img class=" " style="border: 1px solid black;" title="Oxygen 49 transport controls" src="http://farm3.static.flickr.com/2511/3763766751_443f492431.jpg" alt="Oxygen 49 transport controls" width="500" height="375" /></a><p class="wp-caption-text">Oxygen 49 transport controls</p></div>
<p>The Oxygen 49 is a natively supported control surface in Ableton Live. To setup the controller go to Preferences-&gt;MIDI/Sync and select your device from the Control Surface dropdown list at the top left. Then select your MIDI input and output ports from the next two adjacent dropdown lists. If you are using an Oxygen 49 via USB then the ports will be something like “USB Oxygen 49”. You should now be able to use all of the transport buttons on the controller except for Forward and Reverse which will cause the crazy play-head problem.</p>
<p>A common use of Forward and Reverse transport buttons is to move the play-head through an arrangement window, usually by some user defined length; 1-bar, 8<sup>th</sup> notes, 16<sup>th</sup> notes etc, and sometimes to navigate through user defined locators. As far as I know the former is not possible in Ableton Live as of version 7, at least not with an Oxygen controller. What we can do though is setup locator navigation by assigning the Forward and Reverse keys to the Previous and Next Locator buttons using MIDI Map Mode. Settings in MIDI Map Mode override control surface defaults.</p>
<p>To enter MIDI Map Mode click the MIDI button at the top right of the Live window. Click on the Previous Locator arrow and press the Reverse button on your controller. Click on the Next Locator arrow and press the Forward button on your controller. Press the MIDI button to exit MIDI Map Mode. Now you can create locators in the arrangement window using the Set Locator button and move through them using the Forward and Reverse transport buttons.</p>
<p>It would be nice to be able to assign these buttons to increment or decrement the play head location by the global quantize amount. Hopefully this will be a MIDI assignable option in future versions of Live. In the meantime this is a much better use for the Forward and Reverse transport buttons than locking up the program.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.musicalgeometry.com/archives/158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Max Serial To MIDI Patch</title>
		<link>http://www.musicalgeometry.com/archives/80</link>
		<comments>http://www.musicalgeometry.com/archives/80#comments</comments>
		<pubDate>Mon, 13 Oct 2008 05:28:05 +0000</pubDate>
		<dc:creator>Jason Job</dc:creator>
				<category><![CDATA[MIDI]]></category>
		<category><![CDATA[MaxMSP]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.musicalgeometry.com/?p=80</guid>
		<description><![CDATA[I have programmed an Arduino to output serial MIDI CC messages when I adjust potentiometers connected to it. To control my MIDI capable applications I could just send this data to a MIDI cable and then to a commercial USB-MIDI &#8230; <a href="http://www.musicalgeometry.com/archives/80">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have programmed an Arduino to output serial MIDI CC messages when I adjust potentiometers connected to it. To control my MIDI capable applications I could just send this data to a MIDI cable and then to a commercial USB-MIDI interface, but that would still require another cord to power the controller. Instead I have written a Max patch that uses the OSX IAC Driver.</p>
<p>This driver is a virtual midi device that you can use to route MIDI to, through and from. My Max patch parses the serial data from the Arduino to the IAC Driver. By choosing the IAC Driver as a MIDI input in Live (or any other MIDI capable app) you can then use the serial MIDI CC data sent from the Arduino to control your software.</p>
<p>The MIDI data that the Max patch expects at the serial input is in the standard MIDI format for a CC message; a status byte, a control number and a value. This simple patch just listens for a status byte of 176 which is a control change on channel 1. The baud rate I chose for this patch was 57600. Note that you do not have to use the standard MIDI data rate of 31250 baud.</p>
<div id="attachment_198" class="wp-caption alignnone" style="width: 310px"><a href="http://www.musicalgeometry.com/wp-content/uploads/2008/09/iac-driver.jpg"><img class="size-medium wp-image-198  " style="margin-top: 8px; margin-bottom: 8px;" title="iac-driver" src="http://www.musicalgeometry.com/wp-content/uploads/2008/09/iac-driver-300x181.jpg" alt="MIDI Devices" width="300" height="181" /></a><p class="wp-caption-text">MIDI Devices</p></div>
<p>To enable the IAC Driver go to Applications-&gt;Utilities-&gt;Audio MIDI Setup, click on the MIDI Devices tab and then double click the IAC Driver icon make sure that the <em>Device is online</em> check box is checked.</p>
<p>To use this patch you need the <a href="http://www.cycling74.com/downloads/max5" target="_blank">MaxMSP Runtime.</a> Once you have that installed open it up and then open the patch with it. Double click on the <em>midiout</em> object and select the IAC Driver. Then click the button at the top of the chain to start reading the serial port and parsing the data. You should now be able to use  midi learn to map your controllers and start tweaking stuff in realtime with your potentiometers.</p>
<p>Here is what the patch looks like:</p>
<div id="attachment_83" class="wp-caption alignnone" style="width: 319px"><a href="http://www.musicalgeometry.com/wp-content/uploads/2008/10/serial2midi.gif"><img class="size-full wp-image-83" title="serial2midi" src="http://www.musicalgeometry.com/wp-content/uploads/2008/10/serial2midi.gif" alt="" width="309" height="373" /></a><p class="wp-caption-text">Serial to MIDI Max patch</p></div>
<p>If you own Max just copy the following code and then paste it in a blank patcher.</p>
<p><code>----------begin_max5_patcher----------<br />
488.3ocuVsrahCCEccxWwUdclQ9QdTlcUpa5h9ETUMxPLTOJwFkXTof5+9X6<br />
.COFjvIjhDgHesu1m64dNIYabDZpdsnEA+BdEhh1FGE4C4BDsabDpludVEu0<br />
uLjR7gd5ePIcSYDqM9vapf4xJinAHE46mUspVppDFelzCA0qLmGctVYT7Zge<br />
ydrQxq1uIK4lYuKUK9ciXloCozT7OwI.kl4tkOwOvFBdaWNcGf4ykhtDPnD6<br />
0+l1cXsxM9IITa1cgkk9S2Vd+ffbg9JN18WxsQMKajJC7xyO87E4ExE4E7P3<br />
ER1I7B6+3kqW3ECovM5EKpD8n5HWs2xv6A+0ZsVx8Pm8nJgMhsvZgoQCY8PW<br />
StAccgu8kQtdsOkqVzGYMcD4jVgqZ.NjUjiwvC.Av8PBbKFeRmtfPxCSdzSy<br />
OaLc+0xRoETe2VeZpWtvRSc2RmL.qOCOxk8bcSM+xUdwnaZnO3cMDbeejQ.t<br />
lIiIw3p.2KIAkx9a.OzbPNl77fYmd8dxrioFehnJo57OovCLW7S4qV8plY6O<br />
1caWBb.ZkhViTwMRs53EcxZdWVVJTG6arRukZaKdGFf2tXyKXHE.hrBDKod2<br />
fDKDLcFU9ciIZ.Phce6brP5b2WRZRHrD99puCwxUbCPxN3q3+JxEVKJ<br />
-----------end_max5_patcher-----------</code></p>
<p>If you don&#8217;t own Max then you can download the patch <a href="http://jasonjob.net/share/myserial2midi.maxpat.zip" target="_blank">here</a>.</p>
<p>I will try and put together a more complete patch with user selectable options sometime soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.musicalgeometry.com/archives/80/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
