2016-05-22 12 views
0

Ich schreibe eine Anwendung, um Novation Launchpad-Geräte zu steuern (für die vertrauten). Das Launchpad installiert zwei MIDI-Geräte: eines für den Eingang (Tasten gedrückt) und eines für den Ausgang (Kontroll-LEDs).Wie kann ich MIDI-Nachrichten abfangen?

Die Idee ist, dass nach dem Empfang einer Nachricht aus dem Launchpad, möchte ich eine Sequenz von anderen Nachrichten senden. Was ist der beste Weg, das zu tun?

Vorerst Kette I das Sendereingabegerätes an die Empfänger der Ausgabeeinrichtung, so dass jede Nachricht empfangen wird, direkt zurück zu dem launchpad gesendet:

Transmitter lpTransmitter = inputDevice.getTransmitter(); 
lpTransmitter.setReceiver(outputDevice.getReceiver()); 
+1

"nach dem Empfang einer Nachricht vom Launchpad, senden Sie eine Sequenz von anderen Nachrichten." Sie haben richtig beschrieben, wie es funktioniert. Was genau ist das Problem? –

+0

Woher weiß ich, dass ich eine Nachricht erhalten habe? Gibt es eine Art von Ereignis-Listener? –

Antwort

0

Ich habe es geschafft, die Lösung selbst zu finden. Was ich getan habe, ist, dass ich die Geräte mit meiner eigenen Implementierung von Sender und Empfänger verkettete. Wie ich es verstehe, die Midi-Nachricht geht so:

Launchpad-Eingang -> EingangDevice-Empfänger -> EingangDevice-Sender -> mein eigener Empfänger -> (meine Berechnungen) -> mein eigener Sender -> outputDevice-Empfänger -> outputDevice-Sender -> Launchpad-Ausgabe.

Jetzt mit mir tragen, denn ich weiß nicht, ob dies der richtige Weg ist, es zu tun, aber mein Code sieht wie folgt aus:

// main 
// get launchpad devices, open them 

MyMidiDevice myDevice = new MyMidiDevice(); 

inputDevice.getTransmitter().setReceiver(myDevice); 
myDevice.setReceiver(outputDevice.getReceiver()); 

-Code der MyMidiDevice Klasse:

public class MyMidiDevice implements Transmitter, Receiver 
{ 

    private Receiver receiver; 

    @Override 
    public Receiver getReceiver() 
    { 
     return this.receiver; 
    } 

    @Override 
    public void setReceiver(Receiver receiver) 
    { 
     this.receiver = receiver; 
    } 

    @Override 
    public void close() 
    { 
    } 

    @Override 
    public void send(MidiMessage message, long timeStamp) 
    { 
     System.out.println(message); // computations 
     this.getReceiver().send(message, timeStamp); 
    } 
} 
0

Das javax.sound.midi Paket eine Schnittstelle hat, die durch den Code implementiert ist das möchte Ereignisse erhalten. Es heißt Receiver.

Achten Sie auf open the device before getting the transmitter.

+0

Ich weiß über Receiver, aber wie verwende ich es, um Nachrichten zu empfangen? Erstelle ich meine eigene Klasse, die es implementiert? Das Javadoc sagt mir, dass ich 'send()' definieren muss, aber wird diese Methode automatisch aufgerufen, wenn ich einen Sender verlinke? Entschuldige die Ignoranz, ich bin ein Anfänger in Java –

Verwandte Themen