MCIClass Library 0.5

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
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

MCIClass Library 0.5

Beitrag von ts-soft »

Ich hab mich gestern zum ersten mal etwas intensiver mit OOP in
PureBasic befaßt, und dabei dann diese Lib entwickelt.
Der Code basiert auf MCICommands.pbi von GPI, jedoch in eine Classe
gepackt. Die Nutzung ist auch für Leute, die noch nie mit OOP zu tun
hatten Kinderleicht.

Das Interface (befindet sich in der Resident-Datei):

Code: Alles auswählen

Interface MCIClass
  Load(File.s)
  Play()
  PlayStart()
  PlayPart(startPos.l, endPos.l)
  Pause()
  Resume()
  Stop()
  Free()
  SetVolume(Volume.l)
  GetVolume()
  SetSpeed(Tempo.l)
  GetSpeed()
  GetLength()
  GetPosition()
  Seek(Pos.l)
  Version.s()
EndInterface
Ein kleines Beispielprogramm:

Code: Alles auswählen

; Objekte erstellten
snd.MCIClass = New_objMCI()
avi.MCIClass = New_objMCI()

MessageRequester("Versionsinformation", snd\Version())

; Sound und Avi laden
snd\Load("C:\WINDOWS\Media\Windows XP-Startvorgang.wav") ; Pfade bitte anpassen
avi\Load("C:\WINDOWS\clock.avi")

snd\Play() ; abspielen
avi\Play()

Delay(12000)

snd\Free() ;Objekt freigeben
avi\Free()
Die einzige Funktion der Lib, die zum Erzeugen des Objekts:
New_objMCI()
Feedback erwünscht. Wenn die Lib fertig ist, gibts dann auch den Source
dazu.

MCIClass 4,5 kb
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Klasse! War grad aufm Klo, konnte deshalb nicht schneller Antworten. :lol: Aber es sind ja nicht ganze Klassen, es sind nur Interfaces. In PureBasic schreibt man Klassennamen dann für gewöhnlich mit einem I davor. Also bei dir IMCI
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.
Benutzeravatar
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 »

Seit wann gibt es in PureBasic regeln für OOP :D , werde es vielleicht in der nächsten Version ändern, mal sehen was die anderen sagen. Haste denn schon mal getestet?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MCIClass Library 0.5

Beitrag von Kiffi »

Hallo Thomas,

> Feedback erwünscht.

ich habe mich zuvor noch nicht mit den MCI-Sachen beschäftigt. Mir stellt
sich nun die Frage, ob es möglich ist, den aktuellen Zustandsstatus zu
ermitteln. Dann könnte man ja folgendes Konstukt bauen:

Code: Alles auswählen

avi\Play()

Repeat
 if avi\Finished() : Break : EndIf
 ; DOEVENTS() ; Oder vergleichbares
ForEver

snd\Free()

Ansonsten funktioniert Deine Lib auf meinem Rechner tadellos. :allright:
Leider habe ich noch keinen Verwendungszweck dafür. :oops:

Danke & Grüße ... Kiffi

P.S.: Ich sehe gerade, dass die Resident-Datei ''MCIClass..res" heisst.
Ist da nicht ein Punkt zuviel?
Benutzeravatar
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

Re: MCIClass Library 0.5

Beitrag von ts-soft »

Hallo Peter
Kiffi hat geschrieben:Hallo Thomas,

> Feedback erwünscht.

ich habe mich zuvor noch nicht mit den MCI-Sachen beschäftigt. Mir stellt
sich nun die Frage, ob es möglich ist, den aktuellen Zustandsstatus zu
ermitteln. Dann könnte man ja folgendes Konstukt bauen:

Code: Alles auswählen

avi\Play()

Repeat
 if avi\Finished() : Break : EndIf
 ; DOEVENTS() ; Oder vergleichbares
ForEver

snd\Free()

Code: Alles auswählen

avi.MCIClass = New_objMCI()

avi\Load("C:\WINDOWS\clock.avi")

avi\Play()

Repeat
  If avi\GetLength() <= avi\GetPosition() : Break :EndIf
  Delay(100)
ForEver
  
avi\Free()
Ist immer vorher zu testen, funzt nicht mit jeder Datei, bzw., Ungenauigkeiten müssen berücksichtigt werden.
Kiffi hat geschrieben: Ansonsten funktioniert Deine Lib auf meinem Rechner tadellos. :allright:
Leider habe ich noch keinen Verwendungszweck dafür. :oops:

Danke & Grüße ... Kiffi

P.S.: Ich sehe gerade, dass die Resident-Datei ''MCIClass..res" heisst.
Ist da nicht ein Punkt zuviel?
Ist mir garnicht aufgefallen, der Source heißt MCIClass.pbi, also sollte ja MCIClass.res entstehen :D
Und, ist OOP so schwer?

Freut mich, wenns gefällt!

//Edit:
Das mit den 2 Punkten scheint ne Macke von Tailbite zu sein, macht er wohl nur, wenn nur ein Interface in der Resident ist. Werde ich mal weiter beobachten und dann El_Choni melden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MCIClass Library 0.5

Beitrag von Kiffi »

> Und, ist OOP so schwer?

für mich sowieso nicht. 8)

Da ist es schon schwieriger mit PB zu arbeiten ;-)

Grüße ... Kiffi
Benutzeravatar
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 »

Hab ja extra eine Lib draus gemacht, ansonsten ist ja keine echte Kapselung
vorhanden. Ob Vererbung auch geht, werde ich dann auch noch mal
austüfteln. Aber erstmal hab ich klein angefangen :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Delle
Beiträge: 1144
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Ist das eigentlich mittlerweile fertig als Lib oder Klasse?
Benutzeravatar
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 »

Delle hat geschrieben:Ist das eigentlich mittlerweile fertig als Lib oder Klasse?
Nein, eingestellt!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Jetzt wo ichs grad seh, für eine "Finished" Funktion könnte folgender
Code funktionieren (natürlich anpassen):

Code: Alles auswählen

Procedure.l SNDHasStopped(id.s)
  Protected Buffer.s
  Buffer = Space(255)
  mciSendString_("status " + id + " mode", Buffer, 255, 0)
  If Buffer = "stopped"
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure
Antworten