2013-09-24 51 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. 等待一段时间让淡出发生。