<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>MIDI Out on Mac, simple code needed</title>
		<link>http://www.allegro.cc/forums/view/598206</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 10 Nov 2008 22:06:44 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I need to send a midi string out a MIDI interface on a Mac.<br />I need a simple standalone program that i can run, passing the hex bytes to send out the midi interface.<br />I haven&#39;t got a mac that i can write code upon, so im looking for someone that could write such a thing or be able to give me the information i&#39;d need to persue this... any help would be greatly appreciated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (aj5555)</author>
		<pubDate>Sat, 08 Nov 2008 12:03:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>CoreAudio has a CoreMIDI component. I&#39;m clueless about MIDI, does the following example that comes with the Developer Tools help?
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*  Copyright © 2007 Apple Inc. All Rights Reserved.</span></td></tr><tr><td class="number">2</td><td><span class="c">  </span></td></tr><tr><td class="number">3</td><td><span class="c">  Disclaimer: IMPORTANT:  This Apple software is supplied to you by </span></td></tr><tr><td class="number">4</td><td><span class="c">      Apple Inc. ("Apple") in consideration of your agreement to the</span></td></tr><tr><td class="number">5</td><td><span class="c">      following terms, and your use, installation, modification or</span></td></tr><tr><td class="number">6</td><td><span class="c">      redistribution of this Apple software constitutes acceptance of these</span></td></tr><tr><td class="number">7</td><td><span class="c">      terms.  If you do not agree with these terms, please do not use,</span></td></tr><tr><td class="number">8</td><td><span class="c">      install, modify or redistribute this Apple software.</span></td></tr><tr><td class="number">9</td><td><span class="c">      </span></td></tr><tr><td class="number">10</td><td><span class="c">      In consideration of your agreement to abide by the following terms, and</span></td></tr><tr><td class="number">11</td><td><span class="c">      subject to these terms, Apple grants you a personal, non-exclusive</span></td></tr><tr><td class="number">12</td><td><span class="c">      license, under Apple's copyrights in this original Apple software (the</span></td></tr><tr><td class="number">13</td><td><span class="c">      "Apple Software"), to use, reproduce, modify and redistribute the Apple</span></td></tr><tr><td class="number">14</td><td><span class="c">      Software, with or without modifications, in source and/or binary forms;</span></td></tr><tr><td class="number">15</td><td><span class="c">      provided that if you redistribute the Apple Software in its entirety and</span></td></tr><tr><td class="number">16</td><td><span class="c">      without modifications, you must retain this notice and the following</span></td></tr><tr><td class="number">17</td><td><span class="c">      text and disclaimers in all such redistributions of the Apple Software. </span></td></tr><tr><td class="number">18</td><td><span class="c">      Neither the name, trademarks, service marks or logos of Apple Inc. </span></td></tr><tr><td class="number">19</td><td><span class="c">      may be used to endorse or promote products derived from the Apple</span></td></tr><tr><td class="number">20</td><td><span class="c">      Software without specific prior written permission from Apple.  Except</span></td></tr><tr><td class="number">21</td><td><span class="c">      as expressly stated in this notice, no other rights or licenses, express</span></td></tr><tr><td class="number">22</td><td><span class="c">      or implied, are granted by Apple herein, including but not limited to</span></td></tr><tr><td class="number">23</td><td><span class="c">      any patent rights that may be infringed by your derivative works or by</span></td></tr><tr><td class="number">24</td><td><span class="c">      other works in which the Apple Software may be incorporated.</span></td></tr><tr><td class="number">25</td><td><span class="c">      </span></td></tr><tr><td class="number">26</td><td><span class="c">      The Apple Software is provided by Apple on an "AS IS" basis.  APPLE</span></td></tr><tr><td class="number">27</td><td><span class="c">      MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION</span></td></tr><tr><td class="number">28</td><td><span class="c">      THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS</span></td></tr><tr><td class="number">29</td><td><span class="c">      FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND</span></td></tr><tr><td class="number">30</td><td><span class="c">      OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.</span></td></tr><tr><td class="number">31</td><td><span class="c">      </span></td></tr><tr><td class="number">32</td><td><span class="c">      IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL</span></td></tr><tr><td class="number">33</td><td><span class="c">      OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></td></tr><tr><td class="number">34</td><td><span class="c">      SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></td></tr><tr><td class="number">35</td><td><span class="c">      INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,</span></td></tr><tr><td class="number">36</td><td><span class="c">      MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED</span></td></tr><tr><td class="number">37</td><td><span class="c">      AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),</span></td></tr><tr><td class="number">38</td><td><span class="c">      STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE</span></td></tr><tr><td class="number">39</td><td><span class="c">      POSSIBILITY OF SUCH DAMAGE.</span></td></tr><tr><td class="number">40</td><td><span class="c">*/</span></td></tr><tr><td class="number">41</td><td><span class="p">#include &lt;CoreMIDI/MIDIServices.h&gt;</span></td></tr><tr><td class="number">42</td><td><span class="p">#include &lt;CoreFoundation/CFRunLoop.h&gt;</span></td></tr><tr><td class="number">43</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="c">// ___________________________________________________________________________________________</span></td></tr><tr><td class="number">46</td><td><span class="c">// test program to echo MIDI In to Out</span></td></tr><tr><td class="number">47</td><td><span class="c">// ___________________________________________________________________________________________</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>MIDIPortRef    gOutPort <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">50</td><td>MIDIEndpointRef  gDest <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">51</td><td><span class="k1">int</span>        gChannel <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="k1">static</span> <span class="k1">void</span>  MyReadProc<span class="k2">(</span><span class="k1">const</span> MIDIPacketList <span class="k3">*</span>pktlist, <span class="k1">void</span> <span class="k3">*</span>refCon, <span class="k1">void</span> <span class="k3">*</span>connRefCon<span class="k2">)</span></td></tr><tr><td class="number">54</td><td><span class="k2">{</span></td></tr><tr><td class="number">55</td><td>  <span class="k1">if</span> <span class="k2">(</span>gOutPort <span class="k3">!</span><span class="k3">=</span> NULL <span class="k3">&amp;</span><span class="k3">&amp;</span> gDest <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">56</td><td>    MIDIPacket <span class="k3">*</span>packet <span class="k3">=</span> <span class="k2">(</span>MIDIPacket <span class="k3">*</span><span class="k2">)</span>pktlist-&gt;packet<span class="k2">;</span>  <span class="c">// remove const (!)</span></td></tr><tr><td class="number">57</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> pktlist-&gt;numPackets<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>j<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">58</td><td>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> packet-&gt;length<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">59</td><td><span class="c">//        printf("%02X ", packet-&gt;data&lt;i&gt;);</span></td></tr><tr><td class="number">60</td><td>&#160;</td></tr><tr><td class="number">61</td><td>        <span class="c">// rechannelize status bytes</span></td></tr><tr><td class="number">62</td><td>        <span class="k1">if</span> <span class="k2">(</span>packet-&gt;data<span class="k3">&lt;</span>i&gt; <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0x80</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> packet-&gt;data<span class="k3">&lt;</span>i&gt; <span class="k3">&lt;</span> <span class="n">0xF0</span><span class="k2">)</span></td></tr><tr><td class="number">63</td><td>          packet-&gt;data<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <span class="k2">(</span>packet-&gt;data<span class="k3">&lt;</span>i&gt; <span class="k3">&amp;</span> <span class="n">0xF0</span><span class="k2">)</span> <span class="k3">|</span> gChannel<span class="k2">;</span></td></tr><tr><td class="number">64</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">65</td><td>&#160;</td></tr><tr><td class="number">66</td><td><span class="c">//      printf("\n");</span></td></tr><tr><td class="number">67</td><td>      packet <span class="k3">=</span> MIDIPacketNext<span class="k2">(</span>packet<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td>    MIDISend<span class="k2">(</span>gOutPort, gDest, pktlist<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">72</td><td><span class="k2">}</span></td></tr><tr><td class="number">73</td><td>&#160;</td></tr><tr><td class="number">74</td><td><span class="k1">int</span>    main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">75</td><td><span class="k2">{</span></td></tr><tr><td class="number">76</td><td>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>    <span class="c">// first argument, if present, is the MIDI channel number to echo to (1-16)</span></td></tr><tr><td class="number">78</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_741.html" target="_blank">sscanf</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="s">"%d"</span>, <span class="k3">&amp;</span>gChannel<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>    <span class="k1">if</span> <span class="k2">(</span>gChannel <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> gChannel <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>gChannel <span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span> gChannel <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>    <span class="k3">-</span><span class="k3">-</span>gChannel<span class="k2">;</span>  <span class="c">// convert to 0-15</span></td></tr><tr><td class="number">82</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">83</td><td>&#160;</td></tr><tr><td class="number">84</td><td>  <span class="c">// create client and ports</span></td></tr><tr><td class="number">85</td><td>  MIDIClientRef client <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">86</td><td>  MIDIClientCreate<span class="k2">(</span>CFSTR<span class="k2">(</span><span class="s">"MIDI Echo"</span><span class="k2">)</span>, NULL, NULL, <span class="k3">&amp;</span>client<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>  </td></tr><tr><td class="number">88</td><td>  MIDIPortRef inPort <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">89</td><td>  MIDIInputPortCreate<span class="k2">(</span>client, CFSTR<span class="k2">(</span><span class="s">"Input port"</span><span class="k2">)</span>, MyReadProc, NULL, <span class="k3">&amp;</span>inPort<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">90</td><td>  MIDIOutputPortCreate<span class="k2">(</span>client, CFSTR<span class="k2">(</span><span class="s">"Output port"</span><span class="k2">)</span>, <span class="k3">&amp;</span>gOutPort<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>  </td></tr><tr><td class="number">92</td><td>  <span class="c">// enumerate devices (not really related to purpose of the echo program</span></td></tr><tr><td class="number">93</td><td>  <span class="c">// but shows how to get information about devices)</span></td></tr><tr><td class="number">94</td><td>  <span class="k1">int</span> i, n<span class="k2">;</span></td></tr><tr><td class="number">95</td><td>  CFStringRef pname, pmanuf, pmodel<span class="k2">;</span></td></tr><tr><td class="number">96</td><td>  <span class="k1">char</span> name<span class="k2">[</span><span class="n">64</span><span class="k2">]</span>, manuf<span class="k2">[</span><span class="n">64</span><span class="k2">]</span>, model<span class="k2">[</span><span class="n">64</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td>  </td></tr><tr><td class="number">98</td><td>  n <span class="k3">=</span> MIDIGetNumberOfDevices<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> n<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">100</td><td>    MIDIDeviceRef dev <span class="k3">=</span> MIDIGetDevice<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>    </td></tr><tr><td class="number">102</td><td>    MIDIObjectGetStringProperty<span class="k2">(</span>dev, kMIDIPropertyName, <span class="k3">&amp;</span>pname<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>    MIDIObjectGetStringProperty<span class="k2">(</span>dev, kMIDIPropertyManufacturer, <span class="k3">&amp;</span>pmanuf<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>    MIDIObjectGetStringProperty<span class="k2">(</span>dev, kMIDIPropertyModel, <span class="k3">&amp;</span>pmodel<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>    </td></tr><tr><td class="number">106</td><td>    CFStringGetCString<span class="k2">(</span>pname, name, <span class="k1">sizeof</span><span class="k2">(</span>name<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>    CFStringGetCString<span class="k2">(</span>pmanuf, manuf, <span class="k1">sizeof</span><span class="k2">(</span>manuf<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>    CFStringGetCString<span class="k2">(</span>pmodel, model, <span class="k1">sizeof</span><span class="k2">(</span>model<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">109</td><td>    CFRelease<span class="k2">(</span>pname<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>    CFRelease<span class="k2">(</span>pmanuf<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>    CFRelease<span class="k2">(</span>pmodel<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>&#160;</td></tr><tr><td class="number">113</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"name=%s, manuf=%s, model=%s\n"</span>, name, manuf, model<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">115</td><td>  </td></tr><tr><td class="number">116</td><td>  <span class="c">// open connections from all sources</span></td></tr><tr><td class="number">117</td><td>  n <span class="k3">=</span> MIDIGetNumberOfSources<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d sources\n"</span>, n<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">119</td><td>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> n<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">120</td><td>    MIDIEndpointRef src <span class="k3">=</span> MIDIGetSource<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>    MIDIPortConnectSource<span class="k2">(</span>inPort, src, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">123</td><td>  </td></tr><tr><td class="number">124</td><td>  <span class="c">// find the first destination</span></td></tr><tr><td class="number">125</td><td>  n <span class="k3">=</span> MIDIGetNumberOfDestinations<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>  <span class="k1">if</span> <span class="k2">(</span>n <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">127</td><td>    gDest <span class="k3">=</span> MIDIGetDestination<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td>&#160;</td></tr><tr><td class="number">129</td><td>  <span class="k1">if</span> <span class="k2">(</span>gDest <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">130</td><td>    MIDIObjectGetStringProperty<span class="k2">(</span>gDest, kMIDIPropertyName, <span class="k3">&amp;</span>pname<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>    CFStringGetCString<span class="k2">(</span>pname, name, <span class="k1">sizeof</span><span class="k2">(</span>name<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">132</td><td>    CFRelease<span class="k2">(</span>pname<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">133</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Echoing to channel %d of %s\n"</span>, gChannel <span class="k3">+</span> <span class="n">1</span>, name<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">134</td><td>  <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">135</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"No MIDI destinations present\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">136</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">137</td><td>&#160;</td></tr><tr><td class="number">138</td><td>  CFRunLoopRun<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">139</td><td>  <span class="c">// run until aborted with control-C</span></td></tr><tr><td class="number">140</td><td>&#160;</td></tr><tr><td class="number">141</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">142</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I guess the relevant bits are:<br /><span class="source-code">	MIDIOutputPortCreate<span class="k2">(</span>client, CFSTR<span class="k2">(</span><span class="s">"Output port"</span><span class="k2">)</span>, <span class="k3">&amp;</span>gOutPort<span class="k2">)</span><span class="k2">;</span></span><br />To create an outgoing port,<br /><span class="source-code">		gDest <span class="k3">=</span> MIDIGetDestination<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></span><br />To pick a MIDI destination and the MIDIPacket and MIDIPacketList structs:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*!</span></td></tr><tr><td class="number">2</td><td><span class="c">  @struct      MIDIPacket</span></td></tr><tr><td class="number">3</td><td><span class="c">  @abstract    A collection of simultaneous MIDI events.</span></td></tr><tr><td class="number">4</td><td><span class="c">  </span></td></tr><tr><td class="number">5</td><td><span class="c">  @field      timeStamp</span></td></tr><tr><td class="number">6</td><td><span class="c">            The time at which the events occurred, if receiving MIDI,</span></td></tr><tr><td class="number">7</td><td><span class="c">            or, if sending MIDI, the time at which the events are to</span></td></tr><tr><td class="number">8</td><td><span class="c">            be played.  Zero means "now."  The time stamp applies</span></td></tr><tr><td class="number">9</td><td><span class="c">            to the first MIDI byte in the packet.</span></td></tr><tr><td class="number">10</td><td><span class="c">  @field      length    </span></td></tr><tr><td class="number">11</td><td><span class="c">            The number of valid MIDI bytes which follow, in data. (It</span></td></tr><tr><td class="number">12</td><td><span class="c">            may be larger than 256 bytes if the packet is dynamically</span></td></tr><tr><td class="number">13</td><td><span class="c">            allocated.)</span></td></tr><tr><td class="number">14</td><td><span class="c">  @field      data</span></td></tr><tr><td class="number">15</td><td><span class="c">            A variable-length stream of MIDI messages.  Running status</span></td></tr><tr><td class="number">16</td><td><span class="c">            is not allowed.  In the case of system-exclusive</span></td></tr><tr><td class="number">17</td><td><span class="c">            messages, a packet may only contain a single message, or</span></td></tr><tr><td class="number">18</td><td><span class="c">            portion of one, with no other MIDI events.</span></td></tr><tr><td class="number">19</td><td><span class="c">            </span></td></tr><tr><td class="number">20</td><td><span class="c">            The MIDI messages in the packet must always be complete,</span></td></tr><tr><td class="number">21</td><td><span class="c">            except for system-exclusive.</span></td></tr><tr><td class="number">22</td><td><span class="c"></span></td></tr><tr><td class="number">23</td><td><span class="c">            (This is declared to be 256 bytes in length so clients</span></td></tr><tr><td class="number">24</td><td><span class="c">            don't have to create custom data structures in simple</span></td></tr><tr><td class="number">25</td><td><span class="c">            situations.)</span></td></tr><tr><td class="number">26</td><td><span class="c">*/</span></td></tr><tr><td class="number">27</td><td><span class="k1">struct</span> MIDIPacket</td></tr><tr><td class="number">28</td><td><span class="k2">{</span></td></tr><tr><td class="number">29</td><td>  MIDITimeStamp    timeStamp<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  UInt16        length<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  Byte        data<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td><span class="k1">typedef</span> <span class="k1">struct</span> MIDIPacket      MIDIPacket<span class="k2">;</span><span class="c">/*!</span></td></tr><tr><td class="number">35</td><td><span class="c">  @struct      MIDIPacketList</span></td></tr><tr><td class="number">36</td><td><span class="c">  @abstract    A list of MIDI events being received from, or being sent to,</span></td></tr><tr><td class="number">37</td><td><span class="c">          one endpoint.</span></td></tr><tr><td class="number">38</td><td><span class="c">  @discussion</span></td></tr><tr><td class="number">39</td><td><span class="c">          The timestamps in the packet list must be in ascending order.</span></td></tr><tr><td class="number">40</td><td><span class="c">          </span></td></tr><tr><td class="number">41</td><td><span class="c">          Note that the packets in the list, while defined as an array, may not be</span></td></tr><tr><td class="number">42</td><td><span class="c">          accessed as an array, since they are variable-length.  To iterate through</span></td></tr><tr><td class="number">43</td><td><span class="c">          the packets in a packet list, use a loop such as:</span></td></tr><tr><td class="number">44</td><td><span class="c">&lt;pre&gt;</span></td></tr><tr><td class="number">45</td><td><span class="c">@textblock</span></td></tr><tr><td class="number">46</td><td><span class="c">  MIDIPacket *packet = &amp;packetList-&gt;packet[0];</span></td></tr><tr><td class="number">47</td><td><span class="c">  for (int i = 0; i &lt; packetList-&gt;numPackets; ++i) {</span></td></tr><tr><td class="number">48</td><td><span class="c">    ...</span></td></tr><tr><td class="number">49</td><td><span class="c">    packet = MIDIPacketNext(packet);</span></td></tr><tr><td class="number">50</td><td><span class="c">  }</span></td></tr><tr><td class="number">51</td><td><span class="c">@/textblock</span></td></tr><tr><td class="number">52</td><td><span class="c">&lt;/pre&gt;</span></td></tr><tr><td class="number">53</td><td><span class="c">  </span></td></tr><tr><td class="number">54</td><td><span class="c">  @field      numPackets</span></td></tr><tr><td class="number">55</td><td><span class="c">            The number of MIDIPackets in the list.</span></td></tr><tr><td class="number">56</td><td><span class="c">  @field      packet</span></td></tr><tr><td class="number">57</td><td><span class="c">            An open-ended array of variable-length MIDIPackets.</span></td></tr><tr><td class="number">58</td><td><span class="c">*/</span></td></tr><tr><td class="number">59</td><td><span class="k1">struct</span> MIDIPacketList</td></tr><tr><td class="number">60</td><td><span class="k2">{</span></td></tr><tr><td class="number">61</td><td>  UInt32        numPackets<span class="k2">;</span>  </td></tr><tr><td class="number">62</td><td>  MIDIPacket      packet<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
With those, just use MIDISend(MIDIPortRef port, MIDIEndpointRef dest, const MIDIPacketList *pktlist).</p><p>EDIT: if you can send me a meaningful hex byte list then I can try to knock up a commandline program for you. At the minute I don&#39;t really know enough about MIDI to be able to do anything on my own.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Sat, 08 Nov 2008 20:25:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thats awesome!<br />thanks for the info.<br />i dont have access to a Mac for another week.<br />I&#39;d love to see a simple commandline app.</p><p>It needs to <br />1. connect to the midiout adapter<br />2. send the bytes from the commandline<br />3. exit</p><p>thats exactly what i need.</p><p>what i want to send is a Program Change message.<br />eg. bin-&gt;  1100nnnn     0ppppppp   Program change<br />in hex.. 0xCn 0x7F  where n is channel, for my purposes it could be hard coded to channel 1 hex=0x00 so  the complete message to send is 2 bytes.</p><p>uint8_t bytes_to_send[2];<br />bytes_to_send[0] = 0xC0;<br />bytes_to_send[0] = 0x7f &amp; atoi(argv[1]);</p><p>reference:   <a href="http://www.midi.org/about-midi/table1.shtml">http://www.midi.org/about-midi/table1.shtml</a></p><p>does that make sense?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (aj5555)</author>
		<pubDate>Mon, 10 Nov 2008 14:06:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool — my main concern is that while it&#39;ll be easy enough to write something that compiles and superficially appears to be throwing bytes at an output device, I&#39;ve not really enough knowledge to be able to test what I&#39;m doing. But if you&#39;ll have a Mac in a week anyway, then I guess you&#39;ll be able to do that bit yourself. I&#39;ll do some hasty work on the Apple demo program and post to this thread or edit this post as necessary in the next couple of days...</p><p>EDIT:<br />Does this do what you want? Time will tell...
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;CoreServices/CoreServices.h&gt; //for file stuff</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;AudioUnit/AudioUnit.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;AudioToolbox/AudioToolbox.h&gt; //for AUGraph</span></td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;unistd.h&gt; // used for usleep...</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="c">// This call creates the Graph and the Synth unit...</span></td></tr><tr><td class="number">7</td><td>OSStatus  CreateAUGraph <span class="k2">(</span>AUGraph <span class="k3">&amp;</span>outGraph, AudioUnit <span class="k3">&amp;</span>outSynth<span class="k2">)</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  OSStatus result<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="c">//create the nodes of the graph</span></td></tr><tr><td class="number">11</td><td>  AUNode synthNode, limiterNode, outNode<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  </td></tr><tr><td class="number">13</td><td>  ComponentDescription cd<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  cd.componentManufacturer <span class="k3">=</span> kAudioUnitManufacturer_Apple<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  cd.componentFlags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  cd.componentFlagsMask <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> NewAUGraph <span class="k2">(</span><span class="k3">&amp;</span>outGraph<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  cd.componentType <span class="k3">=</span> kAudioUnitType_MusicDevice<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  cd.componentSubType <span class="k3">=</span> kAudioUnitSubType_DLSSynth<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphAddNode <span class="k2">(</span>outGraph, <span class="k3">&amp;</span>cd, <span class="k3">&amp;</span>synthNode<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>  cd.componentType <span class="k3">=</span> kAudioUnitType_Effect<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  cd.componentSubType <span class="k3">=</span> kAudioUnitSubType_PeakLimiter<span class="k2">;</span>  </td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphAddNode <span class="k2">(</span>outGraph, <span class="k3">&amp;</span>cd, <span class="k3">&amp;</span>limiterNode<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>  cd.componentType <span class="k3">=</span> kAudioUnitType_Output<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  cd.componentSubType <span class="k3">=</span> kAudioUnitSubType_DefaultOutput<span class="k2">;</span>  </td></tr><tr><td class="number">32</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphAddNode <span class="k2">(</span>outGraph, <span class="k3">&amp;</span>cd, <span class="k3">&amp;</span>outNode<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  </td></tr><tr><td class="number">34</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphOpen <span class="k2">(</span>outGraph<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  </td></tr><tr><td class="number">36</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphConnectNodeInput <span class="k2">(</span>outGraph, synthNode, <span class="n">0</span>, limiterNode, <span class="n">0</span><span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphConnectNodeInput <span class="k2">(</span>outGraph, limiterNode, <span class="n">0</span>, outNode, <span class="n">0</span><span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>  </td></tr><tr><td class="number">39</td><td>  <span class="c">// ok we're good to go - get the Synth Unit...</span></td></tr><tr><td class="number">40</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphNodeInfo<span class="k2">(</span>outGraph, synthNode, <span class="n">0</span>, <span class="k3">&amp;</span>outSynth<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>home:</td></tr><tr><td class="number">43</td><td>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">44</td><td><span class="k2">}</span></td></tr><tr><td class="number">45</td><td>&#160;</td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td><span class="c">// some MIDI constants:</span></td></tr><tr><td class="number">48</td><td><span class="k1">enum</span> <span class="k2">{</span></td></tr><tr><td class="number">49</td><td>  kMidiMessage_ControlChange     <span class="k3">=</span> <span class="n">0xB</span>,</td></tr><tr><td class="number">50</td><td>  kMidiMessage_ProgramChange     <span class="k3">=</span> <span class="n">0xC</span>,</td></tr><tr><td class="number">51</td><td>  kMidiMessage_BankMSBControl   <span class="k3">=</span> <span class="n">0</span>,</td></tr><tr><td class="number">52</td><td>  kMidiMessage_BankLSBControl    <span class="k3">=</span> <span class="n">32</span>,</td></tr><tr><td class="number">53</td><td>  kMidiMessage_NoteOn       <span class="k3">=</span> <span class="n">0x9</span></td></tr><tr><td class="number">54</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>&#160;</td></tr><tr><td class="number">56</td><td><span class="k1">int</span> main <span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">57</td><td>  AUGraph graph <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>  AudioUnit synthUnit<span class="k2">;</span></td></tr><tr><td class="number">59</td><td>  OSStatus result<span class="k2">;</span></td></tr><tr><td class="number">60</td><td>  <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>Buffer<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>  <span class="k1">int</span> BufferLen<span class="k2">;</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">&lt;</span> <span class="n">2</span><span class="k2">)</span></td></tr><tr><td class="number">64</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">65</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"No input!\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">68</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">69</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">70</td><td>    <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">71</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">72</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"odd number of input characters\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>    Buffer <span class="k3">=</span> <span class="k1">new</span> <span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    BufferLen <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>    </td></tr><tr><td class="number">78</td><td>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>Ptr <span class="k3">=</span> argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>    <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>Target <span class="k3">=</span> Buffer<span class="k2">;</span></td></tr><tr><td class="number">80</td><td>    <span class="k1">while</span><span class="k2">(</span><span class="k3">*</span>Ptr<span class="k2">)</span></td></tr><tr><td class="number">81</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">82</td><td>      <span class="k1">if</span><span class="k2">(</span>Ptr<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">&lt;</span> <span class="s">'0'</span> <span class="k3">|</span><span class="k3">|</span> Ptr<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">&gt;</span> <span class="s">'f'</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"illegal character\n"</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">83</td><td>      <span class="k1">if</span><span class="k2">(</span>Ptr<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">&lt;</span> <span class="s">'0'</span> <span class="k3">|</span><span class="k3">|</span> Ptr<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">&gt;</span> <span class="s">'f'</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"illegal character\n"</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">84</td><td>      <span class="k3">*</span>Target <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>Ptr<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> <span class="s">'0'</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">4</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span>Ptr<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> <span class="s">'0'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>      Target<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>      Ptr <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">88</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">89</td><td>&#160;</td></tr><tr><td class="number">90</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> CreateAUGraph <span class="k2">(</span>graph, synthUnit<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>  <span class="c">// ok we're set up to go - initialize and start the graph</span></td></tr><tr><td class="number">92</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphInitialize <span class="k2">(</span>graph<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td>&#160;</td></tr><tr><td class="number">94</td><td>  CAShow <span class="k2">(</span>graph<span class="k2">)</span><span class="k2">;</span> <span class="c">// prints out the graph so we can see what it looks like...</span></td></tr><tr><td class="number">95</td><td>&#160;</td></tr><tr><td class="number">96</td><td>  require_noerr <span class="k2">(</span>result <span class="k3">=</span> AUGraphStart <span class="k2">(</span>graph<span class="k2">)</span>, home<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td>&#160;</td></tr><tr><td class="number">98</td><td>  MusicDeviceSysEx<span class="k2">(</span>synthUnit, Buffer, BufferLen<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>&#160;</td></tr><tr><td class="number">100</td><td>  <span class="c">// ok we're done now</span></td></tr><tr><td class="number">101</td><td>&#160;</td></tr><tr><td class="number">102</td><td>home:</td></tr><tr><td class="number">103</td><td>  <span class="k1">if</span> <span class="k2">(</span>graph<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">104</td><td>    AUGraphStop <span class="k2">(</span>graph<span class="k2">)</span><span class="k2">;</span> <span class="c">// stop playback - AUGraphDispose will do that for us but just showing you what to do</span></td></tr><tr><td class="number">105</td><td>    DisposeAUGraph <span class="k2">(</span>graph<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">107</td><td>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">108</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Mon, 10 Nov 2008 22:06:44 +0000</pubDate>
	</item>
</rss>
