diff --git a/src/share/classes/com/sun/media/sound/DLSInstrument.java b/src/share/classes/com/sun/media/sound/DLSInstrument.java index a73a4c68f39e9b6ee29af379506562150166c259..fe9fde7fefe4ced6b7dafeba06e71f3e007ef3b6 100644 --- a/src/share/classes/com/sun/media/sound/DLSInstrument.java +++ b/src/share/classes/com/sun/media/sound/DLSInstrument.java @@ -25,6 +25,7 @@ package com.sun.media.sound; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -439,10 +440,10 @@ public class DLSInstrument extends ModelInstrument { } public byte[] getGuid() { - return guid; + return guid == null ? null : Arrays.copyOf(guid, guid.length); } public void setGuid(byte[] guid) { - this.guid = guid; + this.guid = guid == null ? null : Arrays.copyOf(guid, guid.length); } } diff --git a/src/share/classes/com/sun/media/sound/DLSSample.java b/src/share/classes/com/sun/media/sound/DLSSample.java index afddfd0fa559545685d4bd008add722d2e1914c9..28327e68f6cb3c9c02d9e32328fed26e1fa89480 100644 --- a/src/share/classes/com/sun/media/sound/DLSSample.java +++ b/src/share/classes/com/sun/media/sound/DLSSample.java @@ -25,6 +25,7 @@ package com.sun.media.sound; import java.io.InputStream; +import java.util.Arrays; import javax.sound.midi.Soundbank; import javax.sound.midi.SoundbankResource; import javax.sound.sampled.AudioFormat; @@ -113,10 +114,10 @@ public class DLSSample extends SoundbankResource { } public byte[] getGuid() { - return guid; + return guid == null ? null : Arrays.copyOf(guid, guid.length); } public void setGuid(byte[] guid) { - this.guid = guid; + this.guid = guid == null ? null : Arrays.copyOf(guid, guid.length); } } diff --git a/src/share/classes/com/sun/media/sound/ModelConnectionBlock.java b/src/share/classes/com/sun/media/sound/ModelConnectionBlock.java index 2f8702c2026e807fbecc630db6b7e28839ba5f41..3f21aa0b9d608d33445e229e3de43fb2205ffde1 100644 --- a/src/share/classes/com/sun/media/sound/ModelConnectionBlock.java +++ b/src/share/classes/com/sun/media/sound/ModelConnectionBlock.java @@ -24,6 +24,8 @@ */ package com.sun.media.sound; +import java.util.Arrays; + /** * Connection blocks are used to connect source variable * to a destination variable. @@ -117,19 +119,17 @@ public class ModelConnectionBlock { } public ModelSource[] getSources() { - return sources; + return Arrays.copyOf(sources, sources.length); } public void setSources(ModelSource[] source) { - this.sources = source; + this.sources = source == null ? no_sources : Arrays.copyOf(source, source.length); } public void addSource(ModelSource source) { ModelSource[] oldsources = sources; sources = new ModelSource[oldsources.length + 1]; - for (int i = 0; i < oldsources.length; i++) { - sources[i] = oldsources[i]; - } + System.arraycopy(oldsources, 0, sources, 0, oldsources.length); sources[sources.length - 1] = source; } } diff --git a/src/share/classes/com/sun/media/sound/SoftChannel.java b/src/share/classes/com/sun/media/sound/SoftChannel.java index 1fc20b75b83897342a70c2b607862b8edc02dbeb..70208f78e7d84c3d753e50b91bbddde1e37ea794 100644 --- a/src/share/classes/com/sun/media/sound/SoftChannel.java +++ b/src/share/classes/com/sun/media/sound/SoftChannel.java @@ -503,7 +503,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer { firstVoice = true; voiceNo = 0; - int tunedKey = (int)(Math.round(tuning.getTuning()[noteNumber]/100.0)); + int tunedKey = (int)(Math.round(tuning.getTuning(noteNumber)/100.0)); play_noteNumber = noteNumber; play_velocity = velocity; play_delay = delay; @@ -607,7 +607,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer { firstVoice = true; voiceNo = 0; - int tunedKey = (int)(Math.round(tuning.getTuning()[noteNumber]/100.0)); + int tunedKey = (int)(Math.round(tuning.getTuning(noteNumber)/100.0)); play_noteNumber = noteNumber; play_velocity = lastVelocity[noteNumber]; play_releasetriggered = true; @@ -632,7 +632,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer { int delay = play_delay; boolean releasetriggered = play_releasetriggered; - SoftPerformer p = current_instrument.getPerformers()[performerIndex]; + SoftPerformer p = current_instrument.getPerformer(performerIndex); if (firstVoice) { firstVoice = false; diff --git a/src/share/classes/com/sun/media/sound/SoftInstrument.java b/src/share/classes/com/sun/media/sound/SoftInstrument.java index 3f26a2be51869fa72be4b4b9f2672de6fe137b78..78f8926b5c242beccee95774fa8d4328f1676f83 100644 --- a/src/share/classes/com/sun/media/sound/SoftInstrument.java +++ b/src/share/classes/com/sun/media/sound/SoftInstrument.java @@ -76,7 +76,12 @@ public class SoftInstrument extends Instrument { return data; } + /* am: currently getPerformers() is not used (replaced with getPerformer(int)) public SoftPerformer[] getPerformers() { return performers; } + */ + public SoftPerformer getPerformer(int index) { + return performers[index]; + } } diff --git a/src/share/classes/com/sun/media/sound/SoftMixingDataLine.java b/src/share/classes/com/sun/media/sound/SoftMixingDataLine.java index 738c5289bb7c112ac4b3550d76f1ab1a83cb2736..baaf9e844d924e6fbdafd4ea299005e97623bea6 100644 --- a/src/share/classes/com/sun/media/sound/SoftMixingDataLine.java +++ b/src/share/classes/com/sun/media/sound/SoftMixingDataLine.java @@ -505,7 +505,7 @@ public abstract class SoftMixingDataLine implements DataLine { } public Control[] getControls() { - return controls; + return Arrays.copyOf(controls, controls.length); } public boolean isControlSupported(Type control) { diff --git a/src/share/classes/com/sun/media/sound/SoftProvider.java b/src/share/classes/com/sun/media/sound/SoftProvider.java index dfa0fb2bfb42e4240490ec513220c820f20e74bb..bf3c45eb7fb08a44054e9ee16fa0568e08512da6 100644 --- a/src/share/classes/com/sun/media/sound/SoftProvider.java +++ b/src/share/classes/com/sun/media/sound/SoftProvider.java @@ -24,6 +24,7 @@ */ package com.sun.media.sound; +import java.util.Arrays; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiDevice.Info; import javax.sound.midi.spi.MidiDeviceProvider; @@ -39,7 +40,7 @@ public class SoftProvider extends MidiDeviceProvider { private static Info[] softinfos = {softinfo}; public MidiDevice.Info[] getDeviceInfo() { - return softinfos; + return Arrays.copyOf(softinfos, softinfos.length); } public MidiDevice getDevice(MidiDevice.Info info) { diff --git a/src/share/classes/com/sun/media/sound/SoftTuning.java b/src/share/classes/com/sun/media/sound/SoftTuning.java index 8fbdfa96dc817c7c4aa6bf47292b22c0f3840756..611db14e5270a01d8cc403829c08c410ce5f18d4 100644 --- a/src/share/classes/com/sun/media/sound/SoftTuning.java +++ b/src/share/classes/com/sun/media/sound/SoftTuning.java @@ -25,6 +25,7 @@ package com.sun.media.sound; import java.io.UnsupportedEncodingException; +import java.util.Arrays; import javax.sound.midi.Patch; @@ -234,8 +235,10 @@ public class SoftTuning { } } + // am: getTuning(int) is more effective. + // currently getTuning() is used only by tests public double[] getTuning() { - return tuning; + return Arrays.copyOf(tuning, tuning.length); } public double getTuning(int noteNumber) {