34 import java.util.WeakHashMap; 35 36 import javax.sound.midi.*; 37 38 39 /** 40 * A Real Time Sequencer 41 * 42 * @author Florian Bomers 43 */ 44 45 /* TODO: 46 * - rename PlayThread to PlayEngine (because isn't a thread) 47 */ 48 final class RealTimeSequencer extends AbstractMidiDevice 49 implements Sequencer, AutoConnectSequencer { 50 51 // STATIC VARIABLES 52 53 /** debugging flags */ 54 private final static boolean DEBUG_PUMP = false; 55 private final static boolean DEBUG_PUMP_ALL = false; 56 57 /** 58 * Event Dispatcher thread. Should be using a shared event 59 * dispatcher instance with a factory in EventDispatcher 60 */ 61 private static final Map<ThreadGroup, EventDispatcher> dispatchers = 62 new WeakHashMap<>(); 63 64 /** 65 * All RealTimeSequencers share this info object. 66 */ 67 static final MidiDevice.Info info = new RealTimeSequencerInfo(); 68 69 70 private static final Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK }; 71 private static final Sequencer.SyncMode[] slaveSyncModes = { Sequencer.SyncMode.NO_SYNC }; 72 73 private static final Sequencer.SyncMode masterSyncMode = Sequencer.SyncMode.INTERNAL_CLOCK; 74 private static final Sequencer.SyncMode slaveSyncMode = Sequencer.SyncMode.NO_SYNC; 75 | 34 import java.util.WeakHashMap; 35 36 import javax.sound.midi.*; 37 38 39 /** 40 * A Real Time Sequencer 41 * 42 * @author Florian Bomers 43 */ 44 45 /* TODO: 46 * - rename PlayThread to PlayEngine (because isn't a thread) 47 */ 48 final class RealTimeSequencer extends AbstractMidiDevice 49 implements Sequencer, AutoConnectSequencer { 50 51 // STATIC VARIABLES 52 53 /** debugging flags */ 54 private static final boolean DEBUG_PUMP = false; 55 private static final boolean DEBUG_PUMP_ALL = false; 56 57 /** 58 * Event Dispatcher thread. Should be using a shared event 59 * dispatcher instance with a factory in EventDispatcher 60 */ 61 private static final Map<ThreadGroup, EventDispatcher> dispatchers = 62 new WeakHashMap<>(); 63 64 /** 65 * All RealTimeSequencers share this info object. 66 */ 67 static final MidiDevice.Info info = new RealTimeSequencerInfo(); 68 69 70 private static final Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK }; 71 private static final Sequencer.SyncMode[] slaveSyncModes = { Sequencer.SyncMode.NO_SYNC }; 72 73 private static final Sequencer.SyncMode masterSyncMode = Sequencer.SyncMode.INTERNAL_CLOCK; 74 private static final Sequencer.SyncMode slaveSyncMode = Sequencer.SyncMode.NO_SYNC; 75 |