Daten an Soundkarte schicken, aufzeichnen und abgleichen [ERLEDIGT]



  • Hey Leute,
    Hab ein kleines Problem, und zwar möchte ich einen beliebigen Datenstring (z.B. "abcdefg") an meine Soundkarte schicken und diesen String mit einem Aufnahmeprogramm wieder aufzeichnen (Audio Out/In sind mit Klinkenstecker verbunden)

    Das schicken der Daten funktioniert einwandfrei, nur die aufgezeichneten Daten in der Audiodatei enthalten meinen String ("abcdefg") nicht mehr, woran kann das liegen?

    hier der Code dazu:

    LPSTR GeneratePattern(int &patternSize)
    {
        patternSize = 0;
        int value = 0x00;
        char patternbuf[200];
        for (int i = 0; i < 200; i++)
        {
    	   patternbuf[i] = value;
    	   value++;
    	   patternSize++;
        }
    
        return patternbuf;
    }
    
    void WriteToOutput(int deviceid)
    {
        WAVEFORMATEX wave_device;
        wave_device.cbSize = sizeof(WAVEFORMATEX);
        wave_device.wFormatTag = WAVE_FORMAT_PCM;
        wave_device.nChannels = 2;
        wave_device.nSamplesPerSec = 44100;
        wave_device.wBitsPerSample = 16;
        wave_device.nBlockAlign = (wave_device.nChannels * wave_device.wBitsPerSample) /8;
        wave_device.nAvgBytesPerSec = wave_device.nSamplesPerSec * wave_device.nBlockAlign;
    
        LPHWAVEOUT phwo = NULL;
        int result = waveOutOpen((LPHWAVEOUT)&phwo, deviceid, &wave_device, NULL, NULL, CALLBACK_NULL);
        if(result == MMSYSERR_NOERROR) 
        {
    	    printf(">> Device Opened for Sending.\n");
    	    LPSTR pattern;
    	    int patternSize = 0;
    
    	    pattern = GeneratePattern(patternSize);
    
    	    printf(">> Audio Pattern generated.\n");
    	    writeAudioBlock((HWAVEOUT)phwo, pattern, patternSize); 
                int result = waveOutClose((HWAVEOUT)phwo);
        }
        else error = true;
    }
    


  • Hast du die Verstärkung geändert? Evtl. sind Großbuchstaben daraus geworden. 🤡



  • DirkB schrieb:

    Hast du die Verstärkung geändert? Evtl. sind Großbuchstaben daraus geworden. 🤡

    nee, verstärkung hab ich nix geändert
    windows sounds sind hald auf voller lautstärke
    Im debugger werden mit kleinbuchstaben angezeigt, bis kurz bevor das pattern weg geschickt wird...



  • Komisch, dass du überhaupt nur Kleinbuchstaben siehst, denn die kommen in deinem Beispielcode so gar nicht vor.

    Das in den aufgezeichneten Daten der Text nicht mehr drin ist, kann daran liegen, dass du überhaupt nicht zur selben Zeit aufzeichnest.

    🤡



  • DirkB schrieb:

    Komisch, dass du überhaupt nur Kleinbuchstaben siehst, denn die kommen in deinem Beispielcode so gar nicht vor.

    Das in den aufgezeichneten Daten der Text nicht mehr drin ist, kann daran liegen, dass du überhaupt nicht zur selben Zeit aufzeichnest.

    🤡

    die schleife zählt doch hex hoch, 0x61 ist doch "a" (nur so als beispiel)
    das problem ist ja ich sehe garnichts so wie ich es sende!
    muss irgendwie mit encoding oder ähnlichem zusammen hängen



  • Was weißt du über
    - die Lebensdauer von Variabeln (Scope)?
    - Arrays in C/C++?

    Hast du dich mal damit beschäftigt,
    - was eine Soundkarte macht?
    - wie sie es macht?
    - was die Werte (in pattern ) für die Soundkarte bedeuten?
    - was die anderen Werte bei wave_device. bedeuten?



  • Mit Scope & Array kann ich was anfangen 😉

    Mit der Sondkarte hab ich mich noch garnicht beschäftigt, les mich aber gleich mal ein...
    Problem ist die Daten die ich reinschicke kommen anscheinend in einem anderen Format wieder raus



  • Ist dir klar, dass du beim Ausgang eine DA-Wandlung hast, die auch noch gefiltert wird (Abtasttheorem)?

    Ist dir klar, dass du beim Eingang eine AD-Wandlung hast, die auch noch gefiltert wird (Abtasttheorem)?

    Ist dir klar, dass dazwischen die Synchronisierung und Amplituden (Lautstärke) eine Rolle spielen?

    Ist dir klar, das deine Wellenform ziemlich merkwürdig aussieht (du steckst in pattern 8-Bit-Daten rein, gibst sie aber als 16-Bit-Daten aus)?

    ZockerFloh7 schrieb:

    Mit Scope & Array kann ich was anfangen

    Wenn es nicht nur dem Namen nach ist, beachte es auch.



  • habe testweiße internetradio aufgenommen und ausgegeben, wenn ich das als 16 bit aufnehme und auch 16 bit wieder abspielen will kommt alles verzerrt raus, mit 8 bit stimmts komischerweiße
    frag mich nicht warum 😕

    sowas mit AD/DA-Wandlung hab ich fast schon befürchtet - aber leider wenig ahnung von

    dann mal ne grundsätzliche frage, bevor ich mich da jetzt verrückt mach obwohl das was ich machen muss evtl nicht möglich ist
    ich soll Nutzdaten über dein audio-out gerät zu einem audio-in gerät senden und diese anschließend vergleichen ob sie gleich sind, geht das?

    wenn was exakt muss ich machen?

    Danke schonmal für die Hilfe 🙂



  • Ws verstehst du unter Nutzdaten?
    Was verstehst du unter gleich?

    Ist ein Lied gleich, wenn es einmal von CD kommt, das andere mal aus dem Radio? Oder gar live gespielt wird?



  • Nutzdaten ist z.B. dieses Pattern, oder irgend eine von mir festgelegte Zahlen/Buchstabenfolge
    notfalls kanns auch ne Datei sein

    Gleich heißt, dass ich das von mir festgelegte Pattern in der Aufnahme wieder finden will.
    Die Daten müssen exakt übereinstimmen und wieder zu finden sein.



  • Willst du so was wie Steganographie machen oder nur Nutzdaten übertragen?

    Dann schau dir mal an, wie ein Telefonmodem/Akustikkoppler das macht.



  • ist nur für Nutzdaten 🙂

    kannst du mir sonst noch irgendwelche tipps geben?
    das mit dem Telefonmodem schau ich mir gleich an 😃

    Edit:
    Das mit dem modem hilft mir nicht viel weiter, da steht lediglich dass das signal digital/analog oder umgekehrt gewandelt wird oder muss ich das jetzt auch machen?
    Wenn ich meine Daten digital in die Soundkarte reinschicke diese analog bei meinem Lautsprecherausgang rauskommen, analog bei meinem Microfon eingang ankommen und dann auf der Platte gespeichert werden müssen sie doch eigentlich wieder digital und im richtigen format sein oder? 😞



  • Ich weigere mich zu glauben dass man gleichzeitig fähig sein kann ein Programm zu schreiben welches Daten über die Soundkarte ausgibt und wieder einliest, und navi genug zu glauben dass man dabei wieder das selbe zurückbekommen könnte wie man rausgeschickt hat.

    Ja, ich weiss, mit einigem Aufwand und ditigaler Signalübertragung ist das grundsätzlich machbar. Aber das ist ja hier nicht das Thema. Hier wird von Lautsprechern und Mikrofonen geschrieben.

    => TROLL



  • hustbaer schrieb:

    Hier wird von Lautsprechern und Mikrofonen geschrieben.

    Immerhin wird im ersten Post noch von einer Kabelverbindung zwischen den Buchsen die rede.

    hustbaer schrieb:

    => TROLL

    Oh, da sind ja die Großbuchstaben. 🤡



  • hustbaer schrieb:

    Ich weigere mich zu glauben dass man gleichzeitig fähig sein kann ein Programm zu schreiben welches Daten über die Soundkarte ausgibt und wieder einliest, und navi genug zu glauben dass man dabei wieder das selbe zurückbekommen könnte wie man rausgeschickt hat.

    Sry hustebaer aber die Daten lassen sich ja schon übertragen, demnach funktionierts ja. 😃
    nur ist der Inhalt nicht der gleiche, sprich ich kann sie nicht vergleichen, obwohl die dateien wenn man sie sich anhört vom ton her gleich sind... 😕



  • ZockerFloh7 schrieb:

    Wenn ich meine Daten digital in die Soundkarte reinschicke diese analog bei meinem Lautsprecherausgang rauskommen, analog bei meinem Microfon eingang ankommen und dann auf der Platte gespeichert werden müssen sie doch eigentlich wieder digital und im richtigen format sein oder? 😞

    Nein.

    Druck mal ein Bild aus und scan es wieder ein.
    Vergleich das Original und den Scan.



  • ZockerFloh7 schrieb:

    hustbaer schrieb:

    Ich weigere mich zu glauben dass man gleichzeitig fähig sein kann ein Programm zu schreiben welches Daten über die Soundkarte ausgibt und wieder einliest, und navi genug zu glauben dass man dabei wieder das selbe zurückbekommen könnte wie man rausgeschickt hat.

    Sry hustebaer aber die Daten lassen sich ja schon übertragen, demnach funktionierts ja. 😃
    nur ist der Inhalt nicht der gleiche, sprich ich kann sie nicht vergleichen, obwohl die dateien wenn man sie sich anhört vom ton her gleich sind... 😕

    Sorry, aber mein Transporter (Beamer) funktioniert ja schon einself.
    Nur kommt am anderen Ende noch nicht das raus was ich reingesteckt habe.

    TROLL



  • hustbaer schrieb:

    Sorry, aber mein Transporter (Beamer) funktioniert ja schon einself.
    Nur kommt am anderen Ende noch nicht das raus was ich reingesteckt habe.

    War auch mein erster Gedanke. 😃



  • ach leute, das hilft mir doch jetzt nichts 👎

    mitm modem konnte man doch auch DA/AD wandeln und dabei daten übertragen, also muss es irgenwie gehen



  • Das Problem ist, dass du Qualitätsverlust hast wenn du die Daten durch einen DA-Wandler und wieder durch einen AD-Wandler schickst. Deswegen kommt nicht dasselbe an. Was du also machen musst, ist deine Daten nicht direkt zu senden, sondern geschickt kodiert. Du kennst doch das Modempiepen. Du kannst zum Beispiel alle 10 ms einen Ton abspielen, A = 10 kHz, B = 20 kHz, C = 30 kHz .... Dann, wenn du den Ton wieder aufnimmst kannst du die Tonhöhe bestimmen. 5-15 kHz -> A, 15-25 kHz -> B... Man beachte, dass die Daten nicht exakt übertragen werden müssen, sondern nur +-5 kHz und die Lautstärke ist egal. Wahrscheinlich kommt er sogar mit Knacken klar.
    Die +-5 kHz sind nur ein prinzipielles Beispiel, du willst den Bereich so wählen, dass die Fehlerrate < Bereich ist, was noch je nach Frequenz anders ist (das erwähnte Abtasttheorem hilft da). Möglicherweise kannst du auch die Amplitude = Lautstärke benutzen. Das ist viel komplizierte Signalverarbeitung. Zum Glück gibts ja Modems, die exakt das tun, nur halt korrekt und schnell und mit automatischer Fehlerkorrektur und Protokollanpassung je nach Leitungsqualität. Also benutzt du 2 Modems und baust dir 2 Adapter, die von 2-Draht auf Klinkenstecker umsetzen, sagst "Windows mach mal DFÜ-Verbindung" und bist fertig.


Anmelden zum Antworten