Reputation: 31
I'm trying to run code importing classes from javax.sound.midi
package, but nothing works. Code had compiled and run successfully, but there is no sound.
I've download soundbank for Java, and put it in audio
folder, but it's still not working.
Macbook Pro mid 2010
Mac OS X High Sierra
Java version 12.0.1
from 2019-04-16
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();}
}
}
Upvotes: 2
Views: 219
Reputation: 1772
The problem is that you use command 128 for both a
and b
. Base on ShortMessage the command 128 is note off event.
As example change the a.setMessage(128, 1, 44, 100);
with a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);
and you will get sound.
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();
}
}
Upvotes: 1