Seite 1 von 3
Länge einer IncludeBinary bestimmen!
Verfasst: 14.04.2007 12:43
von hmi222
Hallo zusammen...
würde gerne auf eine andere Art die Länge einer IncludeBinary
ermitteln:
Code: Alles auswählen
laenge=?DL2-?DL1
DataSection
DL1: IncludeBinary "..\Music\Sid\Dummy.sid"
DL2:
EndDataSection
Hat da jemand eine andere Lösung?
Vielen Dank im Vorraus...
und genießt die Sonne!

Verfasst: 14.04.2007 13:03
von Deeem2031
Hm, also eigentlich gibt es keinen andere Weg. Man kanns sich nur umständlicher machen.. also z.B.:
Code: Alles auswählen
Macro InclBin_Label(ID)
?Incl_Binary_#ID
EndMacro
Macro InclBin_Len(ID)
(?Incl_Binary_#ID#_End - ?Incl_Binary_#ID)
EndMacro
Macro InclBin_Incl(ID,filename)
Incl_Binary_#ID#: IncludeBinary filename
Incl_Binary_#ID#_End:
EndMacro
laenge=InclBin_Len(0)
DataSection
InclBin_Incl(0,"..\Music\Sid\Dummy.sid")
EndDataSection
Aber das ist ja auch nicht sehr komfortabel. Besser du erzählst uns warum du das anders machen willst.
Verfasst: 14.04.2007 13:39
von hmi222
hi...
Mein sidplayer ist in einer Lib.
im moment übergebe ich der lib
beide pointeradressen (DL1+DL2)
In der lib wird dann diese Länge ermittelt.
Würde der lib aber gerne nur den pointer des songs übergeben.
wie könnte man dan in der lib die Länge ermitteln?
möchte mich nich immer daran erinnern auch noch den 2.Dummy pointer
einzusetzen.
Verfasst: 14.04.2007 13:53
von a14xerus
meine Idee wäre noch, vll einfach das ende mit einer bestimmten byte-kombi markieren und danach suchen.
Aber ich denke, da wäre der 2. Dummy einfacher
Verfasst: 14.04.2007 13:55
von DarkDragon
Haben SIDs keine Header, wo die Länge drinsteht?
Verfasst: 14.04.2007 13:59
von hmi222
hab eben schon mal nach dem sid header gesucht aber nicht
viel brauchbares gefunden...
aber ich denke im header steht nicht die dateilänge drin...
Verfasst: 14.04.2007 14:14
von Kaeru Gaman
warum übergibst du der lib nicht pointer und länge?
also, statt LibCall(DL1, DL2) eben LibCall(DL1, DL2-DL1) ?
Verfasst: 14.04.2007 14:28
von a14xerus
Kaeru Gaman hat geschrieben:warum übergibst du der lib nicht pointer und länge?
also, statt LibCall(DL1, DL2) eben LibCall(DL1, DL2-DL1) ?
Dann muss er trotzdem einen 2. Pointer benutzen, im Endeffekt ist es ja egal, ob er aus 2 Pointern die länge errechnet und sie dann verschickt, oder die Pointer verschickt und dann die länge ausrechnet.
Verfasst: 14.04.2007 14:38
von Kaeru Gaman
ja klar...
nur dass eben eine angabe in (pointer, länge) üblicher ist als eine angabe in (pointer1, pointer2)...
Verfasst: 14.04.2007 15:41
von ts-soft
Wenn man den Anfangspointer mit 1 und den EndePointer mit 2 benennt, dann so:
Code: Alles auswählen
Macro ShortCatch(value)
?value#1,?value#2-?value#1
EndMacro
DataSection
PopCorn1: IncludeBinary "popcorn.ogg"
PopCorn2:
EndDataSection
If InitSound()
UseOGGSoundDecoder()
CatchSound(0, ShortCatch(PopCorn))
PlaySound(0)
MessageRequester("", "")
EndIf
Man haben die Probleme bei dem schönen Wetter
//edit
Habs mal erweitert:
Code: Alles auswählen
Macro CatchSoundEx(Id, Value)
CatchSound(Id, ?Value#_start, ?Value#_end - ?Value#_start)
EndMacro
DataSection
ogg_start:
IncludeBinary "Pop.ogg"
ogg_end:
EndDataSection
If InitSound()
UseOGGSoundDecoder()
CatchSoundEx(0, ogg)
PlaySound(0)
MessageRequester("","")
EndIf