Programm das Datei in Töne umwandelt
-
Die Ausgabe dürfte Recht einfach zu realisieren sein.
Vielleicht solltest du dir einen Dos-Compiler besorgen und die Töne über den PC-Speaker ausgeben.Die Signale wieder richtig zu erkennen, ist da schon ne ganze Ecke schwieriger.
Vielleicht kommst du ja günstig an einen Akkustikkoppler.
-
es gibt ja einige verfahren ... z.B. Netzwerk über CB-Funk ... mich interessiert aber ob das was ich mir denke (auch wenn es nicht effizient ist) realisierbar ist.
-
(bitte ankreuzen)
-
Schon mal was von PacketRadio gehört???????? Wieso das Rad neu erfinden?
Dazu gibt's besonders im Linuxbereich genügend Software.
-
Hm, ich möchte nicht wissen, was für Kackophonien eine Latex Datei im Gegesatz zu eine Notepad Datei erzeugt.
-
SueDama.java
class SueDama { // Wandelt eine angegbene Note nach der Vorgabe der Variation um public static char transformNote(char note, String variation) { switch(note) { case 'c': return variation.charAt(0); case 'd': return variation.charAt(1); case 'f': return variation.charAt(2); case 'g': return variation.charAt(3); case 'a': return variation.charAt(4); default: return ('c'); } } // Generiert einen Satz aus einer vorgebenen Varation und einem vorgegebenen Thema public static StringBuilder generateSentence(String theme, String variation, String sentenceForm) { StringBuilder newSentence = new StringBuilder(""); for(int i = 0; i < sentenceForm.length(); i++) { if(sentenceForm.charAt(i) == 't') { newSentence.append(theme); } else { for(int x = 0; x < theme.length(); x++) { //composition.append(transformNote(theme.charAt(x), variation)); char note = transformNote(theme.charAt(x), variation); newSentence.append(note); } } } return newSentence; } public static void main(String[] args) { Music musiclist = new Music(); // Midi // Eingaben von Komandozeile lesen String theme = new String(args[0]); String variation = new String(args[1]); String sentence = new String(args[2]); int numOfSentences = Integer.parseInt(args[3]); if(numOfSentences > 6) // 1/128 ist das schnellste was die Klasse Music hergibt numOfSentences = 6; // der erste Satz hat einen 1/4tel Tackt der Sechste einen 1/128 Takt int speed = 4; for(int counter = 1; counter < numOfSentences + 1; counter++) { // Jeden Satz einzeln generiern und in Musikliste eintragen // Satz nach Thema und Variation generieren StringBuilder Sentence = generateSentence(theme, variation, sentence); // Satz ausgeben System.out.println(Sentence); // In Musikliste kopieren for(int dummy = Sentence.toString().length()-1; dummy >= 0; dummy--) { musiclist.append(Sentence.charAt(dummy), speed); } // neue geschwindigkeit speed = speed * 2; // 4, 8, 16, 32 // der letzte Satz wird als neues Thema verwendet theme = Sentence.toString(); } musiclist.play(); } }
Music.java:
import java.util.*; import javax.sound.midi.*; class Music { private boolean silent = false;//true;//false;//true;//false; public Music() { try { sequence = new Sequence(Sequence.PPQ, 8); track = sequence.createTrack(); } catch(InvalidMidiDataException ex) { ex.printStackTrace(); } } public void append(char tone, int duration) { try { int i = toneNames.indexOf(tone); if(i < 0) throw new IllegalArgumentException("undefinierter Notenname: " + tone); if(duration != 1 && duration != 2 && duration != 4 && duration != 8 && duration != 16 && duration != 32 && duration != 64 && duration != 128) throw new IllegalArgumentException("unzulaessige Tonlaenge: " + duration); midiMsg(ShortMessage.NOTE_ON, midiTone[i], 64); timepos += 32/duration; midiMsg(ShortMessage.NOTE_OFF, midiTone[i], 64); } catch(InvalidMidiDataException ex) { ex.printStackTrace(); } notes.append(tone); notes.append(duration); notes.append(' '); } private void midiMsg(int code, int b1, int b2) throws InvalidMidiDataException { ShortMessage message = new ShortMessage(); message.setMessage(code | 1, b1, b2); track.add(new MidiEvent(message, timepos)); } public void play() { if(silent) return; try { Synthesizer synthesizer = MidiSystem.getSynthesizer(); synthesizer.open(); Sequencer sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(sequence); sequencer.start(); } catch(Exception ex) { ex.printStackTrace(); } } public void print() { System.out.println(notes.toString()); } private int timepos = 0; private final String toneNames = "cdefgabh"; private final int[] midiTone = {60, 62, 64, 65, 67, 69, 70, 71}; private Sequence sequence; private final StringBuilder notes = new StringBuilder(); private Track track; public static void main(String[] args) { Music m = new Music(); m.append('a', 4); m.append('d', 4); m.play(); m.print(); } }
Beispielhafter Aufruf:
java SueDama agca fddcg tvvt 3Hintergrundinformation: http://www.fh-landshut.de/~gschied/programmieren-praktikum/slide0018.html
Das Programm kann einfach in das Umgewandlet werden was du brauchst
-
nur so am rande:
ich hab mir so ein ding mal programmiert, in ANSI C....
war ein konsolenprogramm. beispiel-eingabe: "phtone 12345678".
hat das dann in diesen tastentönen von neuren telefonen ausgegeben.
die samples waren aus dem java SDK geklaut, da gibts ein beispiel-applet das solche töne hat.nur war das eben nur zum "codieren", nicht aber zum entschlüsseln (und erkennen) der töne.... sinn dahinter war/ist: ich habe ein altes telefon, welches keine tastentöne hat, aber manchmal braucht man tastentöne (z.b. für die anmeldung beim telefonbanking). einfach hörer an lautsprecher halten und los gehts
ich denke das mit dem erkennen ist noch der schwierigste teil...
-
Korbinian schrieb:
(bitte ankreuzen)
Schon mal was von PacketRadio gehört???????? Wieso das Rad neu erfinden?
Ja ich hab schonmal was von PacketRadio gehört.
Okay dann versuch ich einen neuen Start. Erstmal danke an Vertexwahn, ich werd mir das heute Abend genau ankucken.
Ich wüsste gerne wie es funktioniert dass man in ner Win32 Konsole mit c++ programmiert verschiedene Töne auf die Soundkarte ausgibt.
-
Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
also, wenn du richtig, richtig faul bist (so wie ich), dann fertigst du dir ein set an wavefiles, suchst in google nach "playwav.exe" (kleine cmdline win-exe, startet man einfach mit nem wavefile als parameter), und bindest diese per system() in dein programm ein...