Bergervei/Java-Morsecode

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
<code id="4dc26f887f635" hidden>
javax.sound.sampled.AudioFormat audioFormat;
javax.sound.sampled.AudioInputStream audioInputStream;
javax.sound.sampled.SourceDataLine sourceDataLine;
float sampleRate = 16000.0F;
int sampleSizeInBits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = true;
audioData = new byte[16000*16];

void fillBuffer(double startat,double freq) {
 java.nio.ByteBuffer byteBuffer;
 java.nio.ShortBuffer shortBuffer;
 int byteLength;
 byteBuffer = java.nio.ByteBuffer.wrap(audioData);
 shortBuffer = byteBuffer.asShortBuffer();
 byteLength = audioData.length;

 channels = 1;//Java allows 1 or 2
 int bytesPerSamp = 2;
 int sampLength = byteLength / bytesPerSamp;
 for (int cnt = 0; cnt < sampLength; cnt++)
 {
  double time = cnt / sampleRate;
  double sinValue = playFunction(startat/2+time,freq);
  shortBuffer.put((short)(16000 * sinValue));
 }
}

void play(int dauer, double startat, double freq){
 dauer = dauer * 2;
 audioData = new byte[16000*dauer];
 try{
 fillBuffer(startat,freq);
 InputStream byteArrayInputStream =  new ByteArrayInputStream(audioData);
 audioFormat = new javax.sound.sampled.AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
 audioInputStream = new javax.sound.sampled.AudioInputStream(byteArrayInputStream, audioFormat,  
                        audioData.length / audioFormat.getFrameSize());
 javax.sound.sampled.DataLine.Info dataLineInfo = 
       new javax.sound.sampled.DataLine.Info(javax.sound.sampled.SourceDataLine.class, audioFormat);
 sourceDataLine = (javax.sound.sampled.SourceDataLine)javax.sound.sampled.AudioSystem.getLine(dataLineInfo);
 sourceDataLine.open(audioFormat);
 sourceDataLine.start();
 playBuffer = new byte[16384];
 int cnt;
 while ((cnt = audioInputStream.read(playBuffer, 0,playBuffer.length))!= -1)
  if (cnt > 0) sourceDataLine.write(playBuffer, 0, cnt);
 sourceDataLine.drain();
 sourceDataLine.stop();
 sourceDataLine.close();
 }
 catch (Exception e){e.printStackTrace();System.exit(0);}
}
</code>

<code id="4dc06bfe63ce0">
public void morseAusgabe() {
 String morsetext = JOptionPane.showInputDialog(null, "Gib den Text ein!");
 String morscode = "";
 String morse = "";
 for (int i = 0; i < morsetext.length(); i++) {
  String zeichen = morsetext.substring(i, i+1).toUpperCase();
  switch (zeichen) {
   case "A":
    morsecode = ".- ";
    break;
   case "B":
    morsecode = "-... ";
    break;
   case "C":
    morsecode = "-.-. ";
    break;
   case "D":
    morsecode = "-.. ";
    break;
   case "E":
    morsecode = ". ";
    break;
   case "F":
    morsecode = "..-. ";
    break;
   case "G":
    morsecode = "--. ";
    break;
   case "H":
    morsecode = ".... ";
    break;
   case "I":
    morsecode = ".. ";
    break;
   case "J":
    morsecode = ".--- ";
    break;
   case "K":
    morsecode = "-.- ";
    break;
   case "L":
    morsecode = ".-.. ";
    break;
   case "M":
    morsecode = "-- ";
    break;
   case "N":
    morsecode = "-. ";
    break;
   case "O":
    morsecode = "--- ";
    break;
   case "P":
    morsecode = ".--. ";
    break;
   case "Q":
    morsecode = "--.- ";
    break;
   case "R":
    morsecode = ".-. ";
    break;
   case "S":
    morsecode = "... ";
    break;
   case "T":
    morsecode = "- ";
    break;
   case "U":
    morsecode = "..- ";
    break;
   case "V":
    morsecode = "...- ";
    break;
   case "W":
    morsecode = ".-- ";
    break;
   case "X":
    morsecode = "-..- ";
    break;
   case "Y":
    morsecode = "-.-- ";
    break;
   case "Z":
    morsecode = "--.. ";
    break;
   case "0":
    morsecode = "----- ";
    break;
   case "1":
    morsecode = ".---- ";
    break;
   case "2":
    morsecode = "..--- ";
    break;
   case "3":
    morsecode = "...-- ";
    break;
   case "4":
    morsecode = "....- ";
    break;
   case "5":
    morsecode = "..... ";
    break;
   case "6":
    morsecode = "-.... ";
    break;
   case "7":
    morsecode = "--... ";
    break;
   case "8":
    morsecode = "---.. ";
    break;
   case "9":
    morsecode = "----. ";
    break;
   case "Ä":
    morsecode = ".-.- ";
    break;
   case "Ö":
    morsecode = "---. ";
    break;
   case "Ü":
    morsecode = "..-- ";
    break;
   case "ß":
    morsecode = "...--.. ";
    break;
   case ".":
    morsecode = ".-.-.- ";
    break;
   case ":":
    morsecode = "---... ";
    break;
   case ",":
    morsecode = "--..-- ";
    break;
   case ";":
    morsecode = "-.-.-. ";
    break;
   case "?":
    morsecode = "..--.. ";
    break;
   case "-":
    morsecode = "-....- ";
    break;
   case "_":
    morsecode = "..--.- ";
    break;
   case "":
    morsecode = "-.--. ";
    break;
   case "":
    morsecode = "-.--.- ";
    break;
   case "'":
    morsecode = ".----. ";
    break;
   case "=":
    morsecode = "-...- ";
    break;
   case "+":
    morsecode = ".-.-. ";
    break;
   case "/":
    morsecode = "-..-. ";
    break;
   case "@":
    morsecode = ".--.-. ";
    break;
   case " ":
    morsecode = "/ ";
    break;
   default:
    morsecode = "? ";
  }
  System.out.print(morsecode);
  morse = morse + morsecode;
 }
 for (int i = 0; i < morse.length(); i++) {
  String zeichen = morse.substring(i, i+1).toUpperCase();
  switch (zeichen) {
   case ".":
    piano.play(50, 100); // MIDI-Key , Dauer
    break;
   case "-":
    piano.play(50, 200); // MIDI-Key , Dauer
    break;
  }
 }
}
</code>

<run id="4dc067795f749">
morseAusgabe();
</run>