Hi,
I have a midi file which is recorded with Yamaha PSR-A3000 ( external midi synth) I have saved it on my computer and would like to play it back from my computer. I wrote the Jave code below, It shows PSR MIDI device and the input port is the 4th one. however, I cannot get MIDI file played on my Yamaha PSR
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import java.io.File;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Receiver;
import uk.co.xfactorylibrarians.coremidi4j.CoreMidiDeviceProvider;
public class psrMidiPlayer {
/**
* Play a Midi file.
*/
public static void playMidiFile(String fileName, int DEVICE_NUMBER) {
try {
for (Receiver receiver : MidiSystem.getSequencer().getReceivers()) {
receiver.close();
}
System.out.println("Working MIDI Devices:");
for (javax.sound.midi.MidiDevice.Info device : CoreMidiDeviceProvider.getMidiDeviceInfo()) {
System.out.println(" " + device +" "+ device.getVendor());
}
MidiDevice.Info[] MidiDeviceInfos = MidiSystem.getMidiDeviceInfo();
//find the suitable device number here, based on some criteria
MidiDevice MidiOutDevice = MidiSystem.getMidiDevice(MidiDeviceInfos[DEVICE_NUMBER]);
if (!(MidiOutDevice.isOpen())) {
try {
MidiOutDevice.open();
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
}
Receiver MidiOutReceiver = MidiOutDevice.getReceiver();
Sequencer MidiOutSequencer = MidiSystem.getSequencer();
System.out.println( "getMaxReceivers() =" + MidiOutDevice.getMaxReceivers());
System.out.println( "getMaxTransmitters() =" + MidiOutSequencer.getMaxTransmitters());
//Add the new MIDI out device here.
File myMidiFile = new File(fileName);
MidiOutSequencer.getTransmitter().setReceiver(MidiOutReceiver);
MidiOutSequencer.open();
Sequence mySeq = MidiSystem.getSequence(myMidiFile);
MidiOutSequencer.setSequence(mySeq);
MidiOutSequencer.start();
//MidiOutSequencer.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String args[]) {
int i = 3;
playMidiFile("/pass2midifile/bahar-martik.mid", i);
}
}
The external Synth is using standard Yamaha USB-MIDI driver and all I hear it playing is a single note E3 on piano and when I monitor the incoming midi messages they are all on channel one and E3.
23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To Port 1 Note On 1 E3 127 23:21:11.613 To