1
package org.herac.tuxguitar.player.impl.sequencer;
3
import java.util.ArrayList;
6
import org.herac.tuxguitar.player.base.MidiPlayerException;
8
public class MidiEventPlayer{
9
private MidiSequencerImpl sequencer;
13
private long lastTick;
14
private boolean reset;
16
public MidiEventPlayer(MidiSequencerImpl sequencer){
17
this.sequencer = sequencer;
18
this.events = new ArrayList();
22
public void process() throws MidiPlayerException {
23
this.lastTick = this.tick;
24
this.tick = this.sequencer.getTickPosition();
25
for(int i = 0;i < this.events.size();i ++){
26
MidiEvent event = (MidiEvent)this.events.get(i);
27
if(shouldSend(event,this.tick,this.lastTick)){
28
this.sequencer.sendEvent(event);
34
private boolean shouldSend(MidiEvent event,long tick,long lastTick){
35
if(event.getTick() > tick){
38
if(event.getTrack() != MidiEvent.ALL_TRACKS){
39
if(this.sequencer.getMidiTrackController().isMute(event.getTrack())){
42
if(this.sequencer.getMidiTrackController().isAnySolo() && !this.sequencer.getMidiTrackController().isSolo(event.getTrack())){
47
if(event.getType() == MidiEvent.MIDI_SYSTEM_EVENT){
50
if(event.getType() == MidiEvent.MIDI_EVENT_CONTROL_CHANGE){
53
if(event.getType() == MidiEvent.MIDI_EVENT_PROGRAM_CHANGE){
57
return (event.getTick() > lastTick);
60
public void addEvent(MidiEvent event){
61
this.events.add(event);
64
public void clearEvents(){
69
this.tick = (this.sequencer.getTickPosition() - 1);