<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Bytes, Nibbles &amp; Bits for CoreMidi</title>
	<atom:link href="http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/feed/" rel="self" type="application/rss+xml" />
	<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/</link>
	<description>only fools &#38; horses work.</description>
	<lastBuildDate>Sat, 01 Jan 2011 23:58:50 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Bruce</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-981</link>
		<dc:creator>Bruce</dc:creator>
		<pubDate>Fri, 21 May 2010 06:02:03 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-981</guid>
		<description>Thanks, that&#039;s a help. When I wrote pattern based, I meant parts actually, a la the Alesis MMT-8. It will alos be a live recorder (packetlists) Don&#039;t know if that changes things. I work best that way, assembling chunks of different and similar sounding parts into songs. Thanks again for your time and thoughts.

[WORDPRESS HASHCASH] The poster sent us &#039;0 which is not a hashcash value.</description>
		<content:encoded><![CDATA[<p>Thanks, that&#8217;s a help. When I wrote pattern based, I meant parts actually, a la the Alesis MMT-8. It will alos be a live recorder (packetlists) Don&#8217;t know if that changes things. I work best that way, assembling chunks of different and similar sounding parts into songs. Thanks again for your time and thoughts.</p>
<p>[WORDPRESS HASHCASH] The poster sent us &#8217;0 which is not a hashcash value.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-925</link>
		<dc:creator>Robert</dc:creator>
		<pubDate>Sun, 09 May 2010 05:03:44 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-925</guid>
		<description>Thanks, that&#039;s a help. When I wrote pattern based, I meant parts actually, a la the Alesis MMT-8. It will alos be a live recorder (packetlists) Don&#039;t know if that changes things. I work best that way, assembling chunks of different and similar sounding parts into songs. Thanks again for your time and thoughts.</description>
		<content:encoded><![CDATA[<p>Thanks, that&#8217;s a help. When I wrote pattern based, I meant parts actually, a la the Alesis MMT-8. It will alos be a live recorder (packetlists) Don&#8217;t know if that changes things. I work best that way, assembling chunks of different and similar sounding parts into songs. Thanks again for your time and thoughts.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: admin</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-918</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Sat, 08 May 2010 06:20:46 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-918</guid>
		<description>&lt;a href=&quot;#comment-917&quot; rel=&quot;nofollow&quot;&gt;@Robert &lt;/a&gt; 
I&#039;m posting this without having had much time to think it through.

I think  timing shouldn&#039;t be a big problem. Maybe you could deliver timestamped midi data in 2 measure chunks. Or you could make the chunk size dependent on the tempo of the pattern. The faster the tempo, the higher the chunk size.

As far as how to structure it all, I would probably approach it like below. Mind you, I haven&#039;t spent much time thinking about this. 

Song
attributes: name, tempo, followSongOrPatternTempo?
has a playlist

Playlist 
has a list of slots.

Slot
attributes: length
has one pattern

Pattern
attributes: name, tempo, length, swing
has 16 tracks
belongs to Song

Track
attributes: name, length, resolution, output, loop
has many steps but resolution determines which steps are active
belongs to a pattern

Step
attributes: active?, accent, index 
has one note or controller message
belongs to a track

Note
attributes: pitch, velocity
belongs to a step. time_stamp can be derived from the step.</description>
		<content:encoded><![CDATA[<p><a href="#comment-917" rel="nofollow">@Robert </a><br />
I&#8217;m posting this without having had much time to think it through.</p>
<p>I think  timing shouldn&#8217;t be a big problem. Maybe you could deliver timestamped midi data in 2 measure chunks. Or you could make the chunk size dependent on the tempo of the pattern. The faster the tempo, the higher the chunk size.</p>
<p>As far as how to structure it all, I would probably approach it like below. Mind you, I haven&#8217;t spent much time thinking about this. </p>
<p>Song<br />
attributes: name, tempo, followSongOrPatternTempo?<br />
has a playlist</p>
<p>Playlist<br />
has a list of slots.</p>
<p>Slot<br />
attributes: length<br />
has one pattern</p>
<p>Pattern<br />
attributes: name, tempo, length, swing<br />
has 16 tracks<br />
belongs to Song</p>
<p>Track<br />
attributes: name, length, resolution, output, loop<br />
has many steps but resolution determines which steps are active<br />
belongs to a pattern</p>
<p>Step<br />
attributes: active?, accent, index<br />
has one note or controller message<br />
belongs to a track</p>
<p>Note<br />
attributes: pitch, velocity<br />
belongs to a step. time_stamp can be derived from the step.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-917</link>
		<dc:creator>Robert</dc:creator>
		<pubDate>Sat, 08 May 2010 05:14:56 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-917</guid>
		<description>Thanks for the post, and congrats on the paying gig. One of the challenges with my own project is figuring out how to handle the data I will be recording and outputting. It&#039;s a pattern based beast, so will have a minimum 99 patterns of variable lengths, each with 16 tracks...and each track will have all the packet/packetlists and other data associated with that. Not sure how best to &#039;struct&#039; all that. Then my other technical wonderment is going to be how to time all that on the way back out and still deal with interface updates, etc.? There&#039;s not much roadmap for all this. Blogs likes yours and others are helpful, since googling on CoreMIDI provides not much information.</description>
		<content:encoded><![CDATA[<p>Thanks for the post, and congrats on the paying gig. One of the challenges with my own project is figuring out how to handle the data I will be recording and outputting. It&#8217;s a pattern based beast, so will have a minimum 99 patterns of variable lengths, each with 16 tracks&#8230;and each track will have all the packet/packetlists and other data associated with that. Not sure how best to &#8216;struct&#8217; all that. Then my other technical wonderment is going to be how to time all that on the way back out and still deal with interface updates, etc.? There&#8217;s not much roadmap for all this. Blogs likes yours and others are helpful, since googling on CoreMIDI provides not much information.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: admin</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-913</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Fri, 07 May 2010 14:45:55 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-913</guid>
		<description>Lol. Shame on me. That weekend never came. I&#039;ll return to the project sometime this month when I&#039;m done with a paying gig :-)

I created a virtual receive port and I went as far as logging the received messages and updating my midi activity monitor. I&#039;ll post what I have done so far and hope you find in useful. If not, I&#039;ll post my complete parser soon.

This is the midiReadProc from my virtual receive port.
&lt;code&gt;static void midiReadProc(const MIDIPacketList *midiPacketList, void *readProcRefCon, void *srcConnRefCon)
{
	[[JXMidiSystem sharedInstance] updateReceiveActivityMonitor];
		
	int i, j;
	MIDIPacket *nextPacket = (MIDIPacket *)midiPacketList-&gt;packet;
	for (j=0 ; j &lt; midiPacketList-&gt;numPackets; ++j)
	{
		for (i = 0; i &lt; nextPacket-&gt;length; ++i)
		{
			NSLog(@&quot;--%02X&quot;, nextPacket-&gt;data[i]);
			
		}
		nextPacket = MIDIPacketNext(nextPacket);
		NSLog(@&quot;MIDIPacketNext&quot;);
	}
	
	
	//left nibble is 0x9A &gt;&gt; 4
	// right nibble  0x9A % 16
	// status bit &gt;&gt; 127
	//y = ((x &gt;&gt; 4) &amp; 0x0f) &#124; ((x &lt;&lt; 4) &amp; 0xf0); swap nibbles
		
}&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Lol. Shame on me. That weekend never came. I&#8217;ll return to the project sometime this month when I&#8217;m done with a paying gig <img src='http://trnsfrmr.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I created a virtual receive port and I went as far as logging the received messages and updating my midi activity monitor. I&#8217;ll post what I have done so far and hope you find in useful. If not, I&#8217;ll post my complete parser soon.</p>
<p>This is the midiReadProc from my virtual receive port.<br />
<code>static void midiReadProc(const MIDIPacketList *midiPacketList, void *readProcRefCon, void *srcConnRefCon)<br />
{<br />
	[[JXMidiSystem sharedInstance] updateReceiveActivityMonitor];</p>
<p>	int i, j;<br />
	MIDIPacket *nextPacket = (MIDIPacket *)midiPacketList->packet;<br />
	for (j=0 ; j < midiPacketList->numPackets; ++j)<br />
	{<br />
		for (i = 0; i < nextPacket->length; ++i)<br />
		{<br />
			NSLog(@"--%02X", nextPacket->data[i]);</p>
<p>		}<br />
		nextPacket = MIDIPacketNext(nextPacket);<br />
		NSLog(@"MIDIPacketNext");<br />
	}</p>
<p>	//left nibble is 0x9A >> 4<br />
	// right nibble  0x9A % 16<br />
	// status bit >> 127<br />
	//y = ((x >> 4) &#038; 0x0f) | ((x < < 4) &#038; 0xf0); swap nibbles</p>
<p>}</code></code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert</title>
		<link>http://trnsfrmr.com/2010/03/12/bytes-nibbles-bits-for-coremidi/comment-page-1/#comment-910</link>
		<dc:creator>Robert</dc:creator>
		<pubDate>Fri, 07 May 2010 09:35:45 +0000</pubDate>
		<guid isPermaLink="false">http://trnsfrmr.com/?p=174#comment-910</guid>
		<description>Did you get your parser done before you bailed on the project? If so, please do post or email it still. I am working on a 16 track sequencer and I need all the help I can get. :)  Thanks for your other CoreMIDI posts. (All two of them). :)</description>
		<content:encoded><![CDATA[<p>Did you get your parser done before you bailed on the project? If so, please do post or email it still. I am working on a 16 track sequencer and I need all the help I can get. <img src='http://trnsfrmr.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Thanks for your other CoreMIDI posts. (All two of them). <img src='http://trnsfrmr.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

