java - MIDI OUT transmitter not available -


i've been banging head on day, read can find, followed jdk source around, no luck in finding out gory details how or where java looks obtain data on midi device , determines what's what.

i'm trying capture midi messages through ni audio 8 dj midi in port, but, java isn't "seeing" midi in port, out, have used send midi with. same results m-audio usb uno midi device: midisystem.getmidideviceinfo() "sees" output port.

i have verified operation of midi in port with:

amidi -p hw:2,0 -d 

and sending signals. works fine.

getmaxtransmitters() returns zero. midisystem.getmidideviceinfo() shows 1 entry both devices: audio8dj [hw:2,0] or interface [hw:2,0]

the code below works fine receiver , think bits need verify gettransmitter() grabs port, since works other , works fine, midiunavailableexception / transmitter not available exception.

i've taken getmaxreceivers() trap out because trying see if device offered 1 entry , sorted out, no.

public static transmitter getmidiin () {     if (midiin == null){         devices = midisystem.getmidideviceinfo();         for(mididevice.info info: devices){             system.out.println("device class " + info.getclass());             mididevice device;             try{                 device = midisystem.getmididevice(info);                 if (info.tostring().equals("audio8dj [hw:2,0]")){                      if (device.getmaxtransmitters() != 0){                         try{                             device.open();                             system.out.println("max transmitters:" + device.getmaxtransmitters());                             midiin = device.gettransmitter();                             system.out.println("found transmitter: "+ midiin);                             break;                         } catch (exception e){                             e.printstacktrace();                         }                     }                 }             } catch (midiunavailableexception e1){                 e1.printstacktrace();              }         }     }     return midiin; } 

so thing that's getting me here this: alsa lists 1 entry in amidi -l , when specify port dump, works fine. java gets same text entry , can't sort out midi in, assigning com.sun.media.sound.midioutdeviceprovider class leaves me wondering how does, or java figure out device has offer , why isn't seeing input port alsa seeing.

i'm coding eclipse version: 3.8.1 ide jdk1.6, on linux mint os, .

i'll happy provide asked for. reading!

the solution java seeing transmitter in version of jdk being used, though unfortunately @ time, not have answer why failure, 1 version worked , suits needs time being. if find answer, edit answer.

of 3 versions switching between testing, jdk1.8.0_60, jdk1.7.0_80, jdk1.6.0_45, 1.7 did not experience error , obtained transmitter device. found out, , privileges not cause of specific issue, compiling , running code found suitable command line execution attempts obtain transmitter, prints out midi data sent it, , modified little ...

import javax.sound.midi.mididevice; import javax.sound.midi.midimessage; import javax.sound.midi.midisystem; import javax.sound.midi.midiunavailableexception; import javax.sound.midi.receiver;  public class midiinputtest {      public mididevice       input;     public mididevice       output;      public static void main(string[] args) {         new midiinputtest().start();     }        public void start() {         init();  // initialize midi input device                  // system dependent           try {             output.open(); // midi device             myreceiver myrcvr = new myreceiver();             midisystem.gettransmitter().setreceiver(myrcvr);         } catch (exception e) {             e.printstacktrace();             system.exit(0);         }      }      private class myreceiver implements receiver  {         receiver rcvr;         public myreceiver() {             try {                 this.rcvr = midisystem.getreceiver();             } catch (midiunavailableexception mue) {                 mue.printstacktrace();             }         }          @override         public void send(midimessage message, long timestamp) {             byte[] b = message.getmessage();             if (b[0] != (byte)254) {                 system.out.println((b[0] & 0xff) + " " + (b[1] & 0xff));             }             //rcvr.send(message, timestamp); // send out ever receive         }          @override         public void close() {             rcvr.close();         }     }      public void init() {          mididevice.info[] devices;          devices = midisystem.getmidideviceinfo();         try{              (mididevice.info info: devices) {                 mididevice device;                 device = midisystem.getmididevice(info);                 system.out.println("mididevice.info="+info + "\n" + "maxtransmitters="+device.getmaxtransmitters());                  // put specific device want connect behind if gate here avoid connecting not                  if (info.tostring().equals("interface [hw:2,0,0]") && device.getmaxtransmitters() != 0) {                      system.out.println(" name: " + info.tostring() +                             ", decription: " +                             info.getdescription() +                             ", vendor: " +                             info.getvendor());                      output = midisystem.getmididevice(info);                     if (! output.isopen()) {                         output.open();                    }                 }             }         } catch (midiunavailableexception mue) {                     mue.printstacktrace();         }     } } 

to run command line choose version of jdk have installed, compile , run specific versions substituting jdk1.7.0_80 distro wish test.

/opt/java-jdk/jdk1.7.0_80/bin/javac midiinputtest.java /opt/java-jdk/jdk1.7.0_80/bin/java -cp . midiinputtest 

though haven't been able verify it, java sound apparently responsible figuring out available java's use midi architecture.

thank mike harris sending me down right path of testing on command line, , jim829 on @ java-forums.org example code command line.


Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -