einfaches mp3/wma/mid abspielen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

einfaches mp3/wma/mid abspielen

Beitrag von Macros »

Zuerst habe ich mich gewundert,
warum es sich hier alle immer so kompliziert machen.
Musiklänge aus der mp3 auslesen,
und nach ablauf neustart :freak:
Dabei hatte ich doch eine so einfache Methode,
und die arbeitet nicht nur mit mp3, nein auch mit wma und mididateien :-)
Doch leider musste ich festellen, das sie nicht immer funktioniert.
Also hier die erfolgsquoten:
mp3 (umfangreiches testmaterial): 98% CIV3 und Plasmapong mp3's wollten nicht
Dafür meine komplette Musiksammlung
und die mp3's von bgames.org, Empire Earth, Dune ...
midi (umfangreiches testmaterial): 99% eine von Vampires Dawn wollte nicht
wma (2 Testdateien): 50%

So, und jetzt zeige ich euch meinen Trick:

Code: Alles auswählen

pfad$=""

InitMovie()

LoadMovie(1,pfad$) ; mp3 wma und mid wurde getestet.
PlayMovie(1,1)
Delay(10) ; das ist der ganze Trick !
MovieAudio(1,100,0) ;benötigt für midi Datein
Repeat
If MovieStatus(1)=0 
PlayMovie(1,0)
Delay(10)
EndIf
Delay(100) ;nicht nötig nur fürs testprogram, damits nicht 100% CPU benutzt
ForEver
Ich weis, das Delay(10) scheint riskant,
aber selbst mit delay(1) scheint es auf älteren PC zu funktionieren.
Der Trick ist, das Moviestatus bei mp3's nur am Anfang 0 zurückgibt,
danach kommen sofort normale (nagut, etwas hohe) Zahlen.

Viel Spaß mit dem Code,
sollte für "normale" Anwendungen reichen,
bei einem Mediaplayer kommts natürlich schlecht,
wenn er einige Datein nicht abspielt.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Beitrag von DarkSoul »

Das mit den delays ist nicht so ne klasse lösung! wie währe es damit:

Code: Alles auswählen

pfad$=""  ;<----Datei da hinein!

InitMovie() 

LoadMovie(1,pfad$) ; mp3 wma und mid wurde getestet. 
PlayMovie(1,1) 
Repeat:delay(1):Until Moviestatus(1)
MovieAudio(1,100,0) ;benötigt für midi Datein 
Repeat 
 If MovieStatus(1)=0 
  PlayMovie(1,0) 
  Repeat:delay(1):Until Moviestatus(1)
 EndIf 
 Delay(100) ;begrenzungsdelay
ForEver

So wird das delay der cpu angepasst und es gibt fast keine probleme mehr, denn lange dateien brauchen zum öffnen etwas länger, was dazu führt, dass permanent mit playmovie() der movie immer wieder neu gestartet wird, ohne dass er überhaupt losläuft, weil er nicht rechtzeitig ausm 0-bereich kommt. so warten die endlosschleifen einfach, bis er angefangen hat zu spielen. diese ganze methode ist für spiele aber nicht so geeignet, da es beim wiederanlauf eine kurze spielunterbrechung geben kann.
[/code]
Bild
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

das mit der Schleife zum abwarten des
Beginns ist eine geniale Weiterentwicklung. :allright:
Natürlich ist das für Spiele geeignet, da
1. die Pause nur wenige Milisekunden beträgt (ohne delay(100) :D )
2. Die meistens Sounds sowieso ein/ausfaden.
Antworten