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>