64 Bit Variablen
64 Bit Variablen
Ich moechte die Laenge einer Mediadatei mittels IMediaSeeking\GetDuration(@LongLong) ermitteln, aber leider werden ja 64 Bit Variablen (longlong) noch nicht unterstuetzt. Weiss vielleicht jemand einen Weg, dieses Problem zu umgehen?
The manual said 'Windows XP or better' ... so I used Linux.
Auf www.purearea.net gibt es eine UserLib, mit der man 64Bit-Variablen benutzen kann. Sie heißt UInt64.
Greetz Laurin
Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
@Normen
GPI's jaPBe bringt in seinem Include-Ordner auch die LongLongs-Routinen mit. Die bieten eine ziemlich vollständige Sammlung von Prozeduren für die Nutzung von 64Bit-Integers mit.
Ich versuche z.Zt. auch, in die DX9-Features zum Abspielen von Videos einzusteigen, suche allerdings noch den Anfang des Fadens, wie man unter Nutzung der in 3.9.3 neu enthaltenen Interfaces auf die DX9-Funktionen zugreifen kann.
Hast Du da einen Tip oder ein Code-Beispiel für mich?
GPI's jaPBe bringt in seinem Include-Ordner auch die LongLongs-Routinen mit. Die bieten eine ziemlich vollständige Sammlung von Prozeduren für die Nutzung von 64Bit-Integers mit.
Ich versuche z.Zt. auch, in die DX9-Features zum Abspielen von Videos einzusteigen, suche allerdings noch den Anfang des Fadens, wie man unter Nutzung der in 3.9.3 neu enthaltenen Interfaces auf die DX9-Funktionen zugreifen kann.
Hast Du da einen Tip oder ein Code-Beispiel für mich?
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Liefert GetDuration(@LongLong) denn Millisekunden ?
Dann genügt dir vielleicht der 'untere' Long-Wert, immerhin kann der (trotz signed) etwa 2Mrd Millisekunden darstellen, also etwa 248 Tage.
Dann könntest Du zum reinen Auslesen auch sowas nutzen.
Dann genügt dir vielleicht der 'untere' Long-Wert, immerhin kann der (trotz signed) etwa 2Mrd Millisekunden darstellen, also etwa 248 Tage.
Dann könntest Du zum reinen Auslesen auch sowas nutzen.
Code: Alles auswählen
Structure myLONGLONG
hi.l
lo.l
EndStructure
*d.myLONGLONG = IMediaSeeking\GetDuration(@LongLong)
Debug Str(*d\lo) + " ms duration"
!UD2
Die GetDuration(@LongLong) liefert die Zeit in 100ns (nano...), und das ist ein verdammt kleiner Wert. Ich hatte das ja schon alles programmiert und erst 'ne Woche spaeter bin ich ueber das Problem gestolpert. Ich habe GetDuration(@LongLong) und GetCurrentPosition(@LongLong) benutzt, um die Laenge und aktuelle Position zu bestimmen. Als ich das erste mal eine MP3 abgespielt hatte, die laenger als ein paar Minuten war, wurde das alles ziemlich komisch. Ich glaube, mit 32 bit kann man so etwa 7 Minuten darstellen.
The manual said 'Windows XP or better' ... so I used Linux.
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Also, ich bin jetzt kurtz vorm Aufgeben. Ich schaetze mal, dass ich meinen Mediaplayer ohne Spieldauerangaben lassen muss.
Ich schaffe es einfach nicht, den Wert mittels einem der vorgeschlagenen Wege zu verarbeiten.
Wenn ich eine
Die Routinen in den genannten Includes / Libraries funktionieren auch nicht, da ich die 64 Bit Zahl nich uebergeben kann, ohne eine "echte" Variable zu benutzen.

Kann man vielleicht irgendwie die Funtion GetDuration() so veraendern, dass sie nicht einen Fehlercode zurueck gibt, sondern die zu ermittelnde Zeit? Das koennte naemlich funktionieren, da man sie dann in eine der 64 Bit Funktionen der Libraries einbinden koennte. Es muesste sowas wie eine C# Wrapper Funktion sein. Natuerlich habe ich keine Ahnung wie man sowas macht.
EDIT: Das gleiche muesste man dann natuerlich mit all den anderen IMediaSeeking Funtionen (GetCurrentPosition(), SetCurrentPosition(), etc.) machen, damit volle Funktionalitaet gegeben ist.
Ich schaffe es einfach nicht, den Wert mittels einem der vorgeschlagenen Wege zu verarbeiten.
Wenn ich eine
definiere, dann wird nur eine 32 Bit Zahl an entweder den lo oder den hi Wert uebergeben, und das wars.Structure myLONGLONG
hi.l
lo.l
EndStructure
Die Routinen in den genannten Includes / Libraries funktionieren auch nicht, da ich die 64 Bit Zahl nich uebergeben kann, ohne eine "echte" Variable zu benutzen.
Code: Alles auswählen
IMediaSeeking\GetDuration(@LongLong) ; wobei LongLong den zu ermittelnden Wert erhaeltKann man vielleicht irgendwie die Funtion GetDuration() so veraendern, dass sie nicht einen Fehlercode zurueck gibt, sondern die zu ermittelnde Zeit? Das koennte naemlich funktionieren, da man sie dann in eine der 64 Bit Funktionen der Libraries einbinden koennte. Es muesste sowas wie eine C# Wrapper Funktion sein. Natuerlich habe ich keine Ahnung wie man sowas macht.
EDIT: Das gleiche muesste man dann natuerlich mit all den anderen IMediaSeeking Funtionen (GetCurrentPosition(), SetCurrentPosition(), etc.) machen, damit volle Funktionalitaet gegeben ist.
Zuletzt geändert von normen am 13.03.2005 03:46, insgesamt 1-mal geändert.
The manual said 'Windows XP or better' ... so I used Linux.
jear,jear hat geschrieben:@Normen
GPI's jaPBe bringt in seinem Include-Ordner auch die LongLongs-Routinen mit. Die bieten eine ziemlich vollständige Sammlung von Prozeduren für die Nutzung von 64Bit-Integers mit.
Ich versuche z.Zt. auch, in die DX9-Features zum Abspielen von Videos einzusteigen, suche allerdings noch den Anfang des Fadens, wie man unter Nutzung der in 3.9.3 neu enthaltenen Interfaces auf die DX9-Funktionen zugreifen kann.
Hast Du da einen Tip oder ein Code-Beispiel für mich?
Dieser Forumbeitrag hat mir den Einstieg in diese Materie erleichtert. Ich arebeite noch mit der Verion 3.92, daher kann ich nichts ueber die neuen Interfaces sagen. Muss wohl doch endlich mal updaten...
http://forums.purebasic.com/german/view ... urcefilter
The manual said 'Windows XP or better' ... so I used Linux.
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Achso!
IMediaSeeking\GetDuration(@LongLong)
schreibt den Wert an die Stelle @LongLong und gibt nur einen Fehlercode zurück ?
Wußte ich nicht.
Klappt denn folgendes ebenfalls nicht ?
Wenn nein, hast Du einen kleinen Codeschnipsel, der einfach nur eine Datei öffnet und die Länge ermittelt ?
IMediaSeeking\GetDuration(@LongLong)
schreibt den Wert an die Stelle @LongLong und gibt nur einen Fehlercode zurück ?
Wußte ich nicht.
Klappt denn folgendes ebenfalls nicht ?
Code: Alles auswählen
Structure myLONGLONG
hi.l
lo.l
EndStructure
time.myLONGLONG
errorcode.l = IMediaSeeking\GetDuration(@time)
Debug Str(time\hi) + " * 2^32 * 100ns duration PLUS"
Debug Str(time\lo) + " * 100ns duration"
!UD2