3

サウンドバンクやシンセサイザーを使用せずに 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;

            }
4

1 に答える 1

4
  1. getSequenceを呼び出してSequenceを取得します。
  2. getTracksを呼び出してトラックのリストを取得します。
  3. 各トラックで、トラックで使用されるチャネルごとにaddを呼び出して、複数のイベントを適切な時間位置に追加します。

    track.add(new MidiEvent(
        new ShortMessage(ShortMessage.CONTROL_CHANGE, channel, 7, volume),
        tick));
    
  4. トラックから他の音量変更イベント (フェードアウトに干渉する) を削除するかもしれません。
  5. フェードアウトが発生するまで少し待ちます。
于 2013-09-25T08:05:21.867 に答える