2015/6/15
1沿猜、用Sequencer(音序器)來創(chuàng)建音樂苟弛;但是Sequencer是一個(gè)接口,所以在創(chuàng)建對象時(shí)要用:
<pre><code>
Sequencer player=MidiSystem.getSequencer();
</code></pre>
同時(shí),MidiSystem是一個(gè)類疟羹,Sequencer繼承了MidiSystem。
在使用Sequencer時(shí)屹耐,要用try……catch……包裹
player.open();//開啟音序器
2期奔、MidiEvent是組合樂曲的指令,仿畸,指令實(shí)際會(huì)放在Message對象中(用ShortMessage,ShortMessage 包含了一個(gè) MIDI 消息食棕,該消息在狀態(tài)字節(jié)后最多有兩個(gè)數(shù)據(jù)字節(jié)。ShortMessage 類提供了用于獲取和設(shè)置 MIDI 消息內(nèi)容的方法)
<pre><code>
//創(chuàng)建Message
ShortMessage a=new ShortMessage();
//置入指令
//44代表發(fā)出44音符
//第一個(gè)參數(shù)是信息類型错沽,其余三個(gè)要根據(jù)信息類型而定
//144代表打開類型簿晓,128代表關(guān)閉類型
1代表頻道(指不同的演奏者),44代表音符號(0-127代表不同的音高)千埃,100代表音道(0-100代表音量)
a.setMessage(144,1,44,100);
b.setMessage(128,1,44,100);
first.setMessage(192,1,70,0);
//用Message創(chuàng)建MidiEvent
//表示在第一拍啟動(dòng)a
MidiEvent noteoff=new MidiEvent(a,1);
//在第四拍啟動(dòng)b憔儿,即關(guān)閉
MidiEvent noteoff=new MidiEvent(b,4);
//將MidiEvent加到Track(軌道)中
//所有的MidiEvent都要加到Track中,Sequencer會(huì)根據(jù)時(shí)間來組織它們放可,同一時(shí)間可以執(zhí)行多個(gè)谒臼,例如合聲唱逢。
track.add(noteoff);
</code></pre>
3.更換樂器和音調(diào)的方法
192代表著設(shè)置樂器,
1是頻道屋休,確定修改樂器的頻道
70代表修改的樂器坞古,
0是音道,這里必須是0.
<pre><code>
ShortMessage first=new ShortMessage();
first.setMessage(192,1,70,0);
MidiEvent f=new MidiEvent(first,1);
//中的“1”代表更改的節(jié)拍號劫樟。
track.add(f);
</code></pre>
4.Sequence是一個(gè)類痪枫,通過把它添加到sequencer對象中來執(zhí)行音樂:
<pre><code>
Sequence seq=new Sequence(Sequence.PPQ,4);
player.setSequence(seq);
</code></pre>
同時(shí):track作為一個(gè)接口,也要通過Sequence來創(chuàng)建:
<pre><code>
Track track=seq.createTrack();
</code></pre>
源碼:
<pre><code>
package Music;
import javax.sound.midi.*;
public class MiniMiniMusicApp {
public static void main(String[] args){
MiniMiniMusicApp mini=new MiniMiniMusicApp();
mini.play();
}
public void play(){
try{
Sequencer player=MidiSystem.getSequencer();
player.open();
Sequence seq=new Sequence(Sequence.PPQ,4);
Track track=seq.createTrack();
ShortMessage first=new ShortMessage();
first.setMessage(192,1,70,0);
MidiEvent f=new MidiEvent(first,1);
track.add(f);
ShortMessage a=new ShortMessage();
a.setMessage(144,1,44,100);
MidiEvent noteOn=new MidiEvent(a,1);
track.add(noteOn);
ShortMessage b=new ShortMessage();
b.setMessage(128,1,44,100);
MidiEvent noteoff=new MidiEvent(b,8);
track.add(noteoff);
player.setSequence(seq);
player.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
</code></pre>