0

Java でモールス再生メカニズムを実装しようとしています。文字列で正常に動作していましたが、停止機能を実装するために、ドライバーから一度に1つずつ配信される単一の文字で動作させようとしています。

ただし、プログラムはランダムに再生を停止するようです。例えば:

"こんにちは": ... 。.-.. .-.. ---

「---」の直前で無音になる

「うーん」: .... .... .... ....

4 番目の h の最初のドットの後は無音になります。

「おお」: --- --- --- --- ---

4 番目の 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();
    }
}
4

1 に答える 1