use of javax.sound.sampled.LineEvent in project jdk8u_jdk by JetBrains.
the class EventDispatcher method processEvent.
/**
* Invoked when there is at least one event in the queue.
* Implement this as a callback to process one event.
*/
void processEvent(EventInfo eventInfo) {
int count = eventInfo.getListenerCount();
// process an LineEvent
if (eventInfo.getEvent() instanceof LineEvent) {
LineEvent event = (LineEvent) eventInfo.getEvent();
if (Printer.debug)
Printer.debug("Sending " + event + " to " + count + " listeners");
for (int i = 0; i < count; i++) {
try {
((LineListener) eventInfo.getListener(i)).update(event);
} catch (Throwable t) {
if (Printer.err)
t.printStackTrace();
}
}
return;
}
// process a MetaMessage
if (eventInfo.getEvent() instanceof MetaMessage) {
MetaMessage event = (MetaMessage) eventInfo.getEvent();
for (int i = 0; i < count; i++) {
try {
((MetaEventListener) eventInfo.getListener(i)).meta(event);
} catch (Throwable t) {
if (Printer.err)
t.printStackTrace();
}
}
return;
}
// process a Controller or Mode Event
if (eventInfo.getEvent() instanceof ShortMessage) {
ShortMessage event = (ShortMessage) eventInfo.getEvent();
int status = event.getStatus();
// c is the channel they are sent on.
if ((status & 0xF0) == 0xB0) {
for (int i = 0; i < count; i++) {
try {
((ControllerEventListener) eventInfo.getListener(i)).controlChange(event);
} catch (Throwable t) {
if (Printer.err)
t.printStackTrace();
}
}
}
return;
}
Printer.err("Unknown event type: " + eventInfo.getEvent());
}
use of javax.sound.sampled.LineEvent in project jdk8u_jdk by JetBrains.
the class AbstractLine method setOpen.
// HELPER METHODS
/**
* This method sets the open state and generates
* events if it changes.
*/
final void setOpen(boolean open) {
if (Printer.trace)
Printer.trace("> " + getClass().getName() + " (AbstractLine): setOpen(" + open + ") this.open: " + this.open);
boolean sendEvents = false;
long position = getLongFramePosition();
synchronized (this) {
if (this.open != open) {
this.open = open;
sendEvents = true;
}
}
if (sendEvents) {
if (open) {
sendEvents(new LineEvent(this, LineEvent.Type.OPEN, position));
} else {
sendEvents(new LineEvent(this, LineEvent.Type.CLOSE, position));
}
}
if (Printer.trace)
Printer.trace("< " + getClass().getName() + " (AbstractLine): setOpen(" + open + ") this.open: " + this.open);
}
use of javax.sound.sampled.LineEvent in project jdk8u_jdk by JetBrains.
the class SoftMixingClip method loop.
public void loop(int count) {
LineEvent event = null;
synchronized (control_mutex) {
if (isOpen()) {
if (active)
return;
active = true;
active_sg = true;
loopcount = count;
event = new LineEvent(this, LineEvent.Type.START, getLongFramePosition());
}
}
if (event != null)
sendEvent(event);
}
use of javax.sound.sampled.LineEvent in project jdk8u_jdk by JetBrains.
the class SoftMixingClip method close.
public void close() {
LineEvent event = null;
synchronized (control_mutex) {
if (!isOpen())
return;
stop();
event = new LineEvent(this, LineEvent.Type.CLOSE, getLongFramePosition());
open = false;
mixer.getMainMixer().closeLine(this);
}
if (event != null)
sendEvent(event);
}
use of javax.sound.sampled.LineEvent in project jdk8u_jdk by JetBrains.
the class SoftMixingClip method start.
public void start() {
LineEvent event = null;
synchronized (control_mutex) {
if (isOpen()) {
if (active)
return;
active = true;
active_sg = true;
loopcount = 0;
event = new LineEvent(this, LineEvent.Type.START, getLongFramePosition());
}
}
if (event != null)
sendEvent(event);
}
Aggregations