Thanks for your help, pal, but as yours hasn't worked for me either, I'm going to assume that it's my hardware (or maybe fact that I'm running the Windows 7 beta). But moving the start() call up was a good suggestion.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu if( synthesizer != null ) {
...
}
else if( sequencer != null && sequencer instanceof Synthesizer){
...
}
private void playMidi(String fileName) {
try {
midiPlayer = MidiSystem.getSequencer(true);
Synthesizer synthesizer = MidiSystem.getSynthesizer();
midiPlayer.open();
synthesizer.open();
Transmitter transmitter = midiPlayer.getTransmitter();
if (synthesizer.getDefaultSoundbank() == null) {//MEANING "IF USING HARDWARE (NOT JRE) SYNTHESIZER"
transmitter.setReceiver(MidiSystem.getReceiver());//THIS IS RIGHT FOR HARDWARE
System.out.println("Hardware synthesizer!");
}
else {
transmitter.setReceiver(synthesizer.getReceiver());//SYNTHESIZER.GETRECEIVER() IS RIGHT FOR SOFTWARE
System.out.println("Software synthesizer in use!");
}
midiPlayer.setSequence(MidiSystem.getSequence(new File(fileName)));
ShortMessage volumeMessage = new ShortMessage();
int numberOfChannels = synthesizer.getChannels().length;
for (int i = 0; i < numberOfChannels; i++) {
volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, 7, 5); //7 IS MASTER VOLUME CONTROLLER, 5 IS VOLUME BETWEEN 0-127
transmitter.getReceiver().send(volumeMessage, -1);
}
System.out.println("Is the sequencer an instance of Synthesizer? "+(midiPlayer instanceof Synthesizer));
MidiDevice device = MidiSystem.getMidiDevice(midiPlayer.getDeviceInfo());
java.util.List<Transmitter> transmitters = device.getTransmitters();
Transmitter[] transmitterArray = new Transmitter[transmitters.size()];
transmitterArray = transmitters.toArray(transmitterArray);
for (int y = 0; y < transmitterArray.length; y++) {
for (int x = 0; x < 16; x++) {
volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, y, 7, 5); //7 IS MASTER VOLUME CONTROLLER, 5 IS VOLUME BETWEEN 0-127
transmitterArray[y].getReceiver().send(volumeMessage, -1);
}
}
MidiChannel[] channels = synthesizer.getChannels();
for (int i = 0; i < channels.length; i++){
channels[i].controlChange(7, 5);
System.out.println("Can we lower the volume? "+(channels[i].getController(7)!=0));}
midiPlayer.start();
}
catch (Exception e) {System.out.println("Midi File Error: "+e.getMessage());}
Page created in 0.022 seconds with 10 queries.