我正在尝试运行从javax.sound.midi
包中导入类的代码,但是没有任何效果。代码已编译并成功运行,但是没有声音。
我已经下载了Java的Soundbank,并将其放在audio
文件夹中,但是仍然无法使用。
Macbook Pro 2010年中
Mac OS X High Sierra
从2019-04-16起的Java版本12.0.1
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
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 a = new ShortMessage();
a.setMessage(128, 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, 16);
track.add(noteOff);
player.setSequence(seq);
player.start();
} catch (Exception ex) {ex.printStackTrace();}
}
}
最佳答案
问题是您同时对a
和b
使用命令128。基于ShortMessage,命令128为音符关闭事件。
144事件注释
128注意事项
192程序更改,用于更改默认乐器等
176发送事件的控制更改
224弯音
例如,将a.setMessage(128, 1, 44, 100);
更改为a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);
,您将获得声音。
public static void play() {
try {
Sequencer player = MidiSystem.getSequencer();
player.open();
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack();
ShortMessage a = new ShortMessage();
a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);
MidiEvent noteOn = new MidiEvent(a, 5);
track.add(noteOn);
ShortMessage b = new ShortMessage();
b.setMessage(ShortMessage.NOTE_OFF, 1, 44, 100);
MidiEvent noteOff = new MidiEvent(b, 16);
track.add(noteOff);
player.setSequence(seq);
player.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
关于java - Javax.sound.midi学习代码无法在MacOS X上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580291/