Benutzer:Seboll

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
<code id="4dc58ec237878" 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;
 canvas.clear(); 
 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="4dc58ec2378f5">
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.print(morsekette);
for (int i = 0; i < morsekette.length(); i++) {
  String zeichen = morsekette.substring(i, i+1).toUpperCase();
  switch (zeichen) {
   case ".":
  draw(0.2,0,0);
  play(0.2,0,1000.0);
  break;
   case "-":
  draw(0.6,0,0);
  play(0.6,0,1000.0);
  break;
   case " ":
  draw(0.2,0,0);
  play(0.2,0,0.0);
  break;
   case "/"
  draw(0.6,0,0);
  play(0.6,0,1000.0);
  break;
  }
 }
}
</code>
<run id="4dc58ec23797a">
morseAusgabe();
</run>
<canvas width="1000"></canvas>