<Sound Dev> Updating Gervill for OpenJDK 6 build 12

Joe Darcy Joe.Darcy at Sun.COM
Mon Jul 28 17:02:42 PDT 2008


Hi Karl.

Karl Helgason wrote:
> Hi Joe,
>
> I have fixed the jtreg tests in Gervill CVS so they use a dummy SourceDataLine instead of real one.
>   

Yes, I synced up my workspace with your latest CVS changes and all the 
Gervill regression tests now pass when run through our jprt build/test 
system :-)

I've updated a revised webrev to invokedynamic.info.

Thanks,

-Joe

> cheers,
> Karl
> ________________________________________
> Frá: Joe.Darcy at Sun.COM [Joe.Darcy at Sun.COM]
> Sent: 25. júlí 2008 05:51
> Viðtakandi: Karl Helgason
> Afrit: sound-dev at openjdk.java.net; Alexey.Menkov at Sun.COM; Dalibor.Topic at Sun.COM
> Efni: Re: SV: <Sound Dev> Updating Gervill for OpenJDK 6 build 12
>
> Hi Karl.
>
> Karl Helgason wrote:
>   
>> Hi Joe,
>>
>> Gervill CVS has the newest code and Gervill overlays in IcedTea 6 are then copied from Gervill CVS.
>> Any fixes that have been done in Gervill overlays in IcedTea 6 has also been done Gervill CVS.
>> Gervill in OpenJDK 6 b10 was based on version 0.9 of Gervill as can be seen in the CHANGES file.
>>     
>
> Right, I want to update to the latest and greatest version of Gervill,
> with all the fixes you and Mark have worked on :-)  Just to be clear,
> given that the IcedTea overlays the the Gervill CVS are different, you
> recommend I upgrade OpenJDK 6 to match the latest Gervill CVS.
>
>   
>> I have fixed the "suabject" typo in the SoftCubicResampler.java in the Gervill CVS master.
>> Where did you find raw types in the code, there aren't supposed to be any.
>>
>> WaveExtensibleFileReader,WaveFloatFileWriter,WaveFloatFileReader has been
>> moved to src.floatwav in the Gervill CVS. Because they aren't directly related with
>> Gervill Synthesizer. They simply add support for float encoded Wave files.
>> And WaveExtensibleFileReader is also a proposal how we should store
>> channel mask in AudioFormat properties (used for multi-channel wave files).
>>     
>
> So, should I add these files to OpenJDK 6?
>   

>   
>> SoftMixingMixer is a experimental mixer to replace the functionality of the
>> Java Sound Audio Engine mixer. It performs software audio mixing,
>> which is useful when the audio hardware doesn't support mixing.
>> It is not yet fully ready. And thus is disabled in the IcedTea.
>>     
>
> Okay; I'll leave the service files as they are now.
>
>   
>> Those 9 regression tests fails because we aren't able to open audio device
>> with default format.
>> This is the code that fails:
>>   AudioFormat format = new AudioFormat(44100, 16, 2, true, false)
>>   line = AudioSystem.getSourceDataLine(getFormat());
>> It will be interesting to know if this code fails under those conditions which
>> the regression tests fail in.
>>     
>
> I haven't been able to exactly charactterize when the tests pass.
> Running as root on Linu x seems to work, as does logging in via the
> console on Solaris.  However, ssh based logins seem problematic.  How do
> you run these tests?  Often we run the JDK regression tests remotely
> over ssh, etc. so it is preferable for the tess to be able to pass in
> those circumstances too to avoid spurious failures.
>
>   
>> And it will also be interesting to know if these tests also fails
>> if you enable the SoftMixingMixerProvider mixer provider.
>>     
>
> IIRC, in various iterations, I changed the service files to enable the
> soft mixing mixer and those 9 tests still failed across platforms.
>
> Cheers,
>
> -Joe
>
>   
>> regards,
>> Karl
>>
>> ________________________________________
>> Frá: sound-dev-bounces at openjdk.java.net [sound-dev-bounces at openjdk.java.net] Fyrir h&#246;nd Joe Darcy [Joe.Darcy at Sun.COM]
>> Sent: 22. júlí 2008 22:53
>> Viðtakandi: audio-engine-dev at openjdk.java.net
>> Afrit: sound-dev at openjdk.java.net; Alexey.Menkov at Sun.COM; Dalibor.Topic at Sun.COM
>> Efni: <Sound Dev> Updating Gervill for OpenJDK 6 build 12
>>
>> Hello.
>>
>> With my OpenJDK 6 release manager hat on, I've been working to update
>> the version of Gervill used to OpenJDK 6 to a newer version that passes
>> the JCK tests, etc. and I'd like some review of my integration work.
>> Before this exercise, I don't have any prior experience with sound code.
>>
>> A few comments, the copyright header in file SoftCubicResampler.java in
>> the Gervill CVS master contains the typo "suabject" instead of
>> "subject."  From some casual examination of the code, it seems to use
>> raw types throughout, that is "List" rather than "List<String>", etc.
>> It would be better to covert to using generics; I think IDEs have
>> refactorings to help this now.
>>
>> There are some differences between the latest Gervill CVS from the
>> project's site and the Gervill overlays in IcedTea 6.  In particular,
>> IcedTea has changes to SoftMixingMixer.java and SoftSynthesizer.java as
>> well as some additional files, WaveExtensibleFileReader.java and
>> WaveFloatFileWriter.java.  I'd prefer to limit future merging work
>> between the three code bases, Gervill CVS, OpenJDK 6, and IcedTea
>> overlays, so in the context of updating Gervill for OpenJDK 6 b12, I
>> think it would be good to resolve these remaining few differences.  The
>> test directories are the same in all three code bases, except I don't
>> pick up a missing newline at the end of
>> ./SoftCubicResampler/Interpolate.java.
>>
>> During the update I ran into some testing issues, both with the original
>> Gervill integration in OpenJDK 6 b10 as well as the new code for b12.
>> Specifically, the 9 regression tests
>>
>> javax/sound/midi/Gervill/SoftAudioSynthesizer/Open.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetLatency.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetReceiver2.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetReceivers.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitter.java
>> javax/sound/midi/Gervill/SoftSynthesizer/GetTransmitters.java
>> javax/sound/midi/Gervill/SoftSynthesizer/ImplicitOpenClose.java
>> javax/sound/midi/Gervill/SoftSynthesizer/Open.java
>>
>> can fail, seemingly dependent on how one logs into the machine.  What
>> are the necessary and sufficient conditions for permissions to run these
>> tests?  When they occur, the failures I see look like:
>>
>>  Windows
>> =========
>>
>> java.lang.IllegalArgumentException: No line matching interface
>> SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo,
>> 4 bytes/frame, little-endian is supported.
>>     at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
>>     at
>> javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
>>     at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:762)
>>     at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:744)
>>     at Open.main(Open.java:53)
>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>     at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>     at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>     at java.lang.reflect.Method.invoke(Method.java:616)
>>     at
>> com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:96)
>>     at java.lang.Thread.run(Thread.java:636)
>>
>>  Linux
>> ======
>>
>> STDERR:
>> java: conf.c:3109: snd_config_update_free: Assertion `update->count > 0
>> && update->finfo' failed.
>>
>> TEST RESULT: Failed. Unexpected exit from test [exit code: 134]
>>
>>  Solaris
>> =======
>>
>> java.lang.IllegalArgumentException: No line matching interface
>> SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo,
>> 4 bytes/frame, little-endian is supported.
>>     at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
>>     at
>> javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
>>     at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:762)
>>     at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:744)
>>     at Open.main(Open.java:53)
>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>     at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>     at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>     at java.lang.reflect.Method.invoke(Method.java:616)
>>     at
>> com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:96)
>>     at java.lang.Thread.run(Thread.java:636)
>>
>> These failures occur with the essentially Gervill CVS files I'm using as
>> well as the IcedTea versions.
>>
>> I've uploaded my webrev compared to the OpenJDK 6 b11 sources to
>>
>> http://dcstaff.invokedynamic.info/index.php?title=Image:darcy-6717691.tgz
>>
>> Below are the diffs of between Gervill CVS and my workspace and the
>> recent IcedTea overlays and my workspace; I just loop over the Java
>> files in the base directory, print out the file name, and then the
>> result of diff-ing with the corresponding files in my workspace.
>>
>> Thanks,
>>
>> -Joe
>>
>>
>>  Latest Gervill CVS (July 21, 2008) vs my workspace:
>> ========================================
>>
>> AudioFileSoundbankReader.java
>> AudioFloatConverter.java
>> AudioFloatFormatConverter.java
>> AudioFloatInputStream.java
>> AudioSynthesizer.java
>> AudioSynthesizerPropertyInfo.java
>> DLSInfo.java
>> DLSInstrument.java
>> DLSModulator.java
>> DLSRegion.java
>> DLSSample.java
>> DLSSampleLoop.java
>> DLSSampleOptions.java
>> DLSSoundbank.java
>> DLSSoundbankReader.java
>> EmergencySoundbank.java
>> FFT.java
>> InvalidDataException.java
>> InvalidFormatException.java
>> JARSoundbankReader.java
>> ModelAbstractChannelMixer.java
>> ModelAbstractOscillator.java
>> ModelByteBuffer.java
>> ModelByteBufferWavetable.java
>> ModelChannelMixer.java
>> ModelConnectionBlock.java
>> ModelDestination.java
>> ModelDirectedPlayer.java
>> ModelDirector.java
>> ModelIdentifier.java
>> ModelInstrument.java
>> ModelInstrumentComparator.java
>> ModelMappedInstrument.java
>> ModelOscillator.java
>> ModelOscillatorStream.java
>> ModelPatch.java
>> ModelPerformer.java
>> ModelSource.java
>> ModelStandardDirector.java
>> ModelStandardTransform.java
>> ModelTransform.java
>> ModelWavetable.java
>> RIFFInvalidDataException.java
>> RIFFInvalidFormatException.java
>> RIFFReader.java
>> RIFFWriter.java
>> SF2GlobalRegion.java
>> SF2Instrument.java
>> SF2InstrumentRegion.java
>> SF2Layer.java
>> SF2LayerRegion.java
>> SF2Modulator.java
>> SF2Region.java
>> SF2Sample.java
>> SF2Soundbank.java
>> SF2SoundbankReader.java
>> SimpleInstrument.java
>> SimpleSoundbank.java
>> SoftAbstractResampler.java
>> SoftAudioBuffer.java
>> SoftAudioProcessor.java
>> SoftAudioPusher.java
>> SoftChannel.java
>> SoftChannelProxy.java
>> SoftChorus.java
>> SoftControl.java
>> SoftCubicResampler.java
>> 8c8
>> <  * particular file as suabject to the "Classpath" exception as provided
>> ---
>>  >  * particular file as subject to the "Classpath" exception as provided
>> SoftEnvelopeGenerator.java
>> SoftFilter.java
>> SoftInstrument.java
>> SoftJitterCorrector.java
>> SoftLanczosResampler.java
>> SoftLimiter.java
>> SoftLinearResampler.java
>> SoftLinearResampler2.java
>> SoftLowFrequencyOscillator.java
>> SoftMainMixer.java
>> SoftMidiAudioFileReader.java
>> SoftMixingClip.java
>> SoftMixingDataLine.java
>> SoftMixingMainMixer.java
>> SoftMixingMixer.java
>> SoftMixingMixerProvider.java
>> SoftMixingSourceDataLine.java
>> SoftPerformer.java
>> SoftPointResampler.java
>> SoftProcess.java
>> SoftProvider.java
>> SoftReceiver.java
>> SoftResampler.java
>> SoftResamplerStreamer.java
>> SoftReverb.java
>> SoftShortMessage.java
>> SoftSincResampler.java
>> SoftSynthesizer.java
>> SoftTuning.java
>> SoftVoice.java
>>
>>
>>  IcedTea 6 58510fd936ff overlays vs my workspace
>> ======================================
>>
>> AudioFileSoundbankReader.java
>> AudioFloatConverter.java
>> AudioFloatFormatConverter.java
>> AudioFloatInputStream.java
>> AudioSynthesizer.java
>> AudioSynthesizerPropertyInfo.java
>> DLSInfo.java
>> DLSInstrument.java
>> DLSModulator.java
>> DLSRegion.java
>> DLSSample.java
>> DLSSampleLoop.java
>> DLSSampleOptions.java
>> DLSSoundbank.java
>> DLSSoundbankReader.java
>> 50,51d49
>> <         } catch(IOException ioe) {
>> <             return null;
>> EmergencySoundbank.java
>> FFT.java
>> InvalidDataException.java
>> InvalidFormatException.java
>> JARSoundbankReader.java
>> ModelAbstractChannelMixer.java
>> ModelAbstractOscillator.java
>> ModelByteBuffer.java
>> ModelByteBufferWavetable.java
>> ModelChannelMixer.java
>> ModelConnectionBlock.java
>> ModelDestination.java
>> ModelDirectedPlayer.java
>> ModelDirector.java
>> ModelIdentifier.java
>> ModelInstrument.java
>> ModelInstrumentComparator.java
>> ModelMappedInstrument.java
>> ModelOscillator.java
>> ModelOscillatorStream.java
>> ModelPatch.java
>> ModelPerformer.java
>> ModelSource.java
>> ModelStandardDirector.java
>> ModelStandardTransform.java
>> ModelTransform.java
>> ModelWavetable.java
>> RIFFInvalidDataException.java
>> RIFFInvalidFormatException.java
>> RIFFReader.java
>> RIFFWriter.java
>> SF2GlobalRegion.java
>> SF2Instrument.java
>> SF2InstrumentRegion.java
>> SF2Layer.java
>> SF2LayerRegion.java
>> SF2Modulator.java
>> SF2Region.java
>> SF2Sample.java
>> SF2Soundbank.java
>> SF2SoundbankReader.java
>> 49,50d48
>> <         } catch(IOException ioe) {
>> <             return null;
>> SimpleInstrument.java
>> SimpleSoundbank.java
>> SoftAbstractResampler.java
>> SoftAudioBuffer.java
>> SoftAudioProcessor.java
>> SoftAudioPusher.java
>> SoftChannel.java
>> 1197,1199c1197
>> <             // Should only return lower 7 bits,
>> <             // even when controller is "boosted" higher.
>> <             return this.controller[controller] & 127;
>> ---
>>  >             return this.controller[controller];
>> SoftChannelProxy.java
>> SoftChorus.java
>> SoftControl.java
>> SoftCubicResampler.java
>> 8c8
>> <  * particular file as suabject to the "Classpath" exception as provided
>> ---
>>  >  * particular file as subject to the "Classpath" exception as provided
>> SoftEnvelopeGenerator.java
>> SoftFilter.java
>> SoftInstrument.java
>> SoftJitterCorrector.java
>> SoftLanczosResampler.java
>> SoftLimiter.java
>> SoftLinearResampler.java
>> SoftLinearResampler2.java
>> SoftLowFrequencyOscillator.java
>> SoftMainMixer.java
>> SoftMidiAudioFileReader.java
>> SoftMixingClip.java
>> SoftMixingDataLine.java
>> SoftMixingMainMixer.java
>> SoftMixingMixer.java
>> 357,359d356
>> <                     DataLine.Info info = new DataLine.Info(
>> <                             SourceDataLine.class, format);
>> <
>> 368,369c365,413
>> <                             line = (SourceDataLine)
>> defaultmixer.getLine(info);
>> <                         else
>> ---
>>  >                         {
>>  >                             // Search for suitable line
>>  >
>>  >                             DataLine.Info idealinfo = null;
>>  >                             AudioFormat idealformat = null;
>>  >
>>  >                             Line.Info[] lineinfos =
>> defaultmixer.getSourceLineInfo();
>>  >                             idealFound:
>>  >                             for (int i = 0; i < lineinfos.length; i++) {
>>  >                                 if(lineinfos[i].getLineClass() ==
>> SourceDataLine.class)
>>  >                                 {
>>  >                                     DataLine.Info info =
>> (DataLine.Info)lineinfos[i];
>>  >                                     AudioFormat[] formats =
>> info.getFormats();
>>  >                                     for (int j = 0; j <
>> formats.length; j++) {
>>  >                                         AudioFormat format = formats[j];
>>  >                                         if(format.getChannels() == 2 ||
>>  >                                                 format.getChannels()
>> == AudioSystem.NOT_SPECIFIED)
>>  >
>> if(format.getEncoding().equals(Encoding.PCM_SIGNED) ||
>>  >
>> format.getEncoding().equals(Encoding.PCM_UNSIGNED))
>>  >                                         if(format.getSampleRate() ==
>> AudioSystem.NOT_SPECIFIED ||
>>  >
>> format.getSampleRate() == 48000.0)
>>  >
>> if(format.getSampleSizeInBits() == AudioSystem.NOT_SPECIFIED ||
>>  >
>> format.getSampleSizeInBits() == 16)
>>  >                                         {
>>  >                                             idealinfo = info;
>>  >                                             int ideal_channels =
>> format.getChannels();
>>  >                                             boolean ideal_signed =
>> format.getEncoding().equals(Encoding.PCM_SIGNED);
>>  >                                             float ideal_rate =
>> format.getSampleRate();
>>  >                                             boolean ideal_endian =
>> format.isBigEndian();
>>  >                                             int ideal_bits =
>> format.getSampleSizeInBits();
>>  >                                             if(ideal_bits ==
>> AudioSystem.NOT_SPECIFIED) ideal_bits = 16;
>>  >                                             if(ideal_channels ==
>> AudioSystem.NOT_SPECIFIED) ideal_channels = 2;
>>  >                                             if(ideal_rate ==
>> AudioSystem.NOT_SPECIFIED) ideal_rate = 48000;
>>  >                                             idealformat = new
>> AudioFormat(ideal_rate, ideal_bits,
>>  >                                                     ideal_channels,
>> ideal_signed, ideal_endian);
>>  >                                             break idealFound;
>>  >                                         }
>>  >                                     }
>>  >                                 }
>>  >                             }
>>  >
>>  >                             if(idealformat != null)
>>  >                             {
>>  >                                 format = idealformat;
>>  >                                 line = (SourceDataLine)
>> defaultmixer.getLine(idealinfo);
>>  >                             }
>>  >                         }
>>  >
>>  >                         if(line == null)
>> SoftMixingMixerProvider.java
>> SoftMixingSourceDataLine.java
>> SoftPerformer.java
>> SoftPointResampler.java
>> SoftProcess.java
>> SoftProvider.java
>> SoftReceiver.java
>> SoftResampler.java
>> SoftResamplerStreamer.java
>> SoftReverb.java
>> SoftShortMessage.java
>> SoftSincResampler.java
>> SoftSynthesizer.java
>> 540a541,546
>>  >             File userhome = null;
>>  >             File emg_soundbank_file = null;
>>  >
>>  >             /*
>>  >              *  Try to load saved generated soundbank
>>  >              */
>> 541a548,563
>>  >                 userhome = new File(System.getProperty("user.home"),
>>  >                      ".gervill");
>>  >                 emg_soundbank_file = new File(userhome,
>> "soundbank-emg.sf2");
>>  >                 Soundbank sbk =
>> MidiSystem.getSoundbank(emg_soundbank_file);
>>  >                 defaultSoundBank = sbk;
>>  >                 return defaultSoundBank;
>>  >             } catch (AccessControlException e) {
>>  >             } catch (Exception e) {
>>  >                 //e.printStackTrace();
>>  >             }
>>  >
>>  >             try {
>>  >
>>  >                 /*
>>  >                  *  Generate emergency soundbank
>>  >                  */
>> 542a565,574
>>  >
>>  >                 /*
>>  >                  *  Save generated soundbank to disk for faster
>> future use.
>>  >                  */
>>  >                 if(defaultSoundBank != null)
>>  >                 {
>>  >                     if(!userhome.exists()) userhome.mkdirs();
>>  >                     if(!emg_soundbank_file.exists())
>>  >
>> ((SF2Soundbank)defaultSoundBank).save(emg_soundbank_file);
>>  >                 }
>> 594,596d625
>> <         if (soundbank == null || !isSoundbankSupported(soundbank))
>> <             throw new IllegalArgumentException("Unsupported soundbank:
>> " + soundbank);
>> <
>> 621,623d649
>> <         if (soundbank == null || !isSoundbankSupported(soundbank))
>> <             throw new IllegalArgumentException("Unsupported soundbank:
>> " + soundbank);
>> <
>> SoftTuning.java
>> SoftVoice.java
>> WaveExtensibleFileReader.java
>> diff:
>> /net/hest.sfbay/w/darcy/ws/6-open.new/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java:
>> No such file or directory
>> WaveFloatFileReader.java
>> 74a75
>>  >         long framerate = 1;
>> 89c90
>> <                 /* framerate = */chunk.readUnsignedInt();
>> ---
>>  >                 framerate = chunk.readUnsignedInt();
>> 106c107
>> <                 framesize, samplerate, false);
>> ---
>>  >                 framesize, framerate, false);
>> WaveFloatFileWriter.java
>> diff:
>> /net/hest.sfbay/w/darcy/ws/6-open.new/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java:
>> No such file or directory
>>
>>
>>
>> No virus found in this incoming message.
>> Checked by AVG.
>> Version: 7.5.524 / Virus Database: 270.5.4/1566 - Release Date: 22.7.2008 06:00
>>
>>     
>
>
>
> No virus found in this incoming message.
> Checked by AVG.
> Version: 7.5.524 / Virus Database: 270.5.5/1569 - Release Date: 23.7.2008 13:31
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/sound-dev/attachments/20080728/40fc096b/attachment.html 


More information about the sound-dev mailing list