/* * JFugue, an Application Programming Interface (API) for Music Programming * http://www.jfugue.org * * Copyright (C) 2003-2014 David Koelle * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jfugue.devices; import org.jfugue.midi.MidiParser; import jp.kshoji.javax.sound.midi.MidiEvent; import jp.kshoji.javax.sound.midi.MidiMessage; import jp.kshoji.javax.sound.midi.MidiSystem; import jp.kshoji.javax.sound.midi.MidiUnavailableException; import jp.kshoji.javax.sound.midi.Receiver; import jp.kshoji.javax.sound.midi.Sequence; import jp.kshoji.javax.sound.midi.Sequencer; /** * This class represents a MidiParser that is also a MIDI Receiver. * As a MidiParser, it can have ParserListeners * As a Receiver, it overrides send() and sends the resulting MidiMessage and timestamp to MidiParser's parseEvent method. */ public class MidiParserReceiver implements Receiver { private MidiParser parser; private Sequencer sequencer; private Receiver sequencerReceiver; public MidiParserReceiver() throws MidiUnavailableException { this.parser = new MidiParser(); this.sequencer = MidiSystem.getSequencer(); this.sequencerReceiver = sequencer.getReceiver(); } public MidiParser getParser() { return this.parser; } @Override public void send(MidiMessage message, long timestamp) { parser.parseEvent(new MidiEvent(message, timestamp)); sequencerReceiver.send(message, timestamp); } public void close() { sequencerReceiver.close(); } public Sequence getSequence() { return sequencer.getSequence(); } }