2011-02-03 11 views
8

音源を変更することができません。私は楽器の値を切り替えますが、出力には何も変わりません。私は何を試しても、ピアノの楽器を弾くだけです。以下に簡単なコードを示します。誰にも何か提案はありますか?あるいは私は楽器オブジェクトの基本を欠いていますか?Java MIDIシンセサイザ - 音源を変更できません

import javax.sound.midi.*; 
//import javax.sound.*; 

public class Drum { 
    static int instrument = 45; 
    static int note = 100; 
    static int timbre = 0; 
    static int force = 100; 
    public static void main(String[] args) {   
     Synthesizer synth = null; 
     try { 
      synth = MidiSystem.getSynthesizer(); 
      synth.open(); 
     } 
     catch (Exception e) { 
      System.out.println(e); 
     } 
     Soundbank soundbank = synth.getDefaultSoundbank(); 
     Instrument[] instr = soundbank.getInstruments(); 
     synth.loadInstrument(instr[instrument]); //Changing this int (instrument) does nothing 
     MidiChannel[] mc = synth.getChannels(); 
     mc[4].noteOn(note, force); 
     try { Thread.sleep(1000); } 
     catch(InterruptedException e) {} 
     System.out.println(instr[instrument].getName()); 

     synth.close(); 

    } 
} 
+0

楽器をロードするだけでは、プログラムの変更メッセージも送信する必要があります。私はJavaプログラマーではないので、これを行う方法はわかりませんが、それはあなたがしなければならないことです。 http://download.oracle.com/javase/1.4.2/docs/api/javax/sound/midi/Synthesizer.html#loadInstrument(javax.sound.midi.Instrument) – Brad

答えて

10

このチャンネルを使用するには、そのチャンネルを使用する必要があります。私はJavaでMIDIを使用したことはないと認めますが、mc.programChange(instr.getPatch().getProgram())のように有望です。

+0

正しいことを参照してください。私はprogramChangeコマンドが必要でした。したがって、たとえば、mc [4] .programChange(0、instrument);を使用しました。私は楽器を変えることができますが、打楽器が実際に演奏されているようには見えません。私はそれが何であるかを見る必要があります。私はいくつかの設定を持っていると思う。みんなありがとう! – Matt

3

打楽器を再生するには、チャンネル10を使用する必要があります。そのチャンネルは、打楽器にのみ使用されます。 (http://en.wikipedia.org/wiki/General_MIDI)例えば

int instrument = 36; 

Sequence sequence = new Sequence(Sequence.PPQ, 1); 

Track track = sequence.createTrack(); 


ShortMessage sm = new ShortMessage(); 
sm.setMessage(ShortMessage.PROGRAM_CHANGE, 9, instrument, 0); //9 ==> is the channel 10. 
track.add(new MidiEvent(sm, 0)); 

はその後、すべてのあなたはそれがパーカッションで鳴ります追加注意してください。

関連する問題