Anfängerfragen zum Programmieren mit PureBasic.
hmi222
Beiträge: 69 Registriert: 23.03.2007 13:20
Kontaktdaten:
Beitrag
von hmi222 » 14.04.2007 12:43
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!
Deeem2031
Beiträge: 1232 Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:
Beitrag
von Deeem2031 » 14.04.2007 13:03
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.
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
hmi222
Beiträge: 69 Registriert: 23.03.2007 13:20
Kontaktdaten:
Beitrag
von hmi222 » 14.04.2007 13:39
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.
a14xerus
Beiträge: 1440 Registriert: 14.12.2005 15:51
Wohnort: Aachen
Beitrag
von a14xerus » 14.04.2007 13:53
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
DarkDragon
Beiträge: 6291 Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:
Beitrag
von DarkDragon » 14.04.2007 13:55
Haben SIDs keine Header, wo die Länge drinsteht?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
hmi222
Beiträge: 69 Registriert: 23.03.2007 13:20
Kontaktdaten:
Beitrag
von hmi222 » 14.04.2007 13:59
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...
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 14.04.2007 14:14
warum übergibst du der lib nicht pointer und länge?
also, statt LibCall(DL1, DL2) eben LibCall(DL1, DL2-DL1) ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
a14xerus
Beiträge: 1440 Registriert: 14.12.2005 15:51
Wohnort: Aachen
Beitrag
von a14xerus » 14.04.2007 14:28
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.
Kaeru Gaman
Beiträge: 17389 Registriert: 10.11.2004 03:22
Beitrag
von Kaeru Gaman » 14.04.2007 14:38
ja klar...
nur dass eben eine angabe in (pointer, länge) üblicher ist als eine angabe in (pointer1, pointer2)...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
ts-soft
Beiträge: 22292 Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43 CPU: AMD FX-6300 Six-Core Processor GraKa: GeForce GTX 750 Ti, 2 GB Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin
Beitrag
von ts-soft » 14.04.2007 15:41
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