länge einer wavdatei ermitteln

F_P_aus_K

Erfahrenes Mitglied
hallo vielen Dank,

leider komme ich damit nicht viel weiter.

ich dachte es gäbe eine einfache Methode und muss die Datei nicht zerlegen um meine Zeit aus Dateilänge und Samplerate zu errechnen.

Gruss
Frank
 

chmee

verstaubtes inventar
Premium-User
Also Bitte, Diese Rechnung ist auch nicht schwer. Mit ein bisschen Grips ist die in 5 Minuten zusammengestellt.

mfg chmee

p.s.: Hier mal die Grundgedanken:
WAV/PCM hat eine konstante Bitrate/Sekunde. Wenn man also die Dateigröße in Bit durch die Bitrate teilt, sollte eigentlich die
Laufzeit als Ergebnis in Sekunden erscheinen. Kürzen oder Umwandeln macht die Sache einfacher. Da es aber mehrere WAV-
Formate gibt, sollte man trotzdem im Header nachschauen, damit man die richtige Bitrate hat - die steht da drin :)
 
Zuletzt bearbeitet:

F_P_aus_K

Erfahrenes Mitglied
nagut, dann muss ich mach da wohl durchquälen,

es geht ja nicht ums können, sondern eher die Faulheit :)



Übrigens: sehr interessante Projekte (phreekz) hab auch mal mit G+B zusammengearbeitet
vielen Dank

Gruss
frank
 
Zuletzt bearbeitet:

chmee

verstaubtes inventar
Premium-User
Frank, wenn Du zu Faul bist, eine Formel quasi im Handumdrehen mit 10 Windungen Hirnschmalz hinzuschreiben, weiss ich nicht, was Du möchtest ?! Und zudem schreibst Du Deine Frage in ein Coder-Unterforum.. hm..

Wir sind keine - Wir erledigen das für Euch - Community.

mfg chmee

Offtopic: Meistens sind diese interessanten Projekte einfach nur Jobs, womit ich meinen Lebensunterhalt verdiene. Referenzen eben.. Aber Danke..
 

F_P_aus_K

Erfahrenes Mitglied
>>Wir sind keine - Wir erledigen das für Euch - Community.<<

so wahr das ja auch nicht gemeint, die Links die du mir gegeben hast helfen mir ja schon weiter.Mit faul meinte ich nur , daß ich dacht, das es eine fertige Methode gäbe wo man sich das sparen kann, ich tüfltle eingentlch zeilmlich gerne was ebenso mein Beruf ist.

grüss meine alte Heimatstadt

frank
 

F_P_aus_K

Erfahrenes Mitglied
füe jeden dem es interessieren sollte


Code:
    Dim buffer() As Byte
    Dim fs As New FileStream(file, FileMode.Open)
    Dim br As New BinaryReader(fs)
    Dim stext, stemp As String
    Dim itemp As Integer
    Dim Potenz As Integer = 0


    stemp = ""
    stext = "Länge der Datei: " & br.BaseStream.Length & vbCrLf ' Länge der Datei

    buffer = br.ReadBytes(br.BaseStream.Length)

    ' ********************************************
    ' * Header einer PWM wave Datei
    ' * 1) 1. - 4. Byte = ASCII-Zeichen für "RIFF"
    For i As Integer = 0 To 3
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      Dim aChar As Char = Chr(buffer(i))
      stemp += aChar.ToString           ' Ausgabe als Zeichen
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & stemp & vbCrLf
    ASCIIRIFF = stemp
    stemp = ""

    ' * 2) 5. - 8. Byte = Länge des Files (mit Header) in Byte, vermindert um 8
    For i As Integer = 4 To 7
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    FileLaenge = itemp
    itemp = 0   ' tmp zurücksetzen
    Potenz = 0  ' Potenz zurücksetzen

    ' * 3) 9. - 16. Byte = ASCII-Zeichen für "WAVEfmt_"
    For i As Integer = 8 To 15
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      Dim aChar As Char = Chr(buffer(i))
      stemp += aChar.ToString           ' Ausgabe als Zeichen
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & stemp & vbCrLf
    ASCIIWaveformat = stemp
    stemp = ""

    ' * 4) 17. - 20. Byte = zur Zeit fest Dez. 16 bzw Hex 10 00 00 00
    For i As Integer = 16 To 19
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    Konst16 = itemp
    itemp = 0
    Potenz = 0  ' Potenz zurücksetzen

    ' * 5) 21. - 22. Byte = Format-Version, z.Zt. 1
    For i As Integer = 20 To 21
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    FormatVersion = itemp
    itemp = 0
    Potenz = 0

    ' * 6) 23. - 24. Byte = Anzahl der Kanäle, 1 = Mono, 2 = Stereo
    For i As Integer = 22 To 23
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    AnzahlKanaele = itemp
    itemp = 0
    Potenz = 0

    ' * 7) 25. - 28. Byte = Abtastfrequenz in Hz
    For i As Integer = 24 To 27
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    Abtastfrequenz = itemp
    itemp = 0
    Potenz = 0

    ' * 8) 29. - 32. Byte = Byte pro Sekunde
    For i As Integer = 28 To 31
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    ByteProSekunde = itemp
    itemp = 0
    Potenz = 0

    ' * 9) 33. - 34. Byte = Byte pro Sample
    For i As Integer = 32 To 33
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    ByteProSample = itemp
    itemp = 0
    Potenz = 0

    ' * 9) 35. - 36. Byte = Bit pro Sample
    For i As Integer = 34 To 35
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    BitsProSample = itemp
    itemp = 0
    Potenz = 0

    ' * 10) 37. - 40. Byte = ASCII-Zeichen für "data"
    For i As Integer = 36 To 39
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      Dim aChar As Char = Chr(buffer(i))
      stemp += aChar.ToString           ' Ausgabe als Zeichen
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & stemp & vbCrLf
    ASCIIdata = stemp
    stemp = ""

    ' * 9) 41. - 44. Byte = Länge des anschließenden Datenfeldes in Byte
    For i As Integer = 40 To 43
      'Dim num_val As Byte = Byte.Parse(buffer(i), System.Globalization.NumberStyles.HexNumber)
      itemp += buffer(i) * 256 ^ Potenz
      Potenz += 1
      stext += Hex(buffer(i)) & " "     ' Ausgabe als Hex
    Next
    stext += "= " & itemp.ToString & vbCrLf
    LaengeDatenfeldes = itemp
    itemp = 0
    Potenz = 0

    WaveLaengeInSekunde = (FileLaenge - 44) / ByteProSekunde

greez

frank
 

Neue Beiträge