< prev index next >
src/java.desktop/share/classes/com/sun/media/sound/DirectAudioDevice.java
Print this page
*** 1003,1021 ****
* This clip is realized in software only
*/
private static final class DirectClip extends DirectDL
implements Clip, Runnable, AutoClosingClip {
! private Thread thread;
! private byte[] audioData = null;
! private int frameSize; // size of one frame in bytes
! private int m_lengthInFrames;
! private int loopCount;
! private int clipBytePosition; // index in the audioData array at current playback
! private int newFramePosition; // set in setFramePosition()
! private int loopStartFrame;
! private int loopEndFrame; // the last sample included in the loop
// auto closing clip support
private boolean autoclosing = false;
private DirectClip(DataLine.Info info,
--- 1003,1021 ----
* This clip is realized in software only
*/
private static final class DirectClip extends DirectDL
implements Clip, Runnable, AutoClosingClip {
! private volatile Thread thread;
! private volatile byte[] audioData = null;
! private volatile int frameSize; // size of one frame in bytes
! private volatile int m_lengthInFrames;
! private volatile int loopCount;
! private volatile int clipBytePosition; // index in the audioData array at current playback
! private volatile int newFramePosition; // set in setFramePosition()
! private volatile int loopStartFrame;
! private volatile int loopEndFrame; // the last sample included in the loop
// auto closing clip support
private boolean autoclosing = false;
private DirectClip(DataLine.Info info,
*** 1343,1361 ****
// main playback loop
@Override
public void run() {
if (Printer.trace) Printer.trace(">>> DirectClip: run() threadID="+Thread.currentThread().getId());
! while (thread != null) {
// doIO is volatile, but we could check it, then get
// pre-empted while another thread changes doIO and notifies,
// before we wait (so we sleep in wait forever).
synchronized(lock) {
if (!doIO) {
try {
lock.wait();
! } catch(InterruptedException ie) {}
}
}
while (doIO) {
if (newFramePosition >= 0) {
clipBytePosition = newFramePosition * frameSize;
--- 1343,1367 ----
// main playback loop
@Override
public void run() {
if (Printer.trace) Printer.trace(">>> DirectClip: run() threadID="+Thread.currentThread().getId());
! Thread curThread = Thread.currentThread();
! while (thread == curThread) {
// doIO is volatile, but we could check it, then get
// pre-empted while another thread changes doIO and notifies,
// before we wait (so we sleep in wait forever).
synchronized(lock) {
if (!doIO) {
try {
lock.wait();
! } catch(InterruptedException ie) {
! } finally {
! if (thread != curThread) {
! break;
! }
! }
}
}
while (doIO) {
if (newFramePosition >= 0) {
clipBytePosition = newFramePosition * frameSize;
< prev index next >