media_play(STRING* name,BMAP* target, var volume)
media_loop(STRING* name,BMAP* target, var volume)
Spielt einen Film- oder einen Audio-Stream aus einer Datei. Filme können auf
dem Bildschirm, einer Textur oder einem Panel wiedergegeben werden. Media_Play
spielt den Stream einmal ab,
media_loop
wiederholt ihn in einer Endlosschleife, bis er
explizit gestoppt wird. Es können so viele Filme und Musikdateien gleichzeitig
abgespielt werden, wie die Hardware unterstützt. So benötigt man z. B. zum
gleichzeitigen Abspielen zweier Midi-Dateien in der Regel zwei
Soundkarten.
Alle Dateitypen, die mit dem Windows-Media-Player abgespielt werden können,
können auch mit dieser Anweisung abgespielt werden - .avi, .mpg (ab WinXP oder mit
Plug-In), .wmv, .wma, .wav, .mid, .mp3, .ogg usw. Außerdem werden
Standbildformate unterstützt wie .bmp und .jpg.
Parameter:
name |
Name der Multimedia-Datei. !! Die Datei läuft von der Hard-Disk und muss sich daher im Work-Ordner befinden. Im Pfad, in einem Buffer oder einer Ressource wird sie nicht gefunden. Das Abspielen von einem Unterordner ist nur dann möglich, wenn der Ordnername hinzugefügt wird, beispielsweise: media_loop("media\\scene.avi", NULL, 100);. |
target |
C Pointer auf eine bmap, die als Zieltextur für den Video-Stream dient oder NULL, um das Video im gesamten Engine-Fenster abzuspielen. Indem man eine Zieltextur verwendet, kann das Video auf einer Modell- oder Spriteoberfläche im Level abgespielt werden. |
volume |
Die individuelle Lautstärke des Streams, 0 .. 100. Die Gesamtlautstärke für alle Streams wird von der Variablen midi_vol kontrolliert. |
Rückgabewert:
Handle der Multimedia-Datei
oder 0, wenn der Stream nicht gespielt werden konnte.
Geschwindigkeit:
Mittel
Bemerkungen:
- In Windows sind Default-CODECs für einige Grundvideoformate wie etwa MPEG-2, WMV oder unkomprimierte AVI-Dateien enthalten. COCECs für andere Video- oder Audioformate stehen auf dem Internet frei zur Verfügung. Eine allgemeine DODEC-Sammlung für fast alle Formate kann von http://sourceforge.net/projects/ffdshow heruntergeladen und unter der GPL-Lizenz verwendet werden. Um .ogg-Dateien abzuspielen, finden Sie einen Installer für Ogg-Vorbis-DirectShow-Filter (oggds0994.exe) im externen Verzeichnis. Installieren Sie diesen, indem Sie die .exe Datei starten. Der Ogg-Vorbis-Filter wurde von Tobias Waldvogel (http://tobias.everwicked.com ) entwickelt und kann frei für private und kommerzielle Zwecke verwendet und vertrieben werden.
- Viele Versionen von Videoformaten verwenden dieselbe Dateierweiterung. Daher sagt die Extension alleine (etwa .avi oder .mpg) noch nichts darüber aus, ob sich ein Video auf Ihrem PC abspielen läßt oder nicht. Um zu testen ob ein CODEC für dieses Format auf Ihrem PC installiert ist, starten Sie ein Einzeilen-Skript, das lediglich ein Video des erforderlichen Typus´ abspielt: function main() { media_play("filename.ext",NULL,100); }
- Für einige Dateiformate wie MP3 oder DivX müssen spezielle Lizenzbestimmungen eingehalten werden. Kümmern Sie sich im Vorfeld um die Lizenzgebühren, bevor Sie ein Format in Ihr Projekt einbinden.
- Halten Sie Filme so klein wie möglich. Die media_play-Anweisungen benutzen den Microsoft-CBaseVideoRenderer-Filter. Hat ein Film eine größere Auflösung oder Framerate als der PC in Echtzeit decodieren kann, gehen einzelne Bilder verloren. Außerdem kann die Framerate des Spieles sinken. Ist die Lautstärke auf 0 gesetzt oder besitzt die Video-Datei keine Audio-Spur, dann wird Synchronisationsverlust dem Fehlen einzelner Bilder vorgezogen, d.h. der Film läuft unter Umständen in leichter 'Zeitlupe' mit weniger Bildern pro Sekunde.
- A7 Filme werden im True-Color-Modus (24 Bit) abgespielt, verwenden Sie daher wenn möglich 24-Bit-Filme. High-Color-Filme (16 Bit) werden auch unterstützt, laufen aber langsamer und sehen aufgrund des Farbumwandlungsprozesses schlechter aus.
- C Die Zielbitmap für Videostreams kann jedwede Größe haben und läßt sich auch mit Transparenz- oder Overlay-Flags darstellen. Natürlich sollte die Bitmap in den meisten Fällen genauso groß sein wie das Video. Die bmap sollte eine 24-Bit-Textur (wie aus einem .tga-Bild) und ohne Alphakanal sein. Gemipmapte Texturen, komprimierte Texturen oder Texturen mit Alphakanal können keine Videostreams empfangen.
- Filme laufen als separate Tasks im Hintergrund während die normalen Funktionen weitergehen. Um zu bestimmen, wann ein Film zuende ist, verwenden Sie die Funktion media_playing(). Einige Multimediatypen wie .bmp- oder .jpg-Standbilder, laufen als endlose Streams und müssen explizit mit der media_stop()-Anweisung beendet werden. In einigen Windows-Versionen werden Standbilder, je nach Konfiguration, überhaupt nicht dargestellt - daher ist es nicht empfehlenswert, diese Anweisung für Standbilder zu benutzen.
- Zwei Filme können nicht gleichzeitig auf der gleichen Bitmap abgespielt werden.
- Multimedia-Dateien müssen vor dem Abspielen aus dem virtuellen Speicher geladen werden, was, je nach hardware und Filter-Software, zu einer Verzögerung von einigen Millisekunden vor jedem Start bzw. jeder Schleifenwiederholung führen kann. Um diese hörbare Verzögerung bei Audiodateien zu vermeiden, verwenden Sie snd_loop zum wiederholten Abspielen von Musik im .wav oder .ogg-Format.
- Filme brauchen zum Abspielen ein DirectX-Device und können daher nicht im ersten Frame vor Öffnen des DirectX-Devices ablaufen.
Beispiel:
// Play music "ribanna.mid" at 50% volume endlessly.
mhandle = media_loop("ribanna.mid",NULL,50);
// Play movie "news.avi" on the tv_model entity with maximum volume
media_play("news.avi",bmap_for_entity(tv_model,0),100);
// Play movie "news.mpg" on the full screen with maximum volume
media_play("news.mpg",NULL,100);
Siehe auch:
media_pause, media_playing, media_start, media_stop, media_tune, media_layer,midi_vol, num_mediastreams, snd_loop
► Aktuelle Version Online