2017-08-14 13 views
0

受信機を使用して、再生中のMIDIイベント情報を抽出できるようにしようとしています。私は演奏されたノートを聴きたいし、それらを同期させることがいくつかの出来事でした。私はドキュメントを読んでいて、実際に送受信機をどのように使用するかはわかりません。誰かが、私がレシーバーからのミディイベントをどのように捉えることができるかについて私が正しい方向に向けるのを助けることができたら、私はとても感謝しています。ReceiverからJavaのMIDIメッセージを取得する

編集:以下に提供される可能性のある複製は、受信機の実際の動作を説明していません。それは実装上のソースコードを提供しますが、初心者としてはソースコードがあまりにも進んで私には分かりませんでした。

+0

の可能性のある重複 - (https://stackoverflow.com/questions/ [Javaのミディそれが遊んでいる間、MIDIからのノートを取得する方法] 26266411/java-midi-how-to-get-notes-from-midi-playing中) –

+0

私はその答えを読んだ。リンクの1つは、トランスミッタ/レシーバを使用するように指示しますが、トランスミッタ/レシーバの実装方法や動作方法についての詳細は記載されていません。もう1つはレシーバダンプを示すソースコードですが、ソースコードはかなり進んでいますが、レシーバが実際にどのように使用されているかを点で結び付けるのは難しかったです。 – user6688986

+0

あなたのオブジェクトは 'Receiver'インターフェースを実装しなければなりません。 –

答えて

0

これは、すべての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); 
    } 
} 

これは実装レシーバクラスです:

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() { 

    } 
} 
関連する問題