Daten an Soundkarte schicken, aufzeichnen und abgleichen [ERLEDIGT]



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



  • ZockerFloh7 schrieb:

    Edit:... oder muss ich das jetzt auch machen?

    Ja, DU musst das machen.
    Sonst macht es nämlich keiner.



  • DirkB schrieb:

    Ja, DU musst das machen.
    Sonst macht es nämlich keiner.

    So wie du das Zitierst reißt du meine Aussage völlig aus dem Zusammenhang.
    Bring mal sinvolle Beiträge statt das Forum hier zu zu spammen

    Danke für die Infos nwp3 🙂
    aber ich muss das leider irgendwie mit der Soundkarte lösen... 😞

    Das Hauptproblem ist, dass die Daten total unterschiedlich aussehen

    Was ich sende:
    http://imageshack.com/i/5emtx1p

    Was ich aufzeichne:
    http://imageshack.com/i/0jp1plp



  • Probier doch mal die Bits einzeln zu senden.

    //ungetestet, vielleicht wäre std::string angemessener
    std::vector<char> encode(const std::vector<char> &data){
        std::vector<char> enc;
        for (auto it : data){
            char c = *it;
            for (int i = 0; i < 8; i++){
                enc.push_back(c & 1 ? 127 : -127);
                c >>= 1;
            }
        }
        return enc;
    }
    
    std::vector<char> decode(const std::vector<char> &data){
        std::vector<char> dec:
        for (int it = 0; it + 7 < data.size(); it++){
            char c = 0;
            for (int i = 0; i < 8; i++){
                if (data[it + i] > 0)
                    c++;
                c <<= 1;
            }
            dec.push_back(c);
        }
    }
    

    Vor dem Senden encoden und nach dem Empfangen decoden, mit etwas Glück kommt dasselbe raus.



  • Hmm, nach nochmaligem drüberkucken stelle ich fest, dass das +127/-127 und >0 Blödsinn ist. Du willst natürlich statt +127 0xFF schicken und statt -127 0x00 schicken und dann die Bits zählen und nach Mehrheit gewinnt zurückwandeln.
    Das kriege ich aber gerade nicht im Kopf zusammen.
    Btw das encode kann man stacken, also 3 mal encode und dann 3 mal decode wenn es nicht reicht.



  • Das hat mir jetzt wirklich geholfen! 🙂

    Danke, Danke nwp3

    Hattest zwar ein paar kleine Fehler bei dir drin, aber ohne den Code wär ich nie auf die Idee gekommen wie ich das encoden/deconden realisieren hätte sollen.

    Hier der funktionierende Code:

    //encode
        std::string enc;
        std::vector<char> data;
        for (auto it : data)
        {
            unsigned char c = it;
            for (int i = 0; i < 8; i++)
            {
                enc.push_back(c & 1 ? 0xFF : 0x00);
                c >>= 1;
            }
        }
    
         //decode
        std::vector<char> dec;
        for (int it = 0; it + 7 < enc.size(); it++)
        {
            unsigned char c = 0;
            for (int i = 7; i >= 0; i--)
            {
                if (enc[it + i] < 0) c++; 
    	    if (i != 0) c <<= 1;
            }
            dec.push_back(c);
        }
    

    Werd das ganze mal in mein Programm einbauen und dann berichten obs funktioniert.

    Grüße ZF


Anmelden zum Antworten