<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-27652</id>
	<title>Nabble - OpenJDK Audio Engine Development</title>
	<updated>2008-11-20T19:04:50Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/OpenJDK-Audio-Engine-Development-f27652.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/OpenJDK-Audio-Engine-Development-f27652.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-20614493</id>
	<title>Issue with AudioSystem.getSoundbank() plus proposed patch.</title>
	<published>2008-11-20T19:04:50Z</published>
	<updated>2008-11-20T19:04:50Z</updated>
	<author>
		<name>Bill Brown</name>
	</author>
	<content type="html">Greetings Audio Devs: &lt;br&gt;&lt;br&gt;I did not find this issue discussed previously in the archives.&amp;nbsp; I have run into an issue with the current Openjdk implementation of AudioSystem.getSoundbank() that applies to all three variants File, URL and InputStream.&amp;nbsp;&amp;nbsp; The current implementation only considers the first valid javax.sound.midi.spi.SoundbankReader&amp;nbsp; instead of checking the Soundbank instance for use with the loaded or default Synthesizer.&amp;nbsp; This consideration is arbitrary based on the order in which the SoundBankReader implementations are made available and my be wrong when there are multiple providers for different synths that handle the same file type / format. &lt;br&gt;
&lt;br&gt;The Soundbank returned from the method is only useable by a Synthesizer (the currently loaded Synthesizer) and each Synthesizer&amp;#39;s soundbanks are unique for that synthesizer by design (&lt;a href=&quot;http://www.j2ee.me/j2se/1.3/pdf/javasound.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.j2ee.me/j2se/1.3/pdf/javasound.pdf&lt;/a&gt;&amp;nbsp; section &amp;quot;Providing Soundbank File-Reading Services&amp;quot; p. 148).&amp;nbsp;&amp;nbsp;&amp;nbsp; My current project (code named EMAP) provides a SoundbankReader for the same .sf2 file type as Gervill.&amp;nbsp; This current MidiSystem.getSoundbank() breaks my app and have not figured out a workaround that doesn&amp;#39;t involve the proposed patch.&amp;nbsp; &lt;br&gt;
&lt;br&gt;Because it is possible to enforce which Synthesizer is used by setting the system property javax.sound.midi.Synthesizer, it should be possible to load a soundbank from a file that is supported by the loaded Synthesizer.&amp;nbsp; Here is a patch suggestion that can somewhat handle this request without adding a big implementation change:&lt;code&gt;&lt;/code&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;public static Soundbank getSoundbank(File file) //can be used also for the URLand InputStream signatures&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws InvalidMidiDataException, IOException {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SoundbankReader sp = null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Soundbank s = null;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Soundbank validSoundbank = null;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List providers = getSoundbankReaders();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i = 0; i &amp;lt; providers.size(); i++) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp = (SoundbankReader)providers.get(i);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; s = sp.getSoundbank(file);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }catch(IOException io){}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (InvalidMidiDataException ime){}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( s!= null) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //crosscheck support with the current default synthesizer.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //because the soundbank is not much use otherwise.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //there may be more than on synth in the system &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //that supports this file format.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Synthesizer synth = (Synthesizer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; getDefaultDeviceWrapper(Synthesizer.class);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(synth.isSoundbankSupported(s)){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //still arbitrary at this point but at least we have &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //checked against the default synthesizer.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validSoundbank = s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }catch(MidiUnavailableException e){}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(validSoundbank != null){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return validSoundbank;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new InvalidMidiDataException(&amp;quot;cannot get soundbank from stream&amp;quot;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&lt;br&gt;I think the API would be more robust if it could handle the scenario
where there are multiple providers that can handle the same file type.&amp;nbsp;
I think the extra overhead that this patch creates is small compared to the usefullness of being able to get a handle on a Soundbank that will work with the currently loaded Synthesizer.&amp;nbsp; Another way to handle this issue could be to add signatures and implementations in the API to allow a Synthesizer to load a Soundbank in the same manner as the MidiSystem.&amp;nbsp; But it you did that, I don&amp;#39;t see much use for the MidiSystem versions.&lt;br&gt;
&lt;br&gt;Please consider this patch, or something like it,&amp;nbsp; for inclusion to the openjdk implementation or possibly provide some workaround for loading a useable Soundbank when there are multiple synths in the system that support the same format.&amp;nbsp; &lt;br&gt;
&lt;br&gt;Thanks for looking at this..&lt;br&gt;Bill.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20614493&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Issue-with-AudioSystem.getSoundbank%28%29-plus-proposed-patch.-tp20614493p20614493.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-20418511</id>
	<title>New Gervill CVS imported into IcedTea6</title>
	<published>2008-11-10T03:45:48Z</published>
	<updated>2008-11-10T03:45:48Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I updated the IcedTea6 Gervill overlay with current Gervill CVS.
&lt;br&gt;&lt;br&gt;Out current set of changes compared with upstream are now really minimal
&lt;br&gt;(diff attached). It incorporates a couple of the fixes for the
&lt;br&gt;unloadInstruments methods from icedtea. It also fixes an imported bug
&lt;br&gt;reported against icedtea &amp;quot;freezes on simple midi app&amp;quot;:
&lt;br&gt;&lt;a href=&quot;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=213&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=213&lt;/a&gt;&lt;br&gt;&lt;br&gt;Also since openjdk6 imported a newer Gervill and incorporated a couple
&lt;br&gt;of the changes in the icedtea gervill not yet upstream, we are a bit
&lt;br&gt;closer again. diff between icedtea6-openjdk6 attached. Some of this is
&lt;br&gt;just reformatting changed done in the openjdk6 on the upstream sources.
&lt;br&gt;Not included in the diff is the renaming/changes to the upstream tests
&lt;br&gt;(most of which are similar to our and upstream tests, but repackaged and
&lt;br&gt;slightly reformatted).
&lt;br&gt;&lt;br&gt;All jtreg tests, both the com/sun/media/sound ones from upstream, as the
&lt;br&gt;older javax/sound/midi in openjdk6 (which are almost all a copy of the
&lt;br&gt;upstream tests renamed into a different package) pass.
&lt;br&gt;And you can run them with the new jtreg -s flag, which gives an enormous
&lt;br&gt;speed boost! That is in 45 seconds. Compared to 4.5 minutes without -s.
&lt;br&gt;Test results: passed: 475
&lt;br&gt;&lt;br&gt;2008-11-10 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20418511&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CHANGES.txt,SoftAudioPusher.java,SoftFilter.java,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftJitterCorrector.java,SoftMainMixer.java,SoftVoice.java:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Updated to new Gervill CVS.
&lt;br&gt;&lt;br&gt;Changes to the icedtea overlays since last import attached.
&lt;br&gt;&lt;br&gt;The actual changes to Gervill since our last import:
&lt;br&gt;&lt;br&gt;- Fix: Throw IllegalArgumentException Exception on
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;invalid soundbank to:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadAllInstruments(Soundbank soundbank)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstruments(Soundbank soundbank, Patch[] patchList)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;just like done in:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstrument(Instrument instrument).
&lt;br&gt;- Change: SoftMainMixer, SoftVoice optimized for mono voices.
&lt;br&gt;- Change: SoftFilter optimized. 
&lt;br&gt;- Fix: Turn SoftJitterCorrector, SoftAudioPusher threads into a daemon threads.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;These threads prevented the VM to exit when synthesizer was open.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;See: &lt;a href=&quot;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=213&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=213&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br /&gt;Index: build.xml
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/build.xml,v
&lt;br&gt;retrieving revision 1.2
&lt;br&gt;diff -u -r1.2 build.xml
&lt;br&gt;--- build.xml	14 Dec 2007 03:33:11 -0000	1.2
&lt;br&gt;+++ build.xml	10 Nov 2008 10:09:28 -0000
&lt;br&gt;@@ -29,7 +29,8 @@
&lt;br&gt;&amp;nbsp;&amp;lt;!-- run javac to compile the source files --&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;target name=&amp;quot;compile&amp;quot; depends=&amp;quot;init&amp;quot;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;javac srcdir=&amp;quot;${src}&amp;quot; 
&lt;br&gt;-destdir=&amp;quot;${build}&amp;quot;&amp;gt; 
&lt;br&gt;+destdir=&amp;quot;${build}&amp;quot;
&lt;br&gt;+debug=&amp;quot;true&amp;quot;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;classpath&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;path refid=&amp;quot;lib.path&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;/classpath&amp;gt; 
&lt;br&gt;@@ -69,4 +70,4 @@
&lt;br&gt;&amp;nbsp;&amp;lt;delete dir=&amp;quot;${lib}&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;delete dir=&amp;quot;${docs}&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;/target&amp;gt; 
&lt;br&gt;-&amp;lt;/project&amp;gt; 
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+&amp;lt;/project&amp;gt; 
&lt;br&gt;Index: src/com/sun/media/sound/DLSSoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/DLSSoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 DLSSoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/DLSSoundbankReader.java	5 Jun 2008 01:55:28 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/DLSSoundbankReader.java	10 Nov 2008 10:09:28 -0000
&lt;br&gt;@@ -47,6 +47,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DLSSoundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SF2SoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SF2SoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 SF2SoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/SF2SoundbankReader.java	5 Jun 2008 01:55:33 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/SF2SoundbankReader.java	10 Nov 2008 10:09:28 -0000
&lt;br&gt;@@ -46,6 +46,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new SF2Soundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SoftChannel.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftChannel.java,v
&lt;br&gt;retrieving revision 1.11
&lt;br&gt;diff -u -r1.11 SoftChannel.java
&lt;br&gt;--- src/com/sun/media/sound/SoftChannel.java	27 Jul 2008 19:06:21 -0000	1.11
&lt;br&gt;+++ src/com/sun/media/sound/SoftChannel.java	10 Nov 2008 10:09:28 -0000
&lt;br&gt;@@ -1215,7 +1215,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getController(int controller) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (control_mutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Should only return lower 7 bits,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// even when controller is &amp;quot;boosted&amp;quot; higher.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller] &amp; 127;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[icedtea-openjdk.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- /home/mark/src/openjdk6/jdk/src/share/classes/com/sun/media/sound/SoftFilter.java	2008-11-05 10:12:10.000000000 +0100
&lt;br&gt;+++ jdk/src/share/classes/com/sun/media/sound/SoftFilter.java	2008-11-10 10:40:49.000000000 +0100
&lt;br&gt;@@ -543,8 +543,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void filter1(SoftAudioBuffer sbuffer) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] buffer = sbuffer.array();
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dirty) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filter1calc();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirty = false;
&lt;br&gt;@@ -559,6 +557,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (wet &amp;gt; 0 || last_wet &amp;gt; 0) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] buffer = sbuffer.array();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = buffer.length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float a0 = this.last_a0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float q = this.last_q;
&lt;br&gt;@@ -577,14 +576,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;q += q_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gain += gain_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wet += wet_delta;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain * wet + buffer[i] * (1 - wet);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (a0_delta == 0 &amp;&amp; q_delta == 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;@@ -592,8 +593,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a0 += a0_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;q += q_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gain += gain_delta;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -611,4 +613,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.last_gain = this.gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.last_wet = this.wet;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-}
&lt;br&gt;+}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;--- /home/mark/src/openjdk6/jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java	2008-11-05 10:12:10.000000000 +0100
&lt;br&gt;+++ jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java	2008-11-10 10:40:49.000000000 +0100
&lt;br&gt;@@ -48,16 +48,18 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_LEFT = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_RIGHT = 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT1 = 2;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT2 = 3;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT3 = 4;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT4 = 5;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_MONO = 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT1 = 3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT2 = 4;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT3 = 5;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT4 = 6;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_LEFT_DRY = 10;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_RIGHT_DRY = 11;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_SCRATCH1 = 12;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_SCRATCH2 = 13;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_LEFT = 14;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_RIGHT = 15;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_MONO = 16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected boolean active_sensing_on = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private long msec_last_activity = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean pusher_silent = false;
&lt;br&gt;@@ -485,8 +487,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// to channelmixer left,right input/output
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer leftbak = buffers[CHANNEL_LEFT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer rightbak = buffers[CHANNEL_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer monobak = buffers[CHANNEL_MONO];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_LEFT] = buffers[CHANNEL_CHANNELMIXER_LEFT];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = buffers[CHANNEL_CHANNELMIXER_LEFT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = buffers[CHANNEL_CHANNELMIXER_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO] = buffers[CHANNEL_CHANNELMIXER_MONO];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int bufferlen = buffers[CHANNEL_LEFT].getSize();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -503,6 +507,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (ModelChannelMixer cmixer : act_registeredMixers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; cbuffer.length; i++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(cbuffer[i], 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO].clear();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean hasactivevoices = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; voicestatus.length; i++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].active)
&lt;br&gt;@@ -516,6 +521,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cur_registeredMixers = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!buffers[CHANNEL_MONO].isSilent())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] mono = buffers[CHANNEL_MONO].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] left = buffers[CHANNEL_LEFT].array(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nrofchannels != 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] right = buffers[CHANNEL_RIGHT].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float v = mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; cbuffer.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] cbuff = cbuffer[i];
&lt;br&gt;@@ -539,6 +564,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_LEFT] = leftbak;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = rightbak;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO] = monobak;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -546,6 +572,27 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].active)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].channelmixer == null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;voicestatus[i].processAudioLogic(buffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!buffers[CHANNEL_MONO].isSilent())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] mono = buffers[CHANNEL_MONO].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] left = buffers[CHANNEL_LEFT].array(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int bufferlen = buffers[CHANNEL_LEFT].getSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nrofchannels != 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] right = buffers[CHANNEL_RIGHT].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float v = mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Run effects
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (synth.chorus_on)
&lt;br&gt;@@ -665,7 +712,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/ synth.getControlRate());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;control_mutex = synth.control_mutex;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers = new SoftAudioBuffer[16];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers = new SoftAudioBuffer[17];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; buffers.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[i] = new SoftAudioBuffer(buffersize, synth.getFormat());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;--- /home/mark/src/openjdk6/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java	2008-11-05 10:12:10.000000000 +0100
&lt;br&gt;+++ jdk/src/share/classes/com/sun/media/sound/SoftVoice.java	2008-11-10 10:40:49.000000000 +0100
&lt;br&gt;@@ -782,6 +782,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer left = buffer[SoftMainMixer.CHANNEL_LEFT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer right = buffer[SoftMainMixer.CHANNEL_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer mono = buffer[SoftMainMixer.CHANNEL_MONO];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer eff1 = buffer[SoftMainMixer.CHANNEL_EFFECT1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer eff2 = buffer[SoftMainMixer.CHANNEL_EFFECT2];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer leftdry = buffer[SoftMainMixer.CHANNEL_LEFT_DRY];
&lt;br&gt;@@ -802,17 +803,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, left, last_out_mixer_left,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_left);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, left, last_out_mixer_left, out_mixer_left);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, right, last_out_mixer_right,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_right);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(rightdry == null &amp;&amp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;last_out_mixer_left == last_out_mixer_right &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_left == out_mixer_right)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, mono, last_out_mixer_left, out_mixer_left);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, right, last_out_mixer_right,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, left, last_out_mixer_left, out_mixer_left);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, right, last_out_mixer_right,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_right);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, right, last_out_mixer_right,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_right);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry == null) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, eff1, last_out_mixer_effect1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_effect1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, eff2, last_out_mixer_effect2,
&lt;br&gt;--- /home/mark/src/openjdk6/jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java	2008-11-05 10:12:10.000000000 +0100
&lt;br&gt;+++ jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java	2008-11-10 10:40:49.000000000 +0100
&lt;br&gt;@@ -216,6 +216,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread = new Thread(runnable);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.setDaemon(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.setPriority(Thread.MAX_PRIORITY);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.start();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;--- /home/mark/src/openjdk6/jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java	2008-11-05 10:12:09.000000000 +0100
&lt;br&gt;+++ jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java	2008-11-10 10:40:49.000000000 +0100
&lt;br&gt;@@ -54,6 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;active = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread = new Thread(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.setDaemon(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.setPriority(Thread.MAX_PRIORITY);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.start();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[gervill-overlay.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/CHANGES.txt
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/CHANGES.txt	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/CHANGES.txt	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -1,3 +1,14 @@
&lt;br&gt;+ &amp;nbsp;- Fix: Throw IllegalArgumentException Exception on
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; invalid soundbank to:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftSynthesizer.unloadAllInstruments(Soundbank soundbank)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftSynthesizer.unloadInstruments(Soundbank soundbank, Patch[] patchList)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; just like done in:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftSynthesizer.unloadInstrument(Instrument instrument).
&lt;br&gt;+ &amp;nbsp;- Change: SoftMainMixer, SoftVoice optimized for mono voices.
&lt;br&gt;+ &amp;nbsp;- Change: SoftFilter optimized. 
&lt;br&gt;+ &amp;nbsp;- Fix: Turn SoftJitterCorrector, SoftAudioPusher threads into a daemon threads.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; These threads prevented the VM to exit when synthesizer was open.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; See: http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=213 
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Add: More JTreg tests added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EmergencySoundbank
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftFilter
&lt;br&gt;@@ -6,6 +17,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Fix: ModelByteBuffer.skip called super.skip
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; instead to call to RandomAccessFile directly.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; JTreg tests added: ModelByteBuffer/RandomFileInputStream/*.java
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+Version 1.0.2 (released in OpenJDK 6 b12) &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Fix: ModelByteBuffer.len was being modified in inner
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class RandomFileInputStream. The variable was made final
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and RandomFileInputStream.read methods where fixed.
&lt;br&gt;@@ -13,7 +26,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Keys array was to small, it couldn't
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hold all possible midi notes (0..127).
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-Version 1.0.1
&lt;br&gt;+Version 1.0.1 (released as 1.0)
&lt;br&gt;&amp;nbsp; &amp;nbsp;- Fix: Created dummy SourceDataline so that following 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; jtreg test can be tested without using
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; a real Audio Device SourceDataLine. &amp;nbsp;
&lt;br&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -54,6 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;active = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread = new Thread(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.setDaemon(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.setPriority(Thread.MAX_PRIORITY);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audiothread.start();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftFilter.java
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftFilter.java	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftFilter.java	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -543,8 +543,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void filter1(SoftAudioBuffer sbuffer) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] buffer = sbuffer.array();
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dirty) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filter1calc();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirty = false;
&lt;br&gt;@@ -559,6 +557,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (wet &amp;gt; 0 || last_wet &amp;gt; 0) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] buffer = sbuffer.array();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = buffer.length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float a0 = this.last_a0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float q = this.last_q;
&lt;br&gt;@@ -577,14 +576,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;q += q_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gain += gain_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wet += wet_delta;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain * wet + buffer[i] * (1 - wet);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (a0_delta == 0 &amp;&amp; q_delta == 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;@@ -592,8 +593,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a0 += a0_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;q += q_delta;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gain += gain_delta;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = (1 - q * a0) * y1 - (a0) * y2 + (a0) * buffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = (1 - q * a0) * y2 + (a0) * y1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float ga0 = (1 - q * a0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y1 = ga0 * y1 + (a0) * (buffer[i] - y2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;y2 = ga0 * y2 + (a0) * y1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffer[i] = y2 * gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -611,4 +613,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.last_gain = this.gain;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.last_wet = this.wet;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-}
&lt;br&gt;+}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -216,6 +216,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread = new Thread(runnable);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.setDaemon(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.setPriority(Thread.MAX_PRIORITY);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.start();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -48,16 +48,18 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_LEFT = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_RIGHT = 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT1 = 2;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT2 = 3;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT3 = 4;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT4 = 5;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_MONO = 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT1 = 3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT2 = 4;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT3 = 5;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_EFFECT4 = 6;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_LEFT_DRY = 10;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_RIGHT_DRY = 11;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_SCRATCH1 = 12;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_SCRATCH2 = 13;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_LEFT = 14;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_RIGHT = 15;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public final static int CHANNEL_CHANNELMIXER_MONO = 16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected boolean active_sensing_on = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private long msec_last_activity = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean pusher_silent = false;
&lt;br&gt;@@ -485,8 +487,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// to channelmixer left,right input/output
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer leftbak = buffers[CHANNEL_LEFT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer rightbak = buffers[CHANNEL_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer monobak = buffers[CHANNEL_MONO];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_LEFT] = buffers[CHANNEL_CHANNELMIXER_LEFT];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = buffers[CHANNEL_CHANNELMIXER_LEFT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = buffers[CHANNEL_CHANNELMIXER_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO] = buffers[CHANNEL_CHANNELMIXER_MONO];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int bufferlen = buffers[CHANNEL_LEFT].getSize();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -503,6 +507,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (ModelChannelMixer cmixer : act_registeredMixers) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; cbuffer.length; i++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(cbuffer[i], 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO].clear();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean hasactivevoices = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; voicestatus.length; i++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].active)
&lt;br&gt;@@ -516,6 +521,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cur_registeredMixers = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!buffers[CHANNEL_MONO].isSilent())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] mono = buffers[CHANNEL_MONO].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] left = buffers[CHANNEL_LEFT].array(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nrofchannels != 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] right = buffers[CHANNEL_RIGHT].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float v = mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; cbuffer.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] cbuff = cbuffer[i];
&lt;br&gt;@@ -539,6 +564,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_LEFT] = leftbak;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_RIGHT] = rightbak;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[CHANNEL_MONO] = monobak;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -546,6 +572,27 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].active)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (voicestatus[i].channelmixer == null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;voicestatus[i].processAudioLogic(buffers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!buffers[CHANNEL_MONO].isSilent())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] mono = buffers[CHANNEL_MONO].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] left = buffers[CHANNEL_LEFT].array(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int bufferlen = buffers[CHANNEL_LEFT].getSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (nrofchannels != 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] right = buffers[CHANNEL_RIGHT].array();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float v = mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += v;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; bufferlen; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += mono[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Run effects
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (synth.chorus_on)
&lt;br&gt;@@ -665,7 +712,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/ synth.getControlRate());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;control_mutex = synth.control_mutex;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers = new SoftAudioBuffer[16];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers = new SoftAudioBuffer[17];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; buffers.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buffers[i] = new SoftAudioBuffer(buffersize, synth.getFormat());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;diff -r 688efd120766 overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java
&lt;br&gt;--- a/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java	Sun Nov 09 22:31:21 2008 +0100
&lt;br&gt;+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java	Mon Nov 10 12:07:31 2008 +0100
&lt;br&gt;@@ -782,6 +782,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer left = buffer[SoftMainMixer.CHANNEL_LEFT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer right = buffer[SoftMainMixer.CHANNEL_RIGHT];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer mono = buffer[SoftMainMixer.CHANNEL_MONO];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer eff1 = buffer[SoftMainMixer.CHANNEL_EFFECT1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer eff2 = buffer[SoftMainMixer.CHANNEL_EFFECT2];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioBuffer leftdry = buffer[SoftMainMixer.CHANNEL_LEFT_DRY];
&lt;br&gt;@@ -802,17 +803,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, left, last_out_mixer_left,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_left);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, left, last_out_mixer_left, out_mixer_left);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, right, last_out_mixer_right,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(rightdry == null &amp;&amp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;last_out_mixer_left == last_out_mixer_right &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_left == out_mixer_right)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, mono, last_out_mixer_left, out_mixer_left);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, left, last_out_mixer_left, out_mixer_left);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry != null)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(rightdry, right, last_out_mixer_right,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_right);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, right, last_out_mixer_right,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, right, last_out_mixer_right,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_right);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rightdry == null) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, eff1, last_out_mixer_effect1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out_mixer_effect1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mixAudioStream(leftdry, eff2, last_out_mixer_effect2,
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20418511&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-Gervill-CVS-imported-into-IcedTea6-tp20418511p20418511.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19618442</id>
	<title>Re: Updating Gervill for OpenJDK 6 build 13</title>
	<published>2008-09-22T16:15:20Z</published>
	<updated>2008-09-22T16:15:20Z</updated>
	<author>
		<name>joe.darcy</name>
	</author>
	<content type="html">Joe Darcy wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Since OpenJDK 6 took a snapshot of Gervill for b12, Gervill was been 
&lt;br&gt;&amp;gt; updated. &amp;nbsp;Also, Mark Wielaard has a patch which address some JCK 
&lt;br&gt;&amp;gt; failures:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/pipermail/audio-engine-dev/2008-September/000059.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/pipermail/audio-engine-dev/2008-September/000059.html&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; For the next build of OpenJDK 6, &amp;nbsp;build 13, I'd like to include both 
&lt;br&gt;&amp;gt; sets of changes; below is patch of those changes compared to build 12.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Please review by September 19.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -Joe
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;I've applied the previously sent patch to the OpenJDK 6 b13 sources.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;-Joe
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19618442&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Updating-Gervill-for-OpenJDK-6-build-13-tp19504685p19618442.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19504685</id>
	<title>Updating Gervill for OpenJDK 6 build 13</title>
	<published>2008-09-15T20:24:47Z</published>
	<updated>2008-09-15T20:24:47Z</updated>
	<author>
		<name>joe.darcy</name>
	</author>
	<content type="html">Hello.
&lt;br&gt;&lt;br&gt;Since OpenJDK 6 took a snapshot of Gervill for b12, Gervill was been 
&lt;br&gt;updated. &amp;nbsp;Also, Mark Wielaard has a patch which address some JCK failures:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/pipermail/audio-engine-dev/2008-September/000059.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/pipermail/audio-engine-dev/2008-September/000059.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;For the next build of OpenJDK 6, &amp;nbsp;build 13, I'd like to include both 
&lt;br&gt;sets of changes; below is patch of those changes compared to build 12.
&lt;br&gt;&lt;br&gt;Please review by September 19.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;-Joe
&lt;br&gt;&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/ModelByteBuffer.java	Sun Sep 14 23:15:37 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/ModelByteBuffer.java	Sun Sep 14 23:15:37 2008
&lt;br&gt;@@ -85,11 +85,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public long skip(long n) throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( n &amp;lt; 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (n &amp;gt; left)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = left;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = super.skip(n);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (n == -1)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return -1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long p = raf.getFilePointer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raf.seek(p + n);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left -= n;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return n;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/SoftMainMixer.java	Sun Sep 14 23:15:38 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/SoftMainMixer.java	Sun Sep 14 23:15:38 2008
&lt;br&gt;@@ -69,7 +69,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int nrofchannels = 2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftVoice[] voicestatus = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftAudioBuffer[] buffers;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private SoftAudioProcessor reverb;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private SoftReverb reverb;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftAudioProcessor chorus;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftAudioProcessor agc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private long msec_buffer_len = 0;
&lt;br&gt;@@ -681,6 +681,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;chorus.init(samplerate, controlrate);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agc.init(samplerate, controlrate);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reverb.setLightMode(synth.reverb_light);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reverb.setMixMode(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;chorus.setMixMode(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agc.setMixMode(false);
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/SoftReverb.java	Sun Sep 14 23:15:39 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/SoftReverb.java	Sun Sep 14 23:15:39 2008
&lt;br&gt;@@ -35,7 +35,7 @@
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;public class SoftReverb implements SoftAudioProcessor {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static class Delay {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final static class Delay {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float[] delaybuffer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int rovepos = 0;
&lt;br&gt;@@ -52,31 +52,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processReplace(float[] in, float[] out) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] delaybuffer = this.delaybuffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processReplace(float[] inout) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (delaybuffer == null)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = in.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = inout.length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rnlen = delaybuffer.length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rovepos = this.rovepos;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float x = in[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out[i] = delaybuffer[rovepos];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float x = inout[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inout[i] = delaybuffer[rovepos];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = x;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = rovepos + 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (rovepos == rnlen)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++rovepos == rnlen)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//rovepos = (rovepos + 1) % rnlen;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.rovepos = rovepos;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static class AllPass {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final static class AllPass {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float[] delaybuffer;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private final float[] delaybuffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private final int delaybuffersize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int rovepos = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float feedback;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -88,47 +85,42 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void setFeedBack(float feedback) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.feedback = feedback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ucount = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processReplace(float inout[]) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = inout.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int delaybuffersize = this.delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rovepos = this.rovepos; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float delayout = delaybuffer[rovepos];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float input = inout[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inout[i] = delayout - input;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = input + delayout * feedback;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++rovepos == delaybuffersize)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.rovepos = rovepos; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processReplace(float in[], float out[]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = in.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int delaybuffersize = this.delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rovepos = this.rovepos; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float delayout = delaybuffer[rovepos];
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// undenormalise(delayout)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((delayout &amp;gt; 0.0) &amp;&amp; (delayout &amp;lt; 1.0E-10))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| ((delayout &amp;lt; 0.0) &amp;&amp; (delayout &amp;gt; -1.0E-10)))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delayout = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float input = in[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out[i] = -input + delayout;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out[i] = delayout - input;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = input + delayout * feedback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++rovepos == delaybuffersize)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ucount++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ucount == 10) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ucount = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; delaybuffer.length; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double v = delaybuffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((v &amp;gt; 0.0) &amp;&amp; (v &amp;lt; 1.0E-10))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| ((v &amp;lt; 0.0) &amp;&amp; (v &amp;gt; -1.0E-10))) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[i] = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.rovepos = rovepos; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static class Comb {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final static class Comb {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float[] delaybuffer;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private final float[] delaybuffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private final int delaybuffersize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int rovepos = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float feedback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private float filtertemp = 0;
&lt;br&gt;@@ -142,56 +134,54 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void setFeedBack(float feedback) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.feedback = feedback;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtercoeff2 = (1 - filtercoeff1)* feedback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ucount = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processMix(float in[], float out[]) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = in.length;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtercoeff2 = this.filtercoeff2 * feedback;
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = in.length; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int delaybuffersize = this.delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rovepos = this.rovepos;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtertemp = this.filtertemp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtercoeff1 = this.filtercoeff1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtercoeff2 = this.filtercoeff2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float delayout = delaybuffer[rovepos];
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// One Pole Lowpass Filter
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtertemp = (delayout * filtercoeff2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ (filtertemp * filtercoeff1);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// undenormalise(filtertemp)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((filtertemp &amp;gt; 0.0) &amp;&amp; (filtertemp &amp;lt; 1.0E-10))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| ((filtertemp &amp;lt; 0.0) &amp;&amp; (filtertemp &amp;gt; -1.0E-10)))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtertemp = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out[i] += delayout;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = in[i] + (filtertemp);// * feedback);
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = in[i] + filtertemp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++rovepos == delaybuffersize)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.filtertemp &amp;nbsp;= filtertemp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.rovepos = rovepos;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ucount++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ucount == 10) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ucount = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((filtertemp &amp;gt; 0.0) &amp;&amp; (filtertemp &amp;lt; 1.0E-10))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| ((filtertemp &amp;lt; 0.0) &amp;&amp; (filtertemp &amp;gt; -1.0E-10))) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtertemp = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; delaybuffer.length; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double v = delaybuffer[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (((v &amp;gt; 0.0) &amp;&amp; (v &amp;lt; 1.0E-10))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|| ((v &amp;lt; 0.0) &amp;&amp; (v &amp;gt; -1.0E-10))) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[i] = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void processReplace(float in[], float out[]) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int len = in.length; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int delaybuffersize = this.delaybuffersize;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int rovepos = this.rovepos;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtertemp = this.filtertemp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtercoeff1 = this.filtercoeff1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float filtercoeff2 = this.filtercoeff2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; len; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float delayout = delaybuffer[rovepos];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// One Pole Lowpass Filter
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtertemp = (delayout * filtercoeff2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ (filtertemp * filtercoeff1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out[i] = delayout;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delaybuffer[rovepos] = in[i] + filtertemp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (++rovepos == delaybuffersize)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rovepos = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.filtertemp &amp;nbsp;= filtertemp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.rovepos = rovepos;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void setDamp(float val) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtercoeff1 = val;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtercoeff2 = 1 - filtercoeff1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filtercoeff2 = (1 - filtercoeff1)* feedback;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private float roomsize;
&lt;br&gt;@@ -203,8 +193,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private AllPass[] allpassL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private AllPass[] allpassR;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private float[] input;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private float[] outR;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private float[] outL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private float[] out;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private float[] pre1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private float[] pre2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private float[] pre3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean denormal_flip = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private boolean mix = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftAudioBuffer inputA;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private SoftAudioBuffer left;
&lt;br&gt;@@ -214,7 +207,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private float dirty_damp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private float dirty_predelay;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private float dirty_gain;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private float samplerate;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private float samplerate; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean light = true;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void init(float samplerate, float controlrate) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.samplerate = samplerate;
&lt;br&gt;@@ -237,7 +231,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[3] = new Comb((int) (freqscale * (1356)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[3] = new Comb((int) (freqscale * (1356 + stereospread)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[4] = new Comb((int) (freqscale * (1422)));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[4] = new Comb((int) (freqscale * (1422 + stereospread)));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[4] = new Comb((int) (freqscale * (1422 + stereospread))); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[5] = new Comb((int) (freqscale * (1491)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[5] = new Comb((int) (freqscale * (1491 + stereospread)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[6] = new Comb((int) (freqscale * (1557)));
&lt;br&gt;@@ -306,58 +300,100 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input = new float[numsamples];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float again = gain * 0.018f / 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;denormal_flip = !denormal_flip;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(denormal_flip)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++) 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input[i] = inputA[i] * again + 1E-20f;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++) 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input[i] = inputA[i] * again - 1E-20f;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input[i] = inputA[i] * again;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delay.processReplace(input, input);
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (right != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (outR == null || outR.length &amp;lt; numsamples)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outR = new float[numsamples];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(outR, 0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combR.length; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[i].processMix(input, outR);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delay.processReplace(input);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(light &amp;&amp; (right != null))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pre1 == null || pre1.length &amp;lt; numsamples)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pre1 = new float[numsamples];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pre2 = new float[numsamples];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pre3 = new float[numsamples];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; allpassL.length; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassR[i].processReplace(outR, outR);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassL[i].processReplace(input);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (mix) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += outR[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] = outR[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[0].processReplace(input, pre3);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[1].processReplace(input, pre3);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[2].processReplace(input, pre1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 4; i &amp;lt; combL.length-2; i+=2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].processMix(input, pre1); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[3].processReplace(input, pre2);;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 5; i &amp;lt; combL.length-2; i+=2) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].processMix(input, pre2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!mix)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(right, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(left, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = combR.length-2; i &amp;lt; combR.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[i].processMix(input, right); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = combL.length-2; i &amp;lt; combL.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].processMix(input, left);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++) 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float p = pre1[i] - pre2[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float m = pre3[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += m + p;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;right[i] += m - p;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (out == null || out.length &amp;lt; numsamples)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;out = new float[numsamples];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (right != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!mix) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(right, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassR[0].processReplace(input, out);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; allpassR.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassR[i].processReplace(out);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combR.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[i].processMix(out, right);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (outL == null || outL.length &amp;lt; numsamples)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outL = new float[numsamples];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(outL, 0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combL.length; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].processMix(input, outL);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; allpassL.length; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassL[i].processReplace(outL, outL);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (mix) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] += outL[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left[i] = outL[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!mix) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(left, 0); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassL[0].processReplace(input, out);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; allpassL.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allpassL[i].processReplace(out);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combL.length; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].processMix(out, left); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (silent_input) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float avgpower = 0; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;silent = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; numsamples; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;avgpower += outL[i]*outL[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;avgpower /= numsamples;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;avgpower = (float)Math.sqrt(avgpower);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(avgpower &amp;lt; 0.00001)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;silent = true;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float v = left[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(v &amp;gt; 1E-10 || v &amp;lt; -1E-10)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;silent = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void globalParameterControlChange(int[] slothpath, long param,
&lt;br&gt;@@ -440,7 +476,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setRoomSize(float value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;roomsize = 1 - (0.17f / value);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combL.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].feedback = roomsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[i].feedback = roomsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -464,10 +500,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;damp = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// damp = value * 0.4f;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; combL.length; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combL[i].setDamp(damp);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combR[i].setDamp(damp);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setLightMode(boolean light)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.light = light;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/DLSSoundbankReader.java	Sun Sep 14 23:15:40 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/DLSSoundbankReader.java	Sun Sep 14 23:15:40 2008
&lt;br&gt;@@ -47,6 +47,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DLSSoundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/SF2SoundbankReader.java	Sun Sep 14 23:15:40 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/SF2SoundbankReader.java	Sun Sep 14 23:15:40 2008
&lt;br&gt;@@ -46,6 +46,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new SF2Soundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/SoftChannel.java	Sun Sep 14 23:15:41 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/SoftChannel.java	Sun Sep 14 23:15:41 2008
&lt;br&gt;@@ -1215,7 +1215,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getController(int controller) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (control_mutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Should only return lower 7 bits,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// even when controller is &amp;quot;boosted&amp;quot; higher.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller] &amp; 127;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- old/src/share/classes/com/sun/media/sound/SoftSynthesizer.java	Sun Sep 14 23:15:42 2008
&lt;br&gt;+++ new/src/share/classes/com/sun/media/sound/SoftSynthesizer.java	Sun Sep 14 23:15:42 2008
&lt;br&gt;@@ -177,6 +177,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// 1: DLS Voice Allocation
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected int voice_allocation_mode = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected boolean reverb_light = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected boolean reverb_on = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected boolean chorus_on = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected boolean agc_on = true;
&lt;br&gt;@@ -334,6 +335,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;largemode = (Boolean)items[9].value;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;number_of_midi_channels = (Integer)items[10].value;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;jitter_correction = (Boolean)items[11].value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reverb_light = (Boolean)items[12].value;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private String patchToString(Patch patch) {
&lt;br&gt;@@ -742,6 +744,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadAllInstruments(Soundbank soundbank) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -766,6 +771,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -844,6 +852,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item.description = &amp;quot;Turn jitter correction on or off.&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(item);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item = new AudioSynthesizerPropertyInfo(&amp;quot;light reverb&amp;quot;, o?reverb_light:true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item.description = &amp;quot;Turn light reverb mode on or off&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(item);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioSynthesizerPropertyInfo[] items;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;items = list.toArray(new AudioSynthesizerPropertyInfo[list.size()]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- old/test/javax/sound/midi/Gervill/AudioFloatConverter/ToFloatArray.java	Sun Sep 14 23:15:43 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/AudioFloatConverter/ToFloatArray.java	Sun Sep 14 23:15:43 2008
&lt;br&gt;@@ -43,11 +43,30 @@
&lt;br&gt;&amp;nbsp;			testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;&amp;nbsp;			testarray[i] *= 0.3;
&lt;br&gt;&amp;nbsp;		}		
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Check conversion using PCM_FLOAT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int big = 0; big &amp;lt; 2; big+=1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int bits = 32; bits &amp;lt;= 64; bits+=32) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFormat frm = new AudioFormat(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.PCM_FLOAT,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;44100, bits, 1, bits/8,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;44100, big==1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte[] buff = new byte[testarray.length * frm.getFrameSize()];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float[] testarray2 = new float[testarray.length];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter conv = AudioFloatConverter.getConverter(frm);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conv.toByteArray(testarray, buff);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conv.toFloatArray(buff, testarray2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; testarray2.length; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(Math.abs(testarray[i] - testarray2[i]) &amp;gt; 0.05)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Conversion failed for &amp;quot; + frm &amp;nbsp;+&amp;quot; , arrays not equal enough!\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		// Check conversion from float2byte and byte2float.
&lt;br&gt;&amp;nbsp;		for (int big = 0; big &amp;lt; 2; big+=1) 
&lt;br&gt;&amp;nbsp;		for (int signed = 0; signed &amp;lt; 2; signed+=1) 
&lt;br&gt;-		for (int bits = 8; bits &amp;lt;= 32; bits+=8) {					
&lt;br&gt;+		for (int bits = 6; bits &amp;lt;= 40; bits+=2) {					
&lt;br&gt;&amp;nbsp;			AudioFormat frm = new AudioFormat(44100, bits, 1, signed==1, big==1);
&lt;br&gt;&amp;nbsp;			byte[] buff = new byte[testarray.length * frm.getFrameSize()];
&lt;br&gt;&amp;nbsp;			float[] testarray2 = new float[testarray.length];
&lt;br&gt;@@ -63,7 +82,7 @@
&lt;br&gt;&amp;nbsp;		// Check big/little
&lt;br&gt;&amp;nbsp;		for (int big = 0; big &amp;lt; 2; big+=1) 
&lt;br&gt;&amp;nbsp;		for (int signed = 0; signed &amp;lt; 2; signed+=1)
&lt;br&gt;-		for (int bits = 8; bits &amp;lt;= 32; bits+=8) {					
&lt;br&gt;+		for (int bits = 6; bits &amp;lt;= 40; bits+=2) {					
&lt;br&gt;&amp;nbsp;			AudioFormat frm = new AudioFormat(44100, bits, 1, signed==1, big==1);
&lt;br&gt;&amp;nbsp;			byte[] buff = new byte[testarray.length * frm.getFrameSize()];
&lt;br&gt;&amp;nbsp;			AudioFloatConverter conv = AudioFloatConverter.getConverter(frm);
&lt;br&gt;@@ -89,7 +108,7 @@
&lt;br&gt;&amp;nbsp;		// Check signed/unsigned 
&lt;br&gt;&amp;nbsp;		for (int big = 0; big &amp;lt; 2; big+=1) 
&lt;br&gt;&amp;nbsp;		for (int signed = 0; signed &amp;lt; 2; signed+=1)
&lt;br&gt;-		for (int bits = 8; bits &amp;lt;= 32; bits+=8) {					
&lt;br&gt;+		for (int bits = 6; bits &amp;lt;= 40; bits+=2) {					
&lt;br&gt;&amp;nbsp;			AudioFormat frm = new AudioFormat(44100, bits, 1, signed==1, big==1);
&lt;br&gt;&amp;nbsp;			byte[] b = new byte[testarray.length * frm.getFrameSize()];
&lt;br&gt;&amp;nbsp;			AudioFloatConverter conv = AudioFloatConverter.getConverter(frm);
&lt;br&gt;@@ -117,10 +136,10 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		// Check if conversion 32-&amp;gt;24, 24-&amp;gt;16, 16-&amp;gt;8 result in same float data
&lt;br&gt;-		AudioFormat frm = new AudioFormat(44100, 32, 1, true, true);
&lt;br&gt;+		AudioFormat frm = new AudioFormat(44100, 40, 1, true, true);
&lt;br&gt;&amp;nbsp;		byte[] b = new byte[testarray.length * frm.getFrameSize()];
&lt;br&gt;&amp;nbsp;		AudioFloatConverter.getConverter(frm).toByteArray(testarray, b);
&lt;br&gt;-		for (int bits = 8; bits &amp;lt;= 32; bits+=8) {
&lt;br&gt;+		for (int bits = 6; bits &amp;lt;= 40; bits+=2) {
&lt;br&gt;&amp;nbsp;			AudioFormat frm2 = new AudioFormat(44100, bits, 1, true, true);
&lt;br&gt;&amp;nbsp;			byte[] b2 = new byte[testarray.length * frm2.getFrameSize()];
&lt;br&gt;&amp;nbsp;			int fs1 = frm.getFrameSize();
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:44 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/Available.java	Sun Sep 14 23:15:44 2008
&lt;br&gt;@@ -0,0 +1,107 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream available() method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class Available {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(ret != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.available() return unexpected value!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:44 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/Close.java	Sun Sep 14 23:15:44 2008
&lt;br&gt;@@ -0,0 +1,104 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream close method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class Close {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:45 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/MarkReset.java	Sun Sep 14 23:15:44 2008
&lt;br&gt;@@ -0,0 +1,129 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream mark and reset methods */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class MarkReset {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.mark(1000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int a = is.read();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.skip(75); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.reset();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int b = is.read();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(a != b)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is doesn't return same value after reset (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ a + &amp;quot;!=&amp;quot;+b+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.skip(15); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.mark(1000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.reset();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:45 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/MarkSupported.java	Sun Sep 14 23:15:45 2008
&lt;br&gt;@@ -0,0 +1,106 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream markSupported() method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class MarkSupported {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!is.markSupported())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;InputStream doesn't support mark/reset!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:45 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/Read.java	Sun Sep 14 23:15:45 2008
&lt;br&gt;@@ -0,0 +1,117 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream read() method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class Read {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte[] b = new byte[100];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int n = is.read();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(n == -1) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.read shouldn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - 1)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.skip(5000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.read() != -1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.read() doesn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:45 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/ReadByte.java	Sun Sep 14 23:15:45 2008
&lt;br&gt;@@ -0,0 +1,118 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream read(byte[]) method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class ReadByte {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte[] b = new byte[100];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int n = is.read(b);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(n == -1) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.read shouldn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - n)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.skip(5000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.read(b) != -1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.read() doesn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:45 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/ReadByteIntInt.java	Sun Sep 14 23:15:45 2008
&lt;br&gt;@@ -0,0 +1,118 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream read(byte[], int, int) method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class ReadByteIntInt {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;byte[] b = new byte[100];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int n = is.read(b, 7, 50);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(n == -1) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.read shouldn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - n)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.skip(5000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.read(b, 7, 50) != -1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.read() doesn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;--- /dev/null	Sun Sep 14 23:15:46 2008
&lt;br&gt;+++ new/test/javax/sound/midi/Gervill/ModelByteBuffer/RandomFileInputStream/Skip.java	Sun Sep 14 23:15:46 2008
&lt;br&gt;@@ -0,0 +1,131 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation. &amp;nbsp;Sun designates this
&lt;br&gt;+ * particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;+ * by Sun in the LICENSE file that accompanied this code.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+/* @test
&lt;br&gt;+ &amp;nbsp; @summary Test ModelByteBuffer.RandomFileInputStream skip(long) method */
&lt;br&gt;+
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.InputStream;
&lt;br&gt;+
&lt;br&gt;+import javax.sound.sampled.*;
&lt;br&gt;+
&lt;br&gt;+import com.sun.media.sound.*;
&lt;br&gt;+
&lt;br&gt;+public class Skip {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static float[] testarray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static byte[] test_byte_array; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static File test_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray = new float[1024];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 1024; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ii = i / 1024.0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ii = ii * ii;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] = (float)Math.sin(10*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;testarray[i] *= 0.3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_byte_array = new byte[testarray.length*2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.getConverter(format).toByteArray(testarray, test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file = File.createTempFile(&amp;quot;test&amp;quot;, &amp;quot;.raw&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileOutputStream fos = new FileOutputStream(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fos.write(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static void tearDown() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!test_file.delete())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test_file.deleteOnExit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static void main(String[] args) throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setUp();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; 8; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ModelByteBuffer buff;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(i % 2 == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_file);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff = new ModelByteBuffer(test_byte_array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,500);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if((i / 2) == 3)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buff.subbuffer(5,600,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long capacity = buff.capacity();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InputStream is = buff.getInputStream();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;long n = is.skip(75);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(n == -1) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.read shouldn't return -1!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - n)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = is.skip(-100);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(n != 0) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;is.skip(-100) shouldn't skip values!&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - n)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = is.available();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = is.skip(5000);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != ret - n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(ret - n)+&amp;quot;) !&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(is.available() != 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is.available() returns incorrect value (&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ is.available() + &amp;quot;!=&amp;quot;+(0)+&amp;quot;) !&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(buff.capacity() != capacity)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;Capacity variable should not change!&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;finally
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tearDown();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19504685&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Updating-Gervill-for-OpenJDK-6-build-13-tp19504685p19504685.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19441778</id>
	<title>New Gervill imported into IcedTea</title>
	<published>2008-09-11T11:49:05Z</published>
	<updated>2008-09-11T11:49:05Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Since Joe was working on getting an updated Gervill into openjdk(6) and
&lt;br&gt;adopting any remaining patches to the new version, I made sure to sync
&lt;br&gt;our Gervill import into icedtea6 with the latest Gervill from CVS
&lt;br&gt;(September 1st). We only have a few small patches left against upstream
&lt;br&gt;Gervill (attached).
&lt;br&gt;&lt;br&gt;All jtreg tests, both the com/sun/media/sound ones from upstream, as the
&lt;br&gt;older javax/sound/midi in openjdk6 (which are almost all a copy of the
&lt;br&gt;upstream tests renamed into a different package) pass, with only a small
&lt;br&gt;patch needed for the old tests now that SoftLimiter.init() changed
&lt;br&gt;arguments. See the patches/icedtea-gervill.patch.
&lt;br&gt;&lt;br&gt;Attached are the actual changes to the icedtea overlays.
&lt;br&gt;&lt;br&gt;2008-09-11 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19441778&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * patches/icedtea-gervill.patch: Updated patch for old tests.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/*:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; New Gervill files (sept 1).
&lt;br&gt;&lt;br&gt;The actual changes to Gervill since our last import:
&lt;br&gt;&lt;br&gt;- Add: More JTreg tests added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EmergencySoundbank
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftFilter
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AudioFloatConverter.ToFloatArray (improved)
&lt;br&gt;- Change: SoftReverb optimized, about 2 times faster.
&lt;br&gt;- Fix: ModelByteBuffer.skip called super.skip
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;instead to call to RandomAccessFile directly.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JTreg tests added: ModelByteBuffer/RandomFileInputStream/*.java
&lt;br&gt;- Fix: ModelByteBuffer.len was being modified in inner
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class RandomFileInputStream. The variable was made final
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and RandomFileInputStream.read methods where fixed.
&lt;br&gt;- Fix: ArrayOutOfException error in ModelInstrument.getKeys(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Keys array was to small, it couldn't
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hold all possible midi notes (0..127).
&lt;br&gt;&lt;br&gt;Version 1.0.1
&lt;br&gt;- Fix: Created dummy SourceDataline so that following 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;jtreg test can be tested without using
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;a real Audio Device SourceDataLine. &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftAudioSynthesizer/Open.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetLatency.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver2.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetReceivers.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitters.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/ImplicitOpenClose.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; javax/sound/midi/Gervill/SoftSynthesizer/Open.java
&lt;br&gt;- Fix: Make open SoftSynthesizer garbage-collectable
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when user don't have reference to it and it is not
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;producing any sound.
&lt;br&gt;- Fix: SoftReverb silent detection improved.
&lt;br&gt;- Added: SoftSynthesizer.getPropertyInfo returns
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;current properties values if it is open. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- Fix: Restrict input values in SoftChannel to 7 and 14 bit in these
&lt;br&gt;methods:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; noteOn 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; noteOff
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setPolyPressure
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setChannelPressure
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; controlChange
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; programChange(program)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; programChange(bank, program)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setPitchBend
&lt;br&gt;- Fix: Store generated soundbank to disk for faster future use. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[icedtea-gervill.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: build.xml
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/build.xml,v
&lt;br&gt;retrieving revision 1.2
&lt;br&gt;diff -u -r1.2 build.xml
&lt;br&gt;--- build.xml	14 Dec 2007 03:33:11 -0000	1.2
&lt;br&gt;+++ build.xml	11 Sep 2008 18:30:29 -0000
&lt;br&gt;@@ -29,7 +29,8 @@
&lt;br&gt;&amp;nbsp;&amp;lt;!-- run javac to compile the source files --&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;target name=&amp;quot;compile&amp;quot; depends=&amp;quot;init&amp;quot;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;javac srcdir=&amp;quot;${src}&amp;quot; 
&lt;br&gt;-destdir=&amp;quot;${build}&amp;quot;&amp;gt; 
&lt;br&gt;+destdir=&amp;quot;${build}&amp;quot;
&lt;br&gt;+debug=&amp;quot;true&amp;quot;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;classpath&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;path refid=&amp;quot;lib.path&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;/classpath&amp;gt; 
&lt;br&gt;@@ -69,4 +70,4 @@
&lt;br&gt;&amp;nbsp;&amp;lt;delete dir=&amp;quot;${lib}&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;delete dir=&amp;quot;${docs}&amp;quot;/&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;lt;/target&amp;gt; 
&lt;br&gt;-&amp;lt;/project&amp;gt; 
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+&amp;lt;/project&amp;gt; 
&lt;br&gt;Index: src/com/sun/media/sound/DLSSoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/DLSSoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 DLSSoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/DLSSoundbankReader.java	5 Jun 2008 01:55:28 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/DLSSoundbankReader.java	11 Sep 2008 18:30:29 -0000
&lt;br&gt;@@ -47,6 +47,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DLSSoundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SF2SoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SF2SoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 SF2SoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/SF2SoundbankReader.java	5 Jun 2008 01:55:33 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/SF2SoundbankReader.java	11 Sep 2008 18:30:29 -0000
&lt;br&gt;@@ -46,6 +46,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new SF2Soundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SoftChannel.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftChannel.java,v
&lt;br&gt;retrieving revision 1.11
&lt;br&gt;diff -u -r1.11 SoftChannel.java
&lt;br&gt;--- src/com/sun/media/sound/SoftChannel.java	27 Jul 2008 19:06:21 -0000	1.11
&lt;br&gt;+++ src/com/sun/media/sound/SoftChannel.java	11 Sep 2008 18:30:29 -0000
&lt;br&gt;@@ -1215,7 +1215,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getController(int controller) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (control_mutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Should only return lower 7 bits,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// even when controller is &amp;quot;boosted&amp;quot; higher.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller] &amp; 127;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SoftSynthesizer.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftSynthesizer.java,v
&lt;br&gt;retrieving revision 1.43
&lt;br&gt;diff -u -r1.43 SoftSynthesizer.java
&lt;br&gt;--- src/com/sun/media/sound/SoftSynthesizer.java	27 Aug 2008 17:21:23 -0000	1.43
&lt;br&gt;+++ src/com/sun/media/sound/SoftSynthesizer.java	11 Sep 2008 18:30:29 -0000
&lt;br&gt;@@ -744,6 +744,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadAllInstruments(Soundbank soundbank) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -768,6 +771,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19441778&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;gervill-overlays.diff.gz&lt;/strong&gt; (14K) &lt;a href=&quot;http://old.nabble.com/attachment/19441778/0/gervill-overlays.diff.gz&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-Gervill-imported-into-IcedTea-tp19441778p19441778.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19296160</id>
	<title>FREE Online Test at www.yfrindia.com</title>
	<published>2008-09-03T12:20:45Z</published>
	<updated>2008-09-03T12:20:45Z</updated>
	<author>
		<name>Prize</name>
	</author>
	<content type="html">&lt;a href=&quot;http://www.yfrindia.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.yfrindia.com/&lt;/a&gt;&lt;br&gt;Take FREE online TEST, read FREE articles, download FREE presentation, use FREE source code, useful links, competition updates, free ONLINE TEST TESTS,
&lt;br&gt;&lt;a href=&quot;http://www.yfrindia.com/resources/Tests&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.yfrindia.com/resources/Tests&lt;/a&gt;&lt;br&gt;free APTITUDE TEST, English Test, Computer Test, Mechanical Test, Electronics Test, Electrical Test, GATE preparation, CAT preparation, Job preparation, resume.
&lt;br&gt;&lt;a href=&quot;http://www.yfrindia.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.yfrindia.com/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/FREE-Online-Test-at-www.yfrindia.com-tp19296160p19296160.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-18643888</id>
	<title>Re: New Gervill imported (Was: OpenJDK 6 b10 source posted)</title>
	<published>2008-07-24T19:02:34Z</published>
	<updated>2008-07-24T19:02:34Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi Mark,
&lt;br&gt;&lt;br&gt;Control rate can be fetched from the synthesizer using the AudioSynthesizer interface.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;AudioSynthesizer.getPropertyInfo()
&lt;br&gt;And if you want to use another control rate you'll have to open the synthesizer
&lt;br&gt;with the open(SourceDataLine line, Map&amp;lt;String, Object&amp;gt; info) using different
&lt;br&gt;control rate value in the info parameter.
&lt;br&gt;But it could be a good idea that getPropertyInfo() would return current values
&lt;br&gt;when the synthesizer is open and default ones when it is closed.
&lt;br&gt;&lt;br&gt;I changed these methods in the SoftChannel
&lt;br&gt;&amp;nbsp; noteOn
&lt;br&gt;&amp;nbsp; noteOff
&lt;br&gt;&amp;nbsp; setPolyPressure
&lt;br&gt;&amp;nbsp; setChannelPressure
&lt;br&gt;&amp;nbsp; controlChange
&lt;br&gt;&amp;nbsp; programChange(program)
&lt;br&gt;&amp;nbsp; programChange(bank, program)
&lt;br&gt;&amp;nbsp; setPitchBend
&lt;br&gt;So they won't accept out of range values (e.g. only 7 or 14 bit values).
&lt;br&gt;&lt;br&gt;I didn't like your idea of masking the getController output, and it also
&lt;br&gt;didn't handle when we used negative values in the controlChange.
&lt;br&gt;By restricting the input values we make the MidiChannel object more predictable
&lt;br&gt;and getController will then always return true value not clipped one.
&lt;br&gt;&lt;br&gt;I am not sure we should hide the IOException in SF2SoundbankReader and DLSSoundbankReader.
&lt;br&gt;This is not done in AudioFileReader classes from Sun.
&lt;br&gt;For example in com.sun.media.sound.WaveFileReader
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Karl
&lt;br&gt;&lt;br&gt;&lt;br&gt;________________________________________
&lt;br&gt;Frá: Mark Wielaard [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;]
&lt;br&gt;Sent: 8. júní 2008 22:23
&lt;br&gt;Viðtakandi: Karl Helgason
&lt;br&gt;Afrit: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;distro-pkg-dev@...&lt;/a&gt;
&lt;br&gt;Efni: New Gervill imported (Was: OpenJDK 6 b10 source posted)
&lt;br&gt;&lt;br&gt;Hi Karl,
&lt;br&gt;&lt;br&gt;On Wed, 2008-06-04 at 11:25 +0200, Mark Wielaard wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, 2008-06-04 at 01:09 +0000, Karl Helgason wrote:
&lt;br&gt;&amp;gt; Thanks for checking. These are all in the icedtea gervill overlay also.
&lt;br&gt;&amp;gt; I'll make sure to upgrade to the latest CVS version in which I see you
&lt;br&gt;&amp;gt; fixed some of the other issues I reported.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; The code was also slightly reformatted:
&lt;br&gt;&amp;gt; &amp;gt; a) lines &amp;quot;* @version %I%, %E%&amp;quot; was removed (such lines was removed from all JDK
&lt;br&gt;&amp;gt; &amp;gt; sources);
&lt;br&gt;&amp;gt; &amp;gt; b) line indention (to make lines no longer than 80 symbols);
&lt;br&gt;&amp;gt; &amp;gt; c) tabs to spaces conversion;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I will look into to reformat newest Gervill CVS code the same way.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; That would be great. Since 0.9 there have been lots of changes and fixes
&lt;br&gt;&amp;gt; (which is why icedtea tracks your CVS tree and didn't use the old 0.9
&lt;br&gt;&amp;gt; code). Would it be a good idea to do a new version upgrade after syncing
&lt;br&gt;&amp;gt; the sources and reformatting to celebrate the inclusion?
&lt;/div&gt;&lt;br&gt;Thanks a lot for you fixes and the reformatting. I imported the new
&lt;br&gt;Gervill from CVS in two parts. First everything up to June 1st. Second
&lt;br&gt;the reformatting itself. That way it should be easy to follow what
&lt;br&gt;changed.
&lt;br&gt;&lt;br&gt;2008-08-08 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* overlays/openjdk/jdk/src/share/classes/com/sun/media/sound:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Import Gervill fixes from CVS. See CHANGES.txt.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* overlays/openjdk/jdk/test/com/sun/media/sound: Likewise.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Make inner classes static
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatFormatConverterInputStream
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatInputStreamChannelMixer
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatInputStreamResampler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SimpleInstrument.SimpleInstrumentPart
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftChorus.VariableDelay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftChorus.LFODelay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMixingDataLine.AudioFloatInputStreamResampler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMixingSourceDataLine.NonBlockingFloatInputStream
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.AllPass
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.Comb
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.Delay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Remove unused fields in:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSincResampler.din, SoftLanczosResampler.din,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMainMixer.finetuning, &amp;nbsp;SoftMainMixer.coarsetuning
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftJitterCorrector.JitterStream.nullbuff,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAbstractResampler.ModelAbstractResampler.loopread
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftAbstractResampler.ModelAbstractResampler.streammarked
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Remove dead code from FFT.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Make constant fields in SoftFilter final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Let SoftSynthesizer.info be final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Let SoftProvider.info be final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: Unnecessary call to sourceDataLine.drain() in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftSynthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;causes random hangs in SoftSynthesizer.open jtreg test.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This happens when the synthesizer is opened and right
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; after closed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This will not happen if there is a delay between open and
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; close call.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: ModelByteBufferAudioFileSoundbankReader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioPusher, SoftJitterCorrector
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;don't ignore stream.read return value.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: NullPointerException in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstrument if instrument = null
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: SoftJitterCorrector.getSoundbank(URL) may fail to close
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stream.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: Futile attempts to guard buffers variable in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftJitterCorrector.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: RiffReader/SF2SoundbankReader/DLSSoundbank should use
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readfully instead of read
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when reading from stream.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JTreg tests where created to test for this.
&lt;br&gt;&lt;br&gt;I like these cleanups. Your fix for the jtreg resources was nicer than
&lt;br&gt;mine, so I dropped the icedtea one. I did take your change to the tests
&lt;br&gt;needing a samplerate and controlrate argument to init the SoftLimiter to
&lt;br&gt;just pass the constant values 44100 and 147. I also made the
&lt;br&gt;SoftSynthesizer.getControlRate() protected again. I can kind of
&lt;br&gt;understand using these constants in the tests. Although I find getting
&lt;br&gt;them from the synthesizer nicer.
&lt;br&gt;&lt;br&gt;Is there a reason the control rate is always hardcoded to 147? There
&lt;br&gt;actually doesn't seem to be any way to change it since the property info
&lt;br&gt;always sets it explicitly.
&lt;br&gt;&lt;br&gt;With this there are only a few minor differences left between gervill
&lt;br&gt;CVS and the icedtea overlay. I have attached the diff.
&lt;br&gt;&lt;br&gt;&lt;br&gt;2008-06-08 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Import Gervill CVS source reformatting.
&lt;br&gt;&lt;br&gt;For the interested I have attached the current diff between the
&lt;br&gt;gervil/cvs/icedtea/overlay version and what is in openjdk6-b10.
&lt;br&gt;(Note that line endings are different, openjdk6 uses CRLF, which is
&lt;br&gt;disregarded when creating the diff.)
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18643888&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-Gervill-imported-%28Was%3A-OpenJDK-6-b10-source-posted%29-tp17723918p18643888.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-18601259</id>
	<title>Updating Gervill for OpenJDK 6 build 12</title>
	<published>2008-07-22T15:53:44Z</published>
	<updated>2008-07-22T15:53:44Z</updated>
	<author>
		<name>joe.darcy</name>
	</author>
	<content type="html">Hello.
&lt;br&gt;&lt;br&gt;With my OpenJDK 6 release manager hat on, I've been working to update 
&lt;br&gt;the version of Gervill used to OpenJDK 6 to a newer version that passes 
&lt;br&gt;the JCK tests, etc. and I'd like some review of my integration work. &amp;nbsp;
&lt;br&gt;Before this exercise, I don't have any prior experience with sound code.
&lt;br&gt;&lt;br&gt;A few comments, the copyright header in file SoftCubicResampler.java in 
&lt;br&gt;the Gervill CVS master contains the typo &amp;quot;suabject&amp;quot; instead of 
&lt;br&gt;&amp;quot;subject.&amp;quot; &amp;nbsp;From some casual examination of the code, it seems to use 
&lt;br&gt;raw types throughout, that is &amp;quot;List&amp;quot; rather than &amp;quot;List&amp;lt;String&amp;gt;&amp;quot;, etc. &amp;nbsp;
&lt;br&gt;It would be better to covert to using generics; I think IDEs have 
&lt;br&gt;refactorings to help this now.
&lt;br&gt;&lt;br&gt;There are some differences between the latest Gervill CVS from the 
&lt;br&gt;project's site and the Gervill overlays in IcedTea 6. &amp;nbsp;In particular, 
&lt;br&gt;IcedTea has changes to SoftMixingMixer.java and SoftSynthesizer.java as 
&lt;br&gt;well as some additional files, WaveExtensibleFileReader.java and 
&lt;br&gt;WaveFloatFileWriter.java. &amp;nbsp;I'd prefer to limit future merging work 
&lt;br&gt;between the three code bases, Gervill CVS, OpenJDK 6, and IcedTea 
&lt;br&gt;overlays, so in the context of updating Gervill for OpenJDK 6 b12, I 
&lt;br&gt;think it would be good to resolve these remaining few differences. &amp;nbsp;The 
&lt;br&gt;test directories are the same in all three code bases, except I don't 
&lt;br&gt;pick up a missing newline at the end of 
&lt;br&gt;./SoftCubicResampler/Interpolate.java.
&lt;br&gt;&lt;br&gt;During the update I ran into some testing issues, both with the original 
&lt;br&gt;Gervill integration in OpenJDK 6 b10 as well as the new code for b12. &amp;nbsp;
&lt;br&gt;Specifically, the 9 regression tests
&lt;br&gt;&lt;br&gt;javax/sound/midi/Gervill/SoftAudioSynthesizer/Open.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetLatency.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver2.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetReceivers.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitter.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitters.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/ImplicitOpenClose.java
&lt;br&gt;javax/sound/midi/Gervill/SoftSynthesizer/Open.java
&lt;br&gt;&lt;br&gt;can fail, seemingly dependent on how one logs into the machine. &amp;nbsp;What 
&lt;br&gt;are the necessary and sufficient conditions for permissions to run these 
&lt;br&gt;tests? &amp;nbsp;When they occur, the failures I see look like:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Windows
&lt;br&gt;=========
&lt;br&gt;&lt;br&gt;java.lang.IllegalArgumentException: No line matching interface 
&lt;br&gt;SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 
&lt;br&gt;4 bytes/frame, little-endian is supported.
&lt;br&gt;&amp;nbsp; &amp;nbsp; at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:762)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:744)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at Open.main(Open.java:53)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at java.lang.reflect.Method.invoke(Method.java:616)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:96)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at java.lang.Thread.run(Thread.java:636)
&lt;br&gt;&lt;br&gt;&amp;nbsp;Linux
&lt;br&gt;======
&lt;br&gt;&lt;br&gt;STDERR:
&lt;br&gt;java: conf.c:3109: snd_config_update_free: Assertion `update-&amp;gt;count &amp;gt; 0 
&lt;br&gt;&amp;&amp; update-&amp;gt;finfo' failed.
&lt;br&gt;&lt;br&gt;TEST RESULT: Failed. Unexpected exit from test [exit code: 134]
&lt;br&gt;&lt;br&gt;&amp;nbsp;Solaris
&lt;br&gt;=======
&lt;br&gt;&lt;br&gt;java.lang.IllegalArgumentException: No line matching interface 
&lt;br&gt;SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 
&lt;br&gt;4 bytes/frame, little-endian is supported.
&lt;br&gt;&amp;nbsp; &amp;nbsp; at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:762)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:744)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at Open.main(Open.java:53)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at java.lang.reflect.Method.invoke(Method.java:616)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at 
&lt;br&gt;com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:96)
&lt;br&gt;&amp;nbsp; &amp;nbsp; at java.lang.Thread.run(Thread.java:636)
&lt;br&gt;&lt;br&gt;These failures occur with the essentially Gervill CVS files I'm using as 
&lt;br&gt;well as the IcedTea versions.
&lt;br&gt;&lt;br&gt;I've uploaded my webrev compared to the OpenJDK 6 b11 sources to
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://dcstaff.invokedynamic.info/index.php?title=Image:darcy-6717691.tgz&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://dcstaff.invokedynamic.info/index.php?title=Image:darcy-6717691.tgz&lt;/a&gt;&lt;br&gt;&lt;br&gt;Below are the diffs of between Gervill CVS and my workspace and the 
&lt;br&gt;recent IcedTea overlays and my workspace; I just loop over the Java 
&lt;br&gt;files in the base directory, print out the file name, and then the 
&lt;br&gt;result of diff-ing with the corresponding files in my workspace.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;-Joe
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;Latest Gervill CVS (July 21, 2008) vs my workspace:
&lt;br&gt;========================================
&lt;br&gt;&lt;br&gt;AudioFileSoundbankReader.java
&lt;br&gt;AudioFloatConverter.java
&lt;br&gt;AudioFloatFormatConverter.java
&lt;br&gt;AudioFloatInputStream.java
&lt;br&gt;AudioSynthesizer.java
&lt;br&gt;AudioSynthesizerPropertyInfo.java
&lt;br&gt;DLSInfo.java
&lt;br&gt;DLSInstrument.java
&lt;br&gt;DLSModulator.java
&lt;br&gt;DLSRegion.java
&lt;br&gt;DLSSample.java
&lt;br&gt;DLSSampleLoop.java
&lt;br&gt;DLSSampleOptions.java
&lt;br&gt;DLSSoundbank.java
&lt;br&gt;DLSSoundbankReader.java
&lt;br&gt;EmergencySoundbank.java
&lt;br&gt;FFT.java
&lt;br&gt;InvalidDataException.java
&lt;br&gt;InvalidFormatException.java
&lt;br&gt;JARSoundbankReader.java
&lt;br&gt;ModelAbstractChannelMixer.java
&lt;br&gt;ModelAbstractOscillator.java
&lt;br&gt;ModelByteBuffer.java
&lt;br&gt;ModelByteBufferWavetable.java
&lt;br&gt;ModelChannelMixer.java
&lt;br&gt;ModelConnectionBlock.java
&lt;br&gt;ModelDestination.java
&lt;br&gt;ModelDirectedPlayer.java
&lt;br&gt;ModelDirector.java
&lt;br&gt;ModelIdentifier.java
&lt;br&gt;ModelInstrument.java
&lt;br&gt;ModelInstrumentComparator.java
&lt;br&gt;ModelMappedInstrument.java
&lt;br&gt;ModelOscillator.java
&lt;br&gt;ModelOscillatorStream.java
&lt;br&gt;ModelPatch.java
&lt;br&gt;ModelPerformer.java
&lt;br&gt;ModelSource.java
&lt;br&gt;ModelStandardDirector.java
&lt;br&gt;ModelStandardTransform.java
&lt;br&gt;ModelTransform.java
&lt;br&gt;ModelWavetable.java
&lt;br&gt;RIFFInvalidDataException.java
&lt;br&gt;RIFFInvalidFormatException.java
&lt;br&gt;RIFFReader.java
&lt;br&gt;RIFFWriter.java
&lt;br&gt;SF2GlobalRegion.java
&lt;br&gt;SF2Instrument.java
&lt;br&gt;SF2InstrumentRegion.java
&lt;br&gt;SF2Layer.java
&lt;br&gt;SF2LayerRegion.java
&lt;br&gt;SF2Modulator.java
&lt;br&gt;SF2Region.java
&lt;br&gt;SF2Sample.java
&lt;br&gt;SF2Soundbank.java
&lt;br&gt;SF2SoundbankReader.java
&lt;br&gt;SimpleInstrument.java
&lt;br&gt;SimpleSoundbank.java
&lt;br&gt;SoftAbstractResampler.java
&lt;br&gt;SoftAudioBuffer.java
&lt;br&gt;SoftAudioProcessor.java
&lt;br&gt;SoftAudioPusher.java
&lt;br&gt;SoftChannel.java
&lt;br&gt;SoftChannelProxy.java
&lt;br&gt;SoftChorus.java
&lt;br&gt;SoftControl.java
&lt;br&gt;SoftCubicResampler.java
&lt;br&gt;8c8
&lt;br&gt;&amp;lt; &amp;nbsp;* particular file as suabject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp;* particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;SoftEnvelopeGenerator.java
&lt;br&gt;SoftFilter.java
&lt;br&gt;SoftInstrument.java
&lt;br&gt;SoftJitterCorrector.java
&lt;br&gt;SoftLanczosResampler.java
&lt;br&gt;SoftLimiter.java
&lt;br&gt;SoftLinearResampler.java
&lt;br&gt;SoftLinearResampler2.java
&lt;br&gt;SoftLowFrequencyOscillator.java
&lt;br&gt;SoftMainMixer.java
&lt;br&gt;SoftMidiAudioFileReader.java
&lt;br&gt;SoftMixingClip.java
&lt;br&gt;SoftMixingDataLine.java
&lt;br&gt;SoftMixingMainMixer.java
&lt;br&gt;SoftMixingMixer.java
&lt;br&gt;SoftMixingMixerProvider.java
&lt;br&gt;SoftMixingSourceDataLine.java
&lt;br&gt;SoftPerformer.java
&lt;br&gt;SoftPointResampler.java
&lt;br&gt;SoftProcess.java
&lt;br&gt;SoftProvider.java
&lt;br&gt;SoftReceiver.java
&lt;br&gt;SoftResampler.java
&lt;br&gt;SoftResamplerStreamer.java
&lt;br&gt;SoftReverb.java
&lt;br&gt;SoftShortMessage.java
&lt;br&gt;SoftSincResampler.java
&lt;br&gt;SoftSynthesizer.java
&lt;br&gt;SoftTuning.java
&lt;br&gt;SoftVoice.java
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;IcedTea 6 58510fd936ff overlays vs my workspace
&lt;br&gt;======================================
&lt;br&gt;&lt;br&gt;AudioFileSoundbankReader.java
&lt;br&gt;AudioFloatConverter.java
&lt;br&gt;AudioFloatFormatConverter.java
&lt;br&gt;AudioFloatInputStream.java
&lt;br&gt;AudioSynthesizer.java
&lt;br&gt;AudioSynthesizerPropertyInfo.java
&lt;br&gt;DLSInfo.java
&lt;br&gt;DLSInstrument.java
&lt;br&gt;DLSModulator.java
&lt;br&gt;DLSRegion.java
&lt;br&gt;DLSSample.java
&lt;br&gt;DLSSampleLoop.java
&lt;br&gt;DLSSampleOptions.java
&lt;br&gt;DLSSoundbank.java
&lt;br&gt;DLSSoundbankReader.java
&lt;br&gt;50,51d49
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch(IOException ioe) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;
&lt;br&gt;EmergencySoundbank.java
&lt;br&gt;FFT.java
&lt;br&gt;InvalidDataException.java
&lt;br&gt;InvalidFormatException.java
&lt;br&gt;JARSoundbankReader.java
&lt;br&gt;ModelAbstractChannelMixer.java
&lt;br&gt;ModelAbstractOscillator.java
&lt;br&gt;ModelByteBuffer.java
&lt;br&gt;ModelByteBufferWavetable.java
&lt;br&gt;ModelChannelMixer.java
&lt;br&gt;ModelConnectionBlock.java
&lt;br&gt;ModelDestination.java
&lt;br&gt;ModelDirectedPlayer.java
&lt;br&gt;ModelDirector.java
&lt;br&gt;ModelIdentifier.java
&lt;br&gt;ModelInstrument.java
&lt;br&gt;ModelInstrumentComparator.java
&lt;br&gt;ModelMappedInstrument.java
&lt;br&gt;ModelOscillator.java
&lt;br&gt;ModelOscillatorStream.java
&lt;br&gt;ModelPatch.java
&lt;br&gt;ModelPerformer.java
&lt;br&gt;ModelSource.java
&lt;br&gt;ModelStandardDirector.java
&lt;br&gt;ModelStandardTransform.java
&lt;br&gt;ModelTransform.java
&lt;br&gt;ModelWavetable.java
&lt;br&gt;RIFFInvalidDataException.java
&lt;br&gt;RIFFInvalidFormatException.java
&lt;br&gt;RIFFReader.java
&lt;br&gt;RIFFWriter.java
&lt;br&gt;SF2GlobalRegion.java
&lt;br&gt;SF2Instrument.java
&lt;br&gt;SF2InstrumentRegion.java
&lt;br&gt;SF2Layer.java
&lt;br&gt;SF2LayerRegion.java
&lt;br&gt;SF2Modulator.java
&lt;br&gt;SF2Region.java
&lt;br&gt;SF2Sample.java
&lt;br&gt;SF2Soundbank.java
&lt;br&gt;SF2SoundbankReader.java
&lt;br&gt;49,50d48
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch(IOException ioe) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;
&lt;br&gt;SimpleInstrument.java
&lt;br&gt;SimpleSoundbank.java
&lt;br&gt;SoftAbstractResampler.java
&lt;br&gt;SoftAudioBuffer.java
&lt;br&gt;SoftAudioProcessor.java
&lt;br&gt;SoftAudioPusher.java
&lt;br&gt;SoftChannel.java
&lt;br&gt;1197,1199c1197
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Should only return lower 7 bits,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // even when controller is &amp;quot;boosted&amp;quot; higher.
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return this.controller[controller] &amp; 127;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return this.controller[controller];
&lt;br&gt;SoftChannelProxy.java
&lt;br&gt;SoftChorus.java
&lt;br&gt;SoftControl.java
&lt;br&gt;SoftCubicResampler.java
&lt;br&gt;8c8
&lt;br&gt;&amp;lt; &amp;nbsp;* particular file as suabject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp;* particular file as subject to the &amp;quot;Classpath&amp;quot; exception as provided
&lt;br&gt;SoftEnvelopeGenerator.java
&lt;br&gt;SoftFilter.java
&lt;br&gt;SoftInstrument.java
&lt;br&gt;SoftJitterCorrector.java
&lt;br&gt;SoftLanczosResampler.java
&lt;br&gt;SoftLimiter.java
&lt;br&gt;SoftLinearResampler.java
&lt;br&gt;SoftLinearResampler2.java
&lt;br&gt;SoftLowFrequencyOscillator.java
&lt;br&gt;SoftMainMixer.java
&lt;br&gt;SoftMidiAudioFileReader.java
&lt;br&gt;SoftMixingClip.java
&lt;br&gt;SoftMixingDataLine.java
&lt;br&gt;SoftMixingMainMixer.java
&lt;br&gt;SoftMixingMixer.java
&lt;br&gt;357,359d356
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataLine.Info info = new DataLine.Info(
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SourceDataLine.class, format);
&lt;br&gt;&amp;lt;
&lt;br&gt;368,369c365,413
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; line = (SourceDataLine) 
&lt;br&gt;defaultmixer.getLine(info);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Search for suitable line
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataLine.Info idealinfo = null;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFormat idealformat = null;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Line.Info[] lineinfos = 
&lt;br&gt;defaultmixer.getSourceLineInfo();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; idealFound:
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; lineinfos.length; i++) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(lineinfos[i].getLineClass() == 
&lt;br&gt;SourceDataLine.class)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataLine.Info info = 
&lt;br&gt;(DataLine.Info)lineinfos[i];
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFormat[] formats = 
&lt;br&gt;info.getFormats();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int j = 0; j &amp;lt; 
&lt;br&gt;formats.length; j++) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFormat format = formats[j];
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(format.getChannels() == 2 ||
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format.getChannels() 
&lt;br&gt;== AudioSystem.NOT_SPECIFIED)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;if(format.getEncoding().equals(Encoding.PCM_SIGNED) ||
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;format.getEncoding().equals(Encoding.PCM_UNSIGNED))
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(format.getSampleRate() == 
&lt;br&gt;AudioSystem.NOT_SPECIFIED ||
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;format.getSampleRate() == 48000.0)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;if(format.getSampleSizeInBits() == AudioSystem.NOT_SPECIFIED ||
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;format.getSampleSizeInBits() == 16)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; idealinfo = info;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ideal_channels = 
&lt;br&gt;format.getChannels();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boolean ideal_signed = 
&lt;br&gt;format.getEncoding().equals(Encoding.PCM_SIGNED);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float ideal_rate = 
&lt;br&gt;format.getSampleRate();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boolean ideal_endian = 
&lt;br&gt;format.isBigEndian(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int ideal_bits = 
&lt;br&gt;format.getSampleSizeInBits(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ideal_bits == 
&lt;br&gt;AudioSystem.NOT_SPECIFIED) ideal_bits = 16;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ideal_channels == 
&lt;br&gt;AudioSystem.NOT_SPECIFIED) ideal_channels = 2;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(ideal_rate == 
&lt;br&gt;AudioSystem.NOT_SPECIFIED) ideal_rate = 48000;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; idealformat = new 
&lt;br&gt;AudioFormat(ideal_rate, ideal_bits,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ideal_channels, 
&lt;br&gt;ideal_signed, ideal_endian);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break idealFound;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(idealformat != null)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format = idealformat;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; line = (SourceDataLine) 
&lt;br&gt;defaultmixer.getLine(idealinfo);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(line == null)
&lt;br&gt;SoftMixingMixerProvider.java
&lt;br&gt;SoftMixingSourceDataLine.java
&lt;br&gt;SoftPerformer.java
&lt;br&gt;SoftPointResampler.java
&lt;br&gt;SoftProcess.java
&lt;br&gt;SoftProvider.java
&lt;br&gt;SoftReceiver.java
&lt;br&gt;SoftResampler.java
&lt;br&gt;SoftResamplerStreamer.java
&lt;br&gt;SoftReverb.java
&lt;br&gt;SoftShortMessage.java
&lt;br&gt;SoftSincResampler.java
&lt;br&gt;SoftSynthesizer.java
&lt;br&gt;540a541,546
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File userhome = null;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File emg_soundbank_file = null;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;nbsp;Try to load saved generated soundbank
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;541a548,563
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; userhome = new File(System.getProperty(&amp;quot;user.home&amp;quot;),
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;.gervill&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; emg_soundbank_file = new File(userhome, 
&lt;br&gt;&amp;quot;soundbank-emg.sf2&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Soundbank sbk = 
&lt;br&gt;MidiSystem.getSoundbank(emg_soundbank_file);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; defaultSoundBank = sbk;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return defaultSoundBank; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (AccessControlException e) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //e.printStackTrace();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;nbsp;Generate emergency soundbank
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;542a565,574
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;nbsp;Save generated soundbank to disk for faster 
&lt;br&gt;future use.
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(defaultSoundBank != null)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!userhome.exists()) userhome.mkdirs();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!emg_soundbank_file.exists())
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;((SF2Soundbank)defaultSoundBank).save(emg_soundbank_file);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;594,596d625
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: 
&lt;br&gt;&amp;quot; + soundbank);
&lt;br&gt;&amp;lt;
&lt;br&gt;621,623d649
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: 
&lt;br&gt;&amp;quot; + soundbank);
&lt;br&gt;&amp;lt;
&lt;br&gt;SoftTuning.java
&lt;br&gt;SoftVoice.java
&lt;br&gt;WaveExtensibleFileReader.java
&lt;br&gt;diff: 
&lt;br&gt;/net/hest.sfbay/w/darcy/ws/6-open.new/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java: 
&lt;br&gt;No such file or directory
&lt;br&gt;WaveFloatFileReader.java
&lt;br&gt;74a75
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; long framerate = 1;
&lt;br&gt;89c90
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* framerate = */chunk.readUnsignedInt();
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; framerate = chunk.readUnsignedInt();
&lt;br&gt;106c107
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; framesize, samplerate, false);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; framesize, framerate, false);
&lt;br&gt;WaveFloatFileWriter.java
&lt;br&gt;diff: 
&lt;br&gt;/net/hest.sfbay/w/darcy/ws/6-open.new/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java: 
&lt;br&gt;No such file or directory
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=18601259&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Updating-Gervill-for-OpenJDK-6-build-12-tp18601259p18601259.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17723918</id>
	<title>New Gervill imported (Was: OpenJDK 6 b10 source posted)</title>
	<published>2008-06-08T15:23:48Z</published>
	<updated>2008-06-08T15:23:48Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi Karl,
&lt;br&gt;&lt;br&gt;On Wed, 2008-06-04 at 11:25 +0200, Mark Wielaard wrote:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, 2008-06-04 at 01:09 +0000, Karl Helgason wrote:
&lt;br&gt;&amp;gt; Thanks for checking. These are all in the icedtea gervill overlay also.
&lt;br&gt;&amp;gt; I'll make sure to upgrade to the latest CVS version in which I see you
&lt;br&gt;&amp;gt; fixed some of the other issues I reported.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; The code was also slightly reformatted:
&lt;br&gt;&amp;gt; &amp;gt; a) lines &amp;quot;* @version %I%, %E%&amp;quot; was removed (such lines was removed from all JDK
&lt;br&gt;&amp;gt; &amp;gt; sources);
&lt;br&gt;&amp;gt; &amp;gt; b) line indention (to make lines no longer than 80 symbols);
&lt;br&gt;&amp;gt; &amp;gt; c) tabs to spaces conversion;
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; I will look into to reformat newest Gervill CVS code the same way.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; That would be great. Since 0.9 there have been lots of changes and fixes
&lt;br&gt;&amp;gt; (which is why icedtea tracks your CVS tree and didn't use the old 0.9
&lt;br&gt;&amp;gt; code). Would it be a good idea to do a new version upgrade after syncing
&lt;br&gt;&amp;gt; the sources and reformatting to celebrate the inclusion?
&lt;/div&gt;&lt;/div&gt;Thanks a lot for you fixes and the reformatting. I imported the new
&lt;br&gt;Gervill from CVS in two parts. First everything up to June 1st. Second
&lt;br&gt;the reformatting itself. That way it should be easy to follow what
&lt;br&gt;changed.
&lt;br&gt;&lt;br&gt;2008-08-08 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17723918&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* overlays/openjdk/jdk/src/share/classes/com/sun/media/sound:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Import Gervill fixes from CVS. See CHANGES.txt.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* overlays/openjdk/jdk/test/com/sun/media/sound: Likewise.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Make inner classes static
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatFormatConverterInputStream
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatInputStreamChannelMixer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.AudioFloatInputStreamResampler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SimpleInstrument.SimpleInstrumentPart
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftChorus.VariableDelay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftChorus.LFODelay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMixingDataLine.AudioFloatInputStreamResampler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMixingSourceDataLine.NonBlockingFloatInputStream
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.AllPass
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.Comb
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftReverb.Delay
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Remove unused fields in:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSincResampler.din, SoftLanczosResampler.din,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMainMixer.finetuning, &amp;nbsp;SoftMainMixer.coarsetuning
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftJitterCorrector.JitterStream.nullbuff,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAbstractResampler.ModelAbstractResampler.loopread
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftAbstractResampler.ModelAbstractResampler.streammarked
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Remove dead code from FFT.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Make constant fields in SoftFilter final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Let SoftSynthesizer.info be final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Cleanup: Let SoftProvider.info be final.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: Unnecessary call to sourceDataLine.drain() in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftSynthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;causes random hangs in SoftSynthesizer.open jtreg test.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This happens when the synthesizer is opened and right
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; after closed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This will not happen if there is a delay between open and
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; close call.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: ModelByteBufferAudioFileSoundbankReader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftAudioPusher, SoftJitterCorrector
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;don't ignore stream.read return value.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: NullPointerException in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstrument if instrument = null
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: SoftJitterCorrector.getSoundbank(URL) may fail to close
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stream.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: Futile attempts to guard buffers variable in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftJitterCorrector.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Fix: RiffReader/SF2SoundbankReader/DLSSoundbank should use
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readfully instead of read
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;when reading from stream.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JTreg tests where created to test for this.
&lt;br&gt;&lt;br&gt;I like these cleanups. Your fix for the jtreg resources was nicer than
&lt;br&gt;mine, so I dropped the icedtea one. I did take your change to the tests
&lt;br&gt;needing a samplerate and controlrate argument to init the SoftLimiter to
&lt;br&gt;just pass the constant values 44100 and 147. I also made the
&lt;br&gt;SoftSynthesizer.getControlRate() protected again. I can kind of
&lt;br&gt;understand using these constants in the tests. Although I find getting
&lt;br&gt;them from the synthesizer nicer.
&lt;br&gt;&lt;br&gt;Is there a reason the control rate is always hardcoded to 147? There
&lt;br&gt;actually doesn't seem to be any way to change it since the property info
&lt;br&gt;always sets it explicitly.
&lt;br&gt;&lt;br&gt;With this there are only a few minor differences left between gervill
&lt;br&gt;CVS and the icedtea overlay. I have attached the diff.
&lt;br&gt;&lt;br&gt;&lt;br&gt;2008-06-08 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17723918&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Import Gervill CVS source reformatting.
&lt;br&gt;&lt;br&gt;For the interested I have attached the current diff between the
&lt;br&gt;gervil/cvs/icedtea/overlay version and what is in openjdk6-b10.
&lt;br&gt;(Note that line endings are different, openjdk6 uses CRLF, which is
&lt;br&gt;disregarded when creating the diff.)
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br /&gt;Index: src/com/sun/media/sound/DLSSoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/DLSSoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 DLSSoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/DLSSoundbankReader.java	5 Jun 2008 01:55:28 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/DLSSoundbankReader.java	8 Jun 2008 19:50:05 -0000
&lt;br&gt;@@ -47,6 +47,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DLSSoundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SF2SoundbankReader.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SF2SoundbankReader.java,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 SF2SoundbankReader.java
&lt;br&gt;--- src/com/sun/media/sound/SF2SoundbankReader.java	5 Jun 2008 01:55:33 -0000	1.3
&lt;br&gt;+++ src/com/sun/media/sound/SF2SoundbankReader.java	8 Jun 2008 19:50:05 -0000
&lt;br&gt;@@ -46,6 +46,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new SF2Soundbank(url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (RIFFInvalidFormatException e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch(IOException ioe) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SoftChannel.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftChannel.java,v
&lt;br&gt;retrieving revision 1.9
&lt;br&gt;diff -u -r1.9 SoftChannel.java
&lt;br&gt;--- src/com/sun/media/sound/SoftChannel.java	5 Jun 2008 01:55:36 -0000	1.9
&lt;br&gt;+++ src/com/sun/media/sound/SoftChannel.java	8 Jun 2008 19:50:06 -0000
&lt;br&gt;@@ -1194,7 +1194,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public int getController(int controller) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (control_mutex) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Should only return lower 7 bits,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// even when controller is &amp;quot;boosted&amp;quot; higher.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return this.controller[controller] &amp; 127;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: src/com/sun/media/sound/SoftSynthesizer.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftSynthesizer.java,v
&lt;br&gt;retrieving revision 1.36
&lt;br&gt;diff -u -r1.36 SoftSynthesizer.java
&lt;br&gt;--- src/com/sun/media/sound/SoftSynthesizer.java	5 Jun 2008 01:55:31 -0000	1.36
&lt;br&gt;+++ src/com/sun/media/sound/SoftSynthesizer.java	8 Jun 2008 19:50:06 -0000
&lt;br&gt;@@ -591,6 +591,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadAllInstruments(Soundbank soundbank) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -615,6 +618,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (soundbank == null || !isSoundbankSupported(soundbank))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Unsupported soundbank: &amp;quot; + soundbank);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isOpen())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17723918&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;icedtea-gervil-openjdk-b10.diff.gz&lt;/strong&gt; (19K) &lt;a href=&quot;http://old.nabble.com/attachment/17723918/0/icedtea-gervil-openjdk-b10.diff.gz&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-Gervill-imported-%28Was%3A-OpenJDK-6-b10-source-posted%29-tp17723918p17723918.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17461316</id>
	<title>Re: &lt;Sound Dev&gt; Opening multiple output lines</title>
	<published>2008-05-25T12:16:28Z</published>
	<updated>2008-05-25T12:16:28Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi Karl,
&lt;br&gt;&lt;br&gt;On Fri, 2008-05-09 at 19:58 +0000, Karl Helgason wrote:
&lt;br&gt;&amp;gt; I added software sound mixing to the gervill Project which writes to default directaudio backend.
&lt;br&gt;&amp;gt; And thus allows true sharing of audio device (within the Java application).
&lt;br&gt;&lt;br&gt;This is great! Sorry for the late response. I integrated it into
&lt;br&gt;icedtea. But I haven't set it as default yet because I didn't have time
&lt;br&gt;to fully test it. I do want to have it integrated so others can play
&lt;br&gt;with it though.
&lt;br&gt;&lt;br&gt;Also thanks for your AudioFloatFormatConverter.getTargetFormats() fix, I
&lt;br&gt;removed my own attempt of fixing that. And for integrating the dls/sf2
&lt;br&gt;soundbank opening issues.
&lt;br&gt;&lt;br&gt;Also since we now have jtreg integrated I imported all the tests so they
&lt;br&gt;will now all be run by default on a make check (or make jtregcheck).
&lt;br&gt;That found two issues.
&lt;br&gt;&lt;br&gt;One with a test. TestRender1 accesses its test files through
&lt;br&gt;getResourceAsStream(), but the jtreg tag specification recommends
&lt;br&gt;opening files through the system property test.src so that the test can
&lt;br&gt;be run inside another work directory. See
&lt;br&gt;&lt;a href=&quot;http://www.openjdk.org/jtreg/tag-spec.txt&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.openjdk.org/jtreg/tag-spec.txt&lt;/a&gt;&lt;br&gt;Patch to change this attached.
&lt;br&gt;&lt;br&gt;The other issue is with the change that made SoftAudioProcessor
&lt;br&gt;(limiter, reverb, chorus, agc) more general. Since you cannot provide a
&lt;br&gt;Synthesizer directly to one of these classes you need a way to pass it
&lt;br&gt;the control rate. Unfortunately SoftSynthesizer.getControlRate() is
&lt;br&gt;currently protected and there is as far as I can see no other way to get
&lt;br&gt;the control rate. So I believe the method should be made public. A
&lt;br&gt;change to do this and adapt the tests to use this is attached.
&lt;br&gt;&lt;br&gt;With these changes all tests pass.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[TestRender1-test.src.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: test/com/sun/media/sound/SoftSynthesizer/TestRender1.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftSynthesizer/TestRender1.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 TestRender1.java
&lt;br&gt;--- test/com/sun/media/sound/SoftSynthesizer/TestRender1.java	2 Jan 2008 12:24:16 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftSynthesizer/TestRender1.java	25 May 2008 19:07:10 -0000
&lt;br&gt;@@ -29,6 +29,8 @@
&lt;br&gt;&amp;nbsp;import java.io.BufferedInputStream;
&lt;br&gt;&amp;nbsp;import java.io.IOException;
&lt;br&gt;&amp;nbsp;import java.io.InputStream;
&lt;br&gt;+import java.io.File;
&lt;br&gt;+import java.io.FileInputStream;
&lt;br&gt;&amp;nbsp;import java.io.OutputStream;
&lt;br&gt;&amp;nbsp;import java.util.HashMap;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;@@ -134,13 +136,15 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	public static void main(String[] args) throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		InputStream sb = new BufferedInputStream(TestRender1.class
&lt;br&gt;-				.getResourceAsStream(&amp;quot;/ding.sf2&amp;quot;));
&lt;br&gt;+		File fb = new File(System.getProperty(&amp;quot;test.src&amp;quot;, &amp;quot;.&amp;quot;),
&lt;br&gt;+				 &amp;nbsp; &amp;quot;ding.sf2&amp;quot;);
&lt;br&gt;+		InputStream sb = new FileInputStream(fb);
&lt;br&gt;&amp;nbsp;		soundbank = MidiSystem.getSoundbank(sb);
&lt;br&gt;&amp;nbsp;		sb.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		InputStream si = new BufferedInputStream(TestRender1.class
&lt;br&gt;-				.getResourceAsStream(&amp;quot;/expresso.mid&amp;quot;));
&lt;br&gt;+		File fi = new File(System.getProperty(&amp;quot;test.src&amp;quot;, &amp;quot;.&amp;quot;),
&lt;br&gt;+				 &amp;nbsp; &amp;quot;expresso.mid&amp;quot;);
&lt;br&gt;+		InputStream si = new FileInputStream(fi);
&lt;br&gt;&amp;nbsp;		sequence = MidiSystem.getSequence(si);
&lt;br&gt;&amp;nbsp;		si.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[controlrate.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: src/com/sun/media/sound/SoftSynthesizer.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/SoftSynthesizer.java,v
&lt;br&gt;retrieving revision 1.31
&lt;br&gt;diff -u -r1.31 SoftSynthesizer.java
&lt;br&gt;--- src/com/sun/media/sound/SoftSynthesizer.java	5 Mar 2008 03:35:22 -0000	1.31
&lt;br&gt;+++ src/com/sun/media/sound/SoftSynthesizer.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -331,7 +331,10 @@
&lt;br&gt;&amp;nbsp;		return deviceid;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	protected float getControlRate() {
&lt;br&gt;+	/**
&lt;br&gt;+ 	 * Returns the number of control changes per second.
&lt;br&gt;+ 	 */
&lt;br&gt;+	public float getControlRate() {
&lt;br&gt;&amp;nbsp;		return controlrate;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_mix.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix.java	11 Dec 2007 02:49:18 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -71,7 +71,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(true);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setInput(1, in2);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_mix_mono.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono.java	11 Dec 2007 02:49:19 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -63,7 +63,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(true);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setOutput(0, out1);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono_overdrive.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono_overdrive.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_mix_mono_overdrive.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono_overdrive.java	11 Dec 2007 02:49:17 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_mono_overdrive.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -64,7 +64,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(true);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setOutput(0, out1);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_overdrive.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_overdrive.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_mix_overdrive.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_overdrive.java	11 Dec 2007 02:50:21 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_mix_overdrive.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -71,7 +71,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(true);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setInput(1, in2);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_normal.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal.java	11 Dec 2007 02:50:22 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -71,7 +71,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(false);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setInput(1, in2);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal_mono.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal_mono.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_normal_mono.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal_mono.java	11 Dec 2007 02:50:23 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_normal_mono.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -63,7 +63,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(false);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setOutput(0, out1);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_overdrive.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive.java	11 Dec 2007 02:49:50 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -71,7 +71,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(false);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setInput(1, in2);
&lt;br&gt;Index: test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive_mono.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive_mono.java,v
&lt;br&gt;retrieving revision 1.1
&lt;br&gt;diff -u -r1.1 ProcessAudio_replace_overdrive_mono.java
&lt;br&gt;--- test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive_mono.java	11 Dec 2007 02:50:23 -0000	1.1
&lt;br&gt;+++ test/com/sun/media/sound/SoftLimiter/ProcessAudio_replace_overdrive_mono.java	25 May 2008 19:12:24 -0000
&lt;br&gt;@@ -63,7 +63,8 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		SoftLimiter limiter = new SoftLimiter();
&lt;br&gt;-		limiter.init(synth);
&lt;br&gt;+		limiter.init(synth.getFormat().getSampleRate(),
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; synth.getControlRate());
&lt;br&gt;&amp;nbsp;		limiter.setMixMode(false);
&lt;br&gt;&amp;nbsp;		limiter.setInput(0, in1);
&lt;br&gt;&amp;nbsp;		limiter.setOutput(0, out1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17461316&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-%3CSound-Dev%3E-Opening-multiple-output-lines-tp17155492p17461316.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17155492</id>
	<title>Re: &lt;Sound Dev&gt; Opening multiple output lines</title>
	<published>2008-05-09T12:58:51Z</published>
	<updated>2008-05-09T12:58:51Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I added software sound mixing to the gervill Project which writes to default directaudio backend.
&lt;br&gt;And thus allows true sharing of audio device (within the Java application).
&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Karl Helgason
&lt;br&gt;________________________________________
&lt;br&gt;Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sound-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sound-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Mark Wielaard [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;]
&lt;br&gt;Sent: 9. maí 2008 00:48
&lt;br&gt;Viðtakandi: Thomas Fitzsimmons
&lt;br&gt;Afrit: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sound-dev@...&lt;/a&gt;; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;distro-pkg-dev@...&lt;/a&gt;
&lt;br&gt;Efni: Re: &amp;lt;Sound Dev&amp;gt; Opening multiple output lines
&lt;br&gt;&lt;br&gt;Hi,
&lt;br&gt;&lt;br&gt;On Sun, 2008-05-04 at 19:19 +0200, Mark Wielaard wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I had the same problem with a similar setup and with applications that
&lt;br&gt;&amp;gt; forget to close a line they don't use anymore (unfortunately this seems
&lt;br&gt;&amp;gt; very common). With the current directaudio backend I don't see how multiple
&lt;br&gt;&amp;gt; lines for the same hardware device could work though. So I am using a
&lt;br&gt;&amp;gt; trick to look for &amp;quot;sloppy&amp;quot; applications. If the last line opened in the
&lt;br&gt;&amp;gt; directaudio device was for the same hardware format then we silence that
&lt;br&gt;&amp;gt; one first so we can hand out a new one. This seems to work surprisingly
&lt;br&gt;&amp;gt; well. And it doesn't seem to interfere with applications that handle the
&lt;br&gt;&amp;gt; hardware formats they need explicitly.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; With gcjwebplugin and this patch we can happily play the vNES games :)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Of course a real solution would be to import or write a better mixer
&lt;br&gt;&amp;gt; that does share lines properly.
&lt;/div&gt;&lt;br&gt;I updated the patch a little to make it all a bit more robust. It splits
&lt;br&gt;the locks, so there is no longer one gaint static one (I shouldn't have
&lt;br&gt;reused the lockNative one and made that static in the original patch).
&lt;br&gt;&lt;br&gt;And it makes sure that all methods that require the nativeLock check the
&lt;br&gt;doIO inside their synchronized block and the lock around nStop() isn't
&lt;br&gt;released before the flag is set. ALSA can actually hang when called on a
&lt;br&gt;pcm you already stopped or closed. This race was already in the code,
&lt;br&gt;since a DataSourceLine could be asynchronously stopped or closed at any
&lt;br&gt;time. My patch just exposed it more easily, because DirectAudioDevice is
&lt;br&gt;the mixer that is now always used by defailt.
&lt;br&gt;&lt;br&gt;2008-05-08 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * patches/icedtea-directaudio-close-trick.patch: Use new static
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lockLast for nOpen/nClose guarding. &amp;nbsp;Make lockNative non-static
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; again. &amp;nbsp;Do all checks before native calls of doIO inside
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lockNative guard. Set doIO to false after nClose before dropping
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lockNative guard.
&lt;br&gt;&lt;br&gt;I do think we should write a new MixerProvider based on a modern
&lt;br&gt;soundserver, like pulseaudio. The current DirectAudioDeviceProvider code
&lt;br&gt;cannot easily be extended to provide true software sound mixing. And the
&lt;br&gt;way it opens direct hardware alsa devices means it locks out other
&lt;br&gt;applications.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br&gt;Patch against original code (updated patch file in icedtea6).
&lt;br&gt;&lt;br&gt;No virus found in this incoming message.
&lt;br&gt;Checked by AVG.
&lt;br&gt;Version: 7.5.524 / Virus Database: 269.23.10/1421 - Release Date: 7.5.2008 17:23
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17155492&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-%3CSound-Dev%3E-Opening-multiple-output-lines-tp17155492p17155492.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17152555</id>
	<title>Re: Some small Gervill fixes</title>
	<published>2008-05-09T10:14:28Z</published>
	<updated>2008-05-09T10:14:28Z</updated>
	<author>
		<name>Mark Wielaard-3</name>
	</author>
	<content type="html">Hi Karl,
&lt;br&gt;&lt;br&gt;On Mon, 2008-05-05 at 00:30 +0200, Mark Wielaard wrote:
&lt;br&gt;&amp;gt; &amp;gt; I especially proud of the new AudioFloatFormatConverter, it makes
&lt;br&gt;&amp;gt; &amp;gt; sample rate conversion available via a FormatConversionProvider.
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; O wow, very nice. I imported the new Gervill CVS version into IcedTea.
&lt;br&gt;&lt;br&gt;And then I forgot to add the AudioFloatFormatConverter class to the
&lt;br&gt;javax.sound.sampled.spi.FormatConversionProvider file. DOH!
&lt;br&gt;&lt;br&gt;Added that now to the icedtea-gervill.patch and imported a fresh Gervill
&lt;br&gt;CVS into the overlays.
&lt;br&gt;&lt;br&gt;One small nit. AudioFloatFormatConverter.getTargetFormats() happily
&lt;br&gt;tells me that it will convert to lots of AudioFormats even if it doesn't
&lt;br&gt;actually know the given target encoding. I added a check on
&lt;br&gt;isConversionSupported() like the other converter methods do.
&lt;br&gt;&lt;br&gt;2008-05-09 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17152555&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mwielaard@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound:
&lt;br&gt;&amp;nbsp; &amp;nbsp; Import Gervill fixes from CVS. See CHANGES.txt.
&lt;br&gt;&amp;nbsp; &amp;nbsp; Check isConversionSupported() in
&lt;br&gt;&amp;nbsp; &amp;nbsp; AudioFloatFormatConverter.getTargetFormats().
&lt;br&gt;&amp;nbsp; &amp;nbsp; * patches/icedtea-gervill.patch: Add AudioFloatFormatConverter to
&lt;br&gt;&amp;nbsp; &amp;nbsp; javax.sound.sampled.spi.FormatConversionProvider.
&lt;br&gt;&lt;br&gt;AudioFloatFormatConverter patch against Gervill CVS attached.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br /&gt;Index: src/com/sun/media/sound/AudioFloatFormatConverter.java
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /cvs/gervill/src/com/sun/media/sound/AudioFloatFormatConverter.java,v
&lt;br&gt;retrieving revision 1.2
&lt;br&gt;diff -u -r1.2 AudioFloatFormatConverter.java
&lt;br&gt;--- src/com/sun/media/sound/AudioFloatFormatConverter.java	8 May 2008 16:38:02 -0000	1.2
&lt;br&gt;+++ src/com/sun/media/sound/AudioFloatFormatConverter.java	9 May 2008 17:10:49 -0000
&lt;br&gt;@@ -489,7 +489,7 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	public AudioFormat[] getTargetFormats(Encoding targetEncoding, AudioFormat sourceFormat) {
&lt;br&gt;-		if(AudioFloatConverter.getConverter(sourceFormat) == null) return new AudioFormat[0];
&lt;br&gt;+		if(!isConversionSupported(targetEncoding, sourceFormat)) return new AudioFormat[0];
&lt;br&gt;&amp;nbsp;		int channels = sourceFormat.getChannels();
&lt;br&gt;&amp;nbsp;		ArrayList&amp;lt;AudioFormat&amp;gt; formats = new ArrayList&amp;lt;AudioFormat&amp;gt;();
&lt;br&gt;&amp;nbsp;		formats.add(new AudioFormat(Encoding.PCM_SIGNED, AudioSystem.NOT_SPECIFIED, 8, channels, channels, AudioSystem.NOT_SPECIFIED, false));
&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17152555&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Some-small-Gervill-fixes-tp17011267p17152555.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17052102</id>
	<title>Re: Some small Gervill fixes</title>
	<published>2008-05-04T15:30:30Z</published>
	<updated>2008-05-04T15:30:30Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi Karl,
&lt;br&gt;&lt;br&gt;On Fri, 2008-05-02 at 16:25 +0000, Karl Helgason wrote:
&lt;br&gt;&amp;gt; I am not currently filtering the control values to 0..127 because some
&lt;br&gt;&amp;gt; user likes to be able to overdrive the values
&lt;br&gt;&amp;gt; for example to set Volume to 255 which mean more than 100% volume (it
&lt;br&gt;&amp;gt; was possible with the previous beatnik synthesizer).
&lt;br&gt;&amp;gt; This could however result in unpredictable behaviors.
&lt;br&gt;&amp;gt; If we want to prevent out of range values we should do that at the
&lt;br&gt;&amp;gt; beginning in the controlChange method with if statement.
&lt;br&gt;&lt;br&gt;Aha, yes, I see. If the user is allowed to &amp;quot;boost&amp;quot; a control then maybe
&lt;br&gt;we should just let them. Reading those &amp;quot;weird&amp;quot; values back in
&lt;br&gt;getController() can lead to some strangeness though.
&lt;br&gt;&lt;br&gt;&amp;gt; But it is cool to get more code reviewers :) Sun is planning to add
&lt;br&gt;&amp;gt; Gervill into OpenJDK 6 after JavaOne.
&lt;br&gt;&lt;br&gt;That would be very cool. I am playing with frinika now on top of
&lt;br&gt;icedtea/openjdk with gervill integrated (frinika obviously works since
&lt;br&gt;it already had an older gervill imported). I never knew midi could be so
&lt;br&gt;much fun!
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I have added this fix into the CVS and these also:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; - Added: AudioFloatFormatConverter, used to convert
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;between PCM_SIGNED, PCM_UNSIGNED, PCM_FLOAT in 8/16/24/32 bit (big/little endian),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and resample using (linear/cubic/sinc...) if needed.
&lt;br&gt;&amp;gt; &amp;nbsp; - Added: WaveExtensibleReader, used to read WAV files using WAVE_FORMAT_EXTENSIBLE format.
&lt;br&gt;&amp;gt; &amp;nbsp; - Added: WaveFloatFileWriter, used to writing WAV files with PCM_FLOAT encoding.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: AudioFloatConverter tests incorrectly AudioFormat frameSize against SampleSizeInBits
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Support for 64-byte float added, and support for 32+ bit PCM samples.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SampleSizeInBits &amp;nbsp;not dividable by 8 are now handled correctly.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: DLSID(GUID) values incorrectly read from files in DLSSoundBank.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: WaveFloatFileReader incorrectly sets framrate.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: DLSSoundbank writes avgBytesPerSec incorrectly if SampleSizeInBits is not dividable by 8.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftChannel didn't reset concept of LSB control to 0 when MSB control value is set
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(according to MIDI 1.0 Detailed Spec. page 12)
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftChannel, added check for illegal noteNumbers.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If illegal notenumber was used in NoteOn/NoteOff
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a ArrayOutOfIndex exception was thrown.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I especially proud of the new AudioFloatFormatConverter, it makes
&lt;br&gt;&amp;gt; sample rate conversion available via a FormatConversionProvider.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&lt;/a&gt;&lt;/div&gt;&lt;br&gt;O wow, very nice. I imported the new Gervill CVS version into IcedTea.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17052102&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Some-small-Gervill-fixes-tp17011267p17052102.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17022998</id>
	<title>Re: Some small Gervill fixes</title>
	<published>2008-05-02T09:25:39Z</published>
	<updated>2008-05-02T09:25:39Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;You are correct according to the MIDI 1.0 Detailed Spec. page 12 :)
&lt;br&gt;&lt;br&gt;Thanks for noticing this. Although LSB controls (32..64) aren't used in the synthesizer except for bank select and data entry.
&lt;br&gt;And your patch didn't apply for those cases, because it happened earlier in the code.
&lt;br&gt;Support for LSB controls could be easily added by adding more ModelConnectionBlock entries into SoftPerformer.java
&lt;br&gt;&lt;br&gt;I am not currently filtering the control values to 0..127 because some user likes to be able to overdrive the values
&lt;br&gt;for example to set Volume to 255 which mean more than 100% volume (it was possible with the previous beatnik synthesizer).
&lt;br&gt;This could however result in unpredictable behaviors.
&lt;br&gt;If we want to prevent out of range values we should do that at the beginning in the controlChange method with if statement.
&lt;br&gt;&lt;br&gt;But it is cool to get more code reviewers :) Sun is planning to add Gervill into OpenJDK 6 after JavaOne.
&lt;br&gt;&lt;br&gt;I have added this fix into the CVS and these also:
&lt;br&gt;&lt;br&gt;&amp;nbsp; - Added: AudioFloatFormatConverter, used to convert
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;between PCM_SIGNED, PCM_UNSIGNED, PCM_FLOAT in 8/16/24/32 bit (big/little endian),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and resample using (linear/cubic/sinc...) if needed.
&lt;br&gt;&amp;nbsp; - Added: WaveExtensibleReader, used to read WAV files using WAVE_FORMAT_EXTENSIBLE format.
&lt;br&gt;&amp;nbsp; - Added: WaveFloatFileWriter, used to writing WAV files with PCM_FLOAT encoding.
&lt;br&gt;&amp;nbsp; - Fix: AudioFloatConverter tests incorrectly AudioFormat frameSize against SampleSizeInBits
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Support for 64-byte float added, and support for 32+ bit PCM samples.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SampleSizeInBits &amp;nbsp;not dividable by 8 are now handled correctly.
&lt;br&gt;&amp;nbsp; - Fix: DLSID(GUID) values incorrectly read from files in DLSSoundBank.
&lt;br&gt;&amp;nbsp; - Fix: WaveFloatFileReader incorrectly sets framrate.
&lt;br&gt;&amp;nbsp; - Fix: DLSSoundbank writes avgBytesPerSec incorrectly if SampleSizeInBits is not dividable by 8.
&lt;br&gt;&amp;nbsp; - Fix: SoftChannel didn't reset concept of LSB control to 0 when MSB control value is set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(according to MIDI 1.0 Detailed Spec. page 12)
&lt;br&gt;&amp;nbsp; - Fix: SoftChannel, added check for illegal noteNumbers.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If illegal notenumber was used in NoteOn/NoteOff
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a ArrayOutOfIndex exception was thrown.
&lt;br&gt;&lt;br&gt;I especially proud of the new AudioFloatFormatConverter, it makes sample rate conversion available via a FormatConversionProvider.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4916960&lt;/a&gt;&lt;br&gt;&lt;br&gt;cheers,
&lt;br&gt;Karl
&lt;br&gt;&lt;br&gt;________________________________________
&lt;br&gt;Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Mark Wielaard [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mwielaard@...&lt;/a&gt;]
&lt;br&gt;Sent: 1. maí 2008 23:33
&lt;br&gt;Viðtakandi: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;Afrit: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;distro-pkg-dev@...&lt;/a&gt;
&lt;br&gt;Efni: Re: [Audio-engine-dev] Some small Gervill fixes
&lt;br&gt;&lt;br&gt;Hi,
&lt;br&gt;&lt;br&gt;Another small nit. In SoftChannel.controlChange() the controller values
&lt;br&gt;for least significant values (32-64) weren't reset to zero when the most
&lt;br&gt;significant values were set. This showed up when calling
&lt;br&gt;getController().
&lt;br&gt;&lt;br&gt;2008-05-01 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mwielaard@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * com/sun/media/sound/SoftChannel.java (controlChange):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reset least significant controller if necessary.
&lt;br&gt;&lt;br&gt;Let me know what you think. I added this patch to IcedTea.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br&gt;No virus found in this incoming message.
&lt;br&gt;Checked by AVG.
&lt;br&gt;Version: 7.5.524 / Virus Database: 269.23.7/1408 - Release Date: 30.4.2008 18:10
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17022998&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Some-small-Gervill-fixes-tp17011267p17022998.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-17011267</id>
	<title>Re: Some small Gervill fixes</title>
	<published>2008-05-01T16:33:45Z</published>
	<updated>2008-05-01T16:33:45Z</updated>
	<author>
		<name>Mark Wielaard-3</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Another small nit. In SoftChannel.controlChange() the controller values
&lt;br&gt;for least significant values (32-64) weren't reset to zero when the most
&lt;br&gt;significant values were set. This showed up when calling
&lt;br&gt;getController().
&lt;br&gt;&lt;br&gt;2008-05-01 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17011267&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mwielaard@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * com/sun/media/sound/SoftChannel.java (controlChange):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reset least significant controller if necessary.
&lt;br&gt;&lt;br&gt;Let me know what you think. I added this patch to IcedTea.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br /&gt;--- com/sun/media/sound/SoftChannel.java	Thu May 01 10:57:58 2008 +0200
&lt;br&gt;+++ com/sun/media/sound/SoftChannel.java	Fri May 02 01:29:20 2008 +0200
&lt;br&gt;@@ -1170,7 +1170,13 @@ public class SoftChannel implements Midi
&lt;br&gt;&amp;nbsp;				return;
&lt;br&gt;&amp;nbsp;			}			
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			this.controller[controller] = value;
&lt;br&gt;+			// Keep track of values (capped to 7 bit).
&lt;br&gt;+			// Reset least significant (32 through 63)
&lt;br&gt;+			// controller value when most significant
&lt;br&gt;+			// (0 through 31) is set.
&lt;br&gt;+			this.controller[controller] = value &amp; 127;
&lt;br&gt;+			if (controller &amp;lt; 32)
&lt;br&gt;+				this.controller[controller + 32] = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			for (int i = 0; i &amp;lt; voices.length; i++)
&lt;br&gt;&amp;nbsp;				if (voices[i].active)
&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=17011267&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Some-small-Gervill-fixes-tp17011267p17011267.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-16990664</id>
	<title>Gervill integrated into IcedTea</title>
	<published>2008-04-30T13:13:33Z</published>
	<updated>2008-04-30T13:13:33Z</updated>
	<author>
		<name>Mark Wielaard</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Gervill [1] is a software sound synthesizer, written by Karl Helgason,
&lt;br&gt;which was created as a proposal for the Audio Synthesis Engine Project
&lt;br&gt;[2] and it was recently accepted as one of the projects for the
&lt;br&gt;Innovators' Challenge [3].
&lt;br&gt;&lt;br&gt;Since this is one of the major pieces missing, because it is fun to play
&lt;br&gt;with sounds and to give the code a little more exposure I integrated it
&lt;br&gt;into IcedTea.
&lt;br&gt;&lt;br&gt;I took the version from Gervill CVS which is already assigned to Sun and
&lt;br&gt;distributed under the GPL + Classpath exception (README.txt, CHANGES.txt
&lt;br&gt;and LICENSE also included of course). 
&lt;br&gt;&lt;br&gt;This provides the following new service providers
&lt;br&gt;&lt;br&gt;javax.sound.sampled.spi.AudioFileReader:
&lt;br&gt;&amp;nbsp; com.sun.media.sound.WaveFloatFileReader
&lt;br&gt;&amp;nbsp; com.sun.media.sound.SoftMidiAudioFileReader
&lt;br&gt;&lt;br&gt;javax.sound.midi.spi.MidiDeviceProvider:
&lt;br&gt;&amp;nbsp; com.sun.media.sound.SoftProvider
&lt;br&gt;&lt;br&gt;javax.sound.midi.spi.SoundbankReader:
&lt;br&gt;&amp;nbsp; com.sun.media.sound.SF2SoundbankReader
&lt;br&gt;&amp;nbsp; com.sun.media.sound.DLSSoundbankReader
&lt;br&gt;&amp;nbsp; com.sun.media.sound.PATSoundbankReader
&lt;br&gt;&amp;nbsp; com.sun.media.sound.AudioFileSoundbankReader
&lt;br&gt;&amp;nbsp; com.sun.media.sound.JARSoundbankReader
&lt;br&gt;&lt;br&gt;It is added as an overlay for the code under
&lt;br&gt;openjdk/jdk/src/share/classes/com/sun/media/sound/ and a patch against
&lt;br&gt;the service provider files in patches/icedtea-gervill.patch.
&lt;br&gt;&lt;br&gt;2008-04-30 &amp;nbsp;Mark Wielaard &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=16990664&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mark@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Makefile.am (ICEDTEA_PATCHES): Add patches/icedtea-gervill.patch.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Makefile.in: Regenerated.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * patches/icedtea-gervill.patch: New patch.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/*:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; New Gervill files.
&lt;br&gt;&lt;br&gt;I also ran the testsuite in Gervill against a freshly build IcedTea and
&lt;br&gt;all all test PASS. I haven't included the tests yet since I thought they
&lt;br&gt;would not run without jtreg, but a quick little dirty fake jtreg harness
&lt;br&gt;was easy to come up with [*]. If this works for other jtreg based tests
&lt;br&gt;I will try and integrate it so we don't have to wait till jtreg is
&lt;br&gt;liberate to run more test.
&lt;br&gt;&lt;br&gt;If you can please test and report any issues (best to CC audio-engine-dev).
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Mark
&lt;br&gt;&lt;br&gt;[1] &lt;a href=&quot;https://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;[2] &lt;a href=&quot;http://openjdk.java.net/projects/audio-engine/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://openjdk.java.net/projects/audio-engine/&lt;/a&gt;&lt;br&gt;[3] &lt;a href=&quot;http://blogs.sun.com/rsands/entry/the_challenge_of_the_challenge&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blogs.sun.com/rsands/entry/the_challenge_of_the_challenge&lt;/a&gt;&lt;br&gt;&lt;br&gt;[*]
&lt;br&gt;for i in `find com -name \*.java`; do echo -n &amp;quot;$i: &amp;quot;; grep 'static void main' $i &amp;gt; /dev/null; if test $? == 0; then javac -cp `dirname $i` $i; java -cp `dirname $i` `basename $i .java`; if test $? == 0; then echo PASS; else echo FAIL; fi; else echo &amp;quot;SKIPPED&amp;quot;; fi; done
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=16990664&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-integrated-into-IcedTea-tp16990664p16990664.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15630997</id>
	<title>Re: Gervill 0.9 just released</title>
	<published>2008-02-22T01:59:47Z</published>
	<updated>2008-02-22T01:59:47Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">Hi everybody!
&lt;br&gt;&lt;br&gt;With version 0.9 all reported issues has been fixed.
&lt;br&gt;I'm going to start integration Gervill into openJDK6 (dropping encumbered code) 
&lt;br&gt;next Tuesday, February 26. After completion of the integration into openJDK6, 
&lt;br&gt;the same thing will be done with openJDK7.
&lt;br&gt;&lt;br&gt;If somebody is still in progress with testing/reviewing please let us know.
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;&lt;br&gt;Karl Helgason wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Version 0.9 has just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=577578&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=577578&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Gervill project page at java.net is:
&lt;br&gt;&amp;gt; &amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Change log:
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: JTreg SoftSynthesizer\ImplicitOpenClose.java
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;did not test correctly.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftSynthesizer.isSoundbankSupported
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now only returns false if
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;there is any instrument which is not supported.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftSynthesizer.remapInstrument
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;did not work correctly.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftSynthesizer.loadInstrument
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.loadInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.loadAllInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstrument
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadAllInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getAvailableInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getLoadedInstruments
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now throws IllegalArgumentException
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if instrument is not supported
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and false if instrument can't be loaded
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for some other reason.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftSynthesizer.getReceivers()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getMicrosecondPosition()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getVoiceStatus()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getChannels()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMidiAudioFileReader.getAudioInputStream(Sequence seq)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now no longer throw IllegalStateException.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftSynthesizer.getChannels() and
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getVoiceStatus()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now no longer return internal array.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: CPU spiking caused by denormal floats in SoftReverb.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: Calling getReceiver before opening the synthesizer results in NullPointerException.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; JTreg test added: SoftSynthesizer/GetReceiver2
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: Removed checksum check on
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BULK TUNING DUMP (NON-REAL-TIME)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Because MIDI Tuning Spec was ambigous about
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;how to calculate the checksum
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and different programs tested calculated
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;different checksum.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JTreg test SoftTuning/Load1 fixed.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; regards,
&lt;br&gt;&amp;gt; Karl Helgason
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15630997&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;/div&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15630997&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.9-just-released-tp15549391p15630997.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15549391</id>
	<title>Gervill 0.9 just released</title>
	<published>2008-02-18T08:48:29Z</published>
	<updated>2008-02-18T08:48:29Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Version 0.9 has just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=577578&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=577578&lt;/a&gt;&lt;br&gt;&lt;br&gt;Gervill project page at java.net is:
&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change log:
&lt;br&gt;&amp;nbsp; - Fix: JTreg SoftSynthesizer\ImplicitOpenClose.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;did not test correctly.
&lt;br&gt;&amp;nbsp; - Fix: SoftSynthesizer.isSoundbankSupported
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now only returns false if
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;there is any instrument which is not supported.
&lt;br&gt;&amp;nbsp; - Fix: SoftSynthesizer.remapInstrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;did not work correctly.
&lt;br&gt;&amp;nbsp; - Fix: SoftSynthesizer.loadInstrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.loadInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.loadAllInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.unloadAllInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getAvailableInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getLoadedInstruments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now throws IllegalArgumentException
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if instrument is not supported
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and false if instrument can't be loaded
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for some other reason.
&lt;br&gt;&amp;nbsp; - Fix: SoftSynthesizer.getReceivers()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getMicrosecondPosition()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getVoiceStatus()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getChannels()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftMidiAudioFileReader.getAudioInputStream(Sequence seq)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now no longer throw IllegalStateException.
&lt;br&gt;&amp;nbsp; - Fix: SoftSynthesizer.getChannels() and
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SoftSynthesizer.getVoiceStatus()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;now no longer return internal array.
&lt;br&gt;&amp;nbsp; - Fix: CPU spiking caused by denormal floats in SoftReverb.
&lt;br&gt;&amp;nbsp; - Fix: Calling getReceiver before opening the synthesizer results in NullPointerException.
&lt;br&gt;&amp;nbsp; &amp;nbsp; JTreg test added: SoftSynthesizer/GetReceiver2
&lt;br&gt;&amp;nbsp; - Fix: Removed checksum check on
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BULK TUNING DUMP (NON-REAL-TIME)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Because MIDI Tuning Spec was ambigous about
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;how to calculate the checksum
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and different programs tested calculated
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;different checksum.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JTreg test SoftTuning/Load1 fixed.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15549391&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.9-just-released-tp15549391p15549391.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15485943</id>
	<title>SoftSynthesizer: getChannels() and getVoiceStatus()</title>
	<published>2008-02-14T10:08:59Z</published>
	<updated>2008-02-14T10:08:59Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">&lt;br&gt;SoftSynthesizer.getChannels() returns internal channels array.
&lt;br&gt;If somebody modify the array it may causes failures. It should return copy of 
&lt;br&gt;the array.
&lt;br&gt;&lt;br&gt;SoftSynthesizer.getVoiceStatus() returns &amp;quot;internal&amp;quot; tempVoiceStatusArray array.
&lt;br&gt;This may causes sharing violation. also it make impossible to do something like:
&lt;br&gt;VoiceStatus[] voices1 = synth.getVoiceStatus();
&lt;br&gt;&amp;lt;some actions&amp;gt;
&lt;br&gt;VoiceStatus[] voices2 = synth.getVoiceStatus();
&lt;br&gt;&amp;lt;compare voices1 &amp; voices2 and do something if voices are changed&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15485943&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SoftSynthesizer%3A-getChannels%28%29-and-getVoiceStatus%28%29-tp15485943p15485943.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15485601</id>
	<title>SotfSynthesizer.remapInstrument</title>
	<published>2008-02-14T09:49:09Z</published>
	<updated>2008-02-14T09:49:09Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">Hi again,
&lt;br&gt;&lt;br&gt;Karl, did you see that Synthesizer.remapInstrument() spec has been changed in 
&lt;br&gt;Java6? It look like you used spec from 1.5.
&lt;br&gt;&lt;br&gt;new spec is:
&lt;br&gt;boolean remapInstrument(Instrument from, Instrument to)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Remaps an instrument. Instrument to takes the place of instrument from.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;For example, if from was located at bank number 2, program number 11, 
&lt;br&gt;remapping causes that bank and program location to be occupied instead by to.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;If the function succeeds, instrument from is unloaded.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;To cancel the remapping reload instrument from by invoking one of 
&lt;br&gt;loadInstrument(javax.sound.midi.Instrument), 
&lt;br&gt;loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[]) or 
&lt;br&gt;loadAllInstruments(javax.sound.midi.Soundbank).
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Parameters:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from - the Instrument object to be replaced
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to - the Instrument object to be used in place of the old instrument, 
&lt;br&gt;it should be loaded into the synthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Returns:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;true if the instrument succeessfully remapped, false if feature is not 
&lt;br&gt;implemented by synthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Throws:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IllegalArgumentException - if instrument from or instrument to aren't 
&lt;br&gt;supported by synthesizer or if instrument to is not loaded
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NullPointerException - if from or to parameters have null value
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15485601&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SotfSynthesizer.remapInstrument-tp15485601p15485601.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15485510</id>
	<title>SoftSynthesizer exceptions</title>
	<published>2008-02-14T09:45:06Z</published>
	<updated>2008-02-14T09:45:06Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;This is some notes about exception in SoftSynthesizer class.
&lt;br&gt;&lt;br&gt;1) SoftSynthesizer throws IllegalStateException from a number of methods when it 
&lt;br&gt;is not open.
&lt;br&gt;Old synthesizer implementation does not throw such exception, so the behavior 
&lt;br&gt;may cause compatibility problems in some applications (for example JSInfo from 
&lt;br&gt;jsresources.org - it calls getChannels() to discover how many channels a 
&lt;br&gt;synthesizer supports).
&lt;br&gt;Although IllegalStateException is not required to be declared in &amp;quot;throws&amp;quot; list 
&lt;br&gt;of a method, it should be explicitly described in spec (see Receiver.send for 
&lt;br&gt;example).
&lt;br&gt;&lt;br&gt;The methods which throw IllegalStateException:
&lt;br&gt;getChannels();
&lt;br&gt;getVoiceStatus();
&lt;br&gt;loadInstrument(Instrument instrument);
&lt;br&gt;unloadInstrument(Instrument instrument);
&lt;br&gt;remapInstrument(Instrument from, Instrument to);
&lt;br&gt;getAvailableInstruments();
&lt;br&gt;getLoadedInstruments();
&lt;br&gt;loadAllInstruments(Soundbank soundbank);
&lt;br&gt;unloadAllInstruments(Soundbank soundbank);
&lt;br&gt;loadInstruments(Soundbank soundbank, Patch[] patchList);
&lt;br&gt;unloadInstruments(Soundbank soundbank, Patch[] patchList);
&lt;br&gt;getMicrosecondPosition();
&lt;br&gt;getReceivers();
&lt;br&gt;&lt;br&gt;also the exception can be thrown by loadSamples (called from 
&lt;br&gt;loadAllInstruments(Soundbank soundbank) and loadInstrument(Instrument 
&lt;br&gt;instrument); this are the cases when loadAllInstruments/loadInstrument should 
&lt;br&gt;return &amp;quot;false&amp;quot; - see 2) ), from ModelByteBuffer class methods and from 
&lt;br&gt;SoftMidiAudioFileReader.getAudioInputStream(Sequence seq) (called from other 
&lt;br&gt;SoftMidiAudioFileReader methods)
&lt;br&gt;&lt;br&gt;&lt;br&gt;2) a number of methods (instrument loading/unloading) should throw 
&lt;br&gt;IllegalArgumentException if the instrument (or sounbank) is unsupported (in our 
&lt;br&gt;case instrument is not instance of ModelInstrument). &amp;quot;false&amp;quot; (for methods which 
&lt;br&gt;returns boolean) means that instrument is supported, but could not be loaded by 
&lt;br&gt;some reason.
&lt;br&gt;The methods are:
&lt;br&gt;loadInstrument(Instrument instrument);
&lt;br&gt;unloadInstrument(Instrument instrument);
&lt;br&gt;remapInstrument(Instrument from, Instrument to);
&lt;br&gt;loadAllInstruments(Soundbank soundbank);
&lt;br&gt;unloadAllInstruments(Soundbank soundbank);
&lt;br&gt;loadInstruments(Soundbank soundbank, Patch[] patchList);
&lt;br&gt;unloadInstruments(Soundbank soundbank, Patch[] patchList);
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15485510&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/SoftSynthesizer-exceptions-tp15485510p15485510.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15336237</id>
	<title>Re: Bug in RealTimeSequencer when used with Gervill</title>
	<published>2008-02-07T07:21:30Z</published>
	<updated>2008-02-07T07:21:30Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">Karl,
&lt;br&gt;&lt;br&gt;Yes, it's real mis-synchronization of the code.
&lt;br&gt;I've created a CR for the bug.
&lt;br&gt;I'm going to update the code along with RealTimeSequencer code cleaning 
&lt;br&gt;(removing obsolete references to Beatnik code).
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;&lt;br&gt;Karl Helgason wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I found a bug in RealTimeSequencer when used with Gervill.
&lt;br&gt;&amp;gt; The doAutoConnect opens Gervill synthesizer explicitly
&lt;br&gt;&amp;gt; when it is supposed to open Gervill implicitly.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Here is the code that reproduced the bug:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; // When we call MidiSystem.getSequencer()
&lt;br&gt;&amp;gt; // a instance of &amp;nbsp;RealTimeSequencer is created
&lt;br&gt;&amp;gt; // that is connected to Gervill Receiver opened implicitly
&lt;br&gt;&amp;gt; Sequencer seqr = MidiSystem.getSequencer();
&lt;br&gt;&amp;gt; seqr.open();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; // When we call seqr.close the Receiver is also closed and
&lt;br&gt;&amp;gt; // hence the gervill synthesizer is also closed because the
&lt;br&gt;&amp;gt; // receiver was opened implicitly.
&lt;br&gt;&amp;gt; seqr.close();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; // Here is the bug, RealTimeSequencer tries to auto connect
&lt;br&gt;&amp;gt; // again, but opens the Gervill synthesizer explicitly
&lt;br&gt;&amp;gt; // before it tries to get instance of Receiver opened implicitly.
&lt;br&gt;&amp;gt; seqr.open();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; // Gervill synthesizer is never closed
&lt;br&gt;&amp;gt; // when we finally call seqr.close,
&lt;br&gt;&amp;gt; // because it was opened explicitly above.
&lt;br&gt;&amp;gt; seqr.close();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; --------------------------------------
&lt;br&gt;&amp;gt; The error lies here below:
&lt;br&gt;&amp;gt; The doAutoConnect performs synth.open();
&lt;br&gt;&amp;gt; before it tries to get Receiver opened implicity
&lt;br&gt;&amp;gt; by calling getReceiverReferenceCounting.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; private void doAutoConnect() {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;gt;&amp;gt; RealTimeSequencer: doAutoConnect()&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Receiver rec = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // first try to connect to the default synthesizer
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // IMPORTANT: this code needs to be synch'ed with
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MidiSystem.getReceiver(boolean), because the same
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;algorithm needs to be used!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Synthesizer synth = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.open();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth instanceof ReferenceCountingDevice) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth.getClass().toString().contains(&amp;quot;com.sun.media.sound.MixerSynth&amp;quot;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; (synth.getDefaultSoundbank() == null)) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // don't use this receiver if no soundbank available
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.close();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = synth.getReceiver();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong with synth
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // then try to connect to the default Receiver
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = MidiSystem.getReceiver();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong. Nothing to do then!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec != null) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autoConnectedReceiver = rec;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getTransmitter().setReceiver(rec);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;lt;&amp;lt; RealTimeSequencer: doAutoConnect() succeeded&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ------------------------
&lt;br&gt;&amp;gt; Here is a example of corrected RealTimeSequencer.
&lt;br&gt;&amp;gt; It now works like MidiSystem.getSequencer(boolean).
&lt;br&gt;&amp;gt; e.g. is now correctly synch'ed with MidiSystem.getReceiver(boolean).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; private void doAutoConnect() {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;gt;&amp;gt; RealTimeSequencer: doAutoConnect()&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Receiver rec = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // first try to connect to the default synthesizer
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // IMPORTANT: this code needs to be synch'ed with
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MidiSystem.getReceiver(boolean), because the same
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;algorithm needs to be used!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Synthesizer synth = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth instanceof ReferenceCountingDevice) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth.getClass().toString().contains(&amp;quot;com.sun.media.sound.MixerSynth&amp;quot;)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; (synth.getDefaultSoundbank() == null)) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // don't use this receiver if no soundbank available
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.close();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.open();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = synth.getReceiver();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } finally {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // make sure that the synth is properly closed
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synth.close();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong with synth
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // then try to connect to the default Receiver
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = MidiSystem.getReceiver();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong. Nothing to do then!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec != null) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autoConnectedReceiver = rec;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getTransmitter().setReceiver(rec);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {}
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;lt;&amp;lt; RealTimeSequencer: doAutoConnect() succeeded&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15336237&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;/div&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15336237&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Bug-in-RealTimeSequencer-when-used-with-Gervill-tp15313355p15336237.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15332345</id>
	<title>Re: Possible bugs</title>
	<published>2008-02-07T03:56:42Z</published>
	<updated>2008-02-07T03:56:42Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi Andi,
&lt;br&gt;&lt;br&gt;I glad to hear that gervill-0.8-fix1.jar fixed those problems.
&lt;br&gt;&lt;br&gt;The reason volume did not work for you
&lt;br&gt;is that the statements:
&lt;br&gt;&amp;nbsp; &amp;nbsp;sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;nbsp; &amp;nbsp;synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;returns different instance of Gervill Synthesizer.
&lt;br&gt;&lt;br&gt;This mean that volume change on for example synthesizer object
&lt;br&gt;won't affect playback on the sequencer object.
&lt;br&gt;&lt;br&gt;In Gervill the midi volume 127 means that the signal is not affected.
&lt;br&gt;And 64 means that signal is attenuated by12 dB, while midi volume 256
&lt;br&gt;will amplify the signal by 12 dB. So by specifying 256 as maximum volume
&lt;br&gt;you are overdriving the output.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl
&lt;br&gt;________________________________________
&lt;br&gt;Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Andreas Wenger [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;info@...&lt;/a&gt;]
&lt;br&gt;Sent: 7. febrúar 2008 08:56
&lt;br&gt;Viðtakandi: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;Efni: [Audio-engine-dev] &amp;nbsp;Re: Possible bugs
&lt;br&gt;&lt;br&gt;Hi Karl,
&lt;br&gt;&lt;br&gt;&lt;br&gt;gervill-0.8-fix1.jar fixed both problems.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Volume did not work, because I could only test Gervill with
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;nbsp;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&lt;br&gt;&lt;br&gt;When using the now perfectly working
&lt;br&gt;&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;&lt;br&gt;&lt;br&gt;volume changes too (no idea why this is necessary, but it's the same
&lt;br&gt;with old Java Sound. Perhaps anybody can tell me?
&lt;br&gt;This is how I get the channels: MidiChannel[] channels =
&lt;br&gt;synthesizer.getChannels();)
&lt;br&gt;&lt;br&gt;&lt;br&gt;BTW, another thing I don't understand is the following (but same
&lt;br&gt;thing in old Java Sound).
&lt;br&gt;Many sites tell me, that volume control is between 0 and 127, see e.g.
&lt;br&gt;&lt;a href=&quot;http://www.musicmarkup.info/midi/control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.musicmarkup.info/midi/control.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;In fact I get max volume with 255, min with 0.
&lt;br&gt;&lt;br&gt;Here is my complete setVolume method.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; /**
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;* Sets the volume.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;* @param volume &amp;nbsp;value between 0 (silent) and 1 (loud)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; &amp;nbsp; public void setVolume(float volume)
&lt;br&gt;&amp;gt; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; this.volume = volume;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; //TODO: should be 127 (some websites say this)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; //but 255 is the real max volume!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int max = 255;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; }
&lt;/div&gt;&lt;br&gt;Did I already mention that Gervill is just GREAT?!
&lt;br&gt;Keep on your brilliant work! :-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Andi
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Karl Helgason schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; First:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I can confirm this is a bug.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Calling getReceiver before opening the synthesizer results in NullPointerException.
&lt;br&gt;&amp;gt; This is not supposed to happen. Thanks for noticing this.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Second:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I tried our way to change volume, and it does work with Gervill.
&lt;br&gt;&amp;gt; Please explain better how it failed.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I uploaded updated version of gervill with this bug fixed:
&lt;br&gt;&amp;gt; Please download &amp;quot;gervill-0.8-fix1.jar&amp;quot; from:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&lt;/a&gt;&lt;br&gt;&amp;gt; and let me know how this works.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; regards,
&lt;br&gt;&amp;gt; Karl
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ________________________________________
&lt;br&gt;&amp;gt; Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Andreas Wenger [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;info@...&lt;/a&gt;]
&lt;br&gt;&amp;gt; Sent: 6. febrúar 2008 17:08
&lt;br&gt;&amp;gt; Viðtakandi: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Efni: [Audio-engine-dev] &amp;nbsp;Possible bugs
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm no experienced Java Sound user, so please forgive me if the following
&lt;br&gt;&amp;gt; &amp;quot;bugs&amp;quot; are not caused by Gervill but my own program.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I tried to integrate Gervill into my program Xenoage Player, which
&lt;br&gt;&amp;gt; is a free MIDI player for MusicXML files, &lt;a href=&quot;http://www.xenoage.com/player/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.xenoage.com/player/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; First:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This works:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; But this fails (works perfectly with old Java Sound):
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; with
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftReceiver.&amp;lt;init&amp;gt;(Unknown Source)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.getReceiver(Unknown Source)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.xenoage.player.Player.&amp;lt;init&amp;gt;(Player.java:79)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; Line 79 is &amp;quot;seqTransmitter.setReceiver(synthesizer.getReceiver());&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Second:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is the way I change the playback volume (maybe this is bad code,
&lt;br&gt;&amp;gt; but it was the only way it worked for me with old Java Sound):
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt;&amp;gt; //...
&lt;br&gt;&amp;gt;&amp;gt; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt;&amp;gt; {
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt;&amp;gt; }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; This doesn't change the volume, while old Java Sound does.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If it helps, code is available by SVN, see the website.
&lt;br&gt;&amp;gt; If these are no bugs, please forgive me ;-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Bye,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Andi
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; No virus found in this incoming message.
&lt;br&gt;&amp;gt; Checked by AVG Free Edition.
&lt;br&gt;&amp;gt; Version: 7.5.516 / Virus Database: 269.19.20/1261 - Release Date: 5.2.2008 20:57
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;No virus found in this incoming message.
&lt;br&gt;Checked by AVG Free Edition.
&lt;br&gt;Version: 7.5.516 / Virus Database: 269.19.20/1261 - Release Date: 5.2.2008 20:57
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15332345&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Possible-bugs-tp15316732p15332345.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15329680</id>
	<title>Re: Possible bugs</title>
	<published>2008-02-07T00:56:20Z</published>
	<updated>2008-02-07T00:56:20Z</updated>
	<author>
		<name>Andreas Wenger</name>
	</author>
	<content type="html">Hi Karl,
&lt;br&gt;&lt;br&gt;&lt;br&gt;gervill-0.8-fix1.jar fixed both problems.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Volume did not work, because I could only test Gervill with
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;nbsp;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&lt;br&gt;&lt;br&gt;When using the now perfectly working
&lt;br&gt;&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;&lt;br&gt;&lt;br&gt;volume changes too (no idea why this is necessary, but it's the same
&lt;br&gt;with old Java Sound. Perhaps anybody can tell me?
&lt;br&gt;This is how I get the channels: MidiChannel[] channels = 
&lt;br&gt;synthesizer.getChannels();)
&lt;br&gt;&lt;br&gt;&lt;br&gt;BTW, another thing I don't understand is the following (but same
&lt;br&gt;thing in old Java Sound).
&lt;br&gt;Many sites tell me, that volume control is between 0 and 127, see e.g.
&lt;br&gt;&lt;a href=&quot;http://www.musicmarkup.info/midi/control.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.musicmarkup.info/midi/control.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;In fact I get max volume with 255, min with 0.
&lt;br&gt;&lt;br&gt;Here is my complete setVolume method.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; /**
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;* Sets the volume.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;* @param volume &amp;nbsp;value between 0 (silent) and 1 (loud)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; &amp;nbsp; public void setVolume(float volume)
&lt;br&gt;&amp;gt; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; this.volume = volume;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; //TODO: should be 127 (some websites say this)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; //but 255 is the real max volume!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int max = 255;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; }
&lt;/div&gt;&lt;br&gt;Did I already mention that Gervill is just GREAT?!
&lt;br&gt;Keep on your brilliant work! :-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Andi
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Karl Helgason schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt; First:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I can confirm this is a bug.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Calling getReceiver before opening the synthesizer results in NullPointerException.
&lt;br&gt;&amp;gt; This is not supposed to happen. Thanks for noticing this.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Second:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I tried our way to change volume, and it does work with Gervill.
&lt;br&gt;&amp;gt; Please explain better how it failed.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I uploaded updated version of gervill with this bug fixed:
&lt;br&gt;&amp;gt; Please download &amp;quot;gervill-0.8-fix1.jar&amp;quot; from:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&lt;/a&gt;&lt;br&gt;&amp;gt; and let me know how this works.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; regards,
&lt;br&gt;&amp;gt; Karl
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ________________________________________
&lt;br&gt;&amp;gt; Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Andreas Wenger [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;info@...&lt;/a&gt;]
&lt;br&gt;&amp;gt; Sent: 6. febrúar 2008 17:08
&lt;br&gt;&amp;gt; Viðtakandi: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Efni: [Audio-engine-dev] &amp;nbsp;Possible bugs
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm no experienced Java Sound user, so please forgive me if the following
&lt;br&gt;&amp;gt; &amp;quot;bugs&amp;quot; are not caused by Gervill but my own program.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I tried to integrate Gervill into my program Xenoage Player, which
&lt;br&gt;&amp;gt; is a free MIDI player for MusicXML files, &lt;a href=&quot;http://www.xenoage.com/player/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.xenoage.com/player/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; First:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This works:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; But this fails (works perfectly with old Java Sound):
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; with
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftReceiver.&amp;lt;init&amp;gt;(Unknown Source)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.getReceiver(Unknown Source)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.xenoage.player.Player.&amp;lt;init&amp;gt;(Player.java:79)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; Line 79 is &amp;quot;seqTransmitter.setReceiver(synthesizer.getReceiver());&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Second:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is the way I change the playback volume (maybe this is bad code,
&lt;br&gt;&amp;gt; but it was the only way it worked for me with old Java Sound):
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt;&amp;gt; //...
&lt;br&gt;&amp;gt;&amp;gt; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt;&amp;gt; {
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt;&amp;gt; }
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt; This doesn't change the volume, while old Java Sound does.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If it helps, code is available by SVN, see the website.
&lt;br&gt;&amp;gt; If these are no bugs, please forgive me ;-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Bye,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Andi
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; No virus found in this incoming message.
&lt;br&gt;&amp;gt; Checked by AVG Free Edition.
&lt;br&gt;&amp;gt; Version: 7.5.516 / Virus Database: 269.19.20/1261 - Release Date: 5.2.2008 20:57
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15329680&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Possible-bugs-tp15316732p15329680.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15319534</id>
	<title>Re: Possible bugs</title>
	<published>2008-02-06T11:21:20Z</published>
	<updated>2008-02-06T11:21:20Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;First:
&lt;br&gt;&lt;br&gt;I can confirm this is a bug.
&lt;br&gt;&lt;br&gt;Calling getReceiver before opening the synthesizer results in NullPointerException.
&lt;br&gt;This is not supposed to happen. Thanks for noticing this.
&lt;br&gt;&lt;br&gt;Second:
&lt;br&gt;&lt;br&gt;I tried our way to change volume, and it does work with Gervill.
&lt;br&gt;Please explain better how it failed.
&lt;br&gt;&lt;br&gt;I uploaded updated version of gervill with this bug fixed:
&lt;br&gt;Please download &amp;quot;gervill-0.8-fix1.jar&amp;quot; from:
&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://gervill.dev.java.net/servlets/ProjectDocumentList?folderID=0&lt;/a&gt;&lt;br&gt;and let me know how this works.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl
&lt;br&gt;&lt;br&gt;________________________________________
&lt;br&gt;Frá: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev-bounces@...&lt;/a&gt;] Fyrir h&amp;#246;nd Andreas Wenger [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;info@...&lt;/a&gt;]
&lt;br&gt;Sent: 6. febrúar 2008 17:08
&lt;br&gt;Viðtakandi: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;Efni: [Audio-engine-dev] &amp;nbsp;Possible bugs
&lt;br&gt;&lt;br&gt;Hi,
&lt;br&gt;&lt;br&gt;&lt;br&gt;I'm no experienced Java Sound user, so please forgive me if the following
&lt;br&gt;&amp;quot;bugs&amp;quot; are not caused by Gervill but my own program.
&lt;br&gt;&lt;br&gt;I tried to integrate Gervill into my program Xenoage Player, which
&lt;br&gt;is a free MIDI player for MusicXML files, &lt;a href=&quot;http://www.xenoage.com/player/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.xenoage.com/player/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;First:
&lt;br&gt;&lt;br&gt;This works:
&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;But this fails (works perfectly with old Java Sound):
&lt;br&gt;&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;with
&lt;br&gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftReceiver.&amp;lt;init&amp;gt;(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.getReceiver(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.xenoage.player.Player.&amp;lt;init&amp;gt;(Player.java:79)
&lt;br&gt;Line 79 is &amp;quot;seqTransmitter.setReceiver(synthesizer.getReceiver());&amp;quot;
&lt;br&gt;&lt;br&gt;&lt;br&gt;Second:
&lt;br&gt;&lt;br&gt;This is the way I change the playback volume (maybe this is bad code,
&lt;br&gt;but it was the only way it worked for me with old Java Sound):
&lt;br&gt;&lt;br&gt;&amp;gt; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt; //...
&lt;br&gt;&amp;gt; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt; }
&lt;br&gt;This doesn't change the volume, while old Java Sound does.
&lt;br&gt;&lt;br&gt;&lt;br&gt;If it helps, code is available by SVN, see the website.
&lt;br&gt;If these are no bugs, please forgive me ;-)
&lt;br&gt;&lt;br&gt;Bye,
&lt;br&gt;&lt;br&gt;&lt;br&gt;Andi
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;No virus found in this incoming message.
&lt;br&gt;Checked by AVG Free Edition.
&lt;br&gt;Version: 7.5.516 / Virus Database: 269.19.20/1261 - Release Date: 5.2.2008 20:57
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15319534&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Possible-bugs-tp15316732p15319534.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15316732</id>
	<title>Possible bugs</title>
	<published>2008-02-06T09:08:10Z</published>
	<updated>2008-02-06T09:08:10Z</updated>
	<author>
		<name>Andreas Wenger</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;&lt;br&gt;I'm no experienced Java Sound user, so please forgive me if the following
&lt;br&gt;&amp;quot;bugs&amp;quot; are not caused by Gervill but my own program.
&lt;br&gt;&lt;br&gt;I tried to integrate Gervill into my program Xenoage Player, which
&lt;br&gt;is a free MIDI player for MusicXML files, &lt;a href=&quot;http://www.xenoage.com/player/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.xenoage.com/player/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;First:
&lt;br&gt;&lt;br&gt;This works:
&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer();
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;But this fails (works perfectly with old Java Sound):
&lt;br&gt;&lt;br&gt;&amp;gt; sequencer = MidiSystem.getSequencer(false);
&lt;br&gt;&amp;gt; synthesizer = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;gt; Transmitter seqTransmitter = sequencer.getTransmitter();
&lt;br&gt;&amp;gt; seqTransmitter.setReceiver(synthesizer.getReceiver());
&lt;br&gt;with
&lt;br&gt;&amp;gt; java.lang.NullPointerException
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftReceiver.&amp;lt;init&amp;gt;(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.sun.media.sound.SoftSynthesizer.getReceiver(Unknown Source)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; at com.xenoage.player.Player.&amp;lt;init&amp;gt;(Player.java:79)
&lt;br&gt;Line 79 is &amp;quot;seqTransmitter.setReceiver(synthesizer.getReceiver());&amp;quot;
&lt;br&gt;&lt;br&gt;&lt;br&gt;Second:
&lt;br&gt;&lt;br&gt;This is the way I change the playback volume (maybe this is bad code,
&lt;br&gt;but it was the only way it worked for me with old Java Sound):
&lt;br&gt;&lt;br&gt;&amp;gt; MidiChannel[] channels = synthesizer.getChannels();
&lt;br&gt;&amp;gt; //...
&lt;br&gt;&amp;gt; for (int i = 0; i &amp;lt; channels.length; i++)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; channels[i].controlChange(7, (int) (volume * max));
&lt;br&gt;&amp;gt; }
&lt;br&gt;This doesn't change the volume, while old Java Sound does.
&lt;br&gt;&lt;br&gt;&lt;br&gt;If it helps, code is available by SVN, see the website.
&lt;br&gt;If these are no bugs, please forgive me ;-)
&lt;br&gt;&lt;br&gt;Bye,
&lt;br&gt;&lt;br&gt;&lt;br&gt;Andi
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15316732&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Possible-bugs-tp15316732p15316732.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15313355</id>
	<title>Bug in RealTimeSequencer when used with Gervill</title>
	<published>2008-02-06T06:40:09Z</published>
	<updated>2008-02-06T06:40:09Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">I found a bug in RealTimeSequencer when used with Gervill.
&lt;br&gt;The doAutoConnect opens Gervill synthesizer explicitly
&lt;br&gt;when it is supposed to open Gervill implicitly.
&lt;br&gt;&lt;br&gt;Here is the code that reproduced the bug:
&lt;br&gt;&lt;br&gt;// When we call MidiSystem.getSequencer()
&lt;br&gt;// a instance of &amp;nbsp;RealTimeSequencer is created
&lt;br&gt;// that is connected to Gervill Receiver opened implicitly
&lt;br&gt;Sequencer seqr = MidiSystem.getSequencer();
&lt;br&gt;seqr.open();
&lt;br&gt;&lt;br&gt;// When we call seqr.close the Receiver is also closed and
&lt;br&gt;// hence the gervill synthesizer is also closed because the
&lt;br&gt;// receiver was opened implicitly.
&lt;br&gt;seqr.close();
&lt;br&gt;&lt;br&gt;// Here is the bug, RealTimeSequencer tries to auto connect
&lt;br&gt;// again, but opens the Gervill synthesizer explicitly
&lt;br&gt;// before it tries to get instance of Receiver opened implicitly.
&lt;br&gt;seqr.open();
&lt;br&gt;&lt;br&gt;// Gervill synthesizer is never closed
&lt;br&gt;// when we finally call seqr.close,
&lt;br&gt;// because it was opened explicitly above.
&lt;br&gt;seqr.close();
&lt;br&gt;&lt;br&gt;--------------------------------------
&lt;br&gt;The error lies here below:
&lt;br&gt;The doAutoConnect performs synth.open();
&lt;br&gt;before it tries to get Receiver opened implicity
&lt;br&gt;by calling getReceiverReferenceCounting.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private void doAutoConnect() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;gt;&amp;gt; RealTimeSequencer: doAutoConnect()&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Receiver rec = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // first try to connect to the default synthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // IMPORTANT: this code needs to be synch'ed with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MidiSystem.getReceiver(boolean), because the same
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;algorithm needs to be used!
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Synthesizer synth = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.open();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth instanceof ReferenceCountingDevice) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth.getClass().toString().contains(&amp;quot;com.sun.media.sound.MixerSynth&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; (synth.getDefaultSoundbank() == null)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // don't use this receiver if no soundbank available
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = synth.getReceiver();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong with synth
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // then try to connect to the default Receiver
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = MidiSystem.getReceiver();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong. Nothing to do then!
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autoConnectedReceiver = rec;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getTransmitter().setReceiver(rec);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;lt;&amp;lt; RealTimeSequencer: doAutoConnect() succeeded&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;------------------------
&lt;br&gt;Here is a example of corrected RealTimeSequencer.
&lt;br&gt;It now works like MidiSystem.getSequencer(boolean).
&lt;br&gt;e.g. is now correctly synch'ed with MidiSystem.getReceiver(boolean).
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; private void doAutoConnect() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;gt;&amp;gt; RealTimeSequencer: doAutoConnect()&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Receiver rec = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // first try to connect to the default synthesizer
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // IMPORTANT: this code needs to be synch'ed with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MidiSystem.getReceiver(boolean), because the same
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;algorithm needs to be used!
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Synthesizer synth = MidiSystem.getSynthesizer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth instanceof ReferenceCountingDevice) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = ((ReferenceCountingDevice) synth).getReceiverReferenceCounting();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (synth.getClass().toString().contains(&amp;quot;com.sun.media.sound.MixerSynth&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;&amp; (synth.getDefaultSoundbank() == null)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // don't use this receiver if no soundbank available
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; synth.open();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = synth.getReceiver();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } finally {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // make sure that the synth is properly closed
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synth.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong with synth
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // then try to connect to the default Receiver
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rec = MidiSystem.getReceiver();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // something went wrong. Nothing to do then!
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (rec != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autoConnectedReceiver = rec;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getTransmitter().setReceiver(rec);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (Printer.trace) Printer.trace(&amp;quot;&amp;lt;&amp;lt; RealTimeSequencer: doAutoConnect() succeeded&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15313355&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Bug-in-RealTimeSequencer-when-used-with-Gervill-tp15313355p15313355.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15270549</id>
	<title>Development freeze (Was: Gervill 0.8 just released)</title>
	<published>2008-02-04T07:24:31Z</published>
	<updated>2008-02-04T07:24:31Z</updated>
	<author>
		<name>Alex Menkov-2</name>
	</author>
	<content type="html">Hi everybody,
&lt;br&gt;&lt;br&gt;With the recent 0.8 version of Gervill I want to announce development freeze for 
&lt;br&gt;the project.
&lt;br&gt;After testing stage Gervill will be integrated into open-jdk as replacement for 
&lt;br&gt;the current software synthesizer. All other encumbered code in JavaSound will 
&lt;br&gt;also be dropped (OSS mixer for Linux, .GM soundbank reader, RMF file reader, RMF 
&lt;br&gt;sequencer), so JavaSound becomes completely open.
&lt;br&gt;Due new synthesizer implementation is a big code change, I want to ask the list 
&lt;br&gt;members to take part in the testing of it with different midi applications 
&lt;br&gt;(developed by you or just used by you) to minimize risk to introduce new bugs 
&lt;br&gt;into open-jdk codebase.
&lt;br&gt;Code reviews are also welcome.
&lt;br&gt;&lt;br&gt;If you find some issues in the code (bugs while testing or notes from code 
&lt;br&gt;review) please send the reports to the list.
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Alex
&lt;br&gt;&lt;br&gt;Karl Helgason wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Version 0.8 has just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=573635&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=573635&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Gervill project page at java.net is:
&lt;br&gt;&amp;gt; &amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Change log:
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: Active Sense Messages where incorrectly handled.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; JTreg test: SoftReceiver/Send_ActiveSense.java
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: SoftAudioPusher doesn't longer try to prevent blocking.
&lt;br&gt;&amp;gt; &amp;nbsp; - Added: SoftJitterCorrector added to fix jitter on long buffers.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; regards,
&lt;br&gt;&amp;gt; Karl Helgason
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15270549&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;/div&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15270549&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.8-just-released-tp15256861p15270549.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15256861</id>
	<title>Gervill 0.8 just released</title>
	<published>2008-02-03T11:04:44Z</published>
	<updated>2008-02-03T11:04:44Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Version 0.8 has just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=573635&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=573635&lt;/a&gt;&lt;br&gt;&lt;br&gt;Gervill project page at java.net is:
&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change log:
&lt;br&gt;&amp;nbsp; - Fix: Active Sense Messages where incorrectly handled.
&lt;br&gt;&amp;nbsp; &amp;nbsp; JTreg test: SoftReceiver/Send_ActiveSense.java
&lt;br&gt;&amp;nbsp; - Fix: SoftAudioPusher doesn't longer try to prevent blocking.
&lt;br&gt;&amp;nbsp; - Added: SoftJitterCorrector added to fix jitter on long buffers.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15256861&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.8-just-released-tp15256861p15256861.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14992642</id>
	<title>Gervill 0.7 just released</title>
	<published>2008-01-20T23:56:19Z</published>
	<updated>2008-01-20T23:56:19Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Version 0.7 has also just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=570228&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=570228&lt;/a&gt;&lt;br&gt;&lt;br&gt;Gervill project page at java.net is:
&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change log:
&lt;br&gt;&amp;nbsp; - Fix: General MIDI mode,
&lt;br&gt;&amp;nbsp; &amp;nbsp; and voice_allocation_mode flag wasn't reseted on open/close cycle.
&lt;br&gt;&amp;nbsp; - Fix: Added support for implicit open/close
&lt;br&gt;&amp;nbsp; &amp;nbsp; (as described in &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/javax/sound/midi/MidiDevice.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://java.sun.com/javase/6/docs/api/javax/sound/midi/MidiDevice.html&lt;/a&gt;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; (JTreg test also added)
&lt;br&gt;&amp;nbsp; &amp;nbsp; This done by implementing com.sun.media.sound.ReferenceCountingDevice interface.
&lt;br&gt;&amp;nbsp; - Fix: SoftReceiver.close doesn't throw exception if closed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; (now behaves like SoftSynthesizer.close)
&lt;br&gt;&amp;nbsp; - Fix: Close variable wasn't accessed in Thread safe way in:
&lt;br&gt;&amp;nbsp; &amp;nbsp; SoftReceiver, SoftSynthesizer.
&lt;br&gt;&amp;nbsp; - Fix: Hang in SoftSynthesizer.close.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SoftAudioPusher must not be closed synchronized against control_mutex
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this may result in synchronized conflict between pusher and caller thread.
&lt;br&gt;&amp;nbsp; - Fix: Bad handling of mono output in SoftVoice.processAudioLogic,
&lt;br&gt;&amp;nbsp; &amp;nbsp; this error was found running the new SoftSynthesizer/TestRender1 jtreg test.
&lt;br&gt;&amp;nbsp; - Added: ModelDirector to support conditional layers/performers.
&lt;br&gt;&amp;nbsp; - Added: ReleaseTrigger property to ModelPerformer.
&lt;br&gt;&amp;nbsp; - Added: ModelAbstractOscillator to simplify creation custom oscillators.
&lt;br&gt;&amp;nbsp; - Added: ModelChannelMixer to support for example non-voice oriented instruments.
&lt;br&gt;&amp;nbsp; - Added: Support for more than 16 midi channels.
&lt;br&gt;&amp;nbsp; - Added: JARSoundBankReader.
&lt;br&gt;&amp;nbsp; - Change default latency from 400 to 200 mec.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14992642&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.7-just-released-tp14992642p14992642.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14333387</id>
	<title>Re: Gervill 0.6 just released with jtreg tests</title>
	<published>2007-12-14T02:30:00Z</published>
	<updated>2007-12-14T02:30:00Z</updated>
	<author>
		<name>Peter Salomonsen</name>
	</author>
	<content type="html">Gervill is also part of the latest released Frinika (2007-12-12), not this latest version though..&lt;br&gt;&lt;br&gt;cheers,&lt;br&gt;&lt;br&gt;Peter&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Dec 14, 2007 4:49 AM, Karl Helgason &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14333387&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kalli@...&lt;/a&gt;&amp;gt; wrote:&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Hi,&lt;br&gt;&lt;br&gt;Version 0.6 has also just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;amp;package_id=246500&amp;amp;release_id=561521&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;amp;package_id=246500&amp;amp;release_id=561521
&lt;/a&gt;&lt;br&gt;&lt;br&gt;Gervill project page at &lt;a href=&quot;http://java.net&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;java.net&lt;/a&gt; is:&lt;br&gt; &amp;nbsp;&lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change log:&lt;br&gt; &amp;nbsp;- Added RIFFWriter(OutputStream) constructor.
&lt;br&gt; &amp;nbsp;- Added save(OutputStream out) to DLSSoundbank and SF2Soundbank.&lt;br&gt; &amp;nbsp;- Renamed : &amp;nbsp;isAddDefaultConnections &amp;nbsp; to &amp;nbsp;setDefaultConnectionsEnabled&lt;br&gt; &amp;nbsp;- Renamed : &amp;nbsp;getAddDefaultConnections &amp;nbsp;to &amp;nbsp;isDefaultConnectionsEnabled
&lt;br&gt; &amp;nbsp;- Created JTreg Unit Tests&lt;br&gt; &amp;nbsp;- Fixed error found in Unit Tests&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* AudioFloatConversion8U.toFloatArray, did not convert correctly&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* SoftSynthesizer.remapInstrument did not work&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The error was in ModelMappedInstrument
&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* SoftSynthesizer.getMaxReceivers did not return -1&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* SoftTuning.checksumOK calculated incorrect checksums.&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* RIFFReader.close didn&amp;#39;t work&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* AudioFloatInputStream.getFrameLength returned incorrect value.
&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ModelByteBuffer.writeTo didn&amp;#39;t work when ModelByteBuffer uses file pointer.&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ModelIdentifier.equals, didn&amp;#39;t compare the variable &amp;quot;instance&amp;quot;.&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* SimpleSoundbank.removeResource
 did not remove resource.&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;* RIFFWriter.close never closed underlying stream.&lt;br&gt;&lt;br&gt;regards,&lt;br&gt;&lt;font color=&quot;#888888&quot;&gt;Karl Helgason&lt;br&gt;_______________________________________________&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14333387&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev
&lt;/a&gt;&lt;br&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14333387&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.6-just-released-with-jtreg-tests-tp14329710p14333387.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14329710</id>
	<title>Gervill 0.6 just released with jtreg tests</title>
	<published>2007-12-13T19:49:04Z</published>
	<updated>2007-12-13T19:49:04Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Version 0.6 has also just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=561521&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=561521&lt;/a&gt;&lt;br&gt;&lt;br&gt;Gervill project page at java.net is:
&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change log:
&lt;br&gt;&amp;nbsp; - Added RIFFWriter(OutputStream) constructor.
&lt;br&gt;&amp;nbsp; - Added save(OutputStream out) to DLSSoundbank and SF2Soundbank.
&lt;br&gt;&amp;nbsp; - Renamed : &amp;nbsp;isAddDefaultConnections &amp;nbsp; to &amp;nbsp;setDefaultConnectionsEnabled
&lt;br&gt;&amp;nbsp; - Renamed : &amp;nbsp;getAddDefaultConnections &amp;nbsp;to &amp;nbsp;isDefaultConnectionsEnabled
&lt;br&gt;&amp;nbsp; - Created JTreg Unit Tests
&lt;br&gt;&amp;nbsp; - Fixed error found in Unit Tests
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * AudioFloatConversion8U.toFloatArray, did not convert correctly
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * SoftSynthesizer.remapInstrument did not work
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; The error was in ModelMappedInstrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * SoftSynthesizer.getMaxReceivers did not return -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * SoftTuning.checksumOK calculated incorrect checksums.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * RIFFReader.close didn't work
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * AudioFloatInputStream.getFrameLength returned incorrect value.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * ModelByteBuffer.writeTo didn't work when ModelByteBuffer uses file pointer.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * ModelIdentifier.equals, didn't compare the variable &amp;quot;instance&amp;quot;.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * SimpleSoundbank.removeResource did not remove resource.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * RIFFWriter.close never closed underlying stream.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14329710&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.6-just-released-with-jtreg-tests-tp14329710p14329710.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13819343</id>
	<title>Re: Gervill 0.4 - emergency soundbank included</title>
	<published>2007-11-18T05:48:48Z</published>
	<updated>2007-11-18T05:48:48Z</updated>
	<author>
		<name>Florian Bomers-3</name>
	</author>
	<content type="html">the emergency soundbank is a great idea! Though we should still
&lt;br&gt;try to find a way to download on demand a &amp;quot;real&amp;quot; soundbank. For
&lt;br&gt;the sake of audio fidelity...
&lt;br&gt;&lt;br&gt;Florian
&lt;br&gt;&lt;br&gt;On 10/29/2007 7:47 AM, Karl Helgason wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I have updated the midi synthesizer, it is now up to 50% faster and includes emergency soundbank.
&lt;br&gt;&amp;gt; The emergency soundbank is generated when no default soundbank can be found.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Also included is &amp;quot;javax.sound.sampled.spi.AudioFileReader&amp;quot; which support reading
&lt;br&gt;&amp;gt; MIDI files as if they where audio files.
&lt;br&gt;&amp;gt; Audio player like &lt;a href=&quot;http://www.javazoom.net/jlgui/jlgui.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.javazoom.net/jlgui/jlgui.html&lt;/a&gt;&amp;nbsp;can now play back midi files
&lt;br&gt;&amp;gt; using this synthesizer.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The synthesizer can be downloaded here:
&lt;br&gt;&amp;gt; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=550308&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=550308&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; New features:
&lt;br&gt;&amp;gt; &amp;nbsp; - MIDI files can be opened as audio streams
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; thru javax.sound.sampled.spi.AudioFileReader.
&lt;br&gt;&amp;gt; &amp;nbsp; - Emergency SoundBank included.
&lt;br&gt;&amp;gt; &amp;nbsp; - Optimizations, rendering is up to 50 percent faster.
&lt;br&gt;&amp;gt; &amp;nbsp; - Loading soundbank in large mode supported using
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; MidiSystem.getSoundBank(URL)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Where url is on the form:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; file:/C:/soundbank.sf2?largemode=true
&lt;br&gt;&amp;gt; &amp;nbsp; - Reverb,Chorus,AGC can be turned on/off.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Bug fixes:
&lt;br&gt;&amp;gt; &amp;nbsp; - Fixed ArrayOutOfBoundsException in SoftAbstractResmpler.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fixed NullPointerException in SoundFont.save(File).
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Saving global zone for layers resulted in NullPointerException.
&lt;br&gt;&amp;gt; &amp;nbsp; - Fixed PATSoundbankReader.getInputStream
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; so it doesn't throw InvalidFormatException.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; This prevented use of MidiSystem.getSoundBank(InputStream).
&lt;br&gt;&amp;gt; &amp;nbsp; - Fix: Delay wasn't implemented in AHDSR envelopes.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; regards
&lt;br&gt;&amp;gt; Karl Helgason
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13819343&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; No virus found in this incoming message.
&lt;br&gt;&amp;gt; Checked by AVG Free Edition.
&lt;br&gt;&amp;gt; Version: 7.5.488 / Virus Database: 269.14.11/1071 - Release Date: 15.10.2007 06:48
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; audio-engine-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13819343&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;Florian Bomers
&lt;br&gt;Bome Software
&lt;br&gt;&lt;br&gt;-------------------------------------------------------
&lt;br&gt;Music Software, Development Tools: &amp;nbsp;&lt;a href=&quot;http://www.bome.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.bome.com&lt;/a&gt;&lt;br&gt;Java Sound extensions, plugins: &lt;a href=&quot;http://www.tritonus.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.tritonus.org&lt;/a&gt;&lt;br&gt;The Java Sound Resources: &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.jsresources.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.jsresources.org&lt;/a&gt;&lt;br&gt;-------------------------------------------------------
&lt;br&gt;Please quote this email in your reply. Thanks!
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13819343&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.4---emergency-soundbank-included-tp13462313p13819343.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13688026</id>
	<title>Gervill 0.5 just released with improved emergency soundbank</title>
	<published>2007-11-10T18:59:17Z</published>
	<updated>2007-11-10T18:59:17Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Gervill now has a project page at java.net:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://gervill.dev.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gervill.dev.java.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Version 0.5 has also just been released, &amp;nbsp;and can be downloaded here:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=553303&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=553303&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;- New instruments in Emergency Soundbank:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Acoustic Grand Piano
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Bright Acoustic Piano
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Honky-tonk Piano
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Guitar
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Distortion Guitar
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Trumpet
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Trombone
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Brass Section
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Horn
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Sax
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Oboe
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Bassoon
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Clarient
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Flute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Timpani
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Melodic Toms
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Reverse Cymbal
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Orch Hit
&lt;br&gt;&amp;nbsp; - Faster Linear Interpolation
&lt;br&gt;&amp;nbsp; &amp;nbsp; with no float to int casting.
&lt;br&gt;&amp;nbsp; - LargeSoundBankReader removed,
&lt;br&gt;&amp;nbsp; &amp;nbsp; Loading soundbank in large mode using urls removed.
&lt;br&gt;&amp;nbsp; - Soundbank aren't loaded into memory
&lt;br&gt;&amp;nbsp; &amp;nbsp; until loadInstrument/loadAllInstrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; is called in SoftSynthesizer.
&lt;br&gt;&amp;nbsp; &amp;nbsp; This enable loading only single instrument
&lt;br&gt;&amp;nbsp; &amp;nbsp; from soundbank collection into memory.
&lt;br&gt;&amp;nbsp; - New &amp;quot;large mode&amp;quot; property added to SoftSynthesizer.
&lt;br&gt;&amp;nbsp; - &amp;quot;getInstrument&amp;quot; method in DLS/SF2/SimpleSoundbank
&lt;br&gt;&amp;nbsp; &amp;nbsp; now returns ordered list by program,bank,percussion.
&lt;br&gt;&amp;nbsp; - Fix AccessControlException in &amp;quot;SoftSynthesizer.getDefaultSoundbank&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; which occurred when using SoftSynthesizer in Applets.
&lt;br&gt;&lt;br&gt;regards,
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13688026&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.5-just-released-with-improved-emergency-soundbank-tp13688026p13688026.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13462313</id>
	<title>Gervill 0.4 - emergency soundbank included</title>
	<published>2007-10-29T00:47:13Z</published>
	<updated>2007-10-29T00:47:13Z</updated>
	<author>
		<name>Karl Helgason-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I have updated the midi synthesizer, it is now up to 50% faster and includes emergency soundbank.
&lt;br&gt;The emergency soundbank is generated when no default soundbank can be found.
&lt;br&gt;&lt;br&gt;Also included is &amp;quot;javax.sound.sampled.spi.AudioFileReader&amp;quot; which support reading
&lt;br&gt;MIDI files as if they where audio files.
&lt;br&gt;Audio player like &lt;a href=&quot;http://www.javazoom.net/jlgui/jlgui.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.javazoom.net/jlgui/jlgui.html&lt;/a&gt;&amp;nbsp;can now play back midi files
&lt;br&gt;using this synthesizer.
&lt;br&gt;&lt;br&gt;The synthesizer can be downloaded here:
&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=550308&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=175084&amp;package_id=246500&amp;release_id=550308&lt;/a&gt;&lt;br&gt;&lt;br&gt;New features:
&lt;br&gt;&amp;nbsp; - MIDI files can be opened as audio streams
&lt;br&gt;&amp;nbsp; &amp;nbsp; thru javax.sound.sampled.spi.AudioFileReader.
&lt;br&gt;&amp;nbsp; - Emergency SoundBank included.
&lt;br&gt;&amp;nbsp; - Optimizations, rendering is up to 50 percent faster.
&lt;br&gt;&amp;nbsp; - Loading soundbank in large mode supported using
&lt;br&gt;&amp;nbsp; &amp;nbsp; MidiSystem.getSoundBank(URL)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Where url is on the form:
&lt;br&gt;&amp;nbsp; &amp;nbsp; file:/C:/soundbank.sf2?largemode=true
&lt;br&gt;&amp;nbsp; - Reverb,Chorus,AGC can be turned on/off.
&lt;br&gt;&lt;br&gt;Bug fixes:
&lt;br&gt;&amp;nbsp; - Fixed ArrayOutOfBoundsException in SoftAbstractResmpler.
&lt;br&gt;&amp;nbsp; - Fixed NullPointerException in SoundFont.save(File).
&lt;br&gt;&amp;nbsp; &amp;nbsp; Saving global zone for layers resulted in NullPointerException.
&lt;br&gt;&amp;nbsp; - Fixed PATSoundbankReader.getInputStream
&lt;br&gt;&amp;nbsp; &amp;nbsp; so it doesn't throw InvalidFormatException.
&lt;br&gt;&amp;nbsp; &amp;nbsp; This prevented use of MidiSystem.getSoundBank(InputStream).
&lt;br&gt;&amp;nbsp; - Fix: Delay wasn't implemented in AHDSR envelopes.
&lt;br&gt;&lt;br&gt;regards
&lt;br&gt;Karl Helgason
&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13462313&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;No virus found in this incoming message.
&lt;br&gt;Checked by AVG Free Edition.
&lt;br&gt;Version: 7.5.488 / Virus Database: 269.14.11/1071 - Release Date: 15.10.2007 06:48
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;audio-engine-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13462313&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;audio-engine-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.openjdk.java.net/mailman/listinfo/audio-engine-dev&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gervill-0.4---emergency-soundbank-included-tp13462313p13462313.html" />
</entry>

</feed>
