< prev index next >
src/java.desktop/share/classes/com/sun/media/sound/SoftMixingSourceDataLine.java
Print this page
@@ -20,10 +20,11 @@
*
* 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.io.InputStream;
import java.util.Arrays;
@@ -74,58 +75,68 @@
NonBlockingFloatInputStream(AudioFloatInputStream ais) {
this.ais = ais;
}
+ @Override
public int available() throws IOException {
return ais.available();
}
+ @Override
public void close() throws IOException {
ais.close();
}
+ @Override
public AudioFormat getFormat() {
return ais.getFormat();
}
+ @Override
public long getFrameLength() {
return ais.getFrameLength();
}
+ @Override
public void mark(int readlimit) {
ais.mark(readlimit);
}
+ @Override
public boolean markSupported() {
return ais.markSupported();
}
+ @Override
public int read(float[] b, int off, int len) throws IOException {
int avail = available();
if (len > avail) {
int ret = ais.read(b, off, avail);
Arrays.fill(b, off + ret, off + len, 0);
return len;
}
return ais.read(b, off, len);
}
+ @Override
public void reset() throws IOException {
ais.reset();
}
+ @Override
public long skip(long len) throws IOException {
return ais.skip(len);
}
}
SoftMixingSourceDataLine(SoftMixingMixer mixer, DataLine.Info info) {
super(mixer, info);
}
+ @Override
public int write(byte[] b, int off, int len) {
if (!isOpen())
return 0;
if (len % framesize != 0)
throw new IllegalArgumentException(
@@ -200,18 +211,20 @@
private float _eff1gain;
private float _eff2gain;
+ @Override
protected void processControlLogic() {
_active = active;
_rightgain = rightgain;
_leftgain = leftgain;
_eff1gain = eff1gain;
_eff2gain = eff2gain;
}
+ @Override
protected void processAudioLogic(SoftAudioBuffer[] buffers) {
if (_active) {
float[] left = buffers[SoftMixingMainMixer.CHANNEL_LEFT].array();
float[] right = buffers[SoftMixingMainMixer.CHANNEL_RIGHT].array();
int bufferlen = buffers[SoftMixingMainMixer.CHANNEL_LEFT].getSize();
@@ -272,21 +285,24 @@
}
}
}
+ @Override
public void open() throws LineUnavailableException {
open(format);
}
+ @Override
public void open(AudioFormat format) throws LineUnavailableException {
if (bufferSize == -1)
bufferSize = ((int) (format.getFrameRate() / 2))
* format.getFrameSize();
open(format, bufferSize);
}
+ @Override
public void open(AudioFormat format, int bufferSize)
throws LineUnavailableException {
LineEvent event = null;
@@ -321,24 +337,27 @@
cycling_avail = 0;
cycling_framepos = 0;
InputStream cycling_inputstream = new InputStream() {
+ @Override
public int read() throws IOException {
byte[] b = new byte[1];
int ret = read(b);
if (ret < 0)
return ret;
return b[0] & 0xFF;
}
+ @Override
public int available() throws IOException {
synchronized (cycling_buffer) {
return cycling_avail;
}
}
+ @Override
public int read(byte[] b, int off, int len)
throws IOException {
synchronized (cycling_buffer) {
if (len > cycling_avail)
@@ -385,16 +404,18 @@
if (event != null)
sendEvent(event);
}
+ @Override
public int available() {
synchronized (cycling_buffer) {
return cycling_buffer.length - cycling_avail;
}
}
+ @Override
public void drain() {
while (true) {
int avail;
synchronized (cycling_buffer) {
avail = cycling_avail;
@@ -407,61 +428,71 @@
return;
}
}
}
+ @Override
public void flush() {
synchronized (cycling_buffer) {
cycling_read_pos = 0;
cycling_write_pos = 0;
cycling_avail = 0;
}
}
+ @Override
public int getBufferSize() {
synchronized (control_mutex) {
return bufferSize;
}
}
+ @Override
public AudioFormat getFormat() {
synchronized (control_mutex) {
return format;
}
}
+ @Override
public int getFramePosition() {
return (int) getLongFramePosition();
}
+ @Override
public float getLevel() {
return AudioSystem.NOT_SPECIFIED;
}
+ @Override
public long getLongFramePosition() {
synchronized (cycling_buffer) {
return cycling_framepos;
}
}
+ @Override
public long getMicrosecondPosition() {
return (long) (getLongFramePosition() * (1000000.0 / (double) getFormat()
.getSampleRate()));
}
+ @Override
public boolean isActive() {
synchronized (control_mutex) {
return active;
}
}
+ @Override
public boolean isRunning() {
synchronized (control_mutex) {
return active;
}
}
+ @Override
public void start() {
LineEvent event = null;
synchronized (control_mutex) {
@@ -476,10 +507,11 @@
if (event != null)
sendEvent(event);
}
+ @Override
public void stop() {
LineEvent event = null;
synchronized (control_mutex) {
if (isOpen()) {
@@ -493,10 +525,11 @@
if (event != null)
sendEvent(event);
}
+ @Override
public void close() {
LineEvent event = null;
synchronized (control_mutex) {
@@ -514,12 +547,12 @@
if (event != null)
sendEvent(event);
}
+ @Override
public boolean isOpen() {
synchronized (control_mutex) {
return open;
}
}
-
}
< prev index next >