< prev index next >
src/java.desktop/share/classes/com/sun/media/sound/SoftMixingMixer.java
Print this page
@@ -20,33 +20,34 @@
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
package com.sun.media.sound;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioFormat.Encoding;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.Control;
+import javax.sound.sampled.Control.Type;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.SourceDataLine;
-import javax.sound.sampled.AudioFormat.Encoding;
-import javax.sound.sampled.Control.Type;
/**
- * Software audio mixer
+ * Software audio mixer.
*
* @author Karl Helgason
*/
public final class SoftMixingMixer implements Mixer {
@@ -86,19 +87,19 @@
private final long latency = 100000; // 100 msec
private final boolean jitter_correction = false;
- private final List<LineListener> listeners = new ArrayList<LineListener>();
+ private final List<LineListener> listeners = new ArrayList<>();
private final javax.sound.sampled.Line.Info[] sourceLineInfo;
public SoftMixingMixer() {
sourceLineInfo = new javax.sound.sampled.Line.Info[2];
- ArrayList<AudioFormat> formats = new ArrayList<AudioFormat>();
+ ArrayList<AudioFormat> formats = new ArrayList<>();
for (int channels = 1; channels <= 2; channels++) {
formats.add(new AudioFormat(Encoding.PCM_SIGNED,
AudioSystem.NOT_SPECIFIED, 8, channels, channels,
AudioSystem.NOT_SPECIFIED, false));
formats.add(new AudioFormat(Encoding.PCM_UNSIGNED,
@@ -138,10 +139,11 @@
AudioSystem.NOT_SPECIFIED);
sourceLineInfo[1] = new DataLine.Info(Clip.class, formats_array,
AudioSystem.NOT_SPECIFIED, AudioSystem.NOT_SPECIFIED);
}
+ @Override
public Line getLine(Line.Info info) throws LineUnavailableException {
if (!isLineSupported(info))
throw new IllegalArgumentException("Line unsupported: " + info);
@@ -153,42 +155,47 @@
}
throw new IllegalArgumentException("Line unsupported: " + info);
}
+ @Override
public int getMaxLines(Line.Info info) {
if (info.getLineClass() == SourceDataLine.class)
return AudioSystem.NOT_SPECIFIED;
if (info.getLineClass() == Clip.class)
return AudioSystem.NOT_SPECIFIED;
return 0;
}
+ @Override
public javax.sound.sampled.Mixer.Info getMixerInfo() {
return info;
}
+ @Override
public javax.sound.sampled.Line.Info[] getSourceLineInfo() {
Line.Info[] localArray = new Line.Info[sourceLineInfo.length];
System.arraycopy(sourceLineInfo, 0, localArray, 0,
sourceLineInfo.length);
return localArray;
}
+ @Override
public javax.sound.sampled.Line.Info[] getSourceLineInfo(
javax.sound.sampled.Line.Info info) {
int i;
- ArrayList<javax.sound.sampled.Line.Info> infos = new ArrayList<javax.sound.sampled.Line.Info>();
+ ArrayList<javax.sound.sampled.Line.Info> infos = new ArrayList<>();
for (i = 0; i < sourceLineInfo.length; i++) {
if (info.matches(sourceLineInfo[i])) {
infos.add(sourceLineInfo[i]);
}
}
return infos.toArray(new Line.Info[infos.size()]);
}
+ @Override
public Line[] getSourceLines() {
Line[] localLines;
synchronized (control_mutex) {
@@ -205,23 +212,27 @@
}
return localLines;
}
+ @Override
public javax.sound.sampled.Line.Info[] getTargetLineInfo() {
return new javax.sound.sampled.Line.Info[0];
}
+ @Override
public javax.sound.sampled.Line.Info[] getTargetLineInfo(
javax.sound.sampled.Line.Info info) {
return new javax.sound.sampled.Line.Info[0];
}
+ @Override
public Line[] getTargetLines() {
return new Line[0];
}
+ @Override
public boolean isLineSupported(javax.sound.sampled.Line.Info info) {
if (info != null) {
for (int i = 0; i < sourceLineInfo.length; i++) {
if (info.matches(sourceLineInfo[i])) {
return true;
@@ -229,24 +240,28 @@
}
}
return false;
}
+ @Override
public boolean isSynchronizationSupported(Line[] lines, boolean maintainSync) {
return false;
}
+ @Override
public void synchronize(Line[] lines, boolean maintainSync) {
throw new IllegalArgumentException(
"Synchronization not supported by this mixer.");
}
+ @Override
public void unsynchronize(Line[] lines) {
throw new IllegalArgumentException(
"Synchronization not supported by this mixer.");
}
+ @Override
public void addLineListener(LineListener listener) {
synchronized (control_mutex) {
listeners.add(listener);
}
}
@@ -259,10 +274,11 @@
for (LineListener listener : listener_array) {
listener.update(event);
}
}
+ @Override
public void close() {
if (!isOpen())
return;
sendEvent(new LineEvent(this, LineEvent.Type.CLOSE,
@@ -306,33 +322,39 @@
}
}
+ @Override
public Control getControl(Type control) {
throw new IllegalArgumentException("Unsupported control type : "
+ control);
}
+ @Override
public Control[] getControls() {
return new Control[0];
}
+ @Override
public javax.sound.sampled.Line.Info getLineInfo() {
return new Line.Info(Mixer.class);
}
+ @Override
public boolean isControlSupported(Type control) {
return false;
}
+ @Override
public boolean isOpen() {
synchronized (control_mutex) {
return open;
}
}
+ @Override
public void open() throws LineUnavailableException {
if (isOpen()) {
implicitOpen = false;
return;
}
@@ -496,10 +518,11 @@
}
}
+ @Override
public void removeLineListener(LineListener listener) {
synchronized (control_mutex) {
listeners.remove(listener);
}
}
@@ -523,7 +546,6 @@
SoftMixingMainMixer getMainMixer() {
if (!isOpen())
return null;
return mainmixer;
}
-
}
< prev index next >