64 Bit Variablen

Für allgemeine Fragen zur Programmierung mit PureBasic.
normen
Beiträge: 18
Registriert: 03.03.2005 17:47
Wohnort: Oakland, Kalifornien

64 Bit Variablen

Beitrag von normen »

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.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Auf www.purearea.net gibt es eine UserLib, mit der man 64Bit-Variablen benutzen kann. Sie heißt UInt64.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@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?
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

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.

Code: Alles auswählen

Structure myLONGLONG
  hi.l
  lo.l
EndStructure

*d.myLONGLONG = IMediaSeeking\GetDuration(@LongLong)

Debug Str(*d\lo) + " ms duration"
!UD2
normen
Beiträge: 18
Registriert: 03.03.2005 17:47
Wohnort: Oakland, Kalifornien

Beitrag von normen »

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.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Jau! Mit signed sogar nur 3,57 Minuten.
(2^31 / 10 (=microsecs) / 1000 (=millisecs) / 1000 (=secs) / 60 (=minuten))

Dann führt der Weg wohl zu den Libraries. :wink:
!UD2
normen
Beiträge: 18
Registriert: 03.03.2005 17:47
Wohnort: Oakland, Kalifornien

Beitrag von normen »

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
Structure myLONGLONG
hi.l
lo.l
EndStructure
definiere, dann wird nur eine 32 Bit Zahl an entweder den lo oder den hi Wert uebergeben, und das wars.
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 erhaelt
>_<

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. :cry:

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.
normen
Beiträge: 18
Registriert: 03.03.2005 17:47
Wohnort: Oakland, Kalifornien

Beitrag von normen »

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?
jear,

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... :oops:
http://forums.purebasic.com/german/view ... urcefilter
The manual said 'Windows XP or better' ... so I used Linux.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

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 ?

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" 
Wenn nein, hast Du einen kleinen Codeschnipsel, der einfach nur eine Datei öffnet und die Länge ermittelt ?
!UD2
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@Normen
Bei jaPBe ist auch eine Include-Datei dabei, über die man das MCI - Interface nutzen kann.
Das darin enthaltene Beispiel ist ein MP3-Player mit allen wichtigen Features.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Antworten