Odtwarzanie muzyki.

W grach musi być muzyka. W demach też i lepiej, żeby była ona oryginalna, a nie wycinana z innych gier. Tak się już jakoś od pewnego czasu utarło i lepiej tego nie zmieniać. Przyjmijmy to za nasze motto. Nikt chyba nie chce powrotu czasów, w których głównym efektem w demie była możliwość naciskania kilku klawiszy zmieniających muzykę. Aby w jakimkolwiek programie była oryginalna muzyka potrzebne są:
1. dobry program muzyczny,
2. procedura odtwarzająca muzykę.

Jeśli chodzi o punkt 1, to moim zdaniem jedynymi godnymi uwagi są: Chaos Music Composer v2.0 oraz Music ProTracker v2.4. Natomiast jeśli chodzi o punkt 2, to mając na uwadze również punkt 1 zostajemy w kropce, gdyż nie ma wówczas żadnego programu spełniającego obydwa te dwa warunki.

Ktoś zaraz zakrzyknie:

- Jak to? Przecież CMC ma własną procedurę odgrywającą, którą można zapisać!

Albo:
- Przecież Slight ma procedurę odgrywającą do MPT, tylko skąpcy nie chcą jej nikomu dać!

Spokojnie.

Jeśli chodzi o player do CMC, to czy nie zauważyliście, że czasami ma on dziwną właściwość odgrywania dzwięków, których się w danym momencie nie spodziewaliście? Np: podczas odgrywania pustego patternu, albo nawet podczas grania ścieżki na której nie ma żadnego patternu. Czasami zdarza się nawet opóźnienie w odgrywaniu jednej ścieżki w porównaniu do innych. Również ta osławiona obsługa z Basica nie jest bez wad. Spróbujcie kiedyś 2 razy pod rząd uruchomić odgrywanie muzyczki, albo też wyłączyć odgrywanie, kiedy jeszcze nic nie było włączone. Czy można to nazwać procedurą odgrywającą? NIE!

Co do playera MPT to sami przecież powiedzieliście, że ma go tylko Slight. Więc co innym po tym. A przecież też chcieliby sobie popisać muzyczki. Ponadto nawet ich player nie jest bez wad. Posłuchajcie sobie muzyczki Mikera z Partro z Mirowa. Niezła kaszanka, nie? Zapewniam Was, że ta muzyczka w oryginale tak nie brzmiała. Po prostu player MPT również coś kaszani w myzyczce, aczkolwiek co innego niż player CMC. Czy zatem można nazwać go procedurą odgrywającą? Odpowiedź: patrz wyżej.

Trzeba było więc coś zrobić. A żeby każdy nie musiał tego robić zdecydowałem się zrobić to ja. Ten artykuł jest po to aby inni mogli skorzystać z owoców mojej pracy.

A zatem Panie i Panowie (Nie wiem czemu użyłem tego pierwszego członu. Czy jakaś dziewczyna używa Atarynki? One z reguły boją się rzeczy małych i szarych.)

A zatem . . . . . . Panowie, oto przed Państwem moje własne, autorskie playery do CMC i MPT. Ich listingi znajdziecie w zarchiwizowanym pliku PLAYERY.ARC. Mają one pełną gwarancję i autoryzowany serwis. Nasza zasada brzmi: "Player plays good or money back." Jeśli wystąpią jakieś klopoty możecie mi je przysłać, a ja odeślę Wam poprawione. Możecie ich używać i poprawiać jak tylko chcecie. Moja jedyna prośba to: jeśli użyjecie gdzieś mego playera, to wspomnijcie o mnie w creditsach.

Playery trzeba umieć uruchamiać. Oto kompleksory kurs obsługi playerów.

1) Player CMC- jego obsługa nie różni się niczym od oryginalnego playera, dla tych jednak, którzy mają piracką kopię, bądź zgubili instrukcję:

Jeśli przyjąć, że:
-musadr- adres danych muzyczki,
-player- adres playera.
To pod adresem -player- znajdują się 3 instrukcje:

 JMP BASIC
 JMP INIT
 JMP PLAY

-pierwszej używamy z poziomu Basica.
Wywołanie:
A=USR(player, nr. muzyczki, musadr)-włącza odgrywanie (procedura odgrywania podpięta jest pod opóźnioną fazę VBLKI),
A=USR(player)-wyłącza odgrywanie muzyki.
-druga służy do wywoływania z assemblera.
Za jej pomocą można wydać playerowi kilka komend. Parametry przekazuje się w rejestrach A,X,Y.
A=$00, X-numer muzyczki- graj song,
A=$10, X-pozycja w songu- graj song,
A=$20+nr. kanału, X-wysokość, Y-nr. instrumentu- graj instrument,
A=$30, X-tempo- zmiana tempa,
A=$40- skończ grać,
A=$50- przerwij,
A=$60- kontynuuj,
A=$70, X-<musadr, Y->musadr- inicjacja.
-trzecia służy do odgrywania muzyki. Wywołujemy ją (najlepiej w przerwaniu) co 1/50 sekundy.

2) Player MPT- stosujemy poprzednie oznaczenia oraz dodajemy jedno:
-sample- adres tablicy danych sampli.
Tablica ta jest postaci: pierwsze 16 bajtów to starsze bajty początków danych sampli, zaś następne to starsze bajty końców danych sampli. Np: jeżeli mamy jeden sampl od adresu $4600 do $49ff, to te bajty będą miały wartość $46 i $4a.

Pod adresem -player- znajduje się skok do procedury INIT. Skacze się tam z parametrami:
A=0, Y-<musadr, X->musadr- inicjacja,
A=1- stop,
A=2, X-pozucja w songu- graj song,
A=3, Y-<sample, X->sample- init sampli,
A=4, X-numer sampla, Y-kanał+$80 jeżeli częstotliwość sampla 15kHz- graj sampla,
A=5, X=0+1 jeżeli częstotliwość 15kHz- graj muzyczkę z 1 kanałem sampli,
A=6- graj muzyczkę z 2 kanałami sampli,
A=7- przerwij odgrywanie sampli.

Zaraz za skokiem do INIT znajduje się procedura odgrywająca. Wywołuje się ją co 1/50 sekundy.

Drobne wyjaśnienie: zanim zaczniemy grać muzyczkę z samplami musimy najpierw uruchomić granie songu. Podczas grania sampli procesor cały czas wykonuje procedurę grania muzyczki z samplami. Nasz program w tym czasie może najwyżej pracować w przerwaniach. Jeżeli chcemy przerwać odgrywanie sampli, to właśnie w przerwaniach musimy wywołać procedurę przerwania odgrywania sampli, ale muzyczka będzie wówczas grała dalej.

3) Player MPT wersja skrócona- powstała specjalnie na potrzeby dem i innych programów gdzie szybkośc i mała zajętość pamięci grają dużą rolę. Player odgrywa tylko muzyczki bez sampli. Wszystkie zmienne w celu przyśpieszenia programu i zmniejszenia długości kodu są na stronie zerowej. Zajmują razem ok 113 bajtów. Jedyne parametry jakie się przekazuje do procedury -INIT- to: A-musadr. Ponadto są jeszcze procedury: STOP- koniec grania i -PLAY- odgrywanie.

I to tyle na temat odgrywania muzyczek we własnych programach. Mam nadzieję, że teraz już przestanie to innym sprawiać takie kłopoty. (Których przyczyną są niestety autorzy programów muzycznych).

Jaskier/Taquart