程序不产生 Midi 声音
Program not producing Midi sound
我一直在阅读 Head First Java,这是练习制作音序器和播放 midi 的代码。事情是我没有听到我通过帖子搜索的任何内容,我听说我得到并放置了一个 soundbank.gm 文件,但仍然没有任何内容。无法判断这是我的代码还是我的 PC,因为这本书还没有达到解释所有这些功能的地步。
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(); //get a sequencer
player.open(); //open it
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack(); //ask the sequence for a track;
ShortMessage b = new ShortMessage(); //Put some midi events into the Track.
b.setMessage(128,1,44,100);
MidiEvent noteOff = new MidiEvent(b, 16);
track.add(noteOff);
player.setSequence(seq); //give the Sequence to the sequencer
player.start(); // press play.
Thread.sleep(2000);
player.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
您缺少 note_on。例如:
ShortMessage b = new ShortMessage();
b.setMessage(144, 0, 60, 127);
MidiEvent noteOn = new MidiEvent(b, 2);
track.add(noteOn);
// Here's your note_off
ShortMessage b1 = new ShortMessage();
b1.setMessage(128, 1, 44, 100);
MidiEvent noteOff = new MidiEvent(b1, 16);
track.add(noteOff);
我一直在阅读 Head First Java,这是练习制作音序器和播放 midi 的代码。事情是我没有听到我通过帖子搜索的任何内容,我听说我得到并放置了一个 soundbank.gm 文件,但仍然没有任何内容。无法判断这是我的代码还是我的 PC,因为这本书还没有达到解释所有这些功能的地步。
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(); //get a sequencer
player.open(); //open it
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack(); //ask the sequence for a track;
ShortMessage b = new ShortMessage(); //Put some midi events into the Track.
b.setMessage(128,1,44,100);
MidiEvent noteOff = new MidiEvent(b, 16);
track.add(noteOff);
player.setSequence(seq); //give the Sequence to the sequencer
player.start(); // press play.
Thread.sleep(2000);
player.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
您缺少 note_on。例如:
ShortMessage b = new ShortMessage();
b.setMessage(144, 0, 60, 127);
MidiEvent noteOn = new MidiEvent(b, 2);
track.add(noteOn);
// Here's your note_off
ShortMessage b1 = new ShortMessage();
b1.setMessage(128, 1, 44, 100);
MidiEvent noteOff = new MidiEvent(b1, 16);
track.add(noteOff);