Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

External MIDI Hardware Not playing MIDI file Properly

3669712Mar 19 2019

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 

Comments
Post Details
Added on Mar 19 2019
0 comments
327 views