[Audio-engine-dev] Updating Gervill for OpenJDK 6 build 12
Joe Darcy
Joe.Darcy at Sun.COM
Tue Jul 22 15:53:44 PDT 2008
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
More information about the audio-engine-dev
mailing list