Seite 5 von 9

Verfasst: 19.02.2009 14:06
von Fluid Byte
Danke für Ihre ZahlungZahlung mit PayPal

Der Zahlungsbetrag wurde dem Verkäufer bereits gutgeschrieben.

Transaktionscode: 2B55888646511450H
Die Zahlung an xxxxxx@xxxxx.xx ist abgeschlossen.
Nen' neuen Porsche wirst du dir davon nicht kaufen können aber es ist sowieso eher als ein Zeichen von Respekt und Anerkennung zu sehen. :allright:

Verfasst: 19.02.2009 16:02
von ts-soft
@Fluid Byte :allright: kann ich gut gebrauchen

Verfasst: 19.02.2009 18:44
von ts-soft
Update :mrgreen:

hinzugefügt:
ZIP_IsPasswordRequired(), #True wenn encrypted, #False wenn nicht

geändert:
ZIP_ExtractArchiv() wurde wesentlich beschleunigt! Diese Funktion unterstüzt
jetzt ein Callback mit 2 Parametern: ZIP_ArchivCallback(progress, files)
Files ist der Gesamtfortschritt

Jemand noch Ideen?

Gruß
Thomas

@Fluid Byte
Nimmste bitte die Mail aus dem Zitat :mrgreen:

Verfasst: 19.02.2009 19:39
von Fluid Byte
Recht so! Für meine Kohle erwarte ich stündliche Updates! :mrgreen:
ts-soft hat geschrieben:Nimmste bitte die Mail aus dem Zitat
Erledigt. <)

Verfasst: 19.02.2009 22:21
von ts-soft
Fluid Byte hat geschrieben:Recht so! Für meine Kohle erwarte ich stündliche Updates! :mrgreen:
Stündlich ist teurer :mrgreen:

Update

Dateiattribute für Files (nicht für Ordner) werden gespeichert, bzw. wieder-
hergestellt. Dateidatum wird gespeichert und wiederhergestellt.

example3.pb hinzugefügt, mit Progressbalken :wink:

Gruß
Thomas

Verfasst: 19.02.2009 22:47
von Fluid Byte
Mir ist gerade aufgefallen das es zu einem Fehler kommt wenn man aus einem Archiv OGG-Dateien lädt die eine bestimmte Größe überschreiten. Ganz konkret habe ich hier ein Archiv mit zwei Dateien. Die eine ist 202847 Bytes groß und lädt problemlos. Die andere hat eine Größe von 495116 Bytes und da kackt der CatchSound() Befehl jedesmal ab.

Hier der Quelltext:

Code: Alles auswählen

XIncludeFile "MiniZIP.pbi"

Procedure ZIP_AccessArchive(Filename.s,*Length.LONG)
	Protected Index, mzfi.unz_file_info, ZIPFile$ = "music.zip"

	Index = ZIP_GetFileNumber(ZIPFile$,Filename)

	If Index > 0
		ZIP_GetFileInfo(ZIPFile$,Index,mzfi)		
		
		*Length\l = mzfi\uncompressed_size
		
		ProcedureReturn ZIP_CatchFile(ZIPFile$,Index)
	EndIf
EndProcedure


InitSprite() : InitKeyboard() : InitSound()

OpenWindow(0,0,0,640,480,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

UseOGGSoundDecoder()

; ///////////////////////////////////////////////////
;
; das auskommentierte file wird nicht geladen da es
; anscheindend eine bestimte Dateigröße überschreitet
;
; ///////////////////////////////////////////////////

; Result = ZIP_AccessArchive("sample1.ogg",@Length) ; 495116 Bytes

Result = ZIP_AccessArchive("sample2.ogg",@Length) ; 202847 Bytes

; ----------------------------------------------------

CatchSound(0,Result,Length)
FreeMemory(Result)

PlaySound(0)

Repeat
	Repeat
		EventID = WindowEvent()
	
		Select EventID
			Case #PB_Event_CloseWindow : End 
		EndSelect
	Until EventID = 0
	
	ExamineKeyboard()
	ClearScreen($804020)	
	FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Ich habe dir alles noch mal lauffähig zusammengepackt und hoch geladen:

http://www.codedreality.de/tl_files/tem ... _error.rar

Verfasst: 19.02.2009 23:21
von ts-soft
Nur wenn ich "UseOGGSoundDecoder()" weglasse, wird das File korrekt
gecatched. Meine Funktion ist also Fehlerfrei, Inhalt des Speichers entspricht
der Datei, nur mit "UseOGGSoundDecoder()" wirds garnicht geladen, warum
auch immer, hat aber nichts direkt mit meinem Code zu tun, eher mit der
Lib, bzw. mit was PB da macht.

Dein Beispiel ist etwas umständlich :wink:

Code: Alles auswählen

XIncludeFile #PB_Compiler_Home + "include\minizip_include.pbi"

InitSprite() : InitKeyboard() : InitSound()

OpenWindow(0,0,0,640,480,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

UseOGGSoundDecoder()

*mem = ZIP_CatchFile("music.zip", 2)

CatchSound(0,*mem,MemorySize(*mem))
FreeMemory(*mem)

PlaySound(0)

Repeat
	Repeat
		EventID = WindowEvent()
	
		Select EventID
			Case #PB_Event_CloseWindow : End 
		EndSelect
	Until EventID = 0
	
	ExamineKeyboard()
	ClearScreen($804020)	
	FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
und die verwendete Version von minizip veraltet (damit hats aber nicht zu tun)

Kann ich im moment nicht weiterhelfen :( , bleibe aber dran

// Nachtrag:
Da ogg-dateien sowieso durch zip fast garnicht mehr gepackt werden,
vergleiche mal die Dateigröße des Archivs mit den beiden entpackten Dateien,
böte sich doch an WAV zu nutzen, die werden besser gepackt
so das die Größe in etwa gleich bleibt.

Verfasst: 19.02.2009 23:42
von Fluid Byte
ts-soft hat geschrieben:Dein Beispiel ist etwas umständlich
Im Gegenteil. Das eigentliche Archiv beinhaltet um die hundert Dateien mit diversen Unterverzeichnissen. Außerdem ändert sich der Inhalt fast täglich. Von daher kann ich nicht mit festen Indizes arbeiten.
ts-soft hat geschrieben:Da ogg-dateien sowieso durch zip fast garnicht mehr gepackt werden, vergleiche mal die Dateigröße des Archivs mit den beiden entpackten Dateien, böte sich doch an WAV zu nutzen, die werden besser gepackt so das die Größe in etwa gleich bleibt.
Dann muss das Archiv aber auch mit entsprechend hoher Kompressionsrate erstellt werden was dann mehr Zeit zum Entpacken benötig. Im Moment ist das Archiv mit mit der Einstellung "Speichern" versehen, somit geschieht das Entpacken fast in Echtzeit. Aber es wäre sicherlich eine Alternative.
ts-soft hat geschrieben:Kann ich im Moment nicht weiterhelfen Sad , bleibe aber dran
Ist doch zum kotzen man ... :freak:

Keine Angst, dich trifft keine Schuld. Ich eiere nur an diesem Kackspiel schon über eine Jahr rum deshalb will ich endlich mal fertig werden. Ich habe zwar nicht immer Zeit daran zu arbeiten und andererseits wirklich viel durch das Projekt gelernt aber man will ja mal zu Potte kommen.

Mal am Rande, die PureZIP DLL von gnozal hat damit keine Probleme. :twisted:

Verfasst: 19.02.2009 23:47
von Kiffi
Fluid Byte hat geschrieben:Mal am Rande, die PureZIP DLL von gnozal hat damit keine Probleme. :twisted:
was Ihr (Du) mal testen könnte(s)t: Tritt dieser 'Bug' auch mit
UsePNGImageDecoder() auf? Hiermit hat nämlich die PureZIP-Lib Probleme.
Vielleicht gibt es Parallelen?

Grüße ... Kiffi

Verfasst: 20.02.2009 00:24
von Fluid Byte
ts-soft hat geschrieben:Nur wenn ich "UseOGGSoundDecoder()" weglasse, wird das File korrekt gecatched.
Moment mal, Moment mal ...

Du sagst ohne UseOGGSoundDecoder() funktioniert es?

Warum schlägt dieser Code dann fehl?

Code: Alles auswählen

XIncludeFile "MiniZIP.pbi"

Index = ZIP_GetFileNumber("music.zip","sample2.ogg")
ZIP_GetFileInfo("music.zip",Index,mzfi.unz_file_info)
Result = ZIP_CatchFile("music.zip",Index)

CreateFile(0,"test.ogg")
WriteData(0,Result,mzfi\uncompressed_size)
CloseFile(0)
Mit der kleineren Datei klappt es aber. Warum?