Programm das Datei in Töne umwandelt



  • Ich brauch ein Programm mit dem ich eingetippte ASCII zeichen einfach direkt in einen Ton umwandele (z.B. Morse oder anderes System), dieser Ton wird dann auf den Soundkartenausgang gelegt und per Funk übertragen. Es kann jeder diesen Ton empfangen. Wenn ich an meinem Mikrofoneingang einen Empfänger anschließe kann ich dann Signale empfangen die jeder beliebige andere sendet.

    Es gibt also ein Programm das alles was am Soundkarteneingang ankommt in Zeichen umwandelt und diese in einem Fenster darstellt. Gleichzeitig wandelt es alle zeichen die in einem anderen Chatfenster eingetippt werden in Audiosignale um die auf der Soundkarte ausgegeben werden.

    Mehr soll dieses Programm vorerst nicht können.



  • Was genau ist das Anliegen deines Beitrags?

    Möchtest du, dass dir das jemand (un)entgeldlich programmiert?
    Oder willst du es selber schreiben und weißt nicht, wo du ansetzen sollst?



  • was zahlste dafür?

    rapso->greets();



  • nein zahlen kann ich nicht ... 🙂 könnte ja sein dass jemand zu viel Zeit hat? 😉

    Ich kann c++ programmieren aber nur Konsolenprogrammierung, und da weis ich absoult nicht wie sowas per konsole realisiert werden könnte. Wenn ja dann wär das genial.

    Ich mag den ganzen winapi kram nicht so (liegt wohl daran dass ich mich nicht damit auskenne), aber es is ja für vieles sehr nützlich.

    Ich wollte fragen ob mir jemand Starthilfe für das Programm geben kann.



  • 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 3

    Hintergrundinformation: 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...


Anmelden zum Antworten