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="4dcaec05cdf7f">
public double playFunction(double t, double f) {
double sinValue = Math.sin(2*Math.PI*f*t);
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;
}
canvas.clear();
int posx = 0;
int posy = 20;
for (int i = 0; i < morse.length(); i++) {
String zeichen = morse.substring(i, i+1);
switch (zeichen) {
case ".":
play(0.2, 0, 1000);
if (posx + 10 > 800) {
posx = 0; posy = posy + 30;
}
canvas.fillRect(posx, posy, 10, 10);
posx = posx + 20;
break;
case "-":
play(0.6, 0, 1000);
if (posx + 30 > 800) {
posx = 0; posy = posy + 30;
}
canvas.fillRect(posx, posy, 30, 10);
posx = posx + 40;
break;
case "/":
play(1, 0, 440);
posx = posx + 10;
break;
default:
posx = posx + 20;
}
}
}
</code>
<canvas w="800" h="200"></canvas>
<run id="4dcaea0c4ceef">
morseAusgabe();
</run>