Benutzer:Seboll

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
Mit diesem Java-Formular kann man einen Text eingeben und diesen in Morseschrift wieder ausgeben lassen.
<code id="4dd4efe87966c" 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 draw(double dauer, double start,double freq){ 
 dauer = dauer * 2; 
 double oldy = 100;
 canvas.setColor(200,200,200);
 canvas.line(0,100,600,100);
 canvas.setColor(0,0,0);
 for(int x=0; x< 600; x++) {   
   double newy = 100+100*playFunction(start/2+((double)dauer/2/600*x),freq);   
   if(start/2+(double)dauer/2/600*x == 0){
    canvas.setColor(200,200,200);
    canvas.line(x,0,x,200);
    canvas.setColor(0,0,0);
   }
   canvas.line((x-1),(int)(oldy),x,(int)(newy));  
   oldy = newy; 
 }
}

void play(double 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="4dd4efe87970c">
double playFunction(double x, double freq){
      double sinValue =
        Math.sin(2*Math.PI*freq*x); 
      return (sinValue);
}
public void morseAusgabe() {
 String morse = new String();
 String morsekette = ""; 
 morse = JOptionPane.showInputDialog(null, "Gib den Text ein!");
 for (int i = 0; i < morse.length(); i++) {
  String zeichen = morse.substring(i, i+1).toUpperCase();
  switch (zeichen) {
   case "A":
    morsekette = morsekette + " .-";
    break;
   case "B":
    morsekette = morsekette + " -...";
    break;
   case "C":
    morsekette = morsekette + " -.-.";
    break;
   case "D":
    morsekette = morsekette + " -..";
    break;
   case "E":
    morsekette = morsekette + " .";
    break;
   case "F":
    morsekette = morsekette + " ..-.";
    break;
   case "G":
    morsekette = morsekette + " --.";
    break;
   case "H":
    morsekette = morsekette + " ....";
    break;
   case "I":
    morsekette = morsekette + " ..";
    break;
   case "J":
    morsekette = morsekette + " .---";
    break;
   case "K":
    morsekette = morsekette + " -.-";
    break;
   case "L":
    morsekette = morsekette + " .-..";
    break;
   case "M":
    morsekette = morsekette + " --";
    break;
   case "N":
    morsekette = morsekette + " -.";
    break;
   case "O":
    morsekette = morsekette + " ---";
    break;
   case "P":
    morsekette = morsekette + " .--.";
    break;
   case "Q":
    morsekette = morsekette + " --.-";
    break;
   case "R":
    morsekette = morsekette + " .-.";
    break;
   case "S":
    morsekette = morsekette + " ...";
    break;
   case "T":
    morsekette = morsekette + " -";
    break;
   case "U":
    morsekette = morsekette + " ..-";
    break;
   case "V":
    morsekette = morsekette + " ...-";
    break;
   case "W":
    morsekette = morsekette + " .--";
    break;
   case "X":
    morsekette = morsekette + " -..-";
    break;
   case "Y":
    morsekette = morsekette + " -.--";
    break;
   case "Z":
    morsekette = morsekette + " --..";
    break;
   case "0":
    morsekette = morsekette + " -----";
    break;
   case "1":
    morsekette = morsekette + " .----";
    break;
   case "2":
    morsekette = morsekette + " ..---";
    break;
   case "3":
    morsekette = morsekette + " ...--";
    break;
   case "4":
    morsekette = morsekette + " ....-";
    break;
   case "5":
    morsekette = morsekette + " .....";
    break;
   case "6":
    morsekette = morsekette + " -....";
    break;
   case "7":
    morsekette = morsekette + " --...";
    break;
   case "8":
    morsekette = morsekette + " ---..";
    break;
   case "9":
    morsekette = morsekette + " ----.";
    break;
   case "Ä":
    morsekette = morsekette + " .-.-";
    break;
   case "Ö":
    morsekette = morsekette + " ---.";
    break;
   case "Ü":
    morsekette = morsekette + " ..--";
    break;
   case "ß":
    morsekette = morsekette + " ...--..";
    break;
   case ".":
    morsekette = morsekette + " .-.-.-";
    break;
   case ":":
    morsekette = morsekette + " ---...";
    break;
   case ",":
    morsekette = morsekette + " --..--";
    break;
   case ";":
    morsekette = morsekette + " -.-.-.";
    break;
   case "?":
    morsekette = morsekette + " ..--..";
    break;
   case "-":
    morsekette = morsekette + " -....-";
    break;
   case "_":
    morsekette = morsekette + " ..--.-";
    break;
   case "(":
    morsekette = morsekette + " -.--.";
    break;
   case ")":
    morsekette = morsekette + " -.--.-";
    break;
   case "'":
    morsekette = morsekette + " .----.";
    break;
   case "=":
    morsekette = morsekette + " -...-";
    break;
   case "+":
    morsekette = morsekette + " .-.-.";
    break;
   case "/":
    morsekette = morsekette + " -..-.";
    break;
   case "@":
    morsekette = morsekette + " .--.-.";
    break;
   case " ":
    morsekette = morsekette + "/";
    break;
   default:
    morsekette = morsekette + "?";
  }
 }
  System.out.println(morsekette);
 canvas.clear();
 int posx = 0;
 int posy = 20;
 for (int i = 0; i < morsekette.length(); i++) {
  String zeichen = morsekette.substring(i, i+1).toUpperCase();
  switch (zeichen) {
   case ".":
    play(0.5,0,1000.0);
    dauer = 1000/4; canvas.fillRect(posx, posy, dauer/20, 10); // 1 kurzer Balken entspricht einem "Punkt" im Morsealphabet. 
    posx = posx + dauer/20 + 5;
   if (posx > 780) {posx = 0; posy = posy + 20;
                   }
    break;
   case "-":
    play(1.5,0,1000.0);
    dauer = 1000/1; canvas.fillRect(posx, posy, dauer/20, 10); // 1 langer Balken entspricht einem "Strich" im Morsealphabet.
    posx = posx + dauer/20 + 5;
   if (posx > 780) {posx = 0; posy = posy + 20;
                   }
   break;
   case " ":
    play(1.5,0,0.0);
    dauer = 300/1; canvas.fillRect(posx, posy, dauer/20, 00); // 1 Strich entspricht einer Pause zwischen 2 Buchstaben.
    posx = posx + dauer/20 + 5;
   if (posx > 780) {posx = 0; posy = posy + 20;
                   } 
  break;
   case "/":
    play(2.0,0,0.0);
    dauer = 300/1; canvas.fillRect(posx, posy, dauer/20, 00); // 2 Striche entsprechen einer Pause zwischen 2 Wörtern.
    posx = posx + dauer/20 + 5;
   if (posx > 780) {posx = 0; posy = posy + 20;
                   }
  break;
  }
 }
}
</code>
<run id="4dd4efe8797a3">
morseAusgabe();
</run>
<canvas w="850" h="500"></canvas>