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(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="4dc272e364245">
double playFunction(double x, double freq){
double sinValue = Math.sin(2*Math.PI*freq*x);
return (sinValue);
}
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 ".":
play(0.2,0,1000.0);
break;
case "-":
play(0.6,0,1000.0);
break;
}
}
}
</code>
<run id="4dc067795f749">
morseAusgabe();
</run>