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- 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