package org.herac.tuxguitar.player.base;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class MidiChannelRouter implements MidiReceiver{
private Map midiChannels;
public MidiChannelRouter(){
this.midiChannels = new HashMap();
}
public String getId(){
return MidiChannelRouter.class.getName();
}
@Override
public void sendParameter(int channelId, String key, String value) throws MidiPlayerException{
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendParameter(key, value);
}
}
@Override
public void sendNoteOn(int channelId, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendNoteOn(key, velocity, voice, bendMode);
}
}
@Override
public void sendNoteOff(int channelId, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendNoteOff(key, velocity, voice, bendMode);
}
}
@Override
public void sendPitchBend(int channelId, int value, int voice, boolean bendMode) throws MidiPlayerException {
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendPitchBend(value, voice, bendMode);
}
}
@Override
public void sendProgramChange(int channelId, int value) throws MidiPlayerException {
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendProgramChange(value);
}
}
@Override
public void sendControlChange(int channelId, int controller, int value) throws MidiPlayerException {
MidiChannel midiChannel = getMidiChannel(channelId);
if( midiChannel != null ){
midiChannel.sendControlChange(controller, value);
}
}
@Override
public void sendAllNotesOff() throws MidiPlayerException {
List midiChannelIds = getMidiChannelIds();
for(int i = 0; i < midiChannelIds.size(); i ++){
this.sendControlChange(((Integer)midiChannelIds.get(i)).intValue(),MidiControllers.ALL_NOTES_OFF,0);
}
}
@Override
public void sendPitchBendReset() throws MidiPlayerException {
List midiChannelIds = getMidiChannelIds();
for(int i = 0; i < midiChannelIds.size(); i ++){
this.sendPitchBend(((Integer)midiChannelIds.get(i)).intValue(), 64, -1, false);
}
}
public MidiChannel getMidiChannel(int channelId){
Integer key = new Integer(channelId);
if( this.midiChannels.containsKey(key) ){
return (MidiChannel)this.midiChannels.get(key);
}
return null;
}
public void removeMidiChannel(int channelId){
Integer key = new Integer(channelId);
if( this.midiChannels.containsKey(key) ){
this.midiChannels.remove(key);
}
}
public void addMidiChannel(int channelId, MidiChannel midiChannel){
Integer key = new Integer(channelId);
if( this.midiChannels.containsKey(key) ){
this.midiChannels.remove(key);
}
this.midiChannels.put(key, midiChannel);
}
public List getMidiChannelIds(){
List midiChannelIds = new ArrayList();
Iterator iterator = this.midiChannels.keySet().iterator();
while (iterator.hasNext()) {
midiChannelIds.add(iterator.next());
}
return midiChannelIds;
}
}