2016-08-06 56 views
1

Ich versuche, die BitsPerSample aus einer WAV-Datei mit FileStream zu extrahieren. Entsprechend dieser Quelle: WAV offset Table befindet sich der BitsPerSample am Offset 35 und ist 2 Bytes lang.BitsPerSample aus einer RIFF-WAV-Datei extrahieren

Dies ist mein Code für den Versuch, sie zu extrahieren:

public int getBitsPerSample() 
{ 
    int bitsPerSample; 
    using (var f = File.OpenRead(wavPath)) 
    { 
     f.Seek(35,SeekOrigin.Begin); 
     byte[] val = new byte[2]; 
     f.Read(val,0,2); 
     bitsPerSample = BitConverter.ToInt16(val,0); 
    } 
    return bitsPerSample; 
} 

Nun, wenn ich dies auf einer WAV-Datei verwenden, ich weiß, ist 16 Bit, i eine BitsPerSample von 25600 erhalten? Als ich einen Hex-Editor benutzte, um die WAV-Datei zu sehen, wurde mein Verdacht bestätigt, die 2 Bytes waren tatsächlich bei Offset 0x22, kurz bevor es "d a t a" sagt, wo es sein sollte. Die Überprüfung einer anderen 16-Bit-WAV-Datei bestätigte dies.

Suche bei 0x22 gab mir Bitspersample von 2, was auch nicht korrekt ist.

Wenn jemand das Problem schon jetzt kennt, ist das toll, aber ich werde immer ein paar Infos hinzufügen, falls es benötigt wird.

Wenn ich eine 32-Bit-WAV-Datei in einem Hex-Editor öffnete ich die BitsPerSample bei Offset 0x4E gefunden, die wiederum von meiner Quelle völlig anders, und mein letztes Ergebnis ...

Antwort

0

Ihr Problem ist, dass Sie Fehlinterpretation der Offsets von der verknüpften Ressource. Sie sind 1-basiert. Die Dateisuche funktioniert offensichtlich 0-basiert. Suchen Sie stattdessen nach Byte 34 und versuchen Sie es erneut.