我正在尝试在 Java 中实现莫尔斯播放机制。我让它与字符串一起工作正常,但为了实现停止功能,我试图让它与单个字符一起工作,该字符将一次从驱动程序传递一个。
但是,该程序似乎有点随机停止播放。例如:
“你好”: ... 。.-.. .-.. ---
在“---”之前保持沉默
“呵呵”:…………………………
在第四个 h 的第一个点后静音。
“呜呜”:--- --- --- --- ---
在第四个 o 之后变得沉默。
司机:
Runnable r = new Runnable() {
public void run() {
Morse.play(returnval);
/*
char[] c = returnval.toCharArray();
for (char v : c){
String s = "";
s += v;
System.out.print(s);
Morse.play(s);
}
*/
}
};
new Thread(r).start();
播放方法:
public static void play(String morse){
char[] notes = morse.toCharArray();
int unit = 100;
int mult = 0;
try {
Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
MidiChannel channel = synthesizer.getChannels()[0];
channel.programChange(0, 80);
for (char note : notes) {
switch (note){
case '.':
mult = 1;
break;
case '-':
mult = 3;
break;
case ' ':
mult = -3;
break;
default:
mult = 0;
break;
}
try{
if (mult > 0){
channel.noteOn(60, 30);
Thread.sleep(mult*unit);
}
else {
Thread.sleep(mult*-1*unit);
}
channel.allNotesOff();
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
}