Moduł Win32::Mediaplayer
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Co to jest
Doskonały przykład niedocenionego przez samego twórcę modułu.
Napisany przez niejakiego Lilo Huwang'a (pierwszy z lewej na zdjęciu poniżej):
Zdjęcie autora modułu, Lilo (z lewej)
Cytując oryginalnego POD'a "This module allows playing of sound format like
MP3 / WMA / WAV / MIDI on Win32 platforms using the MCI interface (which
depends on winmm.dll)." Słowem powinniśmy za jego pomocą poradzić sobie z
otwarciem najpopularniejszych (może poza ogg'iem) formatów plików muzycznych.
Otóż eksperymentując z modułem (nie wprowadzałem do niego jakichkolwiek zmian)
udało mi się również otworzyć każdy z rozpoznawanych przez mój system formatów
wideo.
Metody
- new
- Jak powinna sugerować nazwa jest to konstruktor, który zajmuje się połączeniem z interfejsem MCI systemu Windows
- load()
- Ładuje multimedia z dysku lub wskazanej lokalizacji internetowej
- play
- Odtwarza załadowany plik z multimediami
- seek(wartość)
- "wartość" powinna być liczbą naturalną oznaczającą ilość mikrosekund, na którą mamy się przesunąć lub napisem postaci XX:YY gdzie XX oznacza minuty a YY sekundy
- close
- Zamyka otwarty plik z multimediami
- volume(wartość)
- Możliwe wartości są liczbami z przedziału od 0 do 100 (domkniętego)
- length(argument)
- W momencie gdy argument jest liczbą jeden zwracana jest długość materiału w formacie XX:YY gdy brak parametru przy wywołaniu podany zostaje czas w milisekundach
- pos(argument)
- Zwraca aktualną pozycję odtwarzanego pliku. Podobnie jak funkcja length w zależności od argumentu możemy otrzymać tą wartość na dwa sposoby
- pause
- Zatrzymuje odtwarzanie aż do wywołania:
- resume
- Wznawia odtwarzanie od momentu, w którym dokonano jego zatrzymania
Dlaczego wybrałem ten moduł
- Można odtwarzać pliki muzyczne i filmowe z sieci. Nie jest wtedy wymagane
pobranie takowego na dysk twardy lub czekanie, aż cały znajdzie się w pamięci
operacyjnej. Serwer nie musi mieć zainstalowanego oprogramowania
umożliwiającego jego użytkownikom odtwarzanie strumieniowe. Wystarczy
umieszczenie pliku w folderze dostępnym dla wszystkich użytkowników sieci i
gotowe. Demo:
use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('http://manta.univ.gda.pl/~twojtowi/02%20-%20Dies%20Irae.mp3'); $winmm->play; $winmm->volume(100); while(1==1) { print 'Trwa odtwarzanie: '.$winmm->pos(1)."\r"; };
Można w ten sposób posłuchać choćby nagrania z reklamy, które umieściłem u siebie na mancie, z jakiej? - to już pozostawiam wszystkim chętnym, którzy uruchomią powyższy kod u siebie. - Teraz mogę bezpiecznie pobierać filmy z internetu. Już po pobraniu kawałka już mogę go uruchomić przy pomocy modułu i sprawdzić czy jest to właściwy materiał, ocenić jego jakość i zawartość. Zupełnie nieprzydatny staje się w tym momencie DivFix bodaj najpopularniejszy program perlowy wykorzystywany pod Windows.
- Zupełnie unikalną funkcją jest odtwarzanie dwóch lub więcej plików z
multimediami jednocześnie. Żaden ze znanych mi odtwarzaczy nie potrafi poradzić
sobie z wyświetleniem w dwóch oknach obok siebie różnych materiałów. Można
tego dokonać stosując dwa różne odtwarzacze ale wtedy nie da się np. wyciszyć
jednego źródła i pozostawić tylko drugiego. Mamy globalne sterowanie
głośnością. Opisywany moduł ma możliwość otwarcia tak wielu okien na ile
pozwala pamięć operacyjna komputera. Każde ze źródeł dysponuje własną kontrolą
głośności itp. Można otworzyć film z angielską ścieżką dźwiękową i
jednocześnie mp3 z polską, której głośność ustawiamy na 100. Każdy z
materiałów można indywidualnie przewijać itd. Demo przedstawia kod, który
wykorzystałem do otwarcia dwóch okien z kompilacjami yourii'ego z Gdańska:
use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('N:/Videos/Final Fantasy/yourii - wideo/Final Fantasy X, X-2 Koda Kumi - One.wmv'); $winmm->play; $winmm->volume(100); $winmm2 = new Win32::MediaPlayer; $winmm2->load('N:/Videos/Final Fantasy/yourii - wideo/Final Fantasy X, X-2 Farba.wmv'); $winmm2->play; $winmm2->volume(0); while(1==1) { print 'Trwa odtwarzanie: '.$winmm->pos(1)."\r"; };
(Uwaga! Można używać w lokalizacji zarówno "/" (styl UNIX) jak i "\" (Windows))
Epilog
Moduł stanowi niezły punkt startowy dla implementacji prawdziwego
odtwarzacza multimedialnego na platformę Windows z pewną ilością unikalnych
funkcji, o których pisałem wyżej. np. pasek postępu można zaimplementować
jedną linijką kodu:
use Win32::MediaPlayer;
$winmm = new Win32::MediaPlayer;
$winmm->load('N:\My Documents\My Music\09_basshunter_-_boten_anna_-_www.torrentazos.com.mp3');
$winmm->play;
$winmm->volume(100);
while(1==1) {
print 'Trwa odtwarzanie: '.'#'x(100*$winmm->pos()/$winmm->length())."\r";
};
Dodatkowe informacje
- Dokumentacja z CPAN
- Dokumentacja MCI dostępna na msdn
Kontakt i informacje o autorze opracowania
Autor: Tomasz Wojtowicz
Email: wojtowiczt@wp.pl
Numer GG: 3680301