8006328: Improve robustness of sound classes

8009057: Improve MIDI event handling

Reviewed-by: amenkov, art, skoivu
This commit is contained in:
Sergey Bylokhov 2013-03-29 22:07:56 +04:00
parent 2801163256
commit e0c7d59246
136 changed files with 1082 additions and 1329 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,15 +25,12 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Vector;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control; import javax.sound.sampled.Control;
import javax.sound.sampled.DataLine; import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
/** /**
@ -46,13 +43,13 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
// DEFAULTS // DEFAULTS
// default format // default format
protected /*final*/ AudioFormat defaultFormat; private final AudioFormat defaultFormat;
// default buffer size in bytes // default buffer size in bytes
protected /*final*/ int defaultBufferSize; private final int defaultBufferSize;
// the lock for synchronization // the lock for synchronization
protected Object lock = new Object(); protected final Object lock = new Object();
// STATE // STATE
@ -103,7 +100,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
// DATA LINE METHODS // DATA LINE METHODS
public void open(AudioFormat format, int bufferSize) throws LineUnavailableException { public final void open(AudioFormat format, int bufferSize) throws LineUnavailableException {
//$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer ! //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
synchronized (mixer) { synchronized (mixer) {
if (Printer.trace) Printer.trace("> AbstractDataLine.open(format, bufferSize) (class: "+getClass().getName()); if (Printer.trace) Printer.trace("> AbstractDataLine.open(format, bufferSize) (class: "+getClass().getName());
@ -152,7 +149,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
} }
public void open(AudioFormat format) throws LineUnavailableException { public final void open(AudioFormat format) throws LineUnavailableException {
open(format, AudioSystem.NOT_SPECIFIED); open(format, AudioSystem.NOT_SPECIFIED);
} }
@ -181,7 +178,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
} }
public void start() { public final void start() {
//$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer ! //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
synchronized(mixer) { synchronized(mixer) {
if (Printer.trace) Printer.trace("> "+getClass().getName()+".start() - AbstractDataLine"); if (Printer.trace) Printer.trace("> "+getClass().getName()+".start() - AbstractDataLine");
@ -205,7 +202,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
} }
public void stop() { public final void stop() {
//$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer ! //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
synchronized(mixer) { synchronized(mixer) {
@ -249,16 +246,16 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
// in MixerSourceLine and MixerClip, and I want to touch as little // in MixerSourceLine and MixerClip, and I want to touch as little
// code as possible to change isStarted() back to isRunning(). // code as possible to change isStarted() back to isRunning().
public boolean isRunning() { public final boolean isRunning() {
return started; return started;
} }
public boolean isActive() { public final boolean isActive() {
return active; return active;
} }
public long getMicrosecondPosition() { public final long getMicrosecondPosition() {
long microseconds = getLongFramePosition(); long microseconds = getLongFramePosition();
if (microseconds != AudioSystem.NOT_SPECIFIED) { if (microseconds != AudioSystem.NOT_SPECIFIED) {
@ -268,26 +265,26 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
} }
public AudioFormat getFormat() { public final AudioFormat getFormat() {
return format; return format;
} }
public int getBufferSize() { public final int getBufferSize() {
return bufferSize; return bufferSize;
} }
/** /**
* This implementation does NOT change the buffer size * This implementation does NOT change the buffer size
*/ */
public int setBufferSize(int newSize) { public final int setBufferSize(int newSize) {
return getBufferSize(); return getBufferSize();
} }
/** /**
* This implementation returns AudioSystem.NOT_SPECIFIED. * This implementation returns AudioSystem.NOT_SPECIFIED.
*/ */
public float getLevel() { public final float getLevel() {
return (float)AudioSystem.NOT_SPECIFIED; return (float)AudioSystem.NOT_SPECIFIED;
} }
@ -304,7 +301,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
// it to isStartedRunning(). This is part of backing out the // it to isStartedRunning(). This is part of backing out the
// change denied in RFE 4297981. // change denied in RFE 4297981.
protected boolean isStartedRunning() { final boolean isStartedRunning() {
return running; return running;
} }
@ -312,7 +309,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
* This method sets the active state and generates * This method sets the active state and generates
* events if it changes. * events if it changes.
*/ */
protected void setActive(boolean active) { final void setActive(boolean active) {
if (Printer.trace) Printer.trace("> AbstractDataLine: setActive(" + active + ")"); if (Printer.trace) Printer.trace("> AbstractDataLine: setActive(" + active + ")");
@ -351,7 +348,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
* This method sets the started state and generates * This method sets the started state and generates
* events if it changes. * events if it changes.
*/ */
protected void setStarted(boolean started) { final void setStarted(boolean started) {
if (Printer.trace) Printer.trace("> AbstractDataLine: setStarted(" + started + ")"); if (Printer.trace) Printer.trace("> AbstractDataLine: setStarted(" + started + ")");
@ -388,7 +385,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
* This method generates a STOP event and sets the started state to false. * This method generates a STOP event and sets the started state to false.
* It is here for historic reasons when an EOM event existed. * It is here for historic reasons when an EOM event existed.
*/ */
protected void setEOM() { final void setEOM() {
if (Printer.trace) Printer.trace("> AbstractDataLine: setEOM()"); if (Printer.trace) Printer.trace("> AbstractDataLine: setEOM()");
//$$fb 2002-04-21: sometimes, 2 STOP events are generated. //$$fb 2002-04-21: sometimes, 2 STOP events are generated.
@ -408,7 +405,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
* line is open, this should return quietly because the values * line is open, this should return quietly because the values
* requested will match the current ones. * requested will match the current ones.
*/ */
public void open() throws LineUnavailableException { public final void open() throws LineUnavailableException {
if (Printer.trace) Printer.trace("> "+getClass().getName()+".open() - AbstractDataLine"); if (Printer.trace) Printer.trace("> "+getClass().getName()+".open() - AbstractDataLine");
@ -422,7 +419,7 @@ abstract class AbstractDataLine extends AbstractLine implements DataLine {
* This should also stop the line. The closed line should not be running or active. * This should also stop the line. The closed line should not be running or active.
* After we close the line, we reset the format and buffer size to the defaults. * After we close the line, we reset the format and buffer size to the defaults.
*/ */
public void close() { public final void close() {
//$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer ! //$$fb 2001-10-09: Bug #4517739: avoiding deadlock by synchronizing to mixer !
synchronized (mixer) { synchronized (mixer) {
if (Printer.trace) Printer.trace("> "+getClass().getName()+".close() - in AbstractDataLine."); if (Printer.trace) Printer.trace("> "+getClass().getName()+".close() - in AbstractDataLine.");

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,11 +25,12 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Map;
import java.util.Vector; import java.util.Vector;
import java.util.WeakHashMap;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control; import javax.sound.sampled.Control;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.Line; import javax.sound.sampled.Line;
import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener; import javax.sound.sampled.LineListener;
@ -43,28 +44,17 @@ import javax.sound.sampled.LineUnavailableException;
*/ */
abstract class AbstractLine implements Line { abstract class AbstractLine implements Line {
protected Line.Info info; protected final Line.Info info;
protected Control[] controls; protected Control[] controls;
protected AbstractMixer mixer; AbstractMixer mixer;
private boolean open = false; private boolean open = false;
private Vector listeners = new Vector(); private final Vector listeners = new Vector();
/** /**
* Global event thread * Contains event dispatcher per thread group.
*/ */
private static final EventDispatcher eventDispatcher; private static final Map<ThreadGroup, EventDispatcher> dispatchers =
new WeakHashMap<>();
static {
// create and start the global event thread
// $$kk: 12.21.98:
// 1) probably don't want a single global event queue
// 2) need a way to stop this thread when the engine is done
eventDispatcher = new EventDispatcher();
eventDispatcher.start();
}
/** /**
* Constructs a new AbstractLine. * Constructs a new AbstractLine.
@ -85,18 +75,17 @@ abstract class AbstractLine implements Line {
// LINE METHODS // LINE METHODS
public Line.Info getLineInfo() { public final Line.Info getLineInfo() {
return info; return info;
} }
public boolean isOpen() { public final boolean isOpen() {
return open; return open;
} }
public void addLineListener(LineListener listener) { public final void addLineListener(LineListener listener) {
synchronized(listeners) { synchronized(listeners) {
if ( ! (listeners.contains(listener)) ) { if ( ! (listeners.contains(listener)) ) {
listeners.addElement(listener); listeners.addElement(listener);
@ -109,7 +98,7 @@ abstract class AbstractLine implements Line {
* Removes an audio listener. * Removes an audio listener.
* @param listener listener to remove * @param listener listener to remove
*/ */
public void removeLineListener(LineListener listener) { public final void removeLineListener(LineListener listener) {
listeners.removeElement(listener); listeners.removeElement(listener);
} }
@ -120,8 +109,7 @@ abstract class AbstractLine implements Line {
* array of length 0. * array of length 0.
* @return control set * @return control set
*/ */
public Control[] getControls() { public final Control[] getControls() {
Control[] returnedArray = new Control[controls.length]; Control[] returnedArray = new Control[controls.length];
for (int i = 0; i < controls.length; i++) { for (int i = 0; i < controls.length; i++) {
@ -132,8 +120,7 @@ abstract class AbstractLine implements Line {
} }
public boolean isControlSupported(Control.Type controlType) { public final boolean isControlSupported(Control.Type controlType) {
// protect against a NullPointerException // protect against a NullPointerException
if (controlType == null) { if (controlType == null) {
return false; return false;
@ -149,8 +136,7 @@ abstract class AbstractLine implements Line {
} }
public Control getControl(Control.Type controlType) { public final Control getControl(Control.Type controlType) {
// protect against a NullPointerException // protect against a NullPointerException
if (controlType != null) { if (controlType != null) {
@ -172,7 +158,7 @@ abstract class AbstractLine implements Line {
* This method sets the open state and generates * This method sets the open state and generates
* events if it changes. * events if it changes.
*/ */
protected void setOpen(boolean open) { final void setOpen(boolean open) {
if (Printer.trace) Printer.trace("> "+getClass().getName()+" (AbstractLine): setOpen(" + open + ") this.open: " + this.open); if (Printer.trace) Printer.trace("> "+getClass().getName()+" (AbstractLine): setOpen(" + open + ") this.open: " + this.open);
@ -200,8 +186,8 @@ abstract class AbstractLine implements Line {
/** /**
* Send line events. * Send line events.
*/ */
protected void sendEvents(LineEvent event) { final void sendEvents(LineEvent event) {
eventDispatcher.sendAudioEvents(event, listeners); getEventDispatcher().sendAudioEvents(event, listeners);
} }
@ -227,13 +213,24 @@ abstract class AbstractLine implements Line {
// $$kk: 06.03.99: returns the mixer used in construction. // $$kk: 06.03.99: returns the mixer used in construction.
// this is a hold-over from when there was a public method like // this is a hold-over from when there was a public method like
// this on line and should be fixed!! // this on line and should be fixed!!
protected AbstractMixer getMixer() { final AbstractMixer getMixer() {
return mixer; return mixer;
} }
protected EventDispatcher getEventDispatcher() { final EventDispatcher getEventDispatcher() {
// create and start the global event thread
//TODO need a way to stop this thread when the engine is done
final ThreadGroup tg = Thread.currentThread().getThreadGroup();
synchronized (dispatchers) {
EventDispatcher eventDispatcher = dispatchers.get(tg);
if (eventDispatcher == null) {
eventDispatcher = new EventDispatcher();
dispatchers.put(tg, eventDispatcher);
eventDispatcher.start();
}
return eventDispatcher; return eventDispatcher;
} }
}
// ABSTRACT METHODS // ABSTRACT METHODS

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -60,12 +60,12 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
// DEVICE ATTRIBUTES // DEVICE ATTRIBUTES
private MidiDevice.Info info; private final MidiDevice.Info info;
// DEVICE STATE // DEVICE STATE
protected /*private*/ boolean open = false; private boolean open = false;
private int openRefCount; private int openRefCount;
/** List of Receivers and Transmitters that opened the device implicitely. /** List of Receivers and Transmitters that opened the device implicitely.
@ -102,7 +102,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
// MIDI DEVICE METHODS // MIDI DEVICE METHODS
public MidiDevice.Info getDeviceInfo() { public final MidiDevice.Info getDeviceInfo() {
return info; return info;
} }
@ -111,7 +111,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
* opened the the device implicitly from closing it. The only way to close the device after * opened the the device implicitly from closing it. The only way to close the device after
* this call is a call to close(). * this call is a call to close().
*/ */
public void open() throws MidiUnavailableException { public final void open() throws MidiUnavailableException {
if (Printer.trace) Printer.trace("> AbstractMidiDevice: open()"); if (Printer.trace) Printer.trace("> AbstractMidiDevice: open()");
synchronized(this) { synchronized(this) {
openRefCount = -1; openRefCount = -1;
@ -159,7 +159,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
} }
public void close() { public final void close() {
if (Printer.trace) Printer.trace("> AbstractMidiDevice: close()"); if (Printer.trace) Printer.trace("> AbstractMidiDevice: close()");
synchronized (this) { synchronized (this) {
doClose(); doClose();
@ -181,7 +181,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
* @param object The object that might have been opening the device implicitely (for now, * @param object The object that might have been opening the device implicitely (for now,
* this may be a Transmitter or receiver). * this may be a Transmitter or receiver).
*/ */
public void closeInternal(Object object) { public final void closeInternal(Object object) {
if (Printer.trace) Printer.trace("> AbstractMidiDevice: closeInternal()"); if (Printer.trace) Printer.trace("> AbstractMidiDevice: closeInternal()");
synchronized(this) { synchronized(this) {
if (getOpenKeepingObjects().remove(object)) { if (getOpenKeepingObjects().remove(object)) {
@ -197,7 +197,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
} }
public void doClose() { public final void doClose() {
if (Printer.trace) Printer.trace("> AbstractMidiDevice: doClose()"); if (Printer.trace) Printer.trace("> AbstractMidiDevice: doClose()");
synchronized(this) { synchronized(this) {
if (isOpen()) { if (isOpen()) {
@ -209,7 +209,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
} }
public boolean isOpen() { public final boolean isOpen() {
return open; return open;
} }
@ -329,7 +329,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
// HELPER METHODS // HELPER METHODS
long getId() { final long getId() {
return id; return id;
} }
@ -339,7 +339,8 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
/** Retrieve a Receiver and open the device implicitly. /** Retrieve a Receiver and open the device implicitly.
This method is called by MidiSystem.getReceiver(). This method is called by MidiSystem.getReceiver().
*/ */
public Receiver getReceiverReferenceCounting() throws MidiUnavailableException { public final Receiver getReceiverReferenceCounting()
throws MidiUnavailableException {
/* Keep this order of commands! If getReceiver() throws an exception, /* Keep this order of commands! If getReceiver() throws an exception,
openInternal() should not be called! openInternal() should not be called!
*/ */
@ -355,7 +356,8 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
/** Retrieve a Transmitter and open the device implicitly. /** Retrieve a Transmitter and open the device implicitly.
This method is called by MidiSystem.getTransmitter(). This method is called by MidiSystem.getTransmitter().
*/ */
public Transmitter getTransmitterReferenceCounting() throws MidiUnavailableException { public final Transmitter getTransmitterReferenceCounting()
throws MidiUnavailableException {
/* Keep this order of commands! If getTransmitter() throws an exception, /* Keep this order of commands! If getTransmitter() throws an exception,
openInternal() should not be called! openInternal() should not be called!
*/ */
@ -422,7 +424,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
/** Return the internal list of Transmitters, possibly creating it first. /** Return the internal list of Transmitters, possibly creating it first.
*/ */
protected TransmitterList getTransmitterList() { final TransmitterList getTransmitterList() {
synchronized (traRecLock) { synchronized (traRecLock) {
if (transmitterList == null) { if (transmitterList == null) {
transmitterList = new TransmitterList(); transmitterList = new TransmitterList();
@ -462,7 +464,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
/** /**
* close this device if discarded by the garbage collector * close this device if discarded by the garbage collector
*/ */
protected void finalize() { protected final void finalize() {
close(); close();
} }
@ -534,7 +536,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
* Also, it has some optimizations regarding sending to the Receivers, * Also, it has some optimizations regarding sending to the Receivers,
* for known Receivers, and managing itself in the TransmitterList. * for known Receivers, and managing itself in the TransmitterList.
*/ */
protected class BasicTransmitter implements MidiDeviceTransmitter { class BasicTransmitter implements MidiDeviceTransmitter {
private Receiver receiver = null; private Receiver receiver = null;
TransmitterList tlist = null; TransmitterList tlist = null;
@ -546,7 +548,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
this.tlist = tlist; this.tlist = tlist;
} }
public void setReceiver(Receiver receiver) { public final void setReceiver(Receiver receiver) {
if (tlist != null && this.receiver != receiver) { if (tlist != null && this.receiver != receiver) {
if (Printer.debug) Printer.debug("Transmitter "+toString()+": set receiver "+receiver); if (Printer.debug) Printer.debug("Transmitter "+toString()+": set receiver "+receiver);
tlist.receiverChanged(this, this.receiver, receiver); tlist.receiverChanged(this, this.receiver, receiver);
@ -554,7 +556,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
} }
} }
public Receiver getReceiver() { public final Receiver getReceiver() {
return receiver; return receiver;
} }
@ -564,7 +566,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
* Therefore, subclasses that override this method must call * Therefore, subclasses that override this method must call
* 'super.close()'. * 'super.close()'.
*/ */
public void close() { public final void close() {
AbstractMidiDevice.this.closeInternal(this); AbstractMidiDevice.this.closeInternal(this);
if (tlist != null) { if (tlist != null) {
tlist.receiverChanged(this, this.receiver, null); tlist.receiverChanged(this, this.receiver, null);
@ -573,7 +575,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
} }
} }
public MidiDevice getMidiDevice() { public final MidiDevice getMidiDevice() {
return AbstractMidiDevice.this; return AbstractMidiDevice.this;
} }
@ -583,9 +585,9 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
/** /**
* a class to manage a list of transmitters * a class to manage a list of transmitters
*/ */
class TransmitterList { final class TransmitterList {
private ArrayList<Transmitter> transmitters = new ArrayList<Transmitter>(); private final ArrayList<Transmitter> transmitters = new ArrayList<Transmitter>();
private MidiOutDevice.MidiOutReceiver midiOutReceiver; private MidiOutDevice.MidiOutReceiver midiOutReceiver;
// how many transmitters must be present for optimized // how many transmitters must be present for optimized

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,7 +36,7 @@ import javax.sound.midi.spi.MidiDeviceProvider;
*/ */
public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider { public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
private static boolean enabled; private static final boolean enabled;
/** /**
* Create objects representing all MIDI output devices on the system. * Create objects representing all MIDI output devices on the system.
@ -52,7 +52,7 @@ public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
} }
synchronized void readDeviceInfos() { final synchronized void readDeviceInfos() {
Info[] infos = getInfoCache(); Info[] infos = getInfoCache();
MidiDevice[] devices = getDeviceCache(); MidiDevice[] devices = getDeviceCache();
if (!enabled) { if (!enabled) {
@ -118,7 +118,7 @@ public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
} }
public MidiDevice.Info[] getDeviceInfo() { public final MidiDevice.Info[] getDeviceInfo() {
readDeviceInfos(); readDeviceInfos();
Info[] infos = getInfoCache(); Info[] infos = getInfoCache();
MidiDevice.Info[] localArray = new MidiDevice.Info[infos.length]; MidiDevice.Info[] localArray = new MidiDevice.Info[infos.length];
@ -127,7 +127,7 @@ public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
} }
public MidiDevice getDevice(MidiDevice.Info info) { public final MidiDevice getDevice(MidiDevice.Info info) {
if (info instanceof Info) { if (info instanceof Info) {
readDeviceInfos(); readDeviceInfos();
MidiDevice[] devices = getDeviceCache(); MidiDevice[] devices = getDeviceCache();
@ -164,7 +164,7 @@ public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
this.index = index; this.index = index;
} }
boolean equalStrings(Info info) { final boolean equalStrings(Info info) {
return (info != null return (info != null
&& getName().equals(info.getName()) && getName().equals(info.getName())
&& getVendor().equals(info.getVendor()) && getVendor().equals(info.getVendor())
@ -172,11 +172,11 @@ public abstract class AbstractMidiDeviceProvider extends MidiDeviceProvider {
&& getVersion().equals(info.getVersion())); && getVersion().equals(info.getVersion()));
} }
int getIndex() { final int getIndex() {
return index; return index;
} }
void setIndex(int index) { final void setIndex(int index) {
this.index = index; this.index = index;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -27,14 +27,9 @@ package com.sun.media.sound;
import java.util.Vector; import java.util.Vector;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control; import javax.sound.sampled.Control;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Mixer; import javax.sound.sampled.Mixer;
import javax.sound.sampled.Line; import javax.sound.sampled.Line;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.LineUnavailableException;
/** /**
@ -95,13 +90,13 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Source lines (ports) currently open * Source lines (ports) currently open
*/ */
protected Vector sourceLines = new Vector(); private final Vector sourceLines = new Vector();
/** /**
* Target lines currently open. * Target lines currently open.
*/ */
protected Vector targetLines = new Vector(); private final Vector targetLines = new Vector();
/** /**
@ -133,19 +128,19 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
// MIXER METHODS // MIXER METHODS
public Mixer.Info getMixerInfo() { public final Mixer.Info getMixerInfo() {
return mixerInfo; return mixerInfo;
} }
public Line.Info[] getSourceLineInfo() { public final Line.Info[] getSourceLineInfo() {
Line.Info[] localArray = new Line.Info[sourceLineInfo.length]; Line.Info[] localArray = new Line.Info[sourceLineInfo.length];
System.arraycopy(sourceLineInfo, 0, localArray, 0, sourceLineInfo.length); System.arraycopy(sourceLineInfo, 0, localArray, 0, sourceLineInfo.length);
return localArray; return localArray;
} }
public Line.Info[] getTargetLineInfo() { public final Line.Info[] getTargetLineInfo() {
Line.Info[] localArray = new Line.Info[targetLineInfo.length]; Line.Info[] localArray = new Line.Info[targetLineInfo.length];
System.arraycopy(targetLineInfo, 0, localArray, 0, targetLineInfo.length); System.arraycopy(targetLineInfo, 0, localArray, 0, targetLineInfo.length);
@ -153,7 +148,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
} }
public Line.Info[] getSourceLineInfo(Line.Info info) { public final Line.Info[] getSourceLineInfo(Line.Info info) {
int i; int i;
Vector vec = new Vector(); Vector vec = new Vector();
@ -174,7 +169,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
} }
public Line.Info[] getTargetLineInfo(Line.Info info) { public final Line.Info[] getTargetLineInfo(Line.Info info) {
int i; int i;
Vector vec = new Vector(); Vector vec = new Vector();
@ -195,7 +190,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
} }
public boolean isLineSupported(Line.Info info) { public final boolean isLineSupported(Line.Info info) {
int i; int i;
@ -227,7 +222,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
protected abstract void implClose(); protected abstract void implClose();
public Line[] getSourceLines() { public final Line[] getSourceLines() {
Line[] localLines; Line[] localLines;
@ -244,7 +239,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
} }
public Line[] getTargetLines() { public final Line[] getTargetLines() {
Line[] localLines; Line[] localLines;
@ -264,7 +259,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Default implementation always throws an exception. * Default implementation always throws an exception.
*/ */
public void synchronize(Line[] lines, boolean maintainSync) { public final void synchronize(Line[] lines, boolean maintainSync) {
throw new IllegalArgumentException("Synchronization not supported by this mixer."); throw new IllegalArgumentException("Synchronization not supported by this mixer.");
} }
@ -272,7 +267,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Default implementation always throws an exception. * Default implementation always throws an exception.
*/ */
public void unsynchronize(Line[] lines) { public final void unsynchronize(Line[] lines) {
throw new IllegalArgumentException("Synchronization not supported by this mixer."); throw new IllegalArgumentException("Synchronization not supported by this mixer.");
} }
@ -280,7 +275,8 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Default implementation always returns false. * Default implementation always returns false.
*/ */
public boolean isSynchronizationSupported(Line[] lines, boolean maintainSync) { public final boolean isSynchronizationSupported(Line[] lines,
boolean maintainSync) {
return false; return false;
} }
@ -290,14 +286,14 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* This implementation tries to open the mixer with its current format and buffer size settings. * This implementation tries to open the mixer with its current format and buffer size settings.
*/ */
public synchronized void open() throws LineUnavailableException { public final synchronized void open() throws LineUnavailableException {
open(true); open(true);
} }
/** /**
* This implementation tries to open the mixer with its current format and buffer size settings. * This implementation tries to open the mixer with its current format and buffer size settings.
*/ */
protected synchronized void open(boolean manual) throws LineUnavailableException { final synchronized void open(boolean manual) throws LineUnavailableException {
if (Printer.trace) Printer.trace(">> AbstractMixer: open()"); if (Printer.trace) Printer.trace(">> AbstractMixer: open()");
if (!isOpen()) { if (!isOpen()) {
implOpen(); implOpen();
@ -322,7 +318,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
* The mixer may be opened at a format different than the line's * The mixer may be opened at a format different than the line's
* format if it is a DataLine. * format if it is a DataLine.
*/ */
protected synchronized void open(Line line) throws LineUnavailableException { final synchronized void open(Line line) throws LineUnavailableException {
if (Printer.trace) Printer.trace(">> AbstractMixer: open(line = " + line + ")"); if (Printer.trace) Printer.trace(">> AbstractMixer: open(line = " + line + ")");
@ -367,7 +363,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
* open target lines, if it exists in either. * open target lines, if it exists in either.
* If the list is now empty, closes the mixer. * If the list is now empty, closes the mixer.
*/ */
protected synchronized void close(Line line) { final synchronized void close(Line line) {
if (Printer.trace) Printer.trace(">> AbstractMixer: close(" + line + ")"); if (Printer.trace) Printer.trace(">> AbstractMixer: close(" + line + ")");
@ -396,7 +392,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Close all lines and then close this mixer. * Close all lines and then close this mixer.
*/ */
public synchronized void close() { public final synchronized void close() {
if (Printer.trace) Printer.trace(">> AbstractMixer: close()"); if (Printer.trace) Printer.trace(">> AbstractMixer: close()");
if (isOpen()) { if (isOpen()) {
// close all source lines // close all source lines
@ -423,7 +419,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Starts the mixer. * Starts the mixer.
*/ */
protected synchronized void start(Line line) { final synchronized void start(Line line) {
if (Printer.trace) Printer.trace(">> AbstractMixer: start(" + line + ")"); if (Printer.trace) Printer.trace(">> AbstractMixer: start(" + line + ")");
@ -447,7 +443,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
/** /**
* Stops the mixer if this was the last running line. * Stops the mixer if this was the last running line.
*/ */
protected synchronized void stop(Line line) { final synchronized void stop(Line line) {
if (Printer.trace) Printer.trace(">> AbstractMixer: stop(" + line + ")"); if (Printer.trace) Printer.trace(">> AbstractMixer: stop(" + line + ")");
@ -501,7 +497,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
* Right now this just checks whether it's supported, but should * Right now this just checks whether it's supported, but should
* check whether it actually belongs to this mixer.... * check whether it actually belongs to this mixer....
*/ */
boolean isSourceLine(Line.Info info) { final boolean isSourceLine(Line.Info info) {
for (int i = 0; i < sourceLineInfo.length; i++) { for (int i = 0; i < sourceLineInfo.length; i++) {
if (info.matches(sourceLineInfo[i])) { if (info.matches(sourceLineInfo[i])) {
@ -518,7 +514,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
* Right now this just checks whether it's supported, but should * Right now this just checks whether it's supported, but should
* check whether it actually belongs to this mixer.... * check whether it actually belongs to this mixer....
*/ */
boolean isTargetLine(Line.Info info) { final boolean isTargetLine(Line.Info info) {
for (int i = 0; i < targetLineInfo.length; i++) { for (int i = 0; i < targetLineInfo.length; i++) {
if (info.matches(targetLineInfo[i])) { if (info.matches(targetLineInfo[i])) {
@ -535,7 +531,7 @@ abstract class AbstractMixer extends AbstractLine implements Mixer {
* matches the one specified, or null if no matching Line.Info * matches the one specified, or null if no matching Line.Info
* object is found. * object is found.
*/ */
Line.Info getLineInfo(Line.Info info) { final Line.Info getLineInfo(Line.Info info) {
if (info == null) { if (info == null) {
return null; return null;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -35,7 +35,7 @@ import javax.sound.sampled.AudioFormat;
* @author Jan Borgersen * @author Jan Borgersen
*/ */
class AiffFileFormat extends AudioFileFormat { final class AiffFileFormat extends AudioFileFormat {
static final int AIFF_MAGIC = 1179603533; static final int AIFF_MAGIC = 1179603533;
@ -62,13 +62,13 @@ class AiffFileFormat extends AudioFileFormat {
//$$fb 2001-07-13: added management of header size in this class //$$fb 2001-07-13: added management of header size in this class
/** header size in bytes */ /** header size in bytes */
private int headerSize=AIFF_HEADERSIZE; private final int headerSize=AIFF_HEADERSIZE;
/** comm chunk size in bytes, inclusive magic and length field */ /** comm chunk size in bytes, inclusive magic and length field */
private int commChunkSize=26; private final int commChunkSize=26;
/** FVER chunk size in bytes, inclusive magic and length field */ /** FVER chunk size in bytes, inclusive magic and length field */
private int fverChunkSize=0; private final int fverChunkSize=0;
AiffFileFormat( AudioFileFormat aff ) { AiffFileFormat( AudioFileFormat aff ) {
this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() ); this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() );

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,28 +25,17 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Vector;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.EOFException;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.FileOutputStream; import java.io.File;
import java.io.ByteArrayInputStream; import java.io.FileInputStream;
import java.io.ByteArrayOutputStream; import java.io.IOException;
import java.io.SequenceInputStream; import java.io.InputStream;
import java.net.URL;
import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
@ -58,19 +47,10 @@ import javax.sound.sampled.UnsupportedAudioFileException;
* @author Jan Borgersen * @author Jan Borgersen
* @author Florian Bomers * @author Florian Bomers
*/ */
public class AiffFileReader extends SunFileReader { public final class AiffFileReader extends SunFileReader {
private static final int MAX_READ_LENGTH = 8; private static final int MAX_READ_LENGTH = 8;
/**
* AIFF parser type
*/
public static final AudioFileFormat.Type types[] = {
AudioFileFormat.Type.AIFF
};
/** /**
* Constructs a new AiffParser object. * Constructs a new AiffParser object.
*/ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,21 +50,13 @@ import javax.sound.sampled.AudioSystem;
* *
* @author Jan Borgersen * @author Jan Borgersen
*/ */
public class AiffFileWriter extends SunFileWriter { public final class AiffFileWriter extends SunFileWriter {
/**
* AIFF type
*/
private static final AudioFileFormat.Type aiffTypes[] = {
AudioFileFormat.Type.AIFF
};
/** /**
* Constructs a new AiffFileWriter object. * Constructs a new AiffFileWriter object.
*/ */
public AiffFileWriter() { public AiffFileWriter() {
super(aiffTypes); super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AIFF});
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,14 +25,12 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Vector; import java.util.Vector;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
/** /**
@ -40,12 +38,12 @@ import javax.sound.sampled.AudioInputStream;
* *
* @author Kara Kytle * @author Kara Kytle
*/ */
public class AlawCodec extends SunCodec { public final class AlawCodec extends SunCodec {
/* Tables used for A-law decoding */ /* Tables used for A-law decoding */
final static byte ALAW_TABH[] = new byte[256]; private static final byte[] ALAW_TABH = new byte[256];
final static byte ALAW_TABL[] = new byte[256]; private static final byte[] ALAW_TABL = new byte[256];
private static final AudioFormat.Encoding[] alawEncodings = { AudioFormat.Encoding.ALAW, AudioFormat.Encoding.PCM_SIGNED }; private static final AudioFormat.Encoding[] alawEncodings = { AudioFormat.Encoding.ALAW, AudioFormat.Encoding.PCM_SIGNED };
@ -256,7 +254,7 @@ public class AlawCodec extends SunCodec {
} }
class AlawCodecStream extends AudioInputStream { final class AlawCodecStream extends AudioInputStream {
// tempBuffer required only for encoding (when encode is true) // tempBuffer required only for encoding (when encode is true)
private static final int tempBufferSize = 64; private static final int tempBufferSize = 64;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,7 +36,7 @@ import javax.sound.sampled.AudioFormat;
* @author Jan Borgersen * @author Jan Borgersen
*/ */
class AuFileFormat extends AudioFileFormat { final class AuFileFormat extends AudioFileFormat {
// magic numbers // magic numbers
static final int AU_SUN_MAGIC = 0x2e736e64; static final int AU_SUN_MAGIC = 0x2e736e64;
@ -60,7 +60,7 @@ class AuFileFormat extends AudioFileFormat {
static final int AU_HEADERSIZE = 24; static final int AU_HEADERSIZE = 24;
int auType; private int auType;
AuFileFormat( AudioFileFormat aff ) { AuFileFormat( AudioFileFormat aff ) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,28 +25,17 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Vector;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.EOFException;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.DataOutputStream; import java.io.IOException;
import java.io.FileOutputStream; import java.io.InputStream;
import java.io.ByteArrayInputStream; import java.net.URL;
import java.io.ByteArrayOutputStream;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
@ -58,16 +47,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
* @author Jan Borgersen * @author Jan Borgersen
* @author Florian Bomers * @author Florian Bomers
*/ */
public class AuFileReader extends SunFileReader { public final class AuFileReader extends SunFileReader {
/**
* AU reader type
*/
public static final AudioFileFormat.Type types[] = {
AudioFileFormat.Type.AU
};
/** /**
* Constructs a new AuFileReader object. * Constructs a new AuFileReader object.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -49,28 +49,18 @@ import javax.sound.sampled.AudioSystem;
* *
* @author Jan Borgersen * @author Jan Borgersen
*/ */
public class AuFileWriter extends SunFileWriter { public final class AuFileWriter extends SunFileWriter {
//$$fb value for length field if length is not known //$$fb value for length field if length is not known
public final static int UNKNOWN_SIZE=-1; public final static int UNKNOWN_SIZE=-1;
/**
* AU type
*/
private static final AudioFileFormat.Type auTypes[] = {
AudioFileFormat.Type.AU
};
/** /**
* Constructs a new AuFileWriter object. * Constructs a new AuFileWriter object.
*/ */
public AuFileWriter() { public AuFileWriter() {
super(auTypes); super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AU});
} }
public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) { public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length]; AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length];

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -43,7 +43,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class AudioFileSoundbankReader extends SoundbankReader { public final class AudioFileSoundbankReader extends SoundbankReader {
public Soundbank getSoundbank(URL url) public Soundbank getSoundbank(URL url)
throws InvalidMidiDataException, IOException { throws InvalidMidiDataException, IOException {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -51,7 +51,7 @@ public abstract class AudioFloatConverter {
private static class AudioFloatLSBFilter extends AudioFloatConverter { private static class AudioFloatLSBFilter extends AudioFloatConverter {
private AudioFloatConverter converter; private final AudioFloatConverter converter;
final private int offset; final private int offset;
@ -61,8 +61,7 @@ public abstract class AudioFloatConverter {
private byte[] mask_buffer; private byte[] mask_buffer;
public AudioFloatLSBFilter(AudioFloatConverter converter, AudioFloatLSBFilter(AudioFloatConverter converter, AudioFormat format) {
AudioFormat format) {
int bits = format.getSampleSizeInBits(); int bits = format.getSampleSizeInBits();
boolean bigEndian = format.isBigEndian(); boolean bigEndian = format.isBigEndian();
this.converter = converter; this.converter = converter;
@ -740,7 +739,7 @@ public abstract class AudioFloatConverter {
final int xbytes; final int xbytes;
public AudioFloatConversion32xSL(int xbytes) { AudioFloatConversion32xSL(int xbytes) {
this.xbytes = xbytes; this.xbytes = xbytes;
} }
@ -781,7 +780,7 @@ public abstract class AudioFloatConverter {
final int xbytes; final int xbytes;
public AudioFloatConversion32xSB(int xbytes) { AudioFloatConversion32xSB(int xbytes) {
this.xbytes = xbytes; this.xbytes = xbytes;
} }
@ -823,7 +822,7 @@ public abstract class AudioFloatConverter {
final int xbytes; final int xbytes;
public AudioFloatConversion32xUL(int xbytes) { AudioFloatConversion32xUL(int xbytes) {
this.xbytes = xbytes; this.xbytes = xbytes;
} }
@ -866,7 +865,7 @@ public abstract class AudioFloatConverter {
final int xbytes; final int xbytes;
public AudioFloatConversion32xUB(int xbytes) { AudioFloatConversion32xUB(int xbytes) {
this.xbytes = xbytes; this.xbytes = xbytes;
} }
@ -1008,49 +1007,51 @@ public abstract class AudioFloatConverter {
private AudioFormat format; private AudioFormat format;
public AudioFormat getFormat() { public final AudioFormat getFormat() {
return format; return format;
} }
public abstract float[] toFloatArray(byte[] in_buff, int in_offset, public abstract float[] toFloatArray(byte[] in_buff, int in_offset,
float[] out_buff, int out_offset, int out_len); float[] out_buff, int out_offset, int out_len);
public float[] toFloatArray(byte[] in_buff, float[] out_buff, public final float[] toFloatArray(byte[] in_buff, float[] out_buff,
int out_offset, int out_len) { int out_offset, int out_len) {
return toFloatArray(in_buff, 0, out_buff, out_offset, out_len); return toFloatArray(in_buff, 0, out_buff, out_offset, out_len);
} }
public float[] toFloatArray(byte[] in_buff, int in_offset, public final float[] toFloatArray(byte[] in_buff, int in_offset,
float[] out_buff, int out_len) { float[] out_buff, int out_len) {
return toFloatArray(in_buff, in_offset, out_buff, 0, out_len); return toFloatArray(in_buff, in_offset, out_buff, 0, out_len);
} }
public float[] toFloatArray(byte[] in_buff, float[] out_buff, int out_len) { public final float[] toFloatArray(byte[] in_buff, float[] out_buff,
int out_len) {
return toFloatArray(in_buff, 0, out_buff, 0, out_len); return toFloatArray(in_buff, 0, out_buff, 0, out_len);
} }
public float[] toFloatArray(byte[] in_buff, float[] out_buff) { public final float[] toFloatArray(byte[] in_buff, float[] out_buff) {
return toFloatArray(in_buff, 0, out_buff, 0, out_buff.length); return toFloatArray(in_buff, 0, out_buff, 0, out_buff.length);
} }
public abstract byte[] toByteArray(float[] in_buff, int in_offset, public abstract byte[] toByteArray(float[] in_buff, int in_offset,
int in_len, byte[] out_buff, int out_offset); int in_len, byte[] out_buff, int out_offset);
public byte[] toByteArray(float[] in_buff, int in_len, byte[] out_buff, public final byte[] toByteArray(float[] in_buff, int in_len,
int out_offset) { byte[] out_buff, int out_offset) {
return toByteArray(in_buff, 0, in_len, out_buff, out_offset); return toByteArray(in_buff, 0, in_len, out_buff, out_offset);
} }
public byte[] toByteArray(float[] in_buff, int in_offset, int in_len, public final byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
byte[] out_buff) { byte[] out_buff) {
return toByteArray(in_buff, in_offset, in_len, out_buff, 0); return toByteArray(in_buff, in_offset, in_len, out_buff, 0);
} }
public byte[] toByteArray(float[] in_buff, int in_len, byte[] out_buff) { public final byte[] toByteArray(float[] in_buff, int in_len,
byte[] out_buff) {
return toByteArray(in_buff, 0, in_len, out_buff, 0); return toByteArray(in_buff, 0, in_len, out_buff, 0);
} }
public byte[] toByteArray(float[] in_buff, byte[] out_buff) { public final byte[] toByteArray(float[] in_buff, byte[] out_buff) {
return toByteArray(in_buff, 0, in_buff.length, out_buff, 0); return toByteArray(in_buff, 0, in_buff.length, out_buff, 0);
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,19 +42,19 @@ import javax.sound.sampled.spi.FormatConversionProvider;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class AudioFloatFormatConverter extends FormatConversionProvider { public final class AudioFloatFormatConverter extends FormatConversionProvider {
private static class AudioFloatFormatConverterInputStream extends private static class AudioFloatFormatConverterInputStream extends
InputStream { InputStream {
private AudioFloatConverter converter; private final AudioFloatConverter converter;
private AudioFloatInputStream stream; private final AudioFloatInputStream stream;
private float[] readfloatbuffer; private float[] readfloatbuffer;
private int fsize = 0; private final int fsize;
public AudioFloatFormatConverterInputStream(AudioFormat targetFormat, AudioFloatFormatConverterInputStream(AudioFormat targetFormat,
AudioFloatInputStream stream) { AudioFloatInputStream stream) {
this.stream = stream; this.stream = stream;
converter = AudioFloatConverter.getConverter(targetFormat); converter = AudioFloatConverter.getConverter(targetFormat);
@ -116,17 +116,17 @@ public class AudioFloatFormatConverter extends FormatConversionProvider {
private static class AudioFloatInputStreamChannelMixer extends private static class AudioFloatInputStreamChannelMixer extends
AudioFloatInputStream { AudioFloatInputStream {
private int targetChannels; private final int targetChannels;
private int sourceChannels; private final int sourceChannels;
private AudioFloatInputStream ais; private final AudioFloatInputStream ais;
private AudioFormat targetFormat; private final AudioFormat targetFormat;
private float[] conversion_buffer; private float[] conversion_buffer;
public AudioFloatInputStreamChannelMixer(AudioFloatInputStream ais, AudioFloatInputStreamChannelMixer(AudioFloatInputStream ais,
int targetChannels) { int targetChannels) {
this.sourceChannels = ais.getFormat().getChannels(); this.sourceChannels = ais.getFormat().getChannels();
this.targetChannels = targetChannels; this.targetChannels = targetChannels;
@ -226,37 +226,37 @@ public class AudioFloatFormatConverter extends FormatConversionProvider {
private static class AudioFloatInputStreamResampler extends private static class AudioFloatInputStreamResampler extends
AudioFloatInputStream { AudioFloatInputStream {
private AudioFloatInputStream ais; private final AudioFloatInputStream ais;
private AudioFormat targetFormat; private final AudioFormat targetFormat;
private float[] skipbuffer; private float[] skipbuffer;
private SoftAbstractResampler resampler; private SoftAbstractResampler resampler;
private float[] pitch = new float[1]; private final float[] pitch = new float[1];
private float[] ibuffer2; private final float[] ibuffer2;
private float[][] ibuffer; private final float[][] ibuffer;
private float ibuffer_index = 0; private float ibuffer_index = 0;
private int ibuffer_len = 0; private int ibuffer_len = 0;
private int nrofchannels = 0; private final int nrofchannels;
private float[][] cbuffer; private float[][] cbuffer;
private int buffer_len = 512; private final int buffer_len = 512;
private int pad; private final int pad;
private int pad2; private final int pad2;
private float[] ix = new float[1]; private final float[] ix = new float[1];
private int[] ox = new int[1]; private final int[] ox = new int[1];
private float[][] mark_ibuffer = null; private float[][] mark_ibuffer = null;
@ -264,7 +264,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider {
private int mark_ibuffer_len = 0; private int mark_ibuffer_len = 0;
public AudioFloatInputStreamResampler(AudioFloatInputStream ais, AudioFloatInputStreamResampler(AudioFloatInputStream ais,
AudioFormat format) { AudioFormat format) {
this.ais = ais; this.ais = ais;
AudioFormat sourceFormat = ais.getFormat(); AudioFormat sourceFormat = ais.getFormat();
@ -468,8 +468,9 @@ public class AudioFloatFormatConverter extends FormatConversionProvider {
} }
private Encoding[] formats = { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, private final Encoding[] formats = {Encoding.PCM_SIGNED,
Encoding.PCM_FLOAT }; Encoding.PCM_UNSIGNED,
Encoding.PCM_FLOAT};
public AudioInputStream getAudioInputStream(Encoding targetEncoding, public AudioInputStream getAudioInputStream(Encoding targetEncoding,
AudioInputStream sourceStream) { AudioInputStream sourceStream) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -48,14 +48,14 @@ public abstract class AudioFloatInputStream {
private int pos = 0; private int pos = 0;
private int markpos = 0; private int markpos = 0;
private AudioFloatConverter converter; private final AudioFloatConverter converter;
private AudioFormat format; private final AudioFormat format;
private byte[] buffer; private final byte[] buffer;
private int buffer_offset; private final int buffer_offset;
private int buffer_len; private final int buffer_len;
private int framesize_pc; private final int framesize_pc;
public BytaArrayAudioFloatInputStream(AudioFloatConverter converter, BytaArrayAudioFloatInputStream(AudioFloatConverter converter,
byte[] buffer, int offset, int len) { byte[] buffer, int offset, int len) {
this.converter = converter; this.converter = converter;
this.format = converter.getFormat(); this.format = converter.getFormat();
@ -125,12 +125,12 @@ public abstract class AudioFloatInputStream {
private static class DirectAudioFloatInputStream private static class DirectAudioFloatInputStream
extends AudioFloatInputStream { extends AudioFloatInputStream {
private AudioInputStream stream; private final AudioInputStream stream;
private AudioFloatConverter converter; private AudioFloatConverter converter;
private int framesize_pc; // framesize / channels private final int framesize_pc; // framesize / channels
private byte[] buffer; private byte[] buffer;
public DirectAudioFloatInputStream(AudioInputStream stream) { DirectAudioFloatInputStream(AudioInputStream stream) {
converter = AudioFloatConverter.getConverter(stream.getFormat()); converter = AudioFloatConverter.getConverter(stream.getFormat());
if (converter == null) { if (converter == null) {
AudioFormat format = stream.getFormat(); AudioFormat format = stream.getFormat();
@ -255,11 +255,11 @@ public abstract class AudioFloatInputStream {
public abstract int read(float[] b, int off, int len) throws IOException; public abstract int read(float[] b, int off, int len) throws IOException;
public int read(float[] b) throws IOException { public final int read(float[] b) throws IOException {
return read(b, 0, b.length); return read(b, 0, b.length);
} }
public float read() throws IOException { public final float read() throws IOException {
float[] b = new float[1]; float[] b = new float[1];
int ret = read(b, 0, 1); int ret = read(b, 0, 1);
if (ret == -1 || ret == 0) if (ret == -1 || ret == 0)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class AudioSynthesizerPropertyInfo { public final class AudioSynthesizerPropertyInfo {
/** /**
* Constructs a <code>AudioSynthesizerPropertyInfo</code> object with a given * Constructs a <code>AudioSynthesizerPropertyInfo</code> object with a given

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSInfo { public final class DLSInfo {
/** /**
* (INAM) Title or subject. * (INAM) Title or subject.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -40,15 +40,15 @@ import javax.sound.midi.Patch;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSInstrument extends ModelInstrument { public final class DLSInstrument extends ModelInstrument {
protected int preset = 0; int preset = 0;
protected int bank = 0; int bank = 0;
protected boolean druminstrument = false; boolean druminstrument = false;
protected byte[] guid = null; byte[] guid = null;
protected DLSInfo info = new DLSInfo(); DLSInfo info = new DLSInfo();
protected List<DLSRegion> regions = new ArrayList<DLSRegion>(); List<DLSRegion> regions = new ArrayList<DLSRegion>();
protected List<DLSModulator> modulators = new ArrayList<DLSModulator>(); List<DLSModulator> modulators = new ArrayList<DLSModulator>();
public DLSInstrument() { public DLSInstrument() {
super(null, null, null, null); super(null, null, null, null);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSModulator { public final class DLSModulator {
// DLS1 Destinations // DLS1 Destinations
public static final int CONN_DST_NONE = 0x000; // 0 public static final int CONN_DST_NONE = 0x000; // 0
@ -102,12 +102,12 @@ public class DLSModulator {
public static final int DST_FORMAT_CENT = 1; public static final int DST_FORMAT_CENT = 1;
public static final int DST_FORMAT_TIMECENT = 2; public static final int DST_FORMAT_TIMECENT = 2;
public static final int DST_FORMAT_PERCENT = 3; public static final int DST_FORMAT_PERCENT = 3;
protected int source; int source;
protected int control; int control;
protected int destination; int destination;
protected int transform; int transform;
protected int scale; int scale;
protected int version = 1; int version = 1;
public int getControl() { public int getControl() {
return control; return control;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,21 +36,21 @@ import java.util.List;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSRegion { public final class DLSRegion {
public final static int OPTION_SELFNONEXCLUSIVE = 0x0001; public final static int OPTION_SELFNONEXCLUSIVE = 0x0001;
protected List<DLSModulator> modulators = new ArrayList<DLSModulator>(); List<DLSModulator> modulators = new ArrayList<DLSModulator>();
protected int keyfrom; int keyfrom;
protected int keyto; int keyto;
protected int velfrom; int velfrom;
protected int velto; int velto;
protected int options; int options;
protected int exclusiveClass; int exclusiveClass;
protected int fusoptions; int fusoptions;
protected int phasegroup; int phasegroup;
protected long channel; long channel;
protected DLSSample sample = null; DLSSample sample = null;
protected DLSSampleOptions sampleoptions; DLSSampleOptions sampleoptions;
public List<DLSModulator> getModulators() { public List<DLSModulator> getModulators() {
return modulators; return modulators;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -40,13 +40,13 @@ import javax.sound.sampled.AudioInputStream;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSSample extends SoundbankResource { public final class DLSSample extends SoundbankResource {
protected byte[] guid = null; byte[] guid = null;
protected DLSInfo info = new DLSInfo(); DLSInfo info = new DLSInfo();
protected DLSSampleOptions sampleoptions; DLSSampleOptions sampleoptions;
protected ModelByteBuffer data; ModelByteBuffer data;
protected AudioFormat format; AudioFormat format;
public DLSSample(Soundbank soundBank) { public DLSSample(Soundbank soundBank) {
super(soundBank, null, AudioInputStream.class); super(soundBank, null, AudioInputStream.class);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,13 +29,13 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSSampleLoop { public final class DLSSampleLoop {
public final static int LOOP_TYPE_FORWARD = 0; public final static int LOOP_TYPE_FORWARD = 0;
public final static int LOOP_TYPE_RELEASE = 1; public final static int LOOP_TYPE_RELEASE = 1;
protected long type; long type;
protected long start; long start;
protected long length; long length;
public long getLength() { public long getLength() {
return length; return length;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,13 +34,13 @@ import java.util.List;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSSampleOptions { public final class DLSSampleOptions {
protected int unitynote; int unitynote;
protected short finetune; short finetune;
protected int attenuation; int attenuation;
protected long options; long options;
protected List<DLSSampleLoop> loops = new ArrayList<DLSSampleLoop>(); List<DLSSampleLoop> loops = new ArrayList<DLSSampleLoop>();
public int getAttenuation() { public int getAttenuation() {
return attenuation; return attenuation;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -51,7 +51,7 @@ import javax.sound.sampled.AudioFormat.Encoding;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSSoundbank implements Soundbank { public final class DLSSoundbank implements Soundbank {
static private class DLSID { static private class DLSID {
long i1; long i1;
@ -69,7 +69,7 @@ public class DLSSoundbank implements Soundbank {
private DLSID() { private DLSID() {
} }
public DLSID(long i1, int s1, int s2, int x1, int x2, int x3, int x4, DLSID(long i1, int s1, int s2, int x1, int x2, int x3, int x4,
int x5, int x6, int x7, int x8) { int x5, int x6, int x7, int x8) {
this.i1 = i1; this.i1 = i1;
this.s1 = s1; this.s1 = s1;
@ -174,10 +174,10 @@ public class DLSSoundbank implements Soundbank {
private long major = -1; private long major = -1;
private long minor = -1; private long minor = -1;
private DLSInfo info = new DLSInfo(); private final DLSInfo info = new DLSInfo();
private List<DLSInstrument> instruments = new ArrayList<DLSInstrument>(); private final List<DLSInstrument> instruments = new ArrayList<DLSInstrument>();
private List<DLSSample> samples = new ArrayList<DLSSample>(); private final List<DLSSample> samples = new ArrayList<DLSSample>();
private boolean largeFormat = false; private boolean largeFormat = false;
private File sampleFile; private File sampleFile;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,7 +39,7 @@ import javax.sound.midi.spi.SoundbankReader;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class DLSSoundbankReader extends SoundbankReader { public final class DLSSoundbankReader extends SoundbankReader {
public Soundbank getSoundbank(URL url) public Soundbank getSoundbank(URL url)
throws InvalidMidiDataException, IOException { throws InvalidMidiDataException, IOException {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -37,13 +37,13 @@ import javax.sound.sampled.*;
* @author Florian Bomers * @author Florian Bomers
*/ */
public class DataPusher implements Runnable { public final class DataPusher implements Runnable {
private static final int AUTO_CLOSE_TIME = 5000; private static final int AUTO_CLOSE_TIME = 5000;
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private SourceDataLine source = null; private final SourceDataLine source;
private AudioFormat format = null; private final AudioFormat format;
// stream as source data // stream as source data
private AudioInputStream ais = null; private AudioInputStream ais = null;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,7 +42,7 @@ import javax.sound.sampled.*;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
class DirectAudioDevice extends AbstractMixer { final class DirectAudioDevice extends AbstractMixer {
// CONSTANTS // CONSTANTS
private static final int CLIP_BUFFER_TIME = 1000; // in milliseconds private static final int CLIP_BUFFER_TIME = 1000; // in milliseconds
@ -335,8 +335,8 @@ class DirectAudioDevice extends AbstractMixer {
* but isFormatSupported() also returns true * but isFormatSupported() also returns true
* for formats with wrong endianness. * for formats with wrong endianness.
*/ */
private static class DirectDLI extends DataLine.Info { private static final class DirectDLI extends DataLine.Info {
AudioFormat[] hardwareFormats; final AudioFormat[] hardwareFormats;
private DirectDLI(Class clazz, AudioFormat[] formatArray, private DirectDLI(Class clazz, AudioFormat[] formatArray,
AudioFormat[] hardwareFormatArray, AudioFormat[] hardwareFormatArray,
@ -370,12 +370,12 @@ class DirectAudioDevice extends AbstractMixer {
* Private inner class as base class for direct lines * Private inner class as base class for direct lines
*/ */
private static class DirectDL extends AbstractDataLine implements EventDispatcher.LineMonitor { private static class DirectDL extends AbstractDataLine implements EventDispatcher.LineMonitor {
protected int mixerIndex; protected final int mixerIndex;
protected int deviceID; protected final int deviceID;
protected long id; protected long id;
protected int waitTime; protected int waitTime;
protected volatile boolean flushing = false; protected volatile boolean flushing = false;
protected boolean isSource; // true for SourceDataLine, false for TargetDataLine protected final boolean isSource; // true for SourceDataLine, false for TargetDataLine
protected volatile long bytePosition; protected volatile long bytePosition;
protected volatile boolean doIO = false; // true in between start() and stop() calls protected volatile boolean doIO = false; // true in between start() and stop() calls
protected volatile boolean stoppedWritten = false; // true if a write occured in stopped state protected volatile boolean stoppedWritten = false; // true if a write occured in stopped state
@ -387,10 +387,10 @@ class DirectAudioDevice extends AbstractMixer {
protected int softwareConversionSize = 0; protected int softwareConversionSize = 0;
protected AudioFormat hardwareFormat; protected AudioFormat hardwareFormat;
private Gain gainControl = new Gain(); private final Gain gainControl = new Gain();
private Mute muteControl = new Mute(); private final Mute muteControl = new Mute();
private Balance balanceControl = new Balance(); private final Balance balanceControl = new Balance();
private Pan panControl = new Pan(); private final Pan panControl = new Pan();
private float leftGain, rightGain; private float leftGain, rightGain;
protected volatile boolean noService = false; // do not run the nService method protected volatile boolean noService = false; // do not run the nService method
@ -829,7 +829,7 @@ class DirectAudioDevice extends AbstractMixer {
/////////////////// CONTROLS ///////////////////////////// /////////////////// CONTROLS /////////////////////////////
protected class Gain extends FloatControl { protected final class Gain extends FloatControl {
private float linearGain = 1.0f; private float linearGain = 1.0f;
@ -862,7 +862,7 @@ class DirectAudioDevice extends AbstractMixer {
} // class Gain } // class Gain
private class Mute extends BooleanControl { private final class Mute extends BooleanControl {
private Mute() { private Mute() {
super(BooleanControl.Type.MUTE, false, "True", "False"); super(BooleanControl.Type.MUTE, false, "True", "False");
@ -874,7 +874,7 @@ class DirectAudioDevice extends AbstractMixer {
} }
} // class Mute } // class Mute
private class Balance extends FloatControl { private final class Balance extends FloatControl {
private Balance() { private Balance() {
super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f, super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f,
@ -893,7 +893,7 @@ class DirectAudioDevice extends AbstractMixer {
} // class Balance } // class Balance
private class Pan extends FloatControl { private final class Pan extends FloatControl {
private Pan() { private Pan() {
super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f, super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f,
@ -918,7 +918,8 @@ class DirectAudioDevice extends AbstractMixer {
/** /**
* Private inner class representing a SourceDataLine * Private inner class representing a SourceDataLine
*/ */
private static class DirectSDL extends DirectDL implements SourceDataLine { private static final class DirectSDL extends DirectDL
implements SourceDataLine {
// CONSTRUCTOR // CONSTRUCTOR
private DirectSDL(DataLine.Info info, private DirectSDL(DataLine.Info info,
@ -934,7 +935,8 @@ class DirectAudioDevice extends AbstractMixer {
/** /**
* Private inner class representing a TargetDataLine * Private inner class representing a TargetDataLine
*/ */
private static class DirectTDL extends DirectDL implements TargetDataLine { private static final class DirectTDL extends DirectDL
implements TargetDataLine {
// CONSTRUCTOR // CONSTRUCTOR
private DirectTDL(DataLine.Info info, private DirectTDL(DataLine.Info info,
@ -1012,7 +1014,9 @@ class DirectAudioDevice extends AbstractMixer {
* Private inner class representing a Clip * Private inner class representing a Clip
* This clip is realized in software only * This clip is realized in software only
*/ */
private static class DirectClip extends DirectDL implements Clip, Runnable, AutoClosingClip { private static final class DirectClip extends DirectDL
implements Clip, Runnable, AutoClosingClip {
private Thread thread; private Thread thread;
private byte[] audioData = null; private byte[] audioData = null;
private int frameSize; // size of one frame in bytes private int frameSize; // size of one frame in bytes
@ -1045,7 +1049,7 @@ class DirectAudioDevice extends AbstractMixer {
byte[] newData = new byte[bufferSize]; byte[] newData = new byte[bufferSize];
System.arraycopy(data, offset, newData, 0, bufferSize); System.arraycopy(data, offset, newData, 0, bufferSize);
open(format, data, bufferSize / format.getFrameSize()); open(format, newData, bufferSize / format.getFrameSize());
} }
// this method does not copy the data array // this method does not copy the data array
@ -1443,7 +1447,7 @@ class DirectAudioDevice extends AbstractMixer {
* which allows retrieval of the internal array * which allows retrieval of the internal array
*/ */
private static class DirectBAOS extends ByteArrayOutputStream { private static class DirectBAOS extends ByteArrayOutputStream {
public DirectBAOS() { DirectBAOS() {
super(); super();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,8 +25,6 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Vector;
import javax.sound.sampled.Mixer; import javax.sound.sampled.Mixer;
import javax.sound.sampled.spi.MixerProvider; import javax.sound.sampled.spi.MixerProvider;
@ -36,7 +34,7 @@ import javax.sound.sampled.spi.MixerProvider;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
public class DirectAudioDeviceProvider extends MixerProvider { public final class DirectAudioDeviceProvider extends MixerProvider {
// STATIC VARIABLES // STATIC VARIABLES
@ -66,7 +64,7 @@ public class DirectAudioDeviceProvider extends MixerProvider {
* Required public no-arg constructor. * Required public no-arg constructor.
*/ */
public DirectAudioDeviceProvider() { public DirectAudioDeviceProvider() {
//if (Printer.trace) Printer.trace("DirectAudioDeviceProvider: constructor"); synchronized (DirectAudioDeviceProvider.class) {
if (Platform.isDirectAudioEnabled()) { if (Platform.isDirectAudioEnabled()) {
init(); init();
} else { } else {
@ -74,8 +72,9 @@ public class DirectAudioDeviceProvider extends MixerProvider {
devices = new DirectAudioDevice[0]; devices = new DirectAudioDevice[0];
} }
} }
}
private synchronized static void init() { private static void init() {
// get the number of input devices // get the number of input devices
int numDevices = nGetNumDevices(); int numDevices = nGetNumDevices();
@ -94,13 +93,16 @@ public class DirectAudioDeviceProvider extends MixerProvider {
} }
public Mixer.Info[] getMixerInfo() { public Mixer.Info[] getMixerInfo() {
synchronized (DirectAudioDeviceProvider.class) {
Mixer.Info[] localArray = new Mixer.Info[infos.length]; Mixer.Info[] localArray = new Mixer.Info[infos.length];
System.arraycopy(infos, 0, localArray, 0, infos.length); System.arraycopy(infos, 0, localArray, 0, infos.length);
return localArray; return localArray;
} }
}
public Mixer getMixer(Mixer.Info info) { public Mixer getMixer(Mixer.Info info) {
synchronized (DirectAudioDeviceProvider.class) {
// if the default device is asked, we provide the mixer // if the default device is asked, we provide the mixer
// with SourceDataLine's // with SourceDataLine's
if (info == null) { if (info == null) {
@ -118,12 +120,12 @@ public class DirectAudioDeviceProvider extends MixerProvider {
return getDevice(infos[i]); return getDevice(infos[i]);
} }
} }
}
throw new IllegalArgumentException("Mixer " + info.toString() + " not supported by this provider."); throw new IllegalArgumentException("Mixer " + info.toString() + " not supported by this provider.");
} }
private Mixer getDevice(DirectAudioDeviceInfo info) { private static Mixer getDevice(DirectAudioDeviceInfo info) {
int index = info.getIndex(); int index = info.getIndex();
if (devices[index] == null) { if (devices[index] == null) {
devices[index] = new DirectAudioDevice(info); devices[index] = new DirectAudioDevice(info);
@ -139,12 +141,12 @@ public class DirectAudioDeviceProvider extends MixerProvider {
* making native references to a particular device. * making native references to a particular device.
* This constructor is called from native. * This constructor is called from native.
*/ */
static class DirectAudioDeviceInfo extends Mixer.Info { static final class DirectAudioDeviceInfo extends Mixer.Info {
private int index; private final int index;
private int maxSimulLines; private final int maxSimulLines;
// For ALSA, the deviceID contains the encoded card index, device index, and sub-device-index // For ALSA, the deviceID contains the encoded card index, device index, and sub-device-index
private int deviceID; private final int deviceID;
private DirectAudioDeviceInfo(int index, int deviceID, int maxSimulLines, private DirectAudioDeviceInfo(int index, int deviceID, int maxSimulLines,
String name, String vendor, String name, String vendor,

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -35,7 +35,7 @@ import javax.sound.sampled.AudioFormat;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class EmergencySoundbank { public final class EmergencySoundbank {
private final static String[] general_midi_instruments = { private final static String[] general_midi_instruments = {
"Acoustic Grand Piano", "Acoustic Grand Piano",

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,19 +25,15 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.EventObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.sound.sampled.Clip; import javax.sound.midi.ControllerEventListener;
import javax.sound.sampled.Line; import javax.sound.midi.MetaEventListener;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.midi.MetaMessage; import javax.sound.midi.MetaMessage;
import javax.sound.midi.ShortMessage; import javax.sound.midi.ShortMessage;
import javax.sound.midi.MetaEventListener; import javax.sound.sampled.LineEvent;
import javax.sound.midi.ControllerEventListener; import javax.sound.sampled.LineListener;
@ -49,7 +45,7 @@ import javax.sound.midi.ControllerEventListener;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
class EventDispatcher implements Runnable { final class EventDispatcher implements Runnable {
/** /**
* time of inactivity until the auto closing clips * time of inactivity until the auto closing clips
@ -61,7 +57,7 @@ class EventDispatcher implements Runnable {
/** /**
* List of events * List of events
*/ */
private ArrayList eventQueue = new ArrayList(); private final ArrayList eventQueue = new ArrayList();
/** /**
@ -73,12 +69,12 @@ class EventDispatcher implements Runnable {
/* /*
* support for auto-closing Clips * support for auto-closing Clips
*/ */
private ArrayList<ClipInfo> autoClosingClips = new ArrayList<ClipInfo>(); private final ArrayList<ClipInfo> autoClosingClips = new ArrayList<ClipInfo>();
/* /*
* support for monitoring data lines * support for monitoring data lines
*/ */
private ArrayList<LineMonitor> lineMonitors = new ArrayList<LineMonitor>(); private final ArrayList<LineMonitor> lineMonitors = new ArrayList<LineMonitor>();
/** /**
* Approximate interval between calls to LineMonitor.checkLine * Approximate interval between calls to LineMonitor.checkLine
@ -105,7 +101,7 @@ class EventDispatcher implements Runnable {
* Invoked when there is at least one event in the queue. * Invoked when there is at least one event in the queue.
* Implement this as a callback to process one event. * Implement this as a callback to process one event.
*/ */
protected void processEvent(EventInfo eventInfo) { void processEvent(EventInfo eventInfo) {
int count = eventInfo.getListenerCount(); int count = eventInfo.getListenerCount();
// process an LineEvent // process an LineEvent
@ -166,7 +162,7 @@ class EventDispatcher implements Runnable {
* exclusive access over the code where an event is removed from the * exclusive access over the code where an event is removed from the
*queue. *queue.
*/ */
protected void dispatchEvents() { void dispatchEvents() {
EventInfo eventInfo = null; EventInfo eventInfo = null;
@ -388,8 +384,8 @@ class EventDispatcher implements Runnable {
*/ */
private class EventInfo { private class EventInfo {
private Object event; private final Object event;
private Object[] listeners; private final Object[] listeners;
/** /**
* Create a new instance of this event Info class * Create a new instance of this event Info class
@ -421,8 +417,8 @@ class EventDispatcher implements Runnable {
*/ */
private class ClipInfo { private class ClipInfo {
private AutoClosingClip clip; private final AutoClosingClip clip;
private long expiration; private final long expiration;
/** /**
* Create a new instance of this clip Info class * Create a new instance of this clip Info class

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -31,11 +31,11 @@ package com.sun.media.sound;
*/ */
public final class FFT { public final class FFT {
private double[] w; private final double[] w;
private int fftFrameSize; private final int fftFrameSize;
private int sign; private final int sign;
private int[] bitm_array; private final int[] bitm_array;
private int fftFrameSize2; private final int fftFrameSize2;
// Sign = -1 is FFT, 1 is IFFT (inverse FFT) // Sign = -1 is FFT, 1 is IFFT (inverse FFT)
// Data = Interlaced double array to be transformed. // Data = Interlaced double array to be transformed.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -35,13 +35,13 @@ import javax.sound.midi.*;
final class FastShortMessage extends ShortMessage { final class FastShortMessage extends ShortMessage {
private int packedMsg; private int packedMsg;
public FastShortMessage(int packedMsg) throws InvalidMidiDataException { FastShortMessage(int packedMsg) throws InvalidMidiDataException {
this.packedMsg = packedMsg; this.packedMsg = packedMsg;
getDataLength(packedMsg & 0xFF); // to check for validity getDataLength(packedMsg & 0xFF); // to check for validity
} }
/** Creates a FastShortMessage from this ShortMessage */ /** Creates a FastShortMessage from this ShortMessage */
public FastShortMessage(ShortMessage msg) { FastShortMessage(ShortMessage msg) {
this.packedMsg = msg.getStatus() this.packedMsg = msg.getStatus()
| (msg.getData1() << 8) | (msg.getData1() << 8)
| (msg.getData2() << 16); | (msg.getData2() << 16);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,14 +36,16 @@ import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.Soundbank; import javax.sound.midi.Soundbank;
import javax.sound.midi.spi.SoundbankReader; import javax.sound.midi.spi.SoundbankReader;
import sun.reflect.misc.ReflectUtil;
/** /**
* JarSoundbankReader is used to read sounbank object from jar files. * JarSoundbankReader is used to read soundbank object from jar files.
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class JARSoundbankReader extends SoundbankReader { public final class JARSoundbankReader extends SoundbankReader {
public boolean isZIP(URL url) { private static boolean isZIP(URL url) {
boolean ok = false; boolean ok = false;
try { try {
InputStream stream = url.openStream(); InputStream stream = url.openStream();
@ -81,14 +83,14 @@ public class JARSoundbankReader extends SoundbankReader {
while (line != null) { while (line != null) {
if (!line.startsWith("#")) { if (!line.startsWith("#")) {
try { try {
Class c = Class.forName(line.trim(), true, ucl); Class<?> c = Class.forName(line.trim(), false, ucl);
Object o = c.newInstance(); if (Soundbank.class.isAssignableFrom(c)) {
if (o instanceof Soundbank) { Object o = ReflectUtil.newInstance(c);
soundbanks.add((Soundbank) o); soundbanks.add((Soundbank) o);
} }
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException ignored) {
} catch (InstantiationException e) { } catch (InstantiationException ignored) {
} catch (IllegalAccessException e) { } catch (IllegalAccessException ignored) {
} }
} }
line = r.readLine(); line = r.readLine();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -31,16 +31,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import javax.sound.sampled.spi.AudioFileReader;
import javax.sound.sampled.spi.AudioFileWriter;
import javax.sound.sampled.spi.FormatConversionProvider;
import javax.sound.sampled.spi.MixerProvider;
import javax.sound.midi.spi.MidiFileReader;
import javax.sound.midi.spi.MidiFileWriter;
import javax.sound.midi.spi.SoundbankReader;
import javax.sound.midi.spi.MidiDeviceProvider;
import javax.sound.midi.Receiver; import javax.sound.midi.Receiver;
import javax.sound.midi.Sequencer; import javax.sound.midi.Sequencer;
import javax.sound.midi.Synthesizer; import javax.sound.midi.Synthesizer;
@ -62,7 +52,7 @@ import javax.sound.sampled.TargetDataLine;
* *
* @author Matthias Pfisterer * @author Matthias Pfisterer
*/ */
public class JDK13Services { public final class JDK13Services {
/** The default for the length of the period to hold the cache. /** The default for the length of the period to hold the cache.
This value is given in milliseconds. It is equivalent to This value is given in milliseconds. It is equivalent to
@ -80,7 +70,7 @@ public class JDK13Services {
Class objects of the provider type (MixerProvider, MidiDeviceProvider Class objects of the provider type (MixerProvider, MidiDeviceProvider
...) are used as keys. The values are instances of ProviderCache. ...) are used as keys. The values are instances of ProviderCache.
*/ */
private static Map providersCacheMap = new HashMap(); private static final Map providersCacheMap = new HashMap();
/** The length of the period to hold the cache. /** The length of the period to hold the cache.

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -47,7 +47,7 @@ import javax.sound.sampled.AudioPermission;
* *
* @author Matthias Pfisterer * @author Matthias Pfisterer
*/ */
class JSSecurityManager { final class JSSecurityManager {
/** Prevent instantiation. /** Prevent instantiation.
*/ */
@ -73,30 +73,6 @@ class JSSecurityManager {
} }
} }
static void loadLibrary(final String libName) {
try {
if (hasSecurityManager()) {
if(Printer.debug) Printer.debug("using security manager to load library");
PrivilegedAction<Void> action = new PrivilegedAction<Void>() {
public Void run() {
System.loadLibrary(libName);
return null;
}
};
AccessController.doPrivileged(action);
} else {
if(Printer.debug) Printer.debug("not using security manager to load library");
System.loadLibrary(libName);
}
if (Printer.debug) Printer.debug("loaded library " + libName);
} catch (UnsatisfiedLinkError e2) {
if (Printer.err)Printer.err("UnsatisfiedLinkError loading native library " + libName);
throw(e2);
}
}
static String getProperty(final String propertyName) { static String getProperty(final String propertyName) {
String propertyValue; String propertyValue;
if (hasSecurityManager()) { if (hasSecurityManager()) {
@ -189,83 +165,13 @@ class JSSecurityManager {
if(Printer.trace)Printer.trace("<< JSSecurityManager: loadPropertiesImpl() completed"); if(Printer.trace)Printer.trace("<< JSSecurityManager: loadPropertiesImpl() completed");
} }
/** Create a Thread in the current ThreadGroup.
private static ThreadGroup getTopmostThreadGroup() {
ThreadGroup topmostThreadGroup;
if(hasSecurityManager()) {
try {
// invoke the privileged action using 1.2 security
PrivilegedAction<ThreadGroup> action = new PrivilegedAction<ThreadGroup>() {
public ThreadGroup run() {
try {
return getTopmostThreadGroupImpl();
} catch (Throwable t) {
return null;
}
}
};
topmostThreadGroup = AccessController.doPrivileged(action);
if(Printer.debug)Printer.debug("Got topmost thread group with JDK 1.2 security");
} catch (Exception e) {
if(Printer.debug)Printer.debug("Exception getting topmost thread group with JDK 1.2 security");
// try without using JDK 1.2 security
topmostThreadGroup = getTopmostThreadGroupImpl();
}
} else {
// not JDK 1.2 security, assume we already have permission
topmostThreadGroup = getTopmostThreadGroupImpl();
}
return topmostThreadGroup;
}
private static ThreadGroup getTopmostThreadGroupImpl() {
if(Printer.trace)Printer.trace(">> JSSecurityManager: getTopmostThreadGroupImpl()");
ThreadGroup g = Thread.currentThread().getThreadGroup();
while ((g.getParent() != null) && (g.getParent().getParent() != null)) {
g = g.getParent();
}
if(Printer.trace)Printer.trace("<< JSSecurityManager: getTopmostThreadGroupImpl() completed");
return g;
}
/** Create a Thread in the topmost ThreadGroup.
*/ */
static Thread createThread(final Runnable runnable, static Thread createThread(final Runnable runnable,
final String threadName, final String threadName,
final boolean isDaemon, final int priority, final boolean isDaemon, final int priority,
final boolean doStart) { final boolean doStart) {
Thread thread = null; Thread thread = new Thread(runnable);
if(hasSecurityManager()) {
PrivilegedAction<Thread> action = new PrivilegedAction<Thread>() {
public Thread run() {
try {
return createThreadImpl(runnable, threadName,
isDaemon, priority,
doStart);
} catch (Throwable t) {
return null;
}
}
};
thread = AccessController.doPrivileged(action);
if(Printer.debug) Printer.debug("created thread with JDK 1.2 security");
} else {
if(Printer.debug)Printer.debug("not using JDK 1.2 security");
thread = createThreadImpl(runnable, threadName, isDaemon, priority,
doStart);
}
return thread;
}
private static Thread createThreadImpl(Runnable runnable,
String threadName,
boolean isDaemon, int priority,
boolean doStart) {
ThreadGroup threadGroup = getTopmostThreadGroupImpl();
Thread thread = new Thread(threadGroup, runnable);
if (threadName != null) { if (threadName != null) {
thread.setName(threadName); thread.setName(threadName);
} }
@ -279,7 +185,6 @@ class JSSecurityManager {
return thread; return thread;
} }
static <T> List<T> getProviders(final Class<T> providerClass) { static <T> List<T> getProviders(final Class<T> providerClass) {
List<T> p = new ArrayList<>(); List<T> p = new ArrayList<>();
// ServiceLoader creates "lazy" iterator instance, so it doesn't, // ServiceLoader creates "lazy" iterator instance, so it doesn't,

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -28,25 +28,19 @@ package com.sun.media.sound;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.applet.AudioClip; import java.applet.AudioClip;
import java.lang.InterruptedException;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.Clip; import javax.sound.sampled.Clip;
import javax.sound.sampled.Control;
import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.DataLine; import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener; import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiFileFormat; import javax.sound.midi.MidiFileFormat;
import javax.sound.midi.MetaMessage; import javax.sound.midi.MetaMessage;
@ -63,7 +57,7 @@ import javax.sound.midi.MetaEventListener;
* @author Florian Bomers * @author Florian Bomers
*/ */
public class JavaSoundAudioClip implements AudioClip, MetaEventListener, LineListener { public final class JavaSoundAudioClip implements AudioClip, MetaEventListener, LineListener {
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private static final int BUFFER_SIZE = 16384; // number of bytes written each time to the source data line private static final int BUFFER_SIZE = 16384; // number of bytes written each time to the source data line
@ -476,7 +470,7 @@ public class JavaSoundAudioClip implements AudioClip, MetaEventListener, LineLis
* which allows retrieval of the internal array * which allows retrieval of the internal array
*/ */
private static class DirectBAOS extends ByteArrayOutputStream { private static class DirectBAOS extends ByteArrayOutputStream {
public DirectBAOS() { DirectBAOS() {
super(); super();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ import javax.sound.midi.*;
* *
* @author Alex Menkov * @author Alex Menkov
*/ */
public class MidiDeviceReceiverEnvelope implements MidiDeviceReceiver { public final class MidiDeviceReceiverEnvelope implements MidiDeviceReceiver {
private final MidiDevice device; private final MidiDevice device;
private final Receiver receiver; private final Receiver receiver;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ import javax.sound.midi.*;
* *
* @author Alex Menkov * @author Alex Menkov
*/ */
public class MidiDeviceTransmitterEnvelope implements MidiDeviceTransmitter { public final class MidiDeviceTransmitterEnvelope implements MidiDeviceTransmitter {
private final MidiDevice device; private final MidiDevice device;
private final Transmitter transmitter; private final Transmitter transmitter;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,9 +25,6 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.ArrayList;
import java.util.List;
import javax.sound.midi.*; import javax.sound.midi.*;
@ -39,7 +36,7 @@ import javax.sound.midi.*;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
class MidiInDevice extends AbstractMidiDevice implements Runnable { final class MidiInDevice extends AbstractMidiDevice implements Runnable {
private Thread midiInThread = null; private Thread midiInThread = null;
@ -127,7 +124,7 @@ class MidiInDevice extends AbstractMidiDevice implements Runnable {
* An own class to distinguish the class name from * An own class to distinguish the class name from
* the transmitter of other devices * the transmitter of other devices
*/ */
private class MidiInTransmitter extends BasicTransmitter { private final class MidiInTransmitter extends BasicTransmitter {
private MidiInTransmitter() { private MidiInTransmitter() {
super(); super();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -26,7 +26,6 @@
package com.sun.media.sound; package com.sun.media.sound;
import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiDevice;
import javax.sound.midi.spi.MidiDeviceProvider;
/** /**
@ -35,15 +34,15 @@ import javax.sound.midi.spi.MidiDeviceProvider;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
public class MidiInDeviceProvider extends AbstractMidiDeviceProvider { public final class MidiInDeviceProvider extends AbstractMidiDeviceProvider {
/** Cache of info objects for all MIDI output devices on the system. */ /** Cache of info objects for all MIDI output devices on the system. */
static Info[] infos = null; private static Info[] infos = null;
/** Cache of open MIDI input devices on the system. */ /** Cache of open MIDI input devices on the system. */
static MidiDevice[] devices = null; private static MidiDevice[] devices = null;
private static boolean enabled; private static final boolean enabled;
// STATIC // STATIC
@ -106,8 +105,8 @@ public class MidiInDeviceProvider extends AbstractMidiDeviceProvider {
* previous instance may still exist and be open / in use / etc., * previous instance may still exist and be open / in use / etc.,
* the new instance will not reflect that state... * the new instance will not reflect that state...
*/ */
static class MidiInDeviceInfo extends AbstractMidiDeviceProvider.Info { static final class MidiInDeviceInfo extends AbstractMidiDeviceProvider.Info {
private Class providerClass; private final Class providerClass;
private MidiInDeviceInfo(int index, Class providerClass) { private MidiInDeviceInfo(int index, Class providerClass) {
super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index); super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,7 +36,7 @@ import javax.sound.midi.*;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
class MidiOutDevice extends AbstractMidiDevice { final class MidiOutDevice extends AbstractMidiDevice {
// CONSTRUCTOR // CONSTRUCTOR
@ -101,7 +101,7 @@ class MidiOutDevice extends AbstractMidiDevice {
// INNER CLASSES // INNER CLASSES
class MidiOutReceiver extends AbstractReceiver { final class MidiOutReceiver extends AbstractReceiver {
void implSend(final MidiMessage message, final long timeStamp) { void implSend(final MidiMessage message, final long timeStamp) {
final int length = message.getLength(); final int length = message.getLength();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -26,7 +26,6 @@
package com.sun.media.sound; package com.sun.media.sound;
import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiDevice;
import javax.sound.midi.spi.MidiDeviceProvider;
/** /**
@ -35,15 +34,15 @@ import javax.sound.midi.spi.MidiDeviceProvider;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
public class MidiOutDeviceProvider extends AbstractMidiDeviceProvider { public final class MidiOutDeviceProvider extends AbstractMidiDeviceProvider {
/** Cache of info objects for all MIDI output devices on the system. */ /** Cache of info objects for all MIDI output devices on the system. */
static Info[] infos = null; private static Info[] infos = null;
/** Cache of open MIDI output devices on the system. */ /** Cache of open MIDI output devices on the system. */
static MidiDevice[] devices = null; private static MidiDevice[] devices = null;
private static boolean enabled; private final static boolean enabled;
// STATIC // STATIC
@ -104,8 +103,8 @@ public class MidiOutDeviceProvider extends AbstractMidiDeviceProvider {
* previous instance may still exist and be open / in use / etc., * previous instance may still exist and be open / in use / etc.,
* the new instance will not reflect that state... * the new instance will not reflect that state...
*/ */
static class MidiOutDeviceInfo extends AbstractMidiDeviceProvider.Info { static final class MidiOutDeviceInfo extends AbstractMidiDeviceProvider.Info {
private Class providerClass; private final Class providerClass;
private MidiOutDeviceInfo(int index, Class providerClass) { private MidiOutDeviceInfo(int index, Class providerClass) {
super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index); super(nGetName(index), nGetVendor(index), nGetDescription(index), nGetVersion(index), index);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,12 +36,17 @@ import java.util.ArrayList;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
public class MidiUtils { public final class MidiUtils {
public final static int DEFAULT_TEMPO_MPQ = 500000; // 120bpm public final static int DEFAULT_TEMPO_MPQ = 500000; // 120bpm
public final static int META_END_OF_TRACK_TYPE = 0x2F; public final static int META_END_OF_TRACK_TYPE = 0x2F;
public final static int META_TEMPO_TYPE = 0x51; public final static int META_TEMPO_TYPE = 0x51;
/**
* Suppresses default constructor, ensuring non-instantiability.
*/
private MidiUtils() {
}
/** return true if the passed message is Meta End Of Track */ /** return true if the passed message is Meta End Of Track */
public static boolean isMetaEndOfTrack(MidiMessage midiMsg) { public static boolean isMetaEndOfTrack(MidiMessage midiMsg) {
@ -262,7 +267,7 @@ public class MidiUtils {
} }
public static class TempoCache { public static final class TempoCache {
long[] ticks; long[] ticks;
int[] tempos; // in MPQ int[] tempos; // in MPQ
// index in ticks/tempos at the snapshot // index in ticks/tempos at the snapshot

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -38,7 +38,7 @@ import java.util.Collection;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelByteBuffer { public final class ModelByteBuffer {
private ModelByteBuffer root = this; private ModelByteBuffer root = this;
private File file; private File file;
@ -49,12 +49,12 @@ public class ModelByteBuffer {
private class RandomFileInputStream extends InputStream { private class RandomFileInputStream extends InputStream {
private RandomAccessFile raf; private final RandomAccessFile raf;
private long left; private long left;
private long mark = 0; private long mark = 0;
private long markleft = 0; private long markleft = 0;
public RandomFileInputStream() throws IOException { RandomFileInputStream() throws IOException {
raf = new RandomAccessFile(root.file, "r"); raf = new RandomAccessFile(root.file, "r");
raf.seek(root.fileoffset + arrayOffset()); raf.seek(root.fileoffset + arrayOffset());
left = capacity(); left = capacity();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,18 +36,18 @@ import javax.sound.sampled.AudioFormat.Encoding;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelByteBufferWavetable implements ModelWavetable { public final class ModelByteBufferWavetable implements ModelWavetable {
private class Buffer8PlusInputStream extends InputStream { private class Buffer8PlusInputStream extends InputStream {
private boolean bigendian; private final boolean bigendian;
private int framesize_pc; private final int framesize_pc;
int pos = 0; int pos = 0;
int pos2 = 0; int pos2 = 0;
int markpos = 0; int markpos = 0;
int markpos2 = 0; int markpos2 = 0;
public Buffer8PlusInputStream() { Buffer8PlusInputStream() {
framesize_pc = format.getFrameSize() / format.getChannels(); framesize_pc = format.getFrameSize() / format.getChannels();
bigendian = format.isBigEndian(); bigendian = format.isBigEndian();
} }
@ -127,7 +127,7 @@ public class ModelByteBufferWavetable implements ModelWavetable {
private float loopStart = -1; private float loopStart = -1;
private float loopLength = -1; private float loopLength = -1;
private ModelByteBuffer buffer; private final ModelByteBuffer buffer;
private ModelByteBuffer buffer8 = null; private ModelByteBuffer buffer8 = null;
private AudioFormat format = null; private AudioFormat format = null;
private float pitchcorrection = 0; private float pitchcorrection = 0;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,7 +34,7 @@ import java.util.Arrays;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelConnectionBlock { public final class ModelConnectionBlock {
// //
// source1 * source2 * scale -> destination // source1 * source2 * scale -> destination

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelDestination { public final class ModelDestination {
public static final ModelIdentifier DESTINATION_NONE = null; public static final ModelIdentifier DESTINATION_NONE = null;
public static final ModelIdentifier DESTINATION_KEYNUMBER public static final ModelIdentifier DESTINATION_KEYNUMBER

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelIdentifier { public final class ModelIdentifier {
/* /*
* Object Variable * Object Variable

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -69,7 +69,7 @@ public abstract class ModelInstrument extends Instrument {
} }
// Get General MIDI 2 Alias patch for this instrument. // Get General MIDI 2 Alias patch for this instrument.
public Patch getPatchAlias() { public final Patch getPatchAlias() {
Patch patch = getPatch(); Patch patch = getPatch();
int program = patch.getProgram(); int program = patch.getProgram();
int bank = patch.getBank(); int bank = patch.getBank();
@ -87,7 +87,7 @@ public abstract class ModelInstrument extends Instrument {
// Return name of all the keys. // Return name of all the keys.
// This information is generated from ModelPerformer.getName() // This information is generated from ModelPerformer.getName()
// returned from getPerformers(). // returned from getPerformers().
public String[] getKeys() { public final String[] getKeys() {
String[] keys = new String[128]; String[] keys = new String[128];
for (ModelPerformer performer : getPerformers()) { for (ModelPerformer performer : getPerformers()) {
for (int k = performer.getKeyFrom(); k <= performer.getKeyTo(); k++) { for (int k = performer.getKeyFrom(); k <= performer.getKeyTo(); k++) {
@ -104,7 +104,7 @@ public abstract class ModelInstrument extends Instrument {
// Return what channels this instrument will probably response // Return what channels this instrument will probably response
// on General MIDI synthesizer. // on General MIDI synthesizer.
public boolean[] getChannels() { public final boolean[] getChannels() {
boolean percussion = false; boolean percussion = false;
if (getPatch() instanceof ModelPatch) if (getPatch() instanceof ModelPatch)
percussion = ((ModelPatch)getPatch()).isPercussion(); percussion = ((ModelPatch)getPatch()).isPercussion();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,7 +34,7 @@ import javax.sound.midi.Patch;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelInstrumentComparator implements Comparator<Instrument> { public final class ModelInstrumentComparator implements Comparator<Instrument> {
public int compare(Instrument arg0, Instrument arg1) { public int compare(Instrument arg0, Instrument arg1) {
Patch p0 = arg0.getPatch(); Patch p0 = arg0.getPatch();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,9 +33,9 @@ import javax.sound.sampled.AudioFormat;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelMappedInstrument extends ModelInstrument { public final class ModelMappedInstrument extends ModelInstrument {
private ModelInstrument ins; private final ModelInstrument ins;
public ModelMappedInstrument(ModelInstrument ins, Patch patch) { public ModelMappedInstrument(ModelInstrument ins, Patch patch) {
super(ins.getSoundbank(), patch, ins.getName(), ins.getDataClass()); super(ins.getSoundbank(), patch, ins.getName(), ins.getDataClass());

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ import javax.sound.midi.Patch;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelPatch extends Patch { public final class ModelPatch extends Patch {
private boolean percussion = false; private boolean percussion = false;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,9 +33,9 @@ import java.util.List;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelPerformer { public final class ModelPerformer {
private List<ModelOscillator> oscillators = new ArrayList<ModelOscillator>(); private final List<ModelOscillator> oscillators = new ArrayList<ModelOscillator>();
private List<ModelConnectionBlock> connectionBlocks private List<ModelConnectionBlock> connectionBlocks
= new ArrayList<ModelConnectionBlock>(); = new ArrayList<ModelConnectionBlock>();
private int keyFrom = 0; private int keyFrom = 0;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelSource { public final class ModelSource {
public static final ModelIdentifier SOURCE_NONE = null; public static final ModelIdentifier SOURCE_NONE = null;
public static final ModelIdentifier SOURCE_NOTEON_KEYNUMBER = public static final ModelIdentifier SOURCE_NOTEON_KEYNUMBER =

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelStandardDirector implements ModelDirector { public final class ModelStandardDirector implements ModelDirector {
ModelPerformer[] performers; ModelPerformer[] performers;
ModelDirectedPlayer player; ModelDirectedPlayer player;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelStandardIndexedDirector implements ModelDirector { public final class ModelStandardIndexedDirector implements ModelDirector {
ModelPerformer[] performers; ModelPerformer[] performers;
ModelDirectedPlayer player; ModelDirectedPlayer player;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,7 +36,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class ModelStandardTransform implements ModelTransform { public final class ModelStandardTransform implements ModelTransform {
public static final boolean DIRECTION_MIN2MAX = false; public static final boolean DIRECTION_MIN2MAX = false;
public static final boolean DIRECTION_MAX2MIN = true; public static final boolean DIRECTION_MAX2MIN = true;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,14 +25,12 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Vector; import java.util.Vector;
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
/** /**
@ -40,7 +38,7 @@ import javax.sound.sampled.AudioInputStream;
* *
* @author Jan Borgersen * @author Jan Borgersen
*/ */
public class PCMtoPCMCodec extends SunCodec { public final class PCMtoPCMCodec extends SunCodec {
private static final AudioFormat.Encoding[] inputEncodings = { private static final AudioFormat.Encoding[] inputEncodings = {
@ -356,7 +354,7 @@ public class PCMtoPCMCodec extends SunCodec {
private final int PCM_UNSIGNED_BE2SIGNED_LE = 7; private final int PCM_UNSIGNED_BE2SIGNED_LE = 7;
private final int PCM_SIGNED_BE2UNSIGNED_LE = 8; private final int PCM_SIGNED_BE2UNSIGNED_LE = 8;
private int sampleSizeInBytes = 0; private final int sampleSizeInBytes;
private int conversionType = 0; private int conversionType = 0;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,6 +25,8 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.StringTokenizer; import java.util.StringTokenizer;
@ -35,7 +37,7 @@ import java.util.StringTokenizer;
* @author Kara Kytle * @author Kara Kytle
* @author Florian Bomers * @author Florian Bomers
*/ */
class Platform { final class Platform {
// STATIC FINAL CHARACTERISTICS // STATIC FINAL CHARACTERISTICS
@ -157,7 +159,13 @@ class Platform {
try { try {
// load the main library // load the main library
JSSecurityManager.loadLibrary(libNameMain); AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
System.loadLibrary(libNameMain);
return null;
}
});
// just for the heck of it... // just for the heck of it...
loadedLibs |= LIB_MAIN; loadedLibs |= LIB_MAIN;
} catch (SecurityException e) { } catch (SecurityException e) {
@ -171,9 +179,16 @@ class Platform {
// the string is the libraries, separated by white space // the string is the libraries, separated by white space
StringTokenizer st = new StringTokenizer(extraLibs); StringTokenizer st = new StringTokenizer(extraLibs);
while (st.hasMoreTokens()) { while (st.hasMoreTokens()) {
String lib = st.nextToken(); final String lib = st.nextToken();
try { try {
JSSecurityManager.loadLibrary(lib); AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
System.loadLibrary(lib);
return null;
}
});
if (lib.equals(libNameALSA)) { if (lib.equals(libNameALSA)) {
loadedLibs |= LIB_ALSA; loadedLibs |= LIB_ALSA;
if (Printer.debug) Printer.debug("Loaded ALSA lib successfully."); if (Printer.debug) Printer.debug("Loaded ALSA lib successfully.");

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -41,7 +41,7 @@ import javax.sound.sampled.FloatControl;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
class PortMixer extends AbstractMixer { final class PortMixer extends AbstractMixer {
// CONSTANTS // CONSTANTS
private static final int SRC_UNKNOWN = 0x01; private static final int SRC_UNKNOWN = 0x01;
@ -228,8 +228,10 @@ class PortMixer extends AbstractMixer {
/** /**
* Private inner class representing a Port for the PortMixer. * Private inner class representing a Port for the PortMixer.
*/ */
private static class PortMixerPort extends AbstractLine implements Port { private static final class PortMixerPort extends AbstractLine
private int portIndex; implements Port {
private final int portIndex;
private long id; private long id;
// CONSTRUCTOR // CONSTRUCTOR
@ -342,9 +344,9 @@ class PortMixer extends AbstractMixer {
/** /**
* Private inner class representing a BooleanControl for PortMixerPort * Private inner class representing a BooleanControl for PortMixerPort
*/ */
private static class BoolCtrl extends BooleanControl { private static final class BoolCtrl extends BooleanControl {
// the handle to the native control function // the handle to the native control function
private long controlID; private final long controlID;
private boolean closed = false; private boolean closed = false;
private static BooleanControl.Type createType(String name) { private static BooleanControl.Type createType(String name) {
@ -386,7 +388,7 @@ class PortMixer extends AbstractMixer {
/** /**
* inner class for custom types * inner class for custom types
*/ */
private static class BCT extends BooleanControl.Type { private static final class BCT extends BooleanControl.Type {
private BCT(String name) { private BCT(String name) {
super(name); super(name);
} }
@ -396,7 +398,7 @@ class PortMixer extends AbstractMixer {
/** /**
* Private inner class representing a CompoundControl for PortMixerPort * Private inner class representing a CompoundControl for PortMixerPort
*/ */
private static class CompCtrl extends CompoundControl { private static final class CompCtrl extends CompoundControl {
private CompCtrl(String name, Control[] controls) { private CompCtrl(String name, Control[] controls) {
super(new CCT(name), controls); super(new CCT(name), controls);
} }
@ -404,7 +406,7 @@ class PortMixer extends AbstractMixer {
/** /**
* inner class for custom compound control types * inner class for custom compound control types
*/ */
private static class CCT extends CompoundControl.Type { private static final class CCT extends CompoundControl.Type {
private CCT(String name) { private CCT(String name) {
super(name); super(name);
} }
@ -414,9 +416,9 @@ class PortMixer extends AbstractMixer {
/** /**
* Private inner class representing a BooleanControl for PortMixerPort * Private inner class representing a BooleanControl for PortMixerPort
*/ */
private static class FloatCtrl extends FloatControl { private static final class FloatCtrl extends FloatControl {
// the handle to the native control function // the handle to the native control function
private long controlID; private final long controlID;
private boolean closed = false; private boolean closed = false;
// predefined float control types. See also Ports.h // predefined float control types. See also Ports.h
@ -462,7 +464,7 @@ class PortMixer extends AbstractMixer {
/** /**
* inner class for custom types * inner class for custom types
*/ */
private static class FCT extends FloatControl.Type { private static final class FCT extends FloatControl.Type {
private FCT(String name) { private FCT(String name) {
super(name); super(name);
} }
@ -472,7 +474,7 @@ class PortMixer extends AbstractMixer {
/** /**
* Private inner class representing a port info * Private inner class representing a port info
*/ */
private static class PortInfo extends Port.Info { private static final class PortInfo extends Port.Info {
private PortInfo(String name, boolean isSource) { private PortInfo(String name, boolean isSource) {
super(Port.class, name, isSource); super(Port.class, name, isSource);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,8 +25,6 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.util.Vector;
import javax.sound.sampled.Mixer; import javax.sound.sampled.Mixer;
import javax.sound.sampled.spi.MixerProvider; import javax.sound.sampled.spi.MixerProvider;
@ -36,7 +34,7 @@ import javax.sound.sampled.spi.MixerProvider;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
public class PortMixerProvider extends MixerProvider { public final class PortMixerProvider extends MixerProvider {
// STATIC VARIABLES // STATIC VARIABLES
@ -66,7 +64,7 @@ public class PortMixerProvider extends MixerProvider {
* Required public no-arg constructor. * Required public no-arg constructor.
*/ */
public PortMixerProvider() { public PortMixerProvider() {
//if (Printer.trace) Printer.trace("PortMixerProvider: constructor"); synchronized (PortMixerProvider.class) {
if (Platform.isPortsEnabled()) { if (Platform.isPortsEnabled()) {
init(); init();
} else { } else {
@ -74,8 +72,9 @@ public class PortMixerProvider extends MixerProvider {
devices = new PortMixer[0]; devices = new PortMixer[0];
} }
} }
}
private static synchronized void init() { private static void init() {
// get the number of input devices // get the number of input devices
int numDevices = nGetNumDevices(); int numDevices = nGetNumDevices();
@ -95,23 +94,28 @@ public class PortMixerProvider extends MixerProvider {
} }
public Mixer.Info[] getMixerInfo() { public Mixer.Info[] getMixerInfo() {
synchronized (PortMixerProvider.class) {
Mixer.Info[] localArray = new Mixer.Info[infos.length]; Mixer.Info[] localArray = new Mixer.Info[infos.length];
System.arraycopy(infos, 0, localArray, 0, infos.length); System.arraycopy(infos, 0, localArray, 0, infos.length);
return localArray; return localArray;
} }
}
public Mixer getMixer(Mixer.Info info) { public Mixer getMixer(Mixer.Info info) {
synchronized (PortMixerProvider.class) {
for (int i = 0; i < infos.length; i++) { for (int i = 0; i < infos.length; i++) {
if (infos[i].equals(info)) { if (infos[i].equals(info)) {
return getDevice(infos[i]); return getDevice(infos[i]);
} }
} }
throw new IllegalArgumentException("Mixer " + info.toString() + " not supported by this provider."); }
throw new IllegalArgumentException("Mixer " + info.toString()
+ " not supported by this provider.");
} }
private Mixer getDevice(PortMixerInfo info) { private static Mixer getDevice(PortMixerInfo info) {
int index = info.getIndex(); int index = info.getIndex();
if (devices[index] == null) { if (devices[index] == null) {
devices[index] = new PortMixer(info); devices[index] = new PortMixer(info);
@ -127,8 +131,8 @@ public class PortMixerProvider extends MixerProvider {
* making native references to a particular device. * making native references to a particular device.
* This constructor is called from native. * This constructor is called from native.
*/ */
static class PortMixerInfo extends Mixer.Info { static final class PortMixerInfo extends Mixer.Info {
private int index; private final int index;
private PortMixerInfo(int index, String name, String vendor, String description, String version) { private PortMixerInfo(int index, String name, String vendor, String description, String version) {
super("Port " + name, vendor, description, version); super("Port " + name, vendor, description, version);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -32,7 +32,7 @@ package com.sun.media.sound;
* @author David Rivas * @author David Rivas
* @author Kara Kytle * @author Kara Kytle
*/ */
class Printer { final class Printer {
static final boolean err = false; static final boolean err = false;
static final boolean debug = false; static final boolean debug = false;
@ -68,6 +68,12 @@ class Printer {
release = on; release = on;
}*/ }*/
/**
* Suppresses default constructor, ensuring non-instantiability.
*/
private Printer() {
}
public static void err(String str) { public static void err(String str) {
if (err) if (err)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class RIFFInvalidDataException extends InvalidDataException { public final class RIFFInvalidDataException extends InvalidDataException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class RIFFInvalidFormatException extends InvalidFormatException { public final class RIFFInvalidFormatException extends InvalidFormatException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,11 +33,11 @@ import java.io.InputStream;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class RIFFReader extends InputStream { public final class RIFFReader extends InputStream {
private RIFFReader root; private final RIFFReader root;
private long filepointer = 0; private long filepointer = 0;
private String fourcc; private final String fourcc;
private String riff_type = null; private String riff_type = null;
private long ckSize = 0; private long ckSize = 0;
private InputStream stream; private InputStream stream;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -35,7 +35,7 @@ import java.io.RandomAccessFile;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class RIFFWriter extends OutputStream { public final class RIFFWriter extends OutputStream {
private interface RandomAccessWriter { private interface RandomAccessWriter {
@ -60,11 +60,11 @@ public class RIFFWriter extends OutputStream {
RandomAccessFile raf; RandomAccessFile raf;
public RandomAccessFileWriter(File file) throws FileNotFoundException { RandomAccessFileWriter(File file) throws FileNotFoundException {
this.raf = new RandomAccessFile(file, "rw"); this.raf = new RandomAccessFile(file, "rw");
} }
public RandomAccessFileWriter(String name) throws FileNotFoundException { RandomAccessFileWriter(String name) throws FileNotFoundException {
this.raf = new RandomAccessFile(name, "rw"); this.raf = new RandomAccessFile(name, "rw");
} }
@ -107,9 +107,9 @@ public class RIFFWriter extends OutputStream {
int length = 0; int length = 0;
int pos = 0; int pos = 0;
byte[] s; byte[] s;
OutputStream stream; final OutputStream stream;
public RandomAccessByteWriter(OutputStream stream) { RandomAccessByteWriter(OutputStream stream) {
this.stream = stream; this.stream = stream;
} }
@ -163,8 +163,8 @@ public class RIFFWriter extends OutputStream {
} }
private int chunktype = 0; // 0=RIFF, 1=LIST; 2=CHUNK private int chunktype = 0; // 0=RIFF, 1=LIST; 2=CHUNK
private RandomAccessWriter raf; private RandomAccessWriter raf;
private long chunksizepointer; private final long chunksizepointer;
private long startpointer; private final long startpointer;
private RIFFWriter childchunk = null; private RIFFWriter childchunk = null;
private boolean open = true; private boolean open = true;
private boolean writeoverride = false; private boolean writeoverride = false;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -25,14 +25,13 @@
package com.sun.media.sound; package com.sun.media.sound;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
import javax.sound.midi.*; import javax.sound.midi.*;
@ -46,7 +45,8 @@ import javax.sound.midi.*;
/* TODO: /* TODO:
* - rename PlayThread to PlayEngine (because isn't a thread) * - rename PlayThread to PlayEngine (because isn't a thread)
*/ */
class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoConnectSequencer { final class RealTimeSequencer extends AbstractMidiDevice
implements Sequencer, AutoConnectSequencer {
// STATIC VARIABLES // STATIC VARIABLES
@ -58,7 +58,8 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
* Event Dispatcher thread. Should be using a shared event * Event Dispatcher thread. Should be using a shared event
* dispatcher instance with a factory in EventDispatcher * dispatcher instance with a factory in EventDispatcher
*/ */
private static final EventDispatcher eventDispatcher; private static final Map<ThreadGroup, EventDispatcher> dispatchers =
new WeakHashMap<>();
/** /**
* All RealTimeSequencers share this info object. * All RealTimeSequencers share this info object.
@ -66,11 +67,11 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
static final RealTimeSequencerInfo info = new RealTimeSequencerInfo(); static final RealTimeSequencerInfo info = new RealTimeSequencerInfo();
private static Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK }; private static final Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK };
private static Sequencer.SyncMode[] slaveSyncModes = { Sequencer.SyncMode.NO_SYNC }; private static final Sequencer.SyncMode[] slaveSyncModes = { Sequencer.SyncMode.NO_SYNC };
private static Sequencer.SyncMode masterSyncMode = Sequencer.SyncMode.INTERNAL_CLOCK; private static final Sequencer.SyncMode masterSyncMode = Sequencer.SyncMode.INTERNAL_CLOCK;
private static Sequencer.SyncMode slaveSyncMode = Sequencer.SyncMode.NO_SYNC; private static final Sequencer.SyncMode slaveSyncMode = Sequencer.SyncMode.NO_SYNC;
/** /**
@ -100,7 +101,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
private boolean[] trackSolo = null; private boolean[] trackSolo = null;
/** tempo cache for getMicrosecondPosition */ /** tempo cache for getMicrosecondPosition */
private MidiUtils.TempoCache tempoCache = new MidiUtils.TempoCache(); private final MidiUtils.TempoCache tempoCache = new MidiUtils.TempoCache();
/** /**
* True if the sequence is running. * True if the sequence is running.
@ -121,7 +122,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
/** /**
* List of tracks to which we're recording * List of tracks to which we're recording
*/ */
private List recordingTracks = new ArrayList(); private final List recordingTracks = new ArrayList();
private long loopStart = 0; private long loopStart = 0;
@ -132,13 +133,13 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
/** /**
* Meta event listeners * Meta event listeners
*/ */
private ArrayList metaEventListeners = new ArrayList(); private final ArrayList metaEventListeners = new ArrayList();
/** /**
* Control change listeners * Control change listeners
*/ */
private ArrayList controllerEventListeners = new ArrayList(); private final ArrayList controllerEventListeners = new ArrayList();
/** automatic connection support */ /** automatic connection support */
@ -151,16 +152,9 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
Receiver autoConnectedReceiver = null; Receiver autoConnectedReceiver = null;
static {
// create and start the global event thread
eventDispatcher = new EventDispatcher();
eventDispatcher.start();
}
/* ****************************** CONSTRUCTOR ****************************** */ /* ****************************** CONSTRUCTOR ****************************** */
protected RealTimeSequencer() throws MidiUnavailableException { RealTimeSequencer() throws MidiUnavailableException {
super(info); super(info);
if (Printer.trace) Printer.trace(">> RealTimeSequencer CONSTRUCTOR"); if (Printer.trace) Printer.trace(">> RealTimeSequencer CONSTRUCTOR");
@ -574,7 +568,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
return returnedModes; return returnedModes;
} }
protected int getTrackCount() { int getTrackCount() {
Sequence seq = getSequence(); Sequence seq = getSequence();
if (seq != null) { if (seq != null) {
// $$fb wish there was a nicer way to get the number of tracks... // $$fb wish there was a nicer way to get the number of tracks...
@ -872,7 +866,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
if (Printer.trace) Printer.trace("<< RealTimeSequencer: implClose() completed"); if (Printer.trace) Printer.trace("<< RealTimeSequencer: implClose() completed");
} }
protected void implStart() { void implStart() {
if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStart()"); if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStart()");
if (playThread == null) { if (playThread == null) {
@ -889,7 +883,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
} }
protected void implStop() { void implStop() {
if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStop()"); if (Printer.trace) Printer.trace(">> RealTimeSequencer: implStop()");
if (playThread == null) { if (playThread == null) {
@ -905,22 +899,36 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
if (Printer.trace) Printer.trace("<< RealTimeSequencer: implStop() completed"); if (Printer.trace) Printer.trace("<< RealTimeSequencer: implStop() completed");
} }
private static EventDispatcher getEventDispatcher() {
// create and start the global event thread
//TODO need a way to stop this thread when the engine is done
final ThreadGroup tg = Thread.currentThread().getThreadGroup();
synchronized (dispatchers) {
EventDispatcher eventDispatcher = dispatchers.get(tg);
if (eventDispatcher == null) {
eventDispatcher = new EventDispatcher();
dispatchers.put(tg, eventDispatcher);
eventDispatcher.start();
}
return eventDispatcher;
}
}
/** /**
* Send midi player events. * Send midi player events.
* must not be synchronized on "this" * must not be synchronized on "this"
*/ */
protected void sendMetaEvents(MidiMessage message) { void sendMetaEvents(MidiMessage message) {
if (metaEventListeners.size() == 0) return; if (metaEventListeners.size() == 0) return;
//if (Printer.debug) Printer.debug("sending a meta event"); //if (Printer.debug) Printer.debug("sending a meta event");
eventDispatcher.sendAudioEvents(message, metaEventListeners); getEventDispatcher().sendAudioEvents(message, metaEventListeners);
} }
/** /**
* Send midi player events. * Send midi player events.
*/ */
protected void sendControllerEvents(MidiMessage message) { void sendControllerEvents(MidiMessage message) {
int size = controllerEventListeners.size(); int size = controllerEventListeners.size();
if (size == 0) return; if (size == 0) return;
@ -942,7 +950,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
} }
} }
} }
eventDispatcher.sendAudioEvents(message, sendToListeners); getEventDispatcher().sendAudioEvents(message, sendToListeners);
} }
@ -1024,7 +1032,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
} }
class SequencerReceiver extends AbstractReceiver { final class SequencerReceiver extends AbstractReceiver {
void implSend(MidiMessage message, long timeStamp) { void implSend(MidiMessage message, long timeStamp) {
if (recording) { if (recording) {
@ -1092,7 +1100,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
// easier to deal with than turning all the // easier to deal with than turning all the
// ints into objects to use a Vector // ints into objects to use a Vector
int [] controllers; int [] controllers;
ControllerEventListener listener; final ControllerEventListener listener;
private ControllerListElement(ControllerEventListener listener, int[] controllers) { private ControllerListElement(ControllerEventListener listener, int[] controllers) {
@ -1197,7 +1205,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
static class RecordingTrack { static class RecordingTrack {
private Track track; private final Track track;
private int channel; private int channel;
RecordingTrack(Track track, int channel) { RecordingTrack(Track track, int channel) {
@ -1237,15 +1245,15 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
} }
class PlayThread implements Runnable { final class PlayThread implements Runnable {
private Thread thread; private Thread thread;
private Object lock = new Object(); private final Object lock = new Object();
/** true if playback is interrupted (in close) */ /** true if playback is interrupted (in close) */
boolean interrupted = false; boolean interrupted = false;
boolean isPumping = false; boolean isPumping = false;
private DataPump dataPump = new DataPump(); private final DataPump dataPump = new DataPump();
PlayThread() { PlayThread() {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,7 +34,7 @@ import javax.sound.midi.spi.MidiDeviceProvider;
* *
* @author Florian Bomers * @author Florian Bomers
*/ */
public class RealTimeSequencerProvider extends MidiDeviceProvider { public final class RealTimeSequencerProvider extends MidiDeviceProvider {
public MidiDevice.Info[] getDeviceInfo() { public MidiDevice.Info[] getDeviceInfo() {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,5 +29,5 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2GlobalRegion extends SF2Region { public final class SF2GlobalRegion extends SF2Region {
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,16 +36,16 @@ import javax.sound.midi.Patch;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2Instrument extends ModelInstrument { public final class SF2Instrument extends ModelInstrument {
protected String name = ""; String name = "";
protected int preset = 0; int preset = 0;
protected int bank = 0; int bank = 0;
protected long library = 0; long library = 0;
protected long genre = 0; long genre = 0;
protected long morphology = 0; long morphology = 0;
protected SF2GlobalRegion globalregion = null; SF2GlobalRegion globalregion = null;
protected List<SF2InstrumentRegion> regions List<SF2InstrumentRegion> regions
= new ArrayList<SF2InstrumentRegion>(); = new ArrayList<SF2InstrumentRegion>();
public SF2Instrument() { public SF2Instrument() {
@ -730,7 +730,7 @@ public class SF2Instrument extends ModelInstrument {
return msrc; return msrc;
} }
protected static ModelDestination convertDestination(int dst, static ModelDestination convertDestination(int dst,
double[] amountcorrection, ModelSource[] extrasrc) { double[] amountcorrection, ModelSource[] extrasrc) {
ModelIdentifier id = null; ModelIdentifier id = null;
switch (dst) { switch (dst) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,9 +29,9 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2InstrumentRegion extends SF2Region { public final class SF2InstrumentRegion extends SF2Region {
protected SF2Layer layer; SF2Layer layer;
public SF2Layer getLayer() { public SF2Layer getLayer() {
return layer; return layer;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,11 +34,11 @@ import javax.sound.midi.SoundbankResource;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2Layer extends SoundbankResource { public final class SF2Layer extends SoundbankResource {
protected String name = ""; String name = "";
protected SF2GlobalRegion globalregion = null; SF2GlobalRegion globalregion = null;
protected List<SF2LayerRegion> regions = new ArrayList<SF2LayerRegion>(); List<SF2LayerRegion> regions = new ArrayList<SF2LayerRegion>();
public SF2Layer(SF2Soundbank soundBank) { public SF2Layer(SF2Soundbank soundBank) {
super(soundBank, null, null); super(soundBank, null, null);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,9 +29,9 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2LayerRegion extends SF2Region { public final class SF2LayerRegion extends SF2Region {
protected SF2Sample sample; SF2Sample sample;
public SF2Sample getSample() { public SF2Sample getSample() {
return sample; return sample;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2Modulator { public final class SF2Modulator {
public final static int SOURCE_NONE = 0; public final static int SOURCE_NONE = 0;
public final static int SOURCE_NOTE_ON_VELOCITY = 2; public final static int SOURCE_NOTE_ON_VELOCITY = 2;
@ -49,11 +49,11 @@ public class SF2Modulator {
public final static int SOURCE_TYPE_SWITCH = 1024 * 3; public final static int SOURCE_TYPE_SWITCH = 1024 * 3;
public final static int TRANSFORM_LINEAR = 0; public final static int TRANSFORM_LINEAR = 0;
public final static int TRANSFORM_ABSOLUTE = 2; public final static int TRANSFORM_ABSOLUTE = 2;
protected int sourceOperator; int sourceOperator;
protected int destinationOperator; int destinationOperator;
protected short amount; short amount;
protected int amountSourceOperator; int amountSourceOperator;
protected int transportOperator; int transportOperator;
public short getAmount() { public short getAmount() {
return amount; return amount;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,18 +36,18 @@ import javax.sound.sampled.AudioInputStream;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2Sample extends SoundbankResource { public final class SF2Sample extends SoundbankResource {
protected String name = ""; String name = "";
protected long startLoop = 0; long startLoop = 0;
protected long endLoop = 0; long endLoop = 0;
protected long sampleRate = 44100; long sampleRate = 44100;
protected int originalPitch = 60; int originalPitch = 60;
protected byte pitchCorrection = 0; byte pitchCorrection = 0;
protected int sampleLink = 0; int sampleLink = 0;
protected int sampleType = 0; int sampleType = 0;
protected ModelByteBuffer data; ModelByteBuffer data;
protected ModelByteBuffer data24; ModelByteBuffer data24;
public SF2Sample(Soundbank soundBank) { public SF2Sample(Soundbank soundBank) {
super(soundBank, null, AudioInputStream.class); super(soundBank, null, AudioInputStream.class);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,40 +50,40 @@ import javax.sound.midi.SoundbankResource;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2Soundbank implements Soundbank { public final class SF2Soundbank implements Soundbank {
// version of the Sound Font RIFF file // version of the Sound Font RIFF file
protected int major = 2; int major = 2;
protected int minor = 1; int minor = 1;
// target Sound Engine // target Sound Engine
protected String targetEngine = "EMU8000"; String targetEngine = "EMU8000";
// Sound Font Bank Name // Sound Font Bank Name
protected String name = "untitled"; String name = "untitled";
// Sound ROM Name // Sound ROM Name
protected String romName = null; String romName = null;
// Sound ROM Version // Sound ROM Version
protected int romVersionMajor = -1; int romVersionMajor = -1;
protected int romVersionMinor = -1; int romVersionMinor = -1;
// Date of Creation of the Bank // Date of Creation of the Bank
protected String creationDate = null; String creationDate = null;
// Sound Designers and Engineers for the Bank // Sound Designers and Engineers for the Bank
protected String engineers = null; String engineers = null;
// Product for which the Bank was intended // Product for which the Bank was intended
protected String product = null; String product = null;
// Copyright message // Copyright message
protected String copyright = null; String copyright = null;
// Comments // Comments
protected String comments = null; String comments = null;
// The SoundFont tools used to create and alter the bank // The SoundFont tools used to create and alter the bank
protected String tools = null; String tools = null;
// The Sample Data loaded from the SoundFont // The Sample Data loaded from the SoundFont
private ModelByteBuffer sampleData = null; private ModelByteBuffer sampleData = null;
private ModelByteBuffer sampleData24 = null; private ModelByteBuffer sampleData24 = null;
private File sampleFile = null; private File sampleFile = null;
private boolean largeFormat = false; private boolean largeFormat = false;
private List<SF2Instrument> instruments = new ArrayList<SF2Instrument>(); private final List<SF2Instrument> instruments = new ArrayList<SF2Instrument>();
private List<SF2Layer> layers = new ArrayList<SF2Layer>(); private final List<SF2Layer> layers = new ArrayList<SF2Layer>();
private List<SF2Sample> samples = new ArrayList<SF2Sample>(); private final List<SF2Sample> samples = new ArrayList<SF2Sample>();
public SF2Soundbank() { public SF2Soundbank() {
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -38,7 +38,7 @@ import javax.sound.midi.spi.SoundbankReader;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SF2SoundbankReader extends SoundbankReader { public final class SF2SoundbankReader extends SoundbankReader {
public Soundbank getSoundbank(URL url) public Soundbank getSoundbank(URL url)
throws InvalidMidiDataException, IOException { throws InvalidMidiDataException, IOException {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -67,7 +67,7 @@ public abstract class SoftAbstractResampler implements SoftResampler {
float samplerateconv = 1; float samplerateconv = 1;
float pitchcorrection = 0; float pitchcorrection = 0;
public ModelAbstractResamplerStream() { ModelAbstractResamplerStream() {
pad = getPadding(); pad = getPadding();
pad2 = getPadding() * 2; pad2 = getPadding() * 2;
ibuffer = new float[2][sector_size + pad2]; ibuffer = new float[2][sector_size + pad2];
@ -384,7 +384,7 @@ public abstract class SoftAbstractResampler implements SoftResampler {
float in_end, float[] pitch, float pitchstep, float[] out, float in_end, float[] pitch, float pitchstep, float[] out,
int[] out_offset, int out_end); int[] out_offset, int out_end);
public SoftResamplerStreamer openStreamer() { public final SoftResamplerStreamer openStreamer() {
return new ModelAbstractResamplerStream(); return new ModelAbstractResamplerStream();
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ import javax.sound.sampled.AudioFormat;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftAudioBuffer { public final class SoftAudioBuffer {
private int size; private int size;
private float[] buffer; private float[] buffer;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -34,13 +34,13 @@ import javax.sound.sampled.SourceDataLine;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftAudioPusher implements Runnable { public final class SoftAudioPusher implements Runnable {
private volatile boolean active = false; private volatile boolean active = false;
private SourceDataLine sourceDataLine = null; private SourceDataLine sourceDataLine = null;
private Thread audiothread; private Thread audiothread;
private AudioInputStream ais; private final AudioInputStream ais;
private byte[] buffer; private final byte[] buffer;
public SoftAudioPusher(SourceDataLine sourceDataLine, AudioInputStream ais, public SoftAudioPusher(SourceDataLine sourceDataLine, AudioInputStream ais,
int workbuffersizer) { int workbuffersizer) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,7 +39,7 @@ import javax.sound.midi.Patch;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftChannel implements MidiChannel, ModelDirectedPlayer { public final class SoftChannel implements MidiChannel, ModelDirectedPlayer {
private static boolean[] dontResetControls = new boolean[128]; private static boolean[] dontResetControls = new boolean[128];
static { static {
@ -90,15 +90,15 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer {
private static final int RPN_NULL_VALUE = (127 << 7) + 127; private static final int RPN_NULL_VALUE = (127 << 7) + 127;
private int rpn_control = RPN_NULL_VALUE; private int rpn_control = RPN_NULL_VALUE;
private int nrpn_control = RPN_NULL_VALUE; private int nrpn_control = RPN_NULL_VALUE;
protected double portamento_time = 1; // keyschanges per control buffer time double portamento_time = 1; // keyschanges per control buffer time
protected int[] portamento_lastnote = new int[128]; int[] portamento_lastnote = new int[128];
protected int portamento_lastnote_ix = 0; int portamento_lastnote_ix = 0;
private boolean portamento = false; private boolean portamento = false;
private boolean mono = false; private boolean mono = false;
private boolean mute = false; private boolean mute = false;
private boolean solo = false; private boolean solo = false;
private boolean solomute = false; private boolean solomute = false;
private Object control_mutex; private final Object control_mutex;
private int channel; private int channel;
private SoftVoice[] voices; private SoftVoice[] voices;
private int bank; private int bank;
@ -111,21 +111,21 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer {
private int pitchbend; private int pitchbend;
private double[] co_midi_pitch = new double[1]; private double[] co_midi_pitch = new double[1];
private double[] co_midi_channel_pressure = new double[1]; private double[] co_midi_channel_pressure = new double[1];
protected SoftTuning tuning = new SoftTuning(); SoftTuning tuning = new SoftTuning();
protected int tuning_bank = 0; int tuning_bank = 0;
protected int tuning_program = 0; int tuning_program = 0;
protected SoftInstrument current_instrument = null; SoftInstrument current_instrument = null;
protected ModelChannelMixer current_mixer = null; ModelChannelMixer current_mixer = null;
protected ModelDirector current_director = null; ModelDirector current_director = null;
// Controller Destination Settings // Controller Destination Settings
protected int cds_control_number = -1; int cds_control_number = -1;
protected ModelConnectionBlock[] cds_control_connections = null; ModelConnectionBlock[] cds_control_connections = null;
protected ModelConnectionBlock[] cds_channelpressure_connections = null; ModelConnectionBlock[] cds_channelpressure_connections = null;
protected ModelConnectionBlock[] cds_polypressure_connections = null; ModelConnectionBlock[] cds_polypressure_connections = null;
protected boolean sustain = false; boolean sustain = false;
protected boolean[][] keybasedcontroller_active = null; boolean[][] keybasedcontroller_active = null;
protected double[][] keybasedcontroller_value = null; double[][] keybasedcontroller_value = null;
private class MidiControlObject implements SoftControl { private class MidiControlObject implements SoftControl {
double[] pitch = co_midi_pitch; double[] pitch = co_midi_pitch;
@ -336,7 +336,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer {
} }
protected void initVoice(SoftVoice voice, SoftPerformer p, int voiceID, void initVoice(SoftVoice voice, SoftPerformer p, int voiceID,
int noteNumber, int velocity, int delay, ModelConnectionBlock[] connectionBlocks, int noteNumber, int velocity, int delay, ModelConnectionBlock[] connectionBlocks,
ModelChannelMixer channelmixer, boolean releaseTriggered) { ModelChannelMixer channelmixer, boolean releaseTriggered) {
if (voice.active) { if (voice.active) {
@ -414,7 +414,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer {
/* A special noteOn with delay parameter, which is used to /* A special noteOn with delay parameter, which is used to
* start note within control buffers. * start note within control buffers.
*/ */
protected void noteOn(int noteNumber, int velocity, int delay) { void noteOn(int noteNumber, int velocity, int delay) {
noteNumber = restrict7Bit(noteNumber); noteNumber = restrict7Bit(noteNumber);
velocity = restrict7Bit(velocity); velocity = restrict7Bit(velocity);
noteOn_internal(noteNumber, velocity, delay); noteOn_internal(noteNumber, velocity, delay);
@ -707,7 +707,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer {
} }
} }
protected void applyInstrumentCustomization() { void applyInstrumentCustomization() {
if (cds_control_connections == null if (cds_control_connections == null
&& cds_channelpressure_connections == null && cds_channelpressure_connections == null
&& cds_polypressure_connections == null) { && cds_polypressure_connections == null) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -32,7 +32,7 @@ import javax.sound.midi.MidiChannel;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftChannelProxy implements MidiChannel { public final class SoftChannelProxy implements MidiChannel {
private MidiChannel channel = null; private MidiChannel channel = null;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -32,11 +32,11 @@ import java.util.Arrays;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftChorus implements SoftAudioProcessor { public final class SoftChorus implements SoftAudioProcessor {
private static class VariableDelay { private static class VariableDelay {
private float[] delaybuffer; private final float[] delaybuffer;
private int rovepos = 0; private int rovepos = 0;
private float gain = 1; private float gain = 1;
private float rgain = 0; private float rgain = 0;
@ -44,7 +44,7 @@ public class SoftChorus implements SoftAudioProcessor {
private float lastdelay = 0; private float lastdelay = 0;
private float feedback = 0; private float feedback = 0;
public VariableDelay(int maxbuffersize) { VariableDelay(int maxbuffersize) {
delaybuffer = new float[maxbuffersize]; delaybuffer = new float[maxbuffersize];
} }
@ -119,10 +119,10 @@ public class SoftChorus implements SoftAudioProcessor {
private double phase_step = 0; private double phase_step = 0;
private double depth = 0; private double depth = 0;
private VariableDelay vdelay; private VariableDelay vdelay;
private double samplerate; private final double samplerate;
private double controlrate; private final double controlrate;
public LFODelay(double samplerate, double controlrate) { LFODelay(double samplerate, double controlrate) {
this.samplerate = samplerate; this.samplerate = samplerate;
this.controlrate = controlrate; this.controlrate = controlrate;
// vdelay = new VariableDelay((int)(samplerate*4)); // vdelay = new VariableDelay((int)(samplerate*4));

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftCubicResampler extends SoftAbstractResampler { public final class SoftCubicResampler extends SoftAbstractResampler {
public int getPadding() { public int getPadding() {
return 3; return 3;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftEnvelopeGenerator implements SoftProcess { public final class SoftEnvelopeGenerator implements SoftProcess {
public final static int EG_OFF = 0; public final static int EG_OFF = 0;
public final static int EG_DELAY = 1; public final static int EG_DELAY = 1;
@ -42,23 +42,23 @@ public class SoftEnvelopeGenerator implements SoftProcess {
public final static int EG_END = 8; public final static int EG_END = 8;
int max_count = 10; int max_count = 10;
int used_count = 0; int used_count = 0;
private int[] stage = new int[max_count]; private final int[] stage = new int[max_count];
private int[] stage_ix = new int[max_count]; private final int[] stage_ix = new int[max_count];
private double[] stage_v = new double[max_count]; private final double[] stage_v = new double[max_count];
private int[] stage_count = new int[max_count]; private final int[] stage_count = new int[max_count];
private double[][] on = new double[max_count][1]; private final double[][] on = new double[max_count][1];
private double[][] active = new double[max_count][1]; private final double[][] active = new double[max_count][1];
private double[][] out = new double[max_count][1]; private final double[][] out = new double[max_count][1];
private double[][] delay = new double[max_count][1]; private final double[][] delay = new double[max_count][1];
private double[][] attack = new double[max_count][1]; private final double[][] attack = new double[max_count][1];
private double[][] hold = new double[max_count][1]; private final double[][] hold = new double[max_count][1];
private double[][] decay = new double[max_count][1]; private final double[][] decay = new double[max_count][1];
private double[][] sustain = new double[max_count][1]; private final double[][] sustain = new double[max_count][1];
private double[][] release = new double[max_count][1]; private final double[][] release = new double[max_count][1];
private double[][] shutdown = new double[max_count][1]; private final double[][] shutdown = new double[max_count][1];
private double[][] release2 = new double[max_count][1]; private final double[][] release2 = new double[max_count][1];
private double[][] attack2 = new double[max_count][1]; private final double[][] attack2 = new double[max_count][1];
private double[][] decay2 = new double[max_count][1]; private final double[][] decay2 = new double[max_count][1];
private double control_time = 0; private double control_time = 0;
public void reset() { public void reset() {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftFilter { public final class SoftFilter {
public final static int FILTERTYPE_LP6 = 0x00; public final static int FILTERTYPE_LP6 = 0x00;
public final static int FILTERTYPE_LP12 = 0x01; public final static int FILTERTYPE_LP12 = 0x01;
@ -55,7 +55,7 @@ public class SoftFilter {
// 0x30 = NP, Notch or Band Elimination Filter // 0x30 = NP, Notch or Band Elimination Filter
// //
private int filtertype = FILTERTYPE_LP6; private int filtertype = FILTERTYPE_LP6;
private float samplerate; private final float samplerate;
private float x1; private float x1;
private float x2; private float x2;
private float y1; private float y1;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -32,12 +32,12 @@ import javax.sound.midi.MidiChannel;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftInstrument extends Instrument { public final class SoftInstrument extends Instrument {
private SoftPerformer[] performers; private SoftPerformer[] performers;
private ModelPerformer[] modelperformers; private ModelPerformer[] modelperformers;
private Object data; private final Object data;
private ModelInstrument ins; private final ModelInstrument ins;
public SoftInstrument(ModelInstrument ins) { public SoftInstrument(ModelInstrument ins) {
super(ins.getSoundbank(), ins.getPatch(), ins.getName(), super(ins.getSoundbank(), ins.getPatch(), ins.getName(),

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -36,7 +36,7 @@ import javax.sound.sampled.AudioInputStream;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftJitterCorrector extends AudioInputStream { public final class SoftJitterCorrector extends AudioInputStream {
private static class JitterStream extends InputStream { private static class JitterStream extends InputStream {
@ -48,7 +48,7 @@ public class SoftJitterCorrector extends AudioInputStream {
int writepos = 0; int writepos = 0;
int readpos = 0; int readpos = 0;
byte[][] buffers; byte[][] buffers;
Object buffers_mutex = new Object(); private final Object buffers_mutex = new Object();
// Adapative Drift Statistics // Adapative Drift Statistics
int w_count = 1000; int w_count = 1000;
@ -112,7 +112,7 @@ public class SoftJitterCorrector extends AudioInputStream {
} }
} }
public JitterStream(AudioInputStream s, int buffersize, JitterStream(AudioInputStream s, int buffersize,
int smallbuffersize) { int smallbuffersize) {
this.w_count = 10 * (buffersize / smallbuffersize); this.w_count = 10 * (buffersize / smallbuffersize);
if (w_count < 100) if (w_count < 100)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftLanczosResampler extends SoftAbstractResampler { public final class SoftLanczosResampler extends SoftAbstractResampler {
float[][] sinc_table; float[][] sinc_table;
int sinc_table_fsize = 2000; int sinc_table_fsize = 2000;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,7 +30,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftLimiter implements SoftAudioProcessor { public final class SoftLimiter implements SoftAudioProcessor {
float lastmax = 0; float lastmax = 0;
float gain = 1; float gain = 1;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftLinearResampler extends SoftAbstractResampler { public final class SoftLinearResampler extends SoftAbstractResampler {
public int getPadding() { public int getPadding() {
return 2; return 2;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -31,7 +31,7 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftLinearResampler2 extends SoftAbstractResampler { public final class SoftLinearResampler2 extends SoftAbstractResampler {
public int getPadding() { public int getPadding() {
return 2; return 2;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,21 +29,21 @@ package com.sun.media.sound;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftLowFrequencyOscillator implements SoftProcess { public final class SoftLowFrequencyOscillator implements SoftProcess {
private int max_count = 10; private final int max_count = 10;
private int used_count = 0; private int used_count = 0;
private double[][] out = new double[max_count][1]; private final double[][] out = new double[max_count][1];
private double[][] delay = new double[max_count][1]; private final double[][] delay = new double[max_count][1];
private double[][] delay2 = new double[max_count][1]; private final double[][] delay2 = new double[max_count][1];
private double[][] freq = new double[max_count][1]; private final double[][] freq = new double[max_count][1];
private int[] delay_counter = new int[max_count]; private final int[] delay_counter = new int[max_count];
private double[] sin_phase = new double[max_count]; private final double[] sin_phase = new double[max_count];
private double[] sin_stepfreq = new double[max_count]; private final double[] sin_stepfreq = new double[max_count];
private double[] sin_step = new double[max_count]; private final double[] sin_step = new double[max_count];
private double control_time = 0; private double control_time = 0;
private double sin_factor = 0; private double sin_factor = 0;
private static double PI2 = 2.0 * Math.PI; private static final double PI2 = 2.0 * Math.PI;
public SoftLowFrequencyOscillator() { public SoftLowFrequencyOscillator() {
// If sin_step is 0 then sin_stepfreq must be -INF // If sin_step is 0 then sin_stepfreq must be -INF

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -43,7 +43,7 @@ import javax.sound.sampled.AudioSystem;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftMainMixer { public final class SoftMainMixer {
// A private class thats contains a ModelChannelMixer and it's private buffers. // A private class thats contains a ModelChannelMixer and it's private buffers.
// This becomes necessary when we want to have separate delay buffers for each channel mixer. // This becomes necessary when we want to have separate delay buffers for each channel mixer.
@ -67,13 +67,13 @@ public class SoftMainMixer {
public final static int CHANNEL_RIGHT_DRY = 11; public final static int CHANNEL_RIGHT_DRY = 11;
public final static int CHANNEL_SCRATCH1 = 12; public final static int CHANNEL_SCRATCH1 = 12;
public final static int CHANNEL_SCRATCH2 = 13; public final static int CHANNEL_SCRATCH2 = 13;
protected boolean active_sensing_on = false; boolean active_sensing_on = false;
private long msec_last_activity = -1; private long msec_last_activity = -1;
private boolean pusher_silent = false; private boolean pusher_silent = false;
private int pusher_silent_count = 0; private int pusher_silent_count = 0;
private long sample_pos = 0; private long sample_pos = 0;
protected boolean readfully = true; boolean readfully = true;
private Object control_mutex; private final Object control_mutex;
private SoftSynthesizer synth; private SoftSynthesizer synth;
private float samplerate = 44100; private float samplerate = 44100;
private int nrofchannels = 2; private int nrofchannels = 2;
@ -84,7 +84,7 @@ public class SoftMainMixer {
private SoftAudioProcessor agc; private SoftAudioProcessor agc;
private long msec_buffer_len = 0; private long msec_buffer_len = 0;
private int buffer_len = 0; private int buffer_len = 0;
protected TreeMap<Long, Object> midimessages = new TreeMap<Long, Object>(); TreeMap<Long, Object> midimessages = new TreeMap<Long, Object>();
private int delay_midievent = 0; private int delay_midievent = 0;
private int max_delay_midievent = 0; private int max_delay_midievent = 0;
double last_volume_left = 1.0; double last_volume_left = 1.0;
@ -97,7 +97,7 @@ public class SoftMainMixer {
private Set<SoftChannelMixerContainer> registeredMixers = null; private Set<SoftChannelMixerContainer> registeredMixers = null;
private Set<ModelChannelMixer> stoppedMixers = null; private Set<ModelChannelMixer> stoppedMixers = null;
private SoftChannelMixerContainer[] cur_registeredMixers = null; private SoftChannelMixerContainer[] cur_registeredMixers = null;
protected SoftControl co_master = new SoftControl() { SoftControl co_master = new SoftControl() {
double[] balance = co_master_balance; double[] balance = co_master_balance;
double[] volume = co_master_volume; double[] volume = co_master_volume;
@ -438,7 +438,7 @@ public class SoftMainMixer {
delay_midievent = 0; delay_midievent = 0;
} }
protected void processAudioBuffers() { void processAudioBuffers() {
if(synth.weakstream != null && synth.weakstream.silent_samples != 0) if(synth.weakstream != null && synth.weakstream.silent_samples != 0)
{ {
@ -859,16 +859,16 @@ public class SoftMainMixer {
InputStream in = new InputStream() { InputStream in = new InputStream() {
private SoftAudioBuffer[] buffers = SoftMainMixer.this.buffers; private final SoftAudioBuffer[] buffers = SoftMainMixer.this.buffers;
private int nrofchannels private final int nrofchannels
= SoftMainMixer.this.synth.getFormat().getChannels(); = SoftMainMixer.this.synth.getFormat().getChannels();
private int buffersize = buffers[0].getSize(); private final int buffersize = buffers[0].getSize();
private byte[] bbuffer = new byte[buffersize private final byte[] bbuffer = new byte[buffersize
* (SoftMainMixer.this.synth.getFormat() * (SoftMainMixer.this.synth.getFormat()
.getSampleSizeInBits() / 8) .getSampleSizeInBits() / 8)
* nrofchannels]; * nrofchannels];
private int bbuffer_pos = 0; private int bbuffer_pos = 0;
private byte[] single = new byte[1]; private final byte[] single = new byte[1];
public void fillBuffer() { public void fillBuffer() {
/* /*

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,7 +50,7 @@ import javax.sound.sampled.spi.AudioFileReader;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftMidiAudioFileReader extends AudioFileReader { public final class SoftMidiAudioFileReader extends AudioFileReader {
public static final Type MIDI = new Type("MIDI", "mid"); public static final Type MIDI = new Type("MIDI", "mid");
private static AudioFormat format = new AudioFormat(44100, 16, 2, true, false); private static AudioFormat format = new AudioFormat(44100, 16, 2, true, false);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,7 +42,7 @@ import javax.sound.sampled.LineUnavailableException;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftMixingClip extends SoftMixingDataLine implements Clip { public final class SoftMixingClip extends SoftMixingDataLine implements Clip {
private AudioFormat format; private AudioFormat format;
@ -50,7 +50,7 @@ public class SoftMixingClip extends SoftMixingDataLine implements Clip {
private byte[] data; private byte[] data;
private InputStream datastream = new InputStream() { private final InputStream datastream = new InputStream() {
public int read() throws IOException { public int read() throws IOException {
byte[] b = new byte[1]; byte[] b = new byte[1];
@ -162,7 +162,7 @@ public class SoftMixingClip extends SoftMixingDataLine implements Clip {
private AudioFloatInputStream afis; private AudioFloatInputStream afis;
protected SoftMixingClip(SoftMixingMixer mixer, DataLine.Info info) { SoftMixingClip(SoftMixingMixer mixer, DataLine.Info info) {
super(mixer, info); super(mixer, info);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,22 +50,22 @@ public abstract class SoftMixingDataLine implements DataLine {
"Chorus Send") { "Chorus Send") {
}; };
protected static class AudioFloatInputStreamResampler extends protected static final class AudioFloatInputStreamResampler extends
AudioFloatInputStream { AudioFloatInputStream {
private AudioFloatInputStream ais; private final AudioFloatInputStream ais;
private AudioFormat targetFormat; private final AudioFormat targetFormat;
private float[] skipbuffer; private float[] skipbuffer;
private SoftAbstractResampler resampler; private SoftAbstractResampler resampler;
private float[] pitch = new float[1]; private final float[] pitch = new float[1];
private float[] ibuffer2; private final float[] ibuffer2;
private float[][] ibuffer; private final float[][] ibuffer;
private float ibuffer_index = 0; private float ibuffer_index = 0;
@ -75,15 +75,15 @@ public abstract class SoftMixingDataLine implements DataLine {
private float[][] cbuffer; private float[][] cbuffer;
private int buffer_len = 512; private final int buffer_len = 512;
private int pad; private final int pad;
private int pad2; private final int pad2;
private float[] ix = new float[1]; private final float[] ix = new float[1];
private int[] ox = new int[1]; private final int[] ox = new int[1];
private float[][] mark_ibuffer = null; private float[][] mark_ibuffer = null;
@ -294,7 +294,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private class Gain extends FloatControl { private final class Gain extends FloatControl {
private Gain() { private Gain() {
@ -308,7 +308,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
} }
private class Mute extends BooleanControl { private final class Mute extends BooleanControl {
private Mute() { private Mute() {
super(BooleanControl.Type.MUTE, false, "True", "False"); super(BooleanControl.Type.MUTE, false, "True", "False");
@ -320,7 +320,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
} }
private class ApplyReverb extends BooleanControl { private final class ApplyReverb extends BooleanControl {
private ApplyReverb() { private ApplyReverb() {
super(BooleanControl.Type.APPLY_REVERB, false, "True", "False"); super(BooleanControl.Type.APPLY_REVERB, false, "True", "False");
@ -333,7 +333,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private class Balance extends FloatControl { private final class Balance extends FloatControl {
private Balance() { private Balance() {
super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1, super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1,
@ -347,7 +347,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private class Pan extends FloatControl { private final class Pan extends FloatControl {
private Pan() { private Pan() {
super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1, super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1,
@ -365,7 +365,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private class ReverbSend extends FloatControl { private final class ReverbSend extends FloatControl {
private ReverbSend() { private ReverbSend() {
super(FloatControl.Type.REVERB_SEND, -80f, 6.0206f, 80f / 128.0f, super(FloatControl.Type.REVERB_SEND, -80f, 6.0206f, 80f / 128.0f,
@ -379,7 +379,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private class ChorusSend extends FloatControl { private final class ChorusSend extends FloatControl {
private ChorusSend() { private ChorusSend() {
super(CHORUS_SEND, -80f, 6.0206f, 80f / 128.0f, -1, -80f, "dB", super(CHORUS_SEND, -80f, 6.0206f, 80f / 128.0f, -1, -80f, "dB",
@ -393,43 +393,43 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
private Gain gain_control = new Gain(); private final Gain gain_control = new Gain();
private Mute mute_control = new Mute(); private final Mute mute_control = new Mute();
private Balance balance_control = new Balance(); private final Balance balance_control = new Balance();
private Pan pan_control = new Pan(); private final Pan pan_control = new Pan();
private ReverbSend reverbsend_control = new ReverbSend(); private final ReverbSend reverbsend_control = new ReverbSend();
private ChorusSend chorussend_control = new ChorusSend(); private final ChorusSend chorussend_control = new ChorusSend();
private ApplyReverb apply_reverb = new ApplyReverb(); private final ApplyReverb apply_reverb = new ApplyReverb();
private Control[] controls; private final Control[] controls;
protected float leftgain = 1; float leftgain = 1;
protected float rightgain = 1; float rightgain = 1;
protected float eff1gain = 0; float eff1gain = 0;
protected float eff2gain = 0; float eff2gain = 0;
protected List<LineListener> listeners = new ArrayList<LineListener>(); List<LineListener> listeners = new ArrayList<LineListener>();
protected Object control_mutex; final Object control_mutex;
protected SoftMixingMixer mixer; SoftMixingMixer mixer;
protected DataLine.Info info; DataLine.Info info;
protected abstract void processControlLogic(); protected abstract void processControlLogic();
protected abstract void processAudioLogic(SoftAudioBuffer[] buffers); protected abstract void processAudioLogic(SoftAudioBuffer[] buffers);
protected SoftMixingDataLine(SoftMixingMixer mixer, DataLine.Info info) { SoftMixingDataLine(SoftMixingMixer mixer, DataLine.Info info) {
this.mixer = mixer; this.mixer = mixer;
this.info = info; this.info = info;
this.control_mutex = mixer.control_mutex; this.control_mutex = mixer.control_mutex;
@ -440,7 +440,7 @@ public abstract class SoftMixingDataLine implements DataLine {
calcVolume(); calcVolume();
} }
protected void calcVolume() { final void calcVolume() {
synchronized (control_mutex) { synchronized (control_mutex) {
double gain = Math.pow(10.0, gain_control.getValue() / 20.0); double gain = Math.pow(10.0, gain_control.getValue() / 20.0);
if (mute_control.getValue()) if (mute_control.getValue())
@ -466,7 +466,7 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
} }
protected void sendEvent(LineEvent event) { final void sendEvent(LineEvent event) {
if (listeners.size() == 0) if (listeners.size() == 0)
return; return;
LineListener[] listener_array = listeners LineListener[] listener_array = listeners
@ -476,23 +476,23 @@ public abstract class SoftMixingDataLine implements DataLine {
} }
} }
public void addLineListener(LineListener listener) { public final void addLineListener(LineListener listener) {
synchronized (control_mutex) { synchronized (control_mutex) {
listeners.add(listener); listeners.add(listener);
} }
} }
public void removeLineListener(LineListener listener) { public final void removeLineListener(LineListener listener) {
synchronized (control_mutex) { synchronized (control_mutex) {
listeners.add(listener); listeners.add(listener);
} }
} }
public javax.sound.sampled.Line.Info getLineInfo() { public final javax.sound.sampled.Line.Info getLineInfo() {
return info; return info;
} }
public Control getControl(Type control) { public final Control getControl(Type control) {
if (control != null) { if (control != null) {
for (int i = 0; i < controls.length; i++) { for (int i = 0; i < controls.length; i++) {
if (controls[i].getType() == control) { if (controls[i].getType() == control) {
@ -504,11 +504,11 @@ public abstract class SoftMixingDataLine implements DataLine {
+ control); + control);
} }
public Control[] getControls() { public final Control[] getControls() {
return Arrays.copyOf(controls, controls.length); return Arrays.copyOf(controls, controls.length);
} }
public boolean isControlSupported(Type control) { public final boolean isControlSupported(Type control) {
if (control != null) { if (control != null) {
for (int i = 0; i < controls.length; i++) { for (int i = 0; i < controls.length; i++) {
if (controls[i].getType() == control) { if (controls[i].getType() == control) {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -37,7 +37,7 @@ import javax.sound.sampled.AudioSystem;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftMixingMainMixer { public final class SoftMixingMainMixer {
public final static int CHANNEL_LEFT = 0; public final static int CHANNEL_LEFT = 0;
@ -63,23 +63,23 @@ public class SoftMixingMainMixer {
public final static int CHANNEL_CHANNELMIXER_RIGHT = 15; public final static int CHANNEL_CHANNELMIXER_RIGHT = 15;
private SoftMixingMixer mixer; private final SoftMixingMixer mixer;
private AudioInputStream ais; private final AudioInputStream ais;
private SoftAudioBuffer[] buffers; private final SoftAudioBuffer[] buffers;
private SoftAudioProcessor reverb; private final SoftAudioProcessor reverb;
private SoftAudioProcessor chorus; private final SoftAudioProcessor chorus;
private SoftAudioProcessor agc; private final SoftAudioProcessor agc;
private int nrofchannels; private final int nrofchannels;
private Object control_mutex; private final Object control_mutex;
private List<SoftMixingDataLine> openLinesList = new ArrayList<SoftMixingDataLine>(); private final List<SoftMixingDataLine> openLinesList = new ArrayList<SoftMixingDataLine>();
private SoftMixingDataLine[] openLines = new SoftMixingDataLine[0]; private SoftMixingDataLine[] openLines = new SoftMixingDataLine[0];
@ -87,7 +87,7 @@ public class SoftMixingMainMixer {
return ais; return ais;
} }
protected void processAudioBuffers() { void processAudioBuffers() {
for (int i = 0; i < buffers.length; i++) { for (int i = 0; i < buffers.length; i++) {
buffers[i].clear(); buffers[i].clear();
} }
@ -162,20 +162,20 @@ public class SoftMixingMainMixer {
InputStream in = new InputStream() { InputStream in = new InputStream() {
private SoftAudioBuffer[] buffers = SoftMixingMainMixer.this.buffers; private final SoftAudioBuffer[] buffers = SoftMixingMainMixer.this.buffers;
private int nrofchannels = SoftMixingMainMixer.this.mixer private final int nrofchannels = SoftMixingMainMixer.this.mixer
.getFormat().getChannels(); .getFormat().getChannels();
private int buffersize = buffers[0].getSize(); private final int buffersize = buffers[0].getSize();
private byte[] bbuffer = new byte[buffersize private final byte[] bbuffer = new byte[buffersize
* (SoftMixingMainMixer.this.mixer.getFormat() * (SoftMixingMainMixer.this.mixer.getFormat()
.getSampleSizeInBits() / 8) * nrofchannels]; .getSampleSizeInBits() / 8) * nrofchannels];
private int bbuffer_pos = 0; private int bbuffer_pos = 0;
private byte[] single = new byte[1]; private final byte[] single = new byte[1];
public void fillBuffer() { public void fillBuffer() {
processAudioBuffers(); processAudioBuffers();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -48,27 +48,27 @@ import javax.sound.sampled.Control.Type;
* *
* @author Karl Helgason * @author Karl Helgason
*/ */
public class SoftMixingMixer implements Mixer { public final class SoftMixingMixer implements Mixer {
private static class Info extends Mixer.Info { private static class Info extends Mixer.Info {
public Info() { Info() {
super(INFO_NAME, INFO_VENDOR, INFO_DESCRIPTION, INFO_VERSION); super(INFO_NAME, INFO_VENDOR, INFO_DESCRIPTION, INFO_VERSION);
} }
} }
protected static final String INFO_NAME = "Gervill Sound Mixer"; static final String INFO_NAME = "Gervill Sound Mixer";
protected static final String INFO_VENDOR = "OpenJDK Proposal"; static final String INFO_VENDOR = "OpenJDK Proposal";
protected static final String INFO_DESCRIPTION = "Software Sound Mixer"; static final String INFO_DESCRIPTION = "Software Sound Mixer";
protected static final String INFO_VERSION = "1.0"; static final String INFO_VERSION = "1.0";
protected final static Mixer.Info info = new Info(); static final Mixer.Info info = new Info();
protected Object control_mutex = this; final Object control_mutex = this;
protected boolean implicitOpen = false; boolean implicitOpen = false;
private boolean open = false; private boolean open = false;
@ -82,15 +82,15 @@ public class SoftMixingMixer implements Mixer {
private AudioInputStream pusher_stream = null; private AudioInputStream pusher_stream = null;
private float controlrate = 147f; private final float controlrate = 147f;
private long latency = 100000; // 100 msec private final long latency = 100000; // 100 msec
private boolean jitter_correction = false; private final boolean jitter_correction = false;
private List<LineListener> listeners = new ArrayList<LineListener>(); private final List<LineListener> listeners = new ArrayList<LineListener>();
private javax.sound.sampled.Line.Info[] sourceLineInfo; private final javax.sound.sampled.Line.Info[] sourceLineInfo;
public SoftMixingMixer() { public SoftMixingMixer() {
@ -516,11 +516,11 @@ public class SoftMixingMixer implements Mixer {
} }
} }
protected float getControlRate() { float getControlRate() {
return controlrate; return controlrate;
} }
protected SoftMixingMainMixer getMainMixer() { SoftMixingMainMixer getMainMixer() {
if (!isOpen()) if (!isOpen())
return null; return null;
return mainmixer; return mainmixer;

Some files were not shown because too many files have changed in this diff Show More