Funktion zum Auslesen des .wav-Dateien-Headers

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Garfield

Betreff: Funktion zum Auslesen des .wav-Dateien-Headers

BeitragSo, Mai 23, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier findet man alle Angaben über den Header von .wav-Dateien

Dank BladeRunner hier eine sehr verständliche Abhandlung:

http://www.it.fht-esslingen.de...de115.html


http://www.fh-friedberg.de/fac...dito41.htm

oder hier noch viel mehr:

http://www.wotsit.org/search.asp?s=music

ein Braodcast Wave File sieht so aus:

http://www.ebu.ch/trev_274-chalmers.pdf

hier eine Funktion um relevante Daten auszulesen:

Funktion aufrufen -> Datei inkl. Pfad übergeben

BlitzBasic: [AUSKLAPPEN]
Function Wav_Laenge(Datei$)

WaveBank = CreateBank(44)

WavFile= ReadFile(Datei$)

ReadBytes WaveBank,WavFile,0,44; den ganzen Header in eine SpeicherBank



Lang# = PeekByte(WaveBank,4)+ (PeekByte(WaveBank,5)*256) + (PeekByte(WaveBank,6)*65536 )+ (PeekByte(WaveBank,7)*16777216 )

Print "Dateigroesse: "+Lang+" Bytes"

Lang = Lang +8 -44 ; laut Beschreibung um die korrekte Länge des eigentlichen Soundfiles zu bestimmen


Frequenz = PeekByte(WaveBank,24)+ (PeekByte(WaveBank,25)*256) + (PeekByte(WaveBank,26)*65.536 ); 3 Bytes reichen..

Print "Samplingfrequenz: "+Frequenz+" Hz"

Bytes = PeekByte(WaveBank,28)+ (PeekByte(WaveBank,29)*256) + (PeekByte(WaveBank,30)*65536 )+ (PeekByte(WaveBank,31)*16777216 )

LangSekunden# = Lang/bytes

Print "Laenge: "+LangSekunden +" Sekunden"

Minuten= Floor(LangSekunden/60)
Sekunden = LangSekunden Mod 60
Print Minuten+":"+Sekunden

SampleRate = PeekByte (WaveBank,34)
Print "Aufloesung: "+SampleRate+" bit"

Mono_Stereo = PeekByte (WaveBank,22); 1 Byte für Mono/Stereo
If Mono_Stereo =1
Print "Mono"
Else
Print "Stereo"
End If



FreeBank WaveBank

Return LangSekunden

End Function
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
  • Zuletzt bearbeitet von Garfield am Fr, Mai 28, 2004 16:14, insgesamt 4-mal bearbeitet

Garfield

BeitragDi, Mai 25, 2004 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe den Code verbessert und ergänzt (siehe oben) Exclamation
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Garfield

Betreff: Programm zum Auslesen des Headers von .wav Dateien

BeitragDo, Mai 27, 2004 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist ein fertiges StandAlone Programm um die Daten eines Wav-Headers auszulesen und anzuzeigen.

Code für BlitzPlus

EXE Download hier:

http://www.erwinmusik.de/blitz...erTest.exe

BlitzBasic: [AUSKLAPPEN]

; Wav Header Test Winfried Rothenberg 2004

Global Prog_Window_Width = 800
Global Prog_Window_Hight = 600

Global main_window = CreateWindow("Was steht im Wav-Dateien Header",(ClientWidth(Desktop())-Prog_Window_Width)/2,(ClientHeight(Desktop())-Prog_Window_Hight)/2,Prog_Window_Width,Prog_Window_Hight,0,15)
SetMinWindowSize main_window ,1024,768

SetStatusText main_window,Prog_Window_Width + " x " + Prog_Window_Hight ; Anzeige wie groß das Fenster ist


Global TExtfeld = CreateTextArea(100,100,300,300,main_window)

Global Name = CreateLabel ("Escape zum Verlassen",150,30,500,30,main_window)



Global Prog_Directory$ = CurrentDir()

Global CurrentPfad$

CurrentPfad$= RequestFile ("bitte Datei wählen","wav","mp3")

Laenge = Wav_Laenge(CurrentPfad$)


While Not KeyDown(1)

ID = WaitEvent(10)

ED = EventData()
ES = EventSource()
Select EventID()


Case $803: Ende() ; Windows Close

End Select

Wend



End

Function Wav_Laenge(Datei$)

AddTextAreaText TExtfeld, Datei$+Chr$(10)

WaveBank = CreateBank(44)

WavFile= ReadFile(Datei$)

ReadBytes WaveBank,WavFile,0,44; den ganzen Header in eine SpeicherBank



Lang# = PeekByte(WaveBank,4)+ (PeekByte(WaveBank,5)*256) + (PeekByte(WaveBank,6)*65536 )+ (PeekByte(WaveBank,7)*16777216 )

AddTextAreaText TExtfeld, "Dateigroesse: "+Lang+" Bytes"+Chr$(10)

Lang = Lang +8 -44

Mono_Stereo = PeekByte (WaveBank,22); 1 Byte für Mono/Stereo


Frequenz = PeekByte(WaveBank,24)+ (PeekByte(WaveBank,25)*256) + (PeekByte(WaveBank,26)*65.536 ); 3 Bytes reichen..


Bytes = PeekByte(WaveBank,28)+ (PeekByte(WaveBank,29)*256) + (PeekByte(WaveBank,30)*65536 )+ (PeekByte(WaveBank,31)*16777216 )

AddTextAreaText TExtfeld, Bytes+ " Bytes" + Chr$(10)

LangSekunden# = Lang/bytes

AddTextAreaText TExtfeld, "Laenge: "+LangSekunden +" Sekunden"+ Chr$(10)

Minuten= Floor(LangSekunden/60)
Min$ = Minuten
If Len(min$) =1 Then Min2$ = "0"+Min$
Sekunden = LangSekunden Mod 60
Sek$ = Sekunden
If Len(Sek) =1 Then Sek2$ = "0"+Sek$
AddTextAreaText TExtfeld, "Dauer: "+Min2+":"+Sek2+ Chr$(10)

AddTextAreaText TExtfeld, "Samplingfrequenz: "+Frequenz+" Hz"+Chr$(10)
SampleRate = PeekByte (WaveBank,34)
AddTextAreaText TExtfeld, "Aufloesung: "+SampleRate+" bit"+Chr$(10)

If Mono_Stereo =1
AddTextAreaText TExtfeld, "Mono"+Chr$(10)
Else
AddTextAreaText TExtfeld,"Stereo"+Chr$(10)
End If

AddTextAreaText TExtfeld,Chr$(10)

FreeBank WaveBank

Return LangSekunden

End Function

Function Ende()

End

End Function



BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group