2017-08-14 7 views
0

J'essaie d'utiliser un récepteur pour pouvoir extraire des informations sur les événements MIDI pendant leur lecture. Je veux écouter les notes jouées et les synchroniser était un événement. J'ai lu la documentation et je ne sais pas vraiment comment utiliser l'émetteur/récepteur. Si quelqu'un pouvait m'aider à me diriger dans la bonne direction sur la façon dont je pourrais récupérer les événements midi du receveur, je serais très reconnaissant. Edit: La duplication possible proposée ci-dessous n'explique pas comment le récepteur fonctionne réellement. Il offre du code source sur l'implémentation mais en tant que débutant le code source était trop avancé pour que je puisse le comprendre.Récupérer des messages midi depuis Receiver en Java

import javax.sound.midi.*; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

public class Main { 

    public static Sequencer sequencer; 
    public static Sequence sequence; 
    public static Receiver synthRcvr; 
    public static Transmitter seqTrans; 

    public static void main(String[] args) { 

     try { 
      sequencer = MidiSystem.getSequencer(); 
      sequence = MidiSystem.getSequence(new File("test.midi")); 

      seqTrans = sequencer.getTransmitter(); 
      synthRcvr = sequencer.getReceiver(); 
      seqTrans.setReceiver(synthRcvr); 

      sequencer.open(); 
      sequencer.setSequence(sequence); 

      sequencer.start(); 
     } catch (IOException | MidiUnavailableException | InvalidMidiDataException e) { 
      System.out.println(e); 
     } 
    } 
+0

double possible de [Java Midi - Comment obtenir des notes de midi alors qu'il joue] (https://stackoverflow.com/questions/ 26266411/java-midi-comment-obtenir-notes-de-midi-while-its-playing) –

+0

J'ai lu cette réponse. Un des liens me dit d'utiliser l'émetteur/récepteur mais pas de détails sur sa mise en œuvre ou comment cela fonctionne. L'autre donne le code source montrant un vidage du récepteur mais le code source est assez avancé pour moi et j'ai eu du mal à relier les points sur la façon dont le récepteur est réellement utilisé. – user6688986

+0

Votre propre objet doit implémenter l'interface 'Receiver'. –

Répondre

0

C'était la solution pour écouter tous les messages midi.

import javax.sound.midi.*; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

public class Main { 

public static Receiver synthRcvr = new CustomReceiver(); 
public static Transmitter seqTrans; 
public static Synthesizer synth; 

public static void main(String[] args) { 

    try { 
     sequencer = MidiSystem.getSequencer(); 
     sequence = MidiSystem.getSequence(new File("test.midi")); 

     Sequencer sequencer = MidiSystem.getSequencer(); 
     seqTrans = sequencer.getTransmitter(); 
     seqTrans.setReceiver(synthRcvr); 

     sequencer.open(); 
     sequencer.setSequence(sequence); 

     sequencer.start(); 
    } catch (IOException | MidiUnavailableException | InvalidMidiDataException e) { 
     System.out.println(e); 
    } 
} 

C'est la classe des outils du récepteur:

import javax.sound.midi.MidiMessage; 
import javax.sound.midi.Receiver; 

public class CustomReceiver implements Receiver { 

    public CustomReceiver() { 

    } 

    @Override 
    public void send(MidiMessage message, long timeStamp) { 
     // Process midi messages here 
    } 

    @Override 
    public void close() { 

    } 
}