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);} }
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(0.4, 0, 0); posx = posx + 20; break; default: play(0.2, 0, 440); if (posx + 10 > 800) { posx = 0; posy = posy + 30; } canvas.fillRect(posx - 5, posy + 5, 10, 0); posx = posx + 10; } } }
morseAusgabe();
ausführen