<?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>Code Log &#187; Java</title>
	<atom:link href="http://code.compartmental.net/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://code.compartmental.net</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 04:07:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sound Byte: Microtalk Tune</title>
		<link>http://code.compartmental.net/2010/05/22/sound-byte-microtalk-tune/</link>
		<comments>http://code.compartmental.net/2010/05/22/sound-byte-microtalk-tune/#comments</comments>
		<pubDate>Sat, 22 May 2010 20:46:56 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Sound Bytes]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=243</guid>
		<description><![CDATA[
I recently gave a 5 minute &#8220;microtalk&#8221; about Minim at an Austin IGDA event and included in it a couple examples using the new UGen framework. In fact, I wrote the presentation in Processing, but I don&#8217;t think it is really interesting enough to post the entire application. Instead, I pulled out the song I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.compartmental.net/soundBytes/microtalk_tune"><img src="http://code.compartmental.net/wp-content/uploads/2010/05/Screen-shot-2010-05-22-at-3.40.21-PM.png" alt="" title="Microtalk Tune Screenshot" width="504" height="399" class="alignnone size-full wp-image-244" /></a></p>
<p>I recently gave a 5 minute &#8220;microtalk&#8221; about Minim at an Austin IGDA event and included in it a couple examples using the new UGen framework. In fact, I wrote the presentation in Processing, but I don&#8217;t think it is really interesting enough to post the entire application. Instead, I pulled out the song I programmed for it as a standalone sketch. <a href="http://code.compartmental.net/soundBytes/microtalk_tune">Check it out.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2010/05/22/sound-byte-microtalk-tune/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sound Byte: Loop Chopper</title>
		<link>http://code.compartmental.net/2010/05/07/sound-byte-loop-chopper/</link>
		<comments>http://code.compartmental.net/2010/05/07/sound-byte-loop-chopper/#comments</comments>
		<pubDate>Sat, 08 May 2010 04:08:59 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Sound Bytes]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=237</guid>
		<description><![CDATA[
This Sound Byte gives you sliders to control the parameters of a GranulateSteady UGen, which allows you chop up a sound as it plays. I&#8217;ve created a loop from the song Again and Again by The Bird and The Bee, which will hopefully get annoying enough that you&#8217;ll want to chop it into indiscernibility. The [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.compartmental.net/soundBytes/loop_chopper"><img src="http://code.compartmental.net/wp-content/uploads/2010/05/loop_chopper_img-300x225.png" alt="" title="loop_chopper_img" width="300" height="225" class="alignnone size-medium wp-image-239" /></a></p>
<p>This Sound Byte gives you sliders to control the parameters of a GranulateSteady UGen, which allows you chop up a sound as it plays. I&#8217;ve created a loop from the song Again and Again by The Bird and The Bee, which will hopefully get annoying enough that you&#8217;ll want to chop it into indiscernibility. The buttons along the side let you set the range of the sliders from quite small, to a full second.</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2010/05/07/sound-byte-loop-chopper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sound Bytes: Oscil as a looping sampler</title>
		<link>http://code.compartmental.net/2010/05/01/sound-bytes-oscil-as-a-looping-sampler/</link>
		<comments>http://code.compartmental.net/2010/05/01/sound-bytes-oscil-as-a-looping-sampler/#comments</comments>
		<pubDate>Sun, 02 May 2010 05:35:34 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Sound Bytes]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=227</guid>
		<description><![CDATA[Eventually, we plan to add a UGen to Minim that will allow you to control the generating speed of any other UGen, but that got me thinking about how you might do something similar with existing components. So, I struck upon the idea of using an Oscil as a looping sampler by using an audio [...]]]></description>
			<content:encoded><![CDATA[<p>Eventually, we plan to add a UGen to Minim that will allow you to control the generating speed of any other UGen, but that got me thinking about how you might do something similar with existing components. So, I struck upon the idea of using an Oscil as a looping sampler by using an audio file as the Waveform and setting the frequency of the Oscil to be very low. The fun thing about this is that if you set the Oscil to a negative frequency, the sound will play in reverse. Additionally, I thought it&#8217;d be fun to be able to automate the changing of the frequency by having an LFO control the frequency of each Oscil (left and right channels of the original audio file). So here&#8217;s a sketch that lets you play with this setup:</p>
<p><a href="http://code.compartmental.net/soundBytes/sample_oscil"><img src="http://code.compartmental.net/wp-content/uploads/2010/05/sample_oscil_img-300x224.png" alt="Screenshot of the sample_oscil sketch." title="sample_oscil_img" width="300" height="224" class="alignnone size-medium wp-image-228" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2010/05/01/sound-bytes-oscil-as-a-looping-sampler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sound Byte: Mass-Spring-Damper System</title>
		<link>http://code.compartmental.net/2010/04/29/sound-byte-mass-spring-damper-system/</link>
		<comments>http://code.compartmental.net/2010/04/29/sound-byte-mass-spring-damper-system/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 03:35:17 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[DSP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Sound Bytes]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=220</guid>
		<description><![CDATA[I&#8217;m picking my way through Real Sound Synthesis for Interactive Applications by Perry R. Cook (one of the authors of the STK) and decided to start making small apps to demonstrate the different kinds of synthesis he covers in the book. This first one let&#8217;s you set the variables of a mass-spring-damper system and then [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m picking my way through Real Sound Synthesis for Interactive Applications by Perry R. Cook (one of the authors of the <a href="https://ccrma.stanford.edu/software/stk/">STK</a>) and decided to start making small apps to demonstrate the different kinds of synthesis he covers in the book. This first one let&#8217;s you set the variables of a mass-spring-damper system and then trigger it, which is exactly the same as setting the coefficients of a two-pole IIR filter and sending an impulse into it (as it turns out). Check it:</p>
<p><a href="http://code.compartmental.net/soundBytes/mass_spring_damper"><img src="http://code.compartmental.net/wp-content/uploads/2010/04/mass-spring-damper-img-300x188.png" alt="Sceenshot of the mass-spring-damper applet." title="mass-spring-damper-img" width="300" height="188" class="alignnone size-medium wp-image-221" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2010/04/29/sound-byte-mass-spring-damper-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minim 2.1.0 BETA</title>
		<link>http://code.compartmental.net/2010/04/13/minim-2-1-0-beta/</link>
		<comments>http://code.compartmental.net/2010/04/13/minim-2-1-0-beta/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 04:05:29 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=214</guid>
		<description><![CDATA[I am happy to announce the arrival of Minim 2.1.0 BETA. 
This is a beta build of the next release, which contains the new UGen framework developed by myself and Anderson Mills through his project at Numediart. There are still a few loose ends to clean up, primarily documentation related, but we expect to have [...]]]></description>
			<content:encoded><![CDATA[<p>I am happy to announce the arrival of <a href="http://code.compartmental.net/minim/distro/minim-2.1.0-BETA.zip">Minim 2.1.0 BETA</a>. </p>
<p>This is a beta build of the next release, which contains the new UGen framework developed by myself and Anderson Mills through his project at <a href="http://www.numediart.org/">Numediart</a>. There are still a few loose ends to clean up, primarily documentation related, but we expect to have everything wrapped by the end of June. Until then, feel free to give this build a whirl and see how you like the new real-time synthesis capabilities made possible by the UGen framework.  </p>
<p>At this time, all of the documentation is in the form of Javadocs, which are included with the download. I hope that you find the docs for the UGen framework clear enough to get started. If not, there are also quite a few new examples included in the download that demonstrate how to use many of the UGens and how to programmatically sequence sound. </p>
<p>To install this release, you will simply unzip the archive into a folder named libraries in your sketch folder. This folder may already exist if you&#8217;ve installed other libraries not included with the Processing download; create the folder if it doesn&#8217;t exist. By installing this release in your sketchbook&#8217;s libraries folder, you will make Processing use this release instead of the release included with Processing. All of your existing sketches should still work. If you find one that doesn&#8217;t, please <a href="http://github.com/ddf/Minim/issues">create an Issue on Github</a>.</p>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2010/04/13/minim-2-1-0-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Sequencer Quirk</title>
		<link>http://code.compartmental.net/2009/06/07/java-sequencer-quirk/</link>
		<comments>http://code.compartmental.net/2009/06/07/java-sequencer-quirk/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 22:03:24 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaSound]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[Sequencer]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=154</guid>
		<description><![CDATA[I&#8217;m working on a music app that involves using Midi to trigger audio. Yesterday I wound up in a situation where after adding a new Track to my Sequence, I wasn&#8217;t receiving any of the MidiEvents that I added to the track. The problem, it turns out, is that the default Java Sequencer appears to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a music app that involves using Midi to trigger audio. Yesterday I wound up in a situation where after adding a new Track to my Sequence, I wasn&#8217;t receiving any of the MidiEvents that I added to the track. The problem, it turns out, is that the default Java Sequencer appears to cache all of the Tracks in a Sequence when you initially set the Sequence on the Sequencer using the setSequence method. If you modify the Sequence itself, as opposed to modifying the contents of the Tracks in the Sequence, the Sequencer won&#8217;t know about it until you call setSequence again. Just thought I&#8217;d throw this little tidbit out there, in case someone else runs into the same problem. Here&#8217;s some code to illustrate my point:</p>
<p>[snip java]<br />
// make a sequence<br />
Sequence s = new Sequence(Sequence.PPQ, 4);</p>
<p>// make a track in the sequence<br />
Track t = s.createTrack();</p>
<p>// add midi events to the track<br />
// &#8230;</p>
<p>// make a sequencer<br />
Sequencer seq = MidiSystem.getSequencer();<br />
seq.open();<br />
seq.setSequence(s);<br />
seq.start();</p>
<p>// at this point, we can modify the Track<br />
// and the Sequencer will pick up those new notes<br />
// but if we do this:<br />
Track t2 = s.createTrack();<br />
// and then add notes to this track<br />
// the Sequencer will NOT play these notes<br />
// because it doesn&#8217;t know about the track we just created<br />
// we have to SET THE SEQUENCE AGAIN!<br />
seq.setSequence(s);<br />
// now the sequencer will play the notes in the track we just created.<br />
[/snip]</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2009/06/07/java-sequencer-quirk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minim Manual Updated.</title>
		<link>http://code.compartmental.net/2008/11/27/minim-manual-updated/</link>
		<comments>http://code.compartmental.net/2008/11/27/minim-manual-updated/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 04:35:37 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/?p=133</guid>
		<description><![CDATA[Reas kicked me in the ass (via e-mail), so I updated the Minim Manual to reflect the Minim 2.0 API. I need to give a shout-out to Urban Giraffe for their Wordpress plug-in Sniplets. This enabled me to pull all of the examples in the Manual directly from the online examples. This means that any [...]]]></description>
			<content:encoded><![CDATA[<p>Reas kicked me in the ass (via e-mail), so I updated the <a href="http://code.compartmental.net/tools/minim/manual-introduction/">Minim Manual</a> to reflect the Minim 2.0 API. I need to give a shout-out to <a href="http://urbangiraffe.com/">Urban Giraffe</a> for their Wordpress plug-in <a href="http://urbangiraffe.com/plugins/sniplets/">Sniplets</a>. This enabled me to pull all of the examples in the Manual directly from the online examples. This means that any time I update the online examples, they will be immediately reflected in the Manual. Rock, rock on, says I.</p>
<p>I&#8217;m pretty sure that I didn&#8217;t leave anything out, but if you spot any omissions, mistakes, or poorly written explanations, please let me know! I will endeavor to fix the problem as quickly as possible.</p>
<p>Also worth mentioning in this post is that <a href="http://www.processing.org/download/index.html">Processing 1.0</a> is out! I can&#8217;t say I contributed much to its release, but its imminent release is what got me to finally cleanup and release Minim 2.0. One exciting detail I don&#8217;t think I&#8217;ve mentioned is that Minim is now one of the libraries that comes with the Processing download. I am very honored to have my library so closely tied to such an awesome project and I hope that people find working with Minim as easy as it is to work with the core Processing API.</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2008/11/27/minim-manual-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug Fix: Minim 2.0.1</title>
		<link>http://code.compartmental.net/2008/10/12/bug-fix-minim-201/</link>
		<comments>http://code.compartmental.net/2008/10/12/bug-fix-minim-201/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 18:22:25 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/2008/10/12/bug-fix-minim-201/</guid>
		<description><![CDATA[While writing the example that I just posted, I discovered a couple nasty bugs that would have made a lot of people unhappy. For the curious, they were that the getChannel method was not returning the correct channel when using BufferedAudio.LEFT and BufferedAudio.RIGHT, and that stereo AudioSamples were only playing the left channel. All my [...]]]></description>
			<content:encoded><![CDATA[<p>While writing the example that I <a href="http://code.compartmental.net/2008/10/12/howto-manipulate-an-audiosample-in-minim-20/">just posted</a>, I discovered a couple nasty bugs that would have made a lot of people unhappy. For the curious, they were that the <code>getChannel</code> method was not returning the correct channel when using <code>BufferedAudio.LEFT</code> and <code>BufferedAudio.RIGHT</code>, and that stereo <code>AudioSamples</code> were only playing the left channel. All my tests thus far have used mono files, so that one just slipped past me. I&#8217;ve packed up a new release and updated the <a href="http://code.compartmental.net/tools/minim/">download page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2008/10/12/bug-fix-minim-201/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: Manipulate an AudioSample in Minim 2.0</title>
		<link>http://code.compartmental.net/2008/10/12/howto-manipulate-an-audiosample-in-minim-20/</link>
		<comments>http://code.compartmental.net/2008/10/12/howto-manipulate-an-audiosample-in-minim-20/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 18:15:22 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/2008/10/12/howto-manipulate-an-audiosample-in-minim-20/</guid>
		<description><![CDATA[Kyle says, &#8220;Like what if I want to load up a sound and remove certain portions that fit some criteria or rearrange it (i.e., non-real-time processing)?&#8221;
What you want to do is currently possible to a certain degree using AudioSample. It now has a method called getChannel(int), which comes from the BufferedAudio interface. This method returns [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.compartmental.net/2008/10/11/minim-20-released/#comment-619">Kyle</a> says, &#8220;Like what if I want to load up a sound and remove certain portions that fit some criteria or rearrange it (i.e., non-real-time processing)?&#8221;</p>
<p>What you want to do is currently possible to a certain degree using <code>AudioSample</code>. It now has a method called <code>getChannel(int)</code>, which comes from the <a href="http://code.compartmental.net/minim/javadoc/ddf/minim/BufferedAudio.html">BufferedAudio</a> interface. This method returns in a <code>float</code> array the actual samples being used by the object when you trigger it. You can then manipulate those values and hear the change when you trigger it.</p>
<p><strong>Example</strong> (<a href="http://code.compartmental.net/minim/examples/AudioSample/getChannel/">view online</a>)<br />
[snip java]<br />
import ddf.minim.*;</p>
<p>Minim minim;<br />
AudioSample jingle;</p>
<p>void setup()<br />
{<br />
  size(512, 200, P3D);</p>
<p>  minim = new Minim(this);</p>
<p>  jingle = minim.loadSample(&#8220;jingle.mp3&#8243;, 2048);<br />
  // get the left channel of the audio as a float array<br />
  // getChannel is defined in the interface BuffereAudio,<br />
  // which also defines two constants to use as an argument<br />
  // BufferedAudio.LEFT and BufferedAudio.RIGHT<br />
  float[] leftChannel = jingle.getChannel(BufferedAudio.LEFT);<br />
  // now we are just going to reverse the left channel<br />
  float[] reversed = reverse(leftChannel);<br />
  arraycopy(reversed, 0, leftChannel, 0, leftChannel.length);<br />
}</p>
<p>void draw()<br />
{<br />
  background(0);<br />
  stroke(255);<br />
  for(int i = 0; i < jingle.bufferSize() &#8211; 1; i++)<br />
  {<br />
    line(i, 50 &#8211; jingle.left.get(i)*50, i+1, 50 &#8211; jingle.left.get(i+1)*50);<br />
    line(i, 150 &#8211; jingle.right.get(i)*50, i+1, 150 &#8211; jingle.right.get(i+1)*50);<br />
  }<br />
}</p>
<p>void keyPressed()<br />
{<br />
  jingle.trigger();<br />
}</p>
<p>void stop()<br />
{<br />
  // always close Minim audio classes when you finish with them<br />
  jingle.close();<br />
  minim.stop();</p>
<p>  super.stop();<br />
}<br />
[/snip]</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2008/10/12/howto-manipulate-an-audiosample-in-minim-20/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Minim 2.0 Released!</title>
		<link>http://code.compartmental.net/2008/10/11/minim-20-released/</link>
		<comments>http://code.compartmental.net/2008/10/11/minim-20-released/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 03:22:34 +0000</pubDate>
		<dc:creator>ddf</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Minim]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Releases]]></category>

		<guid isPermaLink="false">http://code.compartmental.net/2008/10/11/minim-20-released/</guid>
		<description><![CDATA[Egged on by the Processing 1.0 team, I spent today putting together a new release of Minim, which had been languishing on my computer. The lion&#8217;s share of the work was simply updating the examples and then uploading them. I really need to automate that process, it&#8217;s a big pain. Still not done: updating the [...]]]></description>
			<content:encoded><![CDATA[<p>Egged on by the Processing 1.0 team, I spent today putting together a <a href="http://code.compartmental.net/tools/minim/">new release of Minim</a>, which had been languishing on my computer. The lion&#8217;s share of the work was simply updating the examples and then uploading them. I really need to automate that process, it&#8217;s a big pain. Still not done: updating the manual.</p>
<p>A very important change to be aware of if you are upgrading, is that the <code>Minim</code> class is now instantiable. All of the <code>load</code> and <code>get</code> methods have been changed to regular old member functions, rather than static on the class. The static <code>start(PApplet)</code> method has been removed, you must now pass your sketch into the constructor, like so:</p>
<p>[snip java]<br />
Minim minim = new Minim(this);<br />
AudioPlayer player = minim.loadFile(&#8220;blah.wav&#8221;);<br />
[/snip]</p>
<p>A very cool addition is <code>getMetaData()</code> for <code>AudioPlayer</code>, <code>AudioSnippet</code>, and <code>AudioSample</code>. The ability to read the ID3 tags from mp3 files was always there in the package I use for playing those, but I didn&#8217;t hook it up initially. Now all the tags you probably care about get stuffed into an <code>AudioMetaData</code> object when you load a file. Check out the <a href="http://code.compartmental.net/minim/examples/Playable/getMetaData/">online example</a>.</p>
<p>An interesting implementation change is that I&#8217;ve broken out the Javasound specific code from the generic audio abstraction layer code. This means that there is now a package called <a href="http://code.compartmental.net/minim/javadoc/ddf/minim/spi/package-summary.html">ddf.minim.spi</a>, which defines a bunch of interfaces that Minim uses to load files and acquire inputs and outputs. The key interface is <code>MinimServiceProvider</code>, which looks a lot like a slimmed down version of Minim&#8217;s interface. It is now possible for you implement <code>MinimServiceProvider</code> and then pass an instance of your implementation into the Minim constructor. Minim will use your implementation for all audio resource acquisition. This means that the default implementation, which uses Javasound, does exactly that and lives in jsminim.jar, which is included with the distro. One of the reasons that I did this was so that I could easily write an implementation of Minim that uses an FModEx Java binding. Work has begun on that, but it is not yet finished. Still, something to look forward to!</p>
]]></content:encoded>
			<wfw:commentRss>http://code.compartmental.net/2008/10/11/minim-20-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
