package javax.util.midi;
import java.util.Arrays;
import javax.sound.midi.MetaMessage;
import javax.sound.midi.MidiChannel;
import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiMessage;
import javax.sound.midi.Sequencer;
import javax.sound.midi.Synthesizer;
import javax.sound.midi.Track;
public class MidiUtils {
private MidiUtils() {
}
public static final int CHANNEL_VOLUME = 7;
public static void setVolume(Synthesizer synthesizer, int volume) {
MidiChannel[] channels = synthesizer.getChannels();
for (MidiChannel channel : channels) {
channel.controlChange(CHANNEL_VOLUME, volume);
}
}
public static int getTrackNumber(Sequencer sequencer, Track track) {
return Arrays.asList(sequencer.getSequence().getTracks()).indexOf(track);
}
public static final int TRACK_NAME = 3;
public static String getTrackName(Track track) {
for (int i = 0; i < track.size(); i++) {
MidiEvent event = track.get(i);
MidiMessage message = event.getMessage();
if (message instanceof MetaMessage) {
MetaMessage metaMessage = (MetaMessage)message;
if (metaMessage.getType() == TRACK_NAME) {
return new String(metaMessage.getData());
}
}
}
return null;
}
}