die sind "http://pbs.de.gg/PB$4.20%5EStable@T.gif" und nix von "nordgoetter.de",
und außerdem wurden die schon komplett angezeigt als ich immer noch die zeigersanduhr hatte...
... und heute tritt es nicht auf... wasn schmarrn
RIFF-INFO-Chunks mit API lesen/schreiben?
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Dann kann mir vielleicht jetzt jemand zum Thema weiterhelfen?
Wenn ich das im Eingangspost genannte Dokument richtig verstehe, muß ich
zum lesen/schreiben der RIFF-Tags das AVI-File über die AVIFILE-Funktionen
initiieren, öffnen, bearbeiten, schließen und "exiten"
Hab ich versucht, aber schon bei STDAPI_(VOID) AVIFileInit(VOID);
mach ich wohl mit der PB-Übersetzung AVIFileInit_(); laufe ich auf.
Was mach ich flasch?
Wenn ich das im Eingangspost genannte Dokument richtig verstehe, muß ich
zum lesen/schreiben der RIFF-Tags das AVI-File über die AVIFILE-Funktionen
initiieren, öffnen, bearbeiten, schließen und "exiten"
Hab ich versucht, aber schon bei STDAPI_(VOID) AVIFileInit(VOID);
mach ich wohl mit der PB-Übersetzung AVIFileInit_(); laufe ich auf.
Was mach ich flasch?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ich hab vor langer Zeit mal ein Snippet zusammengeschraubt was den RIFF Header von .WAV Dateien ausliest um deren Länge zu bestimmen. Sollte sich auf AVI Dateien übertragen lassen. Naja, vielleicht hilfts ja ...
Code: Alles auswählen
Define lpck.MMCKINFO, wfmt.WAVEFORMATEX
If InitSound() = 0
MessageRequester("Error","DirectX 7 isn't available or no sound card present.",16) : End
EndIf
Filename$ = OpenFileRequester("","","WAVE Files (*.wav)|*.wav",0)
If Filename$
HMMIO = mmioOpen_(Filename$,0,#MMIO_READ)
; FILE FORMAT
lpck\fccType = mmioStringToFOURCC_("WAVE",0)
Result = mmioDescend_(HMMIO,lpck,0,#MMIO_FINDRIFF)
If Result <> #MMSYSERR_NOERROR
MessageRequester("Error","Not a wave file!",16) : End
EndIf
; READ FORMAT CHUNK
lpck\ckid = mmioStringToFOURCC_("fmt",0)
Result = mmioDescend_(HMMIO,lpck,lpck,#MMIO_FINDCHUNK)
If Result <> #MMSYSERR_NOERROR
MessageRequester("Error","Couldn't get format chunk!",16) : End
EndIf
; READ COMPRESSION TYPE
mmioRead_(HMMIO,wfmt,lpck\ckSize)
If wfmt\wFormatTag ! #WAVE_FORMAT_PCM
MessageRequester("Error","Compressed wave files aren't supported!",16) : End
EndIf
; READ DATA CHUNK
lpck\ckid = mmioStringToFOURCC_("data",0)
Result = mmioDescend_(HMMIO,lpck,lpck,#MMIO_FINDCHUNK)
If Result <> #MMSYSERR_NOERROR
MessageRequester("Error","Couldn't get data chunk!",16) : End
EndIf
; CALCULATE SOUND LENGTH
Duration = lpck\ckSize / wfmt\nAvgBytesPerSec
Hours = Duration / 3600
Minutes = (Duration / 60) - (60 * Hours)
Seconds = Duration - (60 * (Duration / 60))
Millisecs = Int(lpck\ckSize / (wfmt\nAvgBytesPerSec / 1000))
Hours$ = Str(Hours) : Minutes$ = Str(Minutes) : Seconds$ = Str(Seconds)
If Seconds < 10 : Seconds$ = "0" + Seconds$ : EndIf
If Minutes < 10 : Minutes$ = "0" + Minutes$ : EndIf
If Hours < 10 : Hours$ = "0" + Hours$ : EndIf
Time$ = Hours$ + ":" + Minutes$ + ":" + Seconds$
mmioClose_(HMMIO,0)
; DEBUG INFO
Debug "Soundfile = " + Filename$
Debug "Duration = " + Str(Millisecs) + " Ms"
Debug "Time Format = " + Time$ + " (H:M:S)"
EndIfWindows 10 Pro, 64-Bit / Outtakes | Derek
Fluid Byte hat geschrieben:Sollte sich auf AVI Dateien übertragen lassen. Naja, vielleicht hilfts ja ...
Code: Alles auswählen
EnableExplicit
Define HMMIO.l
Define Result.l
Define raushier.l
Define main_lpck.MMCKINFO
Define info_lpck.MMCKINFO
Define Itag_lpck.MMCKINFO
Define Itag_buff.s =Space(1024)
Define filename.s
Filename = OpenFileRequester("","","AVI Files (*.avi)|*.avi",0)
If Filename
HMMIO = mmioOpen_(Filename,0,#MMIO_READ)
; check FILE FORMAT
main_lpck\fccType = mmioStringToFOURCC_("AVI ",#MMIO_TOUPPER)
Result = mmioDescend_(HMMIO,main_lpck,0,#MMIO_FINDRIFF)
If Result <> #MMSYSERR_NOERROR
Debug "Error: Not an AVI file!" : End
EndIf
; find the LIST named INFO
info_lpck\fccType= mmioStringToFOURCC_("INFO",#MMIO_TOUPPER)
Result = mmioDescend_(HMMIO,info_lpck,0,#MMIO_FINDLIST)
If Result <> #MMSYSERR_NOERROR
Debug "Error: Couldn't get the LIST named INFO!" :End
EndIf
Debug "---here we start exploring RIFF-Tags and Extended Information Tags---"
; find all existing tag-chunks
raushier = #False
Repeat
Itag_lpck\ckid =0
Itag_lpck\cksize =0
Itag_lpck\fccType =0
Itag_lpck\dwDataOffset=0
Itag_lpck\dwFlags =0
result = mmioDescend_(HMMIO,Itag_lpck,info_lpck,#MMIO_FINDCHUNK)
If (result <> #MMSYSERR_NOERROR) Or Itag_lpck\ckid = mmioStringToFOURCC_("JUNK",#MMIO_TOUPPER)
raushier = #True
Else
result = mmioRead_(HMMIO,Itag_buff,Itag_lpck\ckSize)
Debug PeekS(@Itag_lpck\ckid,4) +": "+Itag_buff
EndIf
Until raushier = #True
Debug "---finished exploring RIFF-Tags and Extended Information Tags---"
mmioClose_(HMMIO,0)
EndIfIrgendwelche Vorschläge?
Zuletzt geändert von scholly am 28.10.2008 00:20, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Welche Infos willst du denn eigentlich?
Das MMIO System ist sehr veraltet und Dateien über 2GB bzw. 4GB können nicht verarbeitet werden (z.B. Captures).
Nimm für sowas AVIFILEINFO oder AVISTREAMINFO aus der M$ VFW Library oder via Directshow oooder am besten via LibavFormat, sprich MediaInfo Dll, und da meine ich hast du dich ja auch schon mit beschäftigt.
Das MMIO System ist sehr veraltet und Dateien über 2GB bzw. 4GB können nicht verarbeitet werden (z.B. Captures).
Nimm für sowas AVIFILEINFO oder AVISTREAMINFO aus der M$ VFW Library oder via Directshow oooder am besten via LibavFormat, sprich MediaInfo Dll, und da meine ich hast du dich ja auch schon mit beschäftigt.
Hier gibts die OOP Option für PureBasic.
Ich will an die RIFF-INFO-Tags ran. Lesen und schreiben. Das sind Meta-Daten (ähnlich ID3v2-Tags), zu finden in LIST INFO.inc. hat geschrieben:Welche Infos willst du denn eigentlich?
Diese Info ist neu für mich, hab ich bisher noch nicht auf MSDN in Zusammenhang mit den Resource Interchange File Format Services gefundenDas MMIO System ist sehr veraltet und Dateien über 2GB bzw. 4GB können nicht verarbeitet werden (z.B. Captures).
Bei AVIFILEINFO oder AVISTREAMINFO sehe ich keine Möglichkeit, an die Tags heranzukommen.Nimm für sowas AVIFILEINFO oder AVISTREAMINFO aus der M$ VFW Library oder via Directshow oooder am besten via LibavFormat, sprich MediaInfo Dll, und da meine ich hast du dich ja auch schon mit beschäftigt.
Auf Directshow und LibavFormat bin ich bei meinen Suchen in Zusammenhang mit diesen Tags noch nicht gestoßen.
(Wie) Sollte man die Tags damit lesen und schreiben können? AFAIK geht es da doch jeweils nur um die AV-Codecs.
---
Bei MediaInfo.dll steht Schreiben noch in weiter Ferne.
Bei abcAVI.dll steh ich auf verlorenem Posten, da komm ich allein auch nich mit weiter:http://www.purebasic.fr/german/viewtopic.php?t=17641.
---
MediaInfo (GUI/CLI) kann entsprechend b.a.w. auch nicht schreiben.
abcAVI bietet nur Tags an, die dem Autor damals bekannt/sinnvoll waren.
MMAviInf schreibt nur die Tags, die es selber kennt und reicht ihm unbekannte nicht durch.
Mehr Möglichkeiten, an diese Tags heranzukommen hab ich bisher nich gefindet.
Nach diesen Erkenntnissen bin ich zu dem Entschluß gekommen, es selber mit PB zu versuchen, aber wie schon so oft, steh ich irgendwann vor ner Wand und find den Durchgang nich.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)