2013-09-24 52 views
3

有人可以告訴我如何使用聲音庫或合成器來控制MIDI音序器的音量而不使用在MIDI音序器中控制音量的方法是什麼?

我想使MIDI繼續到下一個MIDI序列

  if(midiplay) 
      { 

       midi = s + savereq; 
       try { 
        //System.out.println("Play MIDI " + midi); 
        if (musicSr != null) 
        { 
               /* This is where I want it to fade out*/ 
         musicSr.stop(); //stop sequencer 
         musicSr.close(); //close sequencer 
        } 
        musicSr = null; 
        musicS = null; 

        File music = new File(midi); 
        if(music.exists()) 
        { 
         musicS = MidiSystem.getSequence(music); 
        } 

        // Create a sequencer for the sequence 
        musicSr = MidiSystem.getSequencer(); 
          musicSr.open(); 
          musicSr.setSequence(musicS); 
          musicSr.setLoopCount(musicSr.LOOP_CONTINUOUSLY); 
          musicSr.start(); 

       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 


       midiplay = false; 

      } 
+0

的可能重複[如何控制研究的MIDI通道的音量(http://stackoverflow.com/questions/8008286/how-to-controll-the-midi-channels-volume) –

+0

@OliCharlesworth這個問題有合成器和聲音銀行,我不使用。 – Ravekitty

+0

@DiegoCNascimento我該怎麼做?我可以有一個片段/使用示例 – Ravekitty

回答

4
  1. 呼叫getSequence得到Sequence之前淡出;
  2. 致電getTracks獲取曲目列表;
  3. 在每個軌道
  4. ,在軌道使用的每個通道,撥打add在適當的時間位置添加多個事件:

    track.add(new MidiEvent(
        new ShortMessage(ShortMessage.CONTROL_CHANGE, channel, 7, volume), 
        tick)); 
    
  5. 也許去除其他數量變化的事件從(將你的淡出干擾)軌道;
  6. 等待一段時間讓淡出發生。