große datenmengen in c++ speichern



  • Bei C-Arrays wie der ID geht auch f.read( ID, sizeof(ID) );



  • Danke für die tips aber wir stehen schon wieder von einem Problem...

    die headerdaten werden super ausgelesen, aber wir wissen nicht wie wir die für uns wichtigen daten danach auslesen können... wir haben folgendes versucht:

    short Data;
         //laenge enthält die anzahl der samples (werte) in der wavedatei
         int laenge;
    
         short *Data2;
         Data2=new short[laenge];
    
         for (int i = 0; i < laenge; i++)
         {
            f.read(reinterpret_cast<char*>(&Data), sizeof(Data));
            Data2[i]=Data;
          }
    

    danach sind in Data2 nur werte rund um +/-30000 enthalten, also keine korrekten datensätze...
    machen wir beim read() irgendwas falsch?



  • Erstmal hoffe ich, daß du irgendwo zwischen den Zeilen 3 und 5 auch einen Wert in die Variable 'laenge' eingetragen hast.

    Zweitens kannst du auch das Array auf einen Rutsch einlesen:

    short* Data = new[laenge];
    f.read(reinterpret_cast<char*>(Data),laenge*sizeof(short));
    

    Und drittens: sind alle eingelesenen Werte identisch? Wenn nein - hast du mal die angekommenen Daten mit dem Dateiinhalt verglichen?



  • semi schrieb:

    danach sind in Data2 nur werte rund um +/-30000 enthalten, also keine korrekten datensätze...

    Was ist daran nicht korrekt? Wenn du Werte zwischen 0 und 65.535 erwartest, musst du deine Variablen als 'unsigned short' deklarieren, dann werden sie anders interpretiert 🙂



  • endlich funktionierts...die komischen werte (immer entwender nah an 30000 oder -30000 und nicht dazwischen) lagen wohl am format der verwendeten wav-datei. funktionieren tuts nur bei pcm.

    @CStoll:
    1. aber natürlich
    2. danke für den tip, haben wir eingebaut

    @Badestrand:
    die werte sollen schon sowohl im minus- als auch im plusbereich liegen, nur dürfen sie nicht so auf kleinem bereich verteilt sein

    vielen dank für die viele hilfe!!! 🙂 🙂 🙂
    wir haben jetzt unsere wavedatei vollständig in ein großes array eingelesen und können die daten nun weiterverarbeiten.
    aber: stereo-wavedateien scheinen anders aufgebaut zu sein als mono-wavedateien. weiß jemand wie?



  • semi schrieb:

    aber: stereo-wavedateien scheinen anders aufgebaut zu sein als mono-wavedateien. weiß jemand wie?

    Soweit ich weiß, immer abwechselnd 16 Bit für links und rechts. Also für jeden Lautsprecher immer nur jedes zweites short nehmen 🙂



  • semi schrieb:

    die werte sollen schon sowohl im minus- als auch im plusbereich liegen, nur dürfen sie nicht so auf kleinem bereich verteilt sein

    Wieso klein? 30000 liegt schon ziemlich nahe am Maximalwert für short.



  • CStoll schrieb:

    semi schrieb:

    die werte sollen schon sowohl im minus- als auch im plusbereich liegen, nur dürfen sie nicht so auf kleinem bereich verteilt sein

    Wieso klein? 30000 liegt schon ziemlich nahe am Maximalwert für short.

    Aber -30000 ist schon ziemlich klein. Beziehungsweise ein großes Kleines oder kleines Großes. 😉



  • abgesehen davon das dieses problem schon gelöst ist...;)
    die werte sahen ungefähr so aus:
    29993,30256,31387,-30213,-29345
    doch normal wären auch werte wie:
    145,2745,-234,5,9364

    ich hoffe ich habe jetzt verständlich gemacht was falsch war.



  • aber: stereo-wavedateien scheinen anders aufgebaut zu sein als mono-wavedateien. weiß jemand wie?

    oh bitte bitte bitte guck doch auch mal was selber nach.
    das format von wav dateien ist ausreichend gut dokumentiert.


Anmelden zum Antworten