energy.scene.pl

Popularny magazyn na ośmiobitowe Atari

Wybierz muzykę:

Energy 1: 1 2 3 4 5
Energy 2: 1 2 3 4 5 6 7 8 9 10 11 12
Theta Music Composer v1.11 - Instrukcja obsługi

Jaskier
autor: jaskier

Theta Music Composer (w skrócie: TMC) to program muzyczny mający (w zamierzeniu autora) wykorzystywać w jak największej części rozszerzenie komputerów ATARI XL/XE, jakim jest wbudowanie w niego drugiego układu muzycznego. Ponieważ jednak autor nie jest muzykiem (chociaż kiedyś tak mu się wydawało) to będzie szczerze wdzięczny za wszelkie listy z uwagami, na adres e-mail: jaskier@atari8.info

 

Program tworzy całość z następującymi plikami:

TMC.COM - program.
TMC1.DOC - instrukcja.
TMC2.DOC - część 2 instrukcji
TMCPLAY.ASM - player, który odgrywa muzyczki w TMC. Jeśli chcesz, możesz go dowolnie przerabiać, aby użyć w swoim programie, ale nie radzę wsadzać tego przerobionego playera do TMC zamiast standardowego, chyba że poszukujesz nowych możliwości zawieszenia systemu.
TMCPLAY2.ASM - wersja skrócona playera, działająca nieco szybciej od oryginalnego, narzucająca jednak pewne ograniczenia podczas komponowania muzyczki.
*.TMC - przykładowe muzyczki.

 

Program obsługuje poprawnie takie rozszerzenia, w którym dostęp do drugiego POKEY-a otrzymuje się przy podaniu adresów z zakresu $d210-$d21f. Jeśli tak nie jest, to działanie programu będzie identyczne jak na komputerze bez rozszerzenia.

Przy pisaniu tej instrukcji przyjąłem założenie, że użytkownik programu biegle posługuje się systemem szesnastkowym (który niepodzielnie panuje w całym programie) oraz zna (przynajmniej pobieżnie) takie programy muzyczne jak: CMC i MPT, które były dla mnie wzorem. Ponadto uznałem, że większość rozsądnych użytkowników podłącza standardowego POKEY-a na kanał lewy, a dodatkowego na prawy.

W komputerach bez rozszerzenia wszystkie odwołania do POKEY-ów będą zawsze trafiać do tego samego układu, ponieważ zaś najpierw wstawiane są wartości prawego, a następnie lewego kanału, wydawać by się mogło, że po prostu będzie słyszalny tylko lewy kanał. Niestety tak nie jest. Mimo iż pomiedzy obydwoma wpisami mijają tylko 4 cykle,wyraźnie słyszalny jest terkot, którego głośność rośnie wraz z głośnością prawego kanału. Na szczęście nie jest to jednak taki wielki problem. Znacznie gorszą sprawą jest to, że komórka AUDCTL ($d208) ma chyba pewną zwłokę w odbieraniu sygnału, gdyż jeśli na prawym kanale nie używamy dźwięków filtrowanych, a na lewym tak, to zapomnijmy o tym, że je usłyszymy. Generatory wydadzą z siebie taki charkot, że trzeba zatykać uszy. Dlatego pamiętaj! Jeżeli piszesz muzyczkę, która ma dobrze brzmieć również na mono, to jeżeli w AUDCTL standardowego POKEY-a ustawiasz jakieś bity, to musisz je też ustawić w POKEY-u dodatkowym (ale jeżeli na prawym kanale używasz filtrów to na lewym nie musisz tego robić).

Wyjaśnię teraz kilka założeń odnośnie programu. Po pierwsze, dlaczego Theta? Niektórzy może znają program muzyczny Delta Music Composer, którego autorem jest najlepszy koder na ATARI. Delta jest czwartą literą alfabetu greckiego i program gra na czterech kanałach, Theta jest ósma i gra na ośmiu kanałach. Również reszta parametrów jest podwojeniem Delty: 128 patternów i 64 instrumenty. Dodałem tutaj również (w celu zwiększenia jakości dźwięków) możliwość wywoływania playera do czterech razy na ramkę, to znaczy, że procedura odgrywająca jest wywoływana od 50 do 200 razy na sekunde. Dlatego też nie należy się spodziewać od playera (chociażby z powodu jakości dźwięków, ilości tracków i wywołań na ramkę) jakiejś rewelacyjnej prędkości. Procedura odgrywająca dźwięki zajmuje w maksimum 4000 cykli, a procedura przeszukująca pattern i song 2500. Tak więc całośc może zajmować nawet 18500 cykli. No cóż. Ten program nie powstał do tego aby go umieszczać w demach, od tego jest Delta.

Wyjaśnię teraz jak w moim programie robione jest stereo. Jak się już pewnie domyśliłeś nie jest to robione w ten sposób, że są sobie cztery tracki i głośności dźwięków na nich się znajdujących są w części wsadzane do lewego kanału, a w części do prawego. Ale nie jest tak również, że jest sobie osiem tracków i dźwięki znajdujące się na pierwszych czterech wsadzane są do lewego kanału, a z czterech następnych do prawego. Obydwa te rozwiązania mają pewne wady. W pierwszym z nich nie można korzystać w pełni z dobrodziejstw ośmiu osobnych generatorów POKEY-ów, a w drugim dźwięki są rozmieszczane albo na prawym, albo na lewym kanale, a umieszczenie ich pomiędzy kanałami jest znacznie utrudnione (ale możliwe). Również nie zrobiłem tak jak radzili mi to niektórzy, to znaczy, nie łączę tracków tak aby np: 2 dźwięki były stereo, 2 na lewym i 2 na prawym kanale. Po prostu mój program może być każdym z tych typów. To jak brzmią dźwięki nie zależy od jakiegoś dziwnego ustawienia znaczników,który track łączyć z którym, ale od samych dźwięków. Jeżeli w tracku wstawimy 4 dźwięki stereo, to będzie to program pierwszego typu, jeżeli zaś 8 mono, to drugiego. Oczywiście możliwe jest również każde rozwiązanie pośrednie.

Sprawa jest bowiem bardzo prosta. Każdy dźwięk ma 2 obwiednie. Podstawową (zwaną niekiedy główną) i dodatkową zwaną niekiedy przeciwną). Jeżeli dźwięk jest umieszczony na lewym kanale to obwiednia podstawowa gra na kanale lewym, a dodatkowa na prawym. Oczywiście jedną z nich można zostawić pustą i wtedy dźwięk będzie grał mono. Jeżeli będzie to obwiednia dodatkowa to dźwięk umieszczony na lewym kanale będzie grał mono na kanale lewym, a jeżeli podstawowa, to na kanale prawym. Oczywiście umieszczając dźwięk na prawym kanale odwracamy sytuację. Ktoś mądry na pewno już zauważył, że może tutaj dochodzić do konfliktów. Jeżeli wstawimy w 8 tracków same dźwięki stereo to będziemy musieli 16 obwiedni wsadzać do 8 generatorów obu POKEY-ów. Konflikt ten rozwiązywany jest w sposób następujący: pierwszeństwo ma obwiednia podstawowa. Proste nie?

Zajmijmy się teraz obsługą. Zależnie od używanego systemu robimy wszystko,aby wczytać program TMC.COM. Podczas ładowania ładnie nam on się przedstawi i przy okazji sprawdzi z jakiego urządzenia (i o jakim numerze) jest on wczytywany. To urządzenie będzie użyte domyślnie (o ile użytkownik nie poda własnego) podczas najbliższej operacji wejścia-wyjścia. W każdej następnej operacji za urządzenie domyślne będzie przyjmowane te ostatnio użyte w operacji tego samego typu. Program ma 3 bufory nazw, a co za tym idzie 3 związane z nimi urządzenia domyślne, do 3 typów operacji: odczytu/zapisu muzyczki bądź zapisu playera, odczytu directory, odczytu/zapisu instrumentu. Uwaga! W przeciwieństwie do Quick Assemblera i innych tego typu programów, TMC prawidłowo rozpoznaje, że został wczytany z ramdysku. (W większości przypadków.)

Program ładuje się od adresu $8000 do $bc00 oraz pod ROM. Na dane muzyczki oraz bufor directory używa pamięci od $2800 do $8000. Należy jednak uważać, gdyż nie sprawdza przepełnienia, tak więc mimo iż są to 22kB, to można, pisząc piekielnie długą muzyczkę, zawiesić w ten sposób program. Aczkolwiek program używa pamięci z zakresu $bd00-$bfff (pamięć ekranu), to został on tak napisany, że można swobodnie przejść do DOS-a, a następnie (o ile nie zmienialiśmy nic w pamięci powyżej $2800, poza tym co robi system, czyli pamięcią ekranu) powrócić do programu komendą RUN.

Program dzieli się na dwie części:

- Menu - opisane w tej części instrukcji,
- Composer - opisany w części następnej.

Po wczytaniu programu widzimy ekran Menu. U góry jest tytuł programu. W lewym oknie opcje po których można poruszać się kursorem. W prawym ukazuje się spis directory, po którym również możemy poruszać się kursorem. Poniżej znajduje się wąska linia informacji, w której program pokazuje swoje komunikaty. Normalnie w linii tej znajduje się 29 znakowa informacja, która dodawana jest do zapisywanej muzyczki, a przy jej odczytywaniu natychmiast jest tu umieszczana. Nieco niżej znajduje się okno z moim adresem, a na dolnej ramce umieszczone są klawisze uaktywniające poszczególne opcje. Po oknie opcji możemy poruszać się kursorem za pomocą klawiszy "w górę" i "w dół" a uaktywniamy je klawiszem Return lub naciśnięciem klawisza przypisanego tej opcji.

Opcje Menu to: (w nawiasach kwadratowych klawisz uaktywnijący opcję)

- Composer [C] - przejście do drugiej części programu.

- Informacja [F] - wpisywanie w linii informacjii 29 bajtów dodawanych do zapisywanej muzyczki. Klawisz Delete powoduje cofnięcie kursora, Ctrl Esc, to znak (p) (published). Wyjście klawiszem Return bądź Esc (bez róznicy).


- Load Music [L] - wczytywanie muzyczki. Po podaniu nazwy, jeżeli nie zawierała ona rozszerzenia to domyślnie przyjmowane jest .TMC. Jeżeli zawierała znaki * lub ?, to zostaje wywołana opcja directory. Po wybraniu nazwy pliku zostaje on odczytany, a następnie sprawdzona jest struktura tego pliku. Jeżeli nie odpowiada ona strukturze pliku .TMC, wyświetlany jest błąd.


- Save Music [S] - zapisywanie muzyczki. Jest ona zapisywana w formacie akceptowalnym przez DOS-a. Najpierw program pyta o adres ładowania pliku. Na ekranie widnieją wtedy 3 liczby: początek adresu ładowania, koniec oraz długość pliku. Adres podajemy w systemie szesnastkowym. Klawisze "strzałka w lewo" i "strzałka w prawo" wybierają, którą cyfrę adresu będziemy podawać, Return to zatwierdzenie, Esc to powrót do Menu. Następnie podajemy nazwę pliku. Jeżeli nie zawierała rozszerzenia, to domyślnym jest .TMC. Jeżeli podana nazwa zawierała znaki * lub ? to wywoływana jest opcja directory.


- Save Player [P] - zapisywanie programu odgrywającego dane muzyczki. Procedura przebiega podobnie jak przy opcji Save Music z tym, że domyślnym rozszerzeniem jest .REP. Jest ono wstawiane od razu zamiast rozszerzenia w nazwie ostatnio zapisywanej muzyczki. W przeciwieństwie do innych procedur odczytu lub zapisu, podana nazwa pliku nie jest nigdzie zapisywana. Po skończonej operacji znika bezpowrotnie.


- Directory [D] - spis plików na dysku. Wybrana nazwa zostanie wpisana do bufora nazwy dla muzyczki.


- Instruction [I] - skrótowa instrukcja programu, głównie klawiszologia części drugiej, której pełny opis znajduje się w pliku TMC2.DOC. Stronę instrukcji wybieramy klawiszami "strzałka w lewo" i "strzałka w prawo". Return bądź Esc to powrót do Menu.


- New [N] - czyści dane muzyczki. Program zapyta się, czy jesteśmy tego pewni. Naciśnięcie klawisza Y powoduje wykonanie czynności. Każdy inny to powrót do Menu.


- Exit [E] - powrót do DOS-a. Także tutaj program zapyta czy jesteśmy tego pewni.

Cztery spośród tych opcji:

Load Music, Save Music, Save Player i Directory wywołują dwie ważne procedury: pobranie nazwy oraz wypis directory.

Oto opis tych procedur:


- Pobranie nazwy- bufor nazwy może mieć do 128 znaków. Ponieważ całośc nie może być naraz widoczna na ekranie, to okno informacji pokazuje tylko ostatnie 24 znaki z tego bufora. Pierwszy znak za wyrazem "File" wskazuje na stan tego okna. Jeżeli jest to ":", to bufor nazwy ma nie więcej niż 24 znaki czyli okno jest nie przesunięte, natomiast jeżeli jest to strzałka w lewo, to znaczy, że okno jest tak przesunięte aby pokazywać ostatnie 24 znaki. Podczas wyboru klawisz Delete powoduje cofnięcie kursora, Return to zatwierdzenie nazwy, zaś Esc to powrót do Menu. Każdy inny klawisz za wyjątkiem spacji powoduje pojawienie się danego znaku w buforze na pozycji kursora. Jednakże zaraz na początku procedura oczekuje na naciśnięcie właśnie któregoś z klawiszy Delete, Return, Esc, zaś naciśnięcie każdego innego powoduje wyczyszczenie bufora nazwy i wpisanie tego klawisza w pierwsze pole. Podanie na początku bufora nazwy urządzenia spowoduje wpisanie go jako urządzenia domyślnego dla następnych operacji. Jeżeli nie chcemy zmieniać typu urządzenia, a jedynie jego numer, to wystarczy podać ten numer przed znakiem dwukropka.

 

- Directory- według podanego szablonu odczytywana jest lista plików, która ukazuje się w oknie directory. Możemy po niej poruszać się kursorem za pomocą klawiszy "góra" i "dół". Esc powoduje powrót do Menu, zaś Return zatwierdzenie wybranej nazwy. Program właściwie obsługuje podkatalogi w SpartaDOS-ie i MyDOS-ie 4.5, to znaczy, że wybrana nazwa wpisywana jest do bufora nazwy za ostatnim znakiem "\" bądź ":", to znaczy, że jeśli podamy nazwę: MUSICS:W*.TMC i wybierzemy nazwę: WANTED.TMC, to przy próbie odczytu, odczytany zostanie plik, o nazwie: MUSICS:WANTED.TMC.

Częścią składową tego fragmentu programu, aczkolwiek wywoływaną z części drugiej: Composera, jest zapis i odczyt pojedyńczego instrumentu. Postępowanie tutaj jest podobne jak w innych opcjach. Najpierw podaje się nazwę. Jeżeli zawierała ona znaki * lub ?, to wywołane zostanie directory. Domyślnym rozszerzeniem jest tutaj .INS. Do zapisywanego dźwięku (80 bajtów) dodawany jest na początku 20 bajtowy nagłówek. Jest on sprawdzany podczas odczytu.

Jeżeli podczas operacji wejścia--wyjścia nastąpił błąd, to na ekranie podawana jest informacja o typie błędu. Jeżeli program nie przewiduje takiego błędu, to zamiast informacji podawany jest tylko jego numer, wyjątkowo w systemie dziesiętnym. Jest to świadoma moja niekonsekwencja. Po prostu numery błędów funkcjonują w całej literaturze właśnie w takiej formie i podawanie ich podobnie jak wszystkich innych liczb w systemie szesnastkowym byłoby niewygodne dla użytkownika.

Teraz część nieco mniej interesująca dla muzyków, ale znacznie bardziej dla koderów. Opis wywoływania playera. Na pierwszy ogień idzie player oryginalny.

Pełny plik źródłowy playera znajduje się w pliku TMCPLAY.ASM, tak więc każdy szanujący się koder będzie mógł go sam przeanalizować i zrozumieć jego obsługę. Niniejszy tekst jest więc przeznaczony dla leniuchów. Dodałem ten plik również dlatego, że wielu muzyków nie korzysta z pełnych możliwości programów muzycznych i dzięki temu każdy koder będzie mógł napisać player specjalnie przeznaczony dla danej muzyczki.

Początek playera wygląda następująco:

          ORG PLAYER
a)        JMP INIT
b)        JMP PLAY
c)        JMP SOUND
d) MAXVOL DTA B(15)
e) VOLUME DTA D'        '
f) FREQEN DTA D'        '
g) KANAL  DTA D'        '
h) AKTWYS DTA D'        '
i) NUMDZW DTA D'        '
j) AUDCTL DTA D'        '
k) AUD1   DTA B(0)
l) AUD2   DTA B(0)
m) VOLUME 256 bajtowa tablica
n) FRQTAB 256 bajtowa tablica
o) BASSLO 64 bajtowa tablica
p) BASSHI 64 bajtowa tablica

a) Skok do procedury inicjalizującej. Skacze się tutaj tylko wtedy, gdy chce się powiadomić player co ma robić.

Parametry przekazuje się w A, X i Y:

 A=$00 X-numer muzyczki -graj song.
  Player przeszukuje song w poszukiwa-
  niu komend stopu i skoków. Po znale-
  zieniu się za tą o numerze podanym w
  X ustawia się w linii zaraz za nią.
  Nie odnawiana jest tutaj wartość te-
  mpa. Trzeba to zrobić najpierw.
 A=$10 X-pozycja w songu -graj song.
  Player ustawia się na danej pozycji,
  ale podobnie jak poprzednio nie usta-
  wia tempa.
 A=$20+numer kanału (0-7) X-wysokość
  dźwięku Y-nr.instrumentu -graj inst-
  rument o danym numerze, kanale i wy-
  sokości (C-1=$1, C#1=$2 itd.), nie
  jest zmieniana głośność, trzeba to
  zrobić najpierw następną opcją.
 A=$20+numer kanału X=$00 Y-głośność -
  -zmiana głośności dźwięków na kanale.
  starsze 4 bity to głośność obwiedni
  głównej, 4 młodsze to dodatkowej.
 A=$30 X-tempo -zmiana tempa. Jest to
  wartość o 1 mniejsza od tej w CMC i
  MPT, to znaczy, że tempo 5 oznacza
  odgrywanie co 6 ramek.
 A=$40 -skończ grać (i to natychmiast).
 A=$50 -przerwij (z wyciszeniem).
 A=$60 -kontynuuj (od poprzedniego
  przerwania odgrywania).
 A=$70 X-starszy bajt adresu muzyczki
  Y-młodszy bajt -inicjacja playera.
  Jest tutaj robiona również inicjacja
  tempa, więc jeżeli chcemy rozpocząć
  granie muzyczki od początku songu,
  wystarczy wywołać opcję kontynuuj.

b) Skok do procedury przeszukującej song i patterny. Należy wywoływać ją raz na ramkę. Opcja "przerwij" blokuje wykonywanie właśnie tej części procedury, dlatego też dźwięki mogą swobodnie wybrzmiewać. Zaraz po zakończeniu się tej części procedury wywoływana jest procedura odgrywania dźwięków, dzięki temu jeżeli mamy muzyczkę napisaną do wywoływania raz na ramkę, to nie musimy już wywoływać procedury następnej.

 

c) Skok do procedury odgrywającej dźwięki. Należy ją wywoływać o jeden raz na ramkę mniej niż wywołań na ramkę wymaga dana muzyczka. Z powodu długiego czasu działania tej procedury należy uważać aby następna procedura nie zaczynała się jeszcze wtedy, gdy nie skończyła się procedura poprzednia. Aby muzyczka grała możliwie najbardziej zgodnie z jej brzmieniem w Composerze, player należy wywoływać w tych samych momentach, jak jest to w programie. Oto numery linii ekranu w których wywoływany jest player oraz odpowiadająca wartość komórki VCOUNT ($d40b):

razy na ramkę ->  1  2  3  4

linia
ekranu  $d40b
8         8        -  -  -  +
32        20       -  -  +  -
88        48       -  +  -  +
144       76       -  -  +  -
168       88       -  -  -  +

 - = nic.
 + = wywołanie procedury SOUND.

Na przerwaniu VBLANK należy zawsze wywoływać procedurę PLAY (PLAYER+3, patrz punkt b.)

 

d) Player pozwala na płynne matematyczne podgłaśnianie i ściszanie muzyczki w 16 fazach. Robi się to przez wpisanie odpowiedniej wartości do komórki PLAYER+9. 15 to głośność maksymalna, 0 to pełne ściszenie.

e) Wartości z tych komórek są bezpośrednio wsadzane do rejestrów POKEY-ów. Starsze 4 bity to zniekształcenie, a młodsze 4 to głośność dźwięku.

f) Częstotliwość dźwięku. Wartość wsadzana bezpośrednio do komórek POKEY-ów.

g) Z powodów wyjaśnionych wcześniej w akapicie dotyczącym dźwięków stereo, może się zdarzyć, że dźwięk np.z tracku drugiego może grać na kanale prawym, co prawda na generatorze drugim, ale jego głośność w tablicy VOLUME będzie tym samym na pozycji piątej (liczy się tu od zera). Aby prawidłowo pobrać dane dźwięków grających na danym generatorze należy wykonać rzecz następującą:

    LDX #0
    LDY KANAL,X

W ten sposób dowiadujemy się z jakiego tracku pochodzi dźwięk grający na zerowym generatorze (pierwszym generatorze standardowego POKEY-a). Zmieniając liczbę w pierwszej linii dowiadujemy się z których tracków pochodzą dźwięki grające na danych generatorach.

 

h) Po wykonaniu dwóch powyższych instrukcji oraz następnej: LDA AKTWYS,Y, możemy dowiedzieć się jaką nutę gra dźwięk na danym generatorze. Wartość tę należy zANDować wartością $3f, gdyż najwyższe bity oznaczają tutaj numer tablicy częstotliwości. Wartośc 1 to nuta C-1, 2 to C#1 itp. Wartośc 0 lepiej, żeby się tutaj nie pokazywała, gdyż wówczas z tablicy częstotliwości pobierana jest wartość 0 (baaardzo wysoki dźwięk) i wsadzana do POKEY-a.

i) W podobny sposób jak w poprzednim podpunkcie możemy się tutaj dowiedzieć jaki numer dźwięku gra na danym generatorze.

j) I znowu w podobny sposób dowiadujemy się o tym, które bity komórki AUDCTL ustawia dany dźwięk.

k) Jest tutaj już zORowana wartość, wsadzana do komórki $d208.

l) A ta wartość do komórki $d218.

m) 256-bajtowa tablica używana do ściszania, jednakże sugerowałbym jej używanie również w innych przypadkach. Częstokroć nie chcemy gwałtownie pokazywać jakiegoś obrazka, tylko powoli go rozjaśniamy. Dzięki tej tablicy możemy zrobić to płynnie w 16 fazach. Ponieważ tablica jest symetryczna możemy to zrobić na dwa sposoby:

    ASL FAZA         LDA KOLOR
    ASL FAZA         TAY
    ASL FAZA         ASL @
    ASL FAZA         ASL @
    LDA KOLOR        ASL @
    TAY              ASL @
    AND #15          ORA FAZA
    ORA FAZA         TAX
    TAX              TYA
    TYA              AND #$F0
    AND #$F0         ORA PLAYER+60,X
    ORA PLAYER+60,X  STA $2C4
    STA $2C4
    LSR FAZA
    LSR FAZA
    LSR FAZA
    LSR FAZA

Wydawać by się mogło, że ten drugi sposób jest krótszy, ale jeżeli będziemy zmieniać komórkę FAZA co 16, to odpadnie nam 8 linii dotyczących rotacji bitów w komórce FAZA dla pierwszego sposobu.

 

n) Z tej tablicy na podstawie wartości z komórek AKTWYS pobierana jest wartość wpisywana następnie do POKEY-ów. Są to właściwie 4 tablice. Pierwsza służy dla dźwięków o zniekształceniach A i E, dwie następne dla zniekształceń C, a ostatnia dla 2, przy wyłączonym dla danego generatora dzielniku częstotliwości (wartość $20 lub $40 w AUDCTL).

o) Ta tablica jest używana podobnie jak poprzednia, ale w przypadku dźwięków dwukanałowych ($10 lub 8 w AUDCTL) i jest wsadzana do generatora o numerze o 1 mniejszym niż generator na którym ten dźwięk odgrywamy. 2 najstarsze bity komórkek AKTWYS są tutaj ignorowane.

p) Podobnie jak poprzednio, ale ta wartość jest wsadzana dokładnie do tego generatora na którym gra dźwięk. Wszystkie tablice częstotliwości są identyczne jak w programie MPT.

A teraz pora na opis playera w wersji skróconej. Zawarty jest on w pliku TMCPLAY2.ASM. Od oryginalnego różni się wieloma rzeczami. Po pierwsze podczas pisania muzyczki trzeba zwracać uwagę na pewne ograniczenia: nie można używać obwiedni dodatkowej dźwięku (player nie zwraca na nią w ogóle uwagi) i nie można używać basów dwukanałowych. Znacznie większe różnice dotyczą jednak obsługi playera. Nie ma tutaj żadnych skoków na początku programu. Należy skakać bezpośrednio pod odpowiednie etykiety: PLAY- raz na ramkę, (patrz punkt b) SOUND- stosownie do muzyczki (patrz c) INIT- uruchamia odgrywanie muzyczki. Y=młodszy adres muzyczki, X=starszy. STOP- zatrzymuje odgrywanie. Nie ma też żadnych udostęnionych komórek. Kto chce może przeanalizować player i używać czego tylko zechce. Ten player to wersja szczątkowa oryginału, zawierająca wyłącznie to, co jest do grania potrzebne. Kto potrzebuje czegoś więcej, bedzie musiał sobie to sam dopisać, korzystając co najwyżej z procedur w playerze oryginalnym.

Jak widać player jest dość prymitywny. Jednak te oszczędności powodują znaczne (ok. 30%) skrócenie czasu pracy playera. To chyba wystarczy aby co odważniejsi zaczęli używać go w demach?

Ponieważ może się to okazać przydatne, przedstawię jeszcze dokładny format pliku muzyczki.

0-28 - bajty informacyjne.
29 - musi być tu zawsze spacja ($20).
30 - tempo, jak już mówiłem, jest to wartość o jeden mniejsza niż w CMC,
 MPT lub Delcie.
31 -częstotliwość odtwarzenia na ramkę
 Player nie zważa na tę komórkę. To jest informacja dla Ciebie!
$20-$5f -młodsze bajty adresów instr.
$60-$9f -starsze bajty. Jeżeli po zORowaniu dają 0, to znaczy, że dźwięk jest pusty.
$a0-$11f -młodsze bajty adresów patternów.
$120-$19f -starsze bajty.
$1a0-.... -dane songu. Każda pozycja w songu zajmuje 16 bajtów. Jest    to kolejno: transpozycja tracku 8, nr.patternu grającego na tracku 8, następni jest podawany track 7 itd.
....-.... -dane instrumentów. Są one
 w formacie:
  -21 razy trójka bajtów:
    $ab, $cd ,$ef ,gdzie:
      a- zniekształcenie dźwięku,
      b- głośność obwiedni podstawowej,
      c- typ akcentu,
      d- głośność obwiedni dodatkowej,
      ef- parametr akcentu,
  -8 bajtów transpozycji,
  -9 bajtów parametrów dźwięku.
 W sumie 80 bajtów.
....-.... -dane patternów. Następujące
 bajty oznaczają:
  -0 -zmiana głośności dźwięku, następująca za nim wartość jest negacją
   (EOR #$FF) głośności używanej w TMC.
  -1-$3f -graj nutę o tym numerze i ustalonym wcześniej instrumencie.
   Następuje po tym bajt głośności.
  -$40 -nowy parametr, jeżeli ten bajt ma ustawiony najwyższy bit, to następuje jeszcze za nim bajt zmiany głośności.
  -$41-$7f -graj nutę o numerze zANDo-
   wanym liczbą $3f i ustalonym instru-
   mencie. Następuje za tym bajt para-
   metru z ustawionym najwyższym bitem
   oraz bajt głośności.
  -$80-$bf -zmiana aktualnego instrume-
   ntu. Używana przed rozkazem grania
   nuty tylko przy faktycznej zmianie
   instrumentu w patternie.
  -$c0-$ff -linie puste w patternie.
   $c0 to 1 linia pusta, $ff to puste
   64 linie, czyli innymi słowy koniec
   danych patternu, gdyż dowolnie na
   której pozycji dotychczas się znaj-
   dowaliśmy dodanie do niej 64 powodu-
   je wyjście poza długość patternu.
   Każdy pattern kończy się tym bajtem,
   nawet jeżeli na ostatniej pozycji
   coś się znajduje. Najkrótszy pattern
   (pattern pusty) składa się tylko z
   tego bajtu. Pattern najdłuższy łacznie z tym bajtem ma 257 bajtów długości.

I to tyle na temat ogólnej obsługi programu.

 

Ta część instrukcji opisuje drugą część programu TMC: Composer, dotyczącą faktycznego tworzenia muzyczki.

 

Aby móc tworzyć muzyczkę, trzeba wiedzieć, jak to robi nasze ATARI. Każdy z POKEY-ów ma 9 komórek, które nas interesują. W 4 z nich wsadza się głośność zORowaną ze zniekształceniem. W 4 następne częstotliwość jaką chce się uzyskać. Najważniejsza z naszego punktu widzenia jest komórka AUDCTL. Program umożliwia bezpośredni do niej dostęp. Każdy dźwięk ustawia swoją wartość AUDCTL, a następnie wszystkie te wartości z dźwięków, które akurat brzmią na danym kanale są ORowane i wsadzane do komórki AUDCTL. Ustawienie kolejnych bitów (licząc od najniszych) w tej komórce daje wyniki następujące:

- zmniejszenie częstotliwości o 4 oktawy (nie dotyczy generatorów 1 lub 3, jeżeli mają one wyłączony dzielnik częstotliwości: odpowiednio $40 i $20).

 

- włącza filtr na generatorze 2 sterowany przez generator 4. Aby w programie można było zauważyć tego efekt trzeba zrobić próbę instrumentu na tracku 2. Jeżeli dźwięk jest puszczony na 2 ge- neratorze, to TMC powoduje, że wartość na podstawie barwy filtru jest wsadzana do rejestru częstotliwości generatora 4. W muzyczce możemy nadal korzystać z generatora 4, ale będzie on reagował tylko na zmiany głośności.

- filtr dla generatora 1 sterowany przez generator 3. Reszta tak jak poprzednio

- łączy w parę generatory 3 i 4 tak, że tworzą one jeden wspólny dźwięk. Do tego dźwięku TMC używa specjalnych dwóch tablic z tym, że przystosowane są one raczej na jednoczesne wyłączenie dzielnika częstotliwości na generatorze 3 (wartość $28 do AUDCTL).

- podobnie jak poprzednio tyle, że dotyczy generatorów 1 i 2 i wartości $50.

- wyłącza dla generatora 3 dzielnik częstotliwości.

- to samo dla generatora 1.

- zmienia brzmienie dźwięków o zniekształceniu 0 i 8.

Po wybraniu opcji Composer z Menu, ekran Menu gaśnie, a pokazuje się ekran Composera. Ta część programu działa z wyłączonym ROM-em, bez żadnej ingerencji systemu.

Zajmijmy się najpierw opisem ekranu. Został on podzielony na okna. Na samej górze znajduje się linia z nazwą programu. Poniżej znajduje się linia, która przy świeżo wczytanym programie wygląda następująco:

Pattern: -00E L:Trac1 Trac2 Trac3 Trac4

Kolejne napisy oznaczają:

- Pattern -informacja, że położone niżej okno nazywa się Pattern.
- znak minus -oznacza, że aktualny pattern jest pusty, znak "+" oznacza, że coś się w nim znajduje.
- 00 -numer patternu. Może zawierać się w zakresie od 00 do 7F.
- E -oznaczenie typu patternu, zależne od znajdujących się na nim dźwięków. Jeżeli wszystkie znajdujące się na nim dźwięki mają obie obwiednie (podstawową i przeciwną) puste, to jest to litera E (ang. Empty), jeśli używają tylko obwiedni podstawowej, to jest to litera M (ang. Mono), jeśli tylko przeciwnej, to P (pol. Przeciwna), a jeśli obu, to S (ang. Stereo).
- L -informacja na którym kanale (lewym- -L, bądź prawym- R) będą grały dźwięki podczas prób instrumentu lub odtwarzania patternu.
- numery tracków -poniżej nich znajduje się okno zwane Song, a te napisy wyznaczają kolumny, w których wsadzane są dane dla kolejnych tracków. Ponadto ściemnione tło pod jednym z numerów tracków informuje, na którym generatorze którego POKEY-a (patrz poprzednia informacja), będą grały dźwięki podczas prób instrumentu lub odtwarzania patternu.

Pod napisem "Pattern" znajduje się okno o tej nazwie. Składa się ono z 17-tu linii po 13 znaków w każdej. W tym właśnie oknie pokazywany jest aktualny wygląd aktualnego patternu (który pattern jest aktualny, informuje linia powyżej.) Ponieważ każdy pattern składa się z 64 linii, widocznych jest tutaj tylko część z nich. W każdej linii pokazywane są następujące informacje:

- numer linii w patternie. Wartośc pomiędzy 00 a 3F.
- ewentualnie znajdująca się za numerem linii duża kropka to znacznik. Wskazuje on, że ta linia została zaznaczona.
- nuta. Jeżeli są to trzy kreski (---), to znaczy, że na tej pozycji w patternie nie będzie odgrywana żadna nuta. Napis np: C-1 oznacza, że na tej pozycji będzie odgrywana nuta C na oktawie pierwszej. C#1 to nuta Cis 1. Najwyższa nuta to D-6.
- numer dźwięku. Oznacza, jaki numer instrumentu będzie grał na tej pozycji. Wartość od 00 do 3F.
- głośność dźwięku. Jest to wartość z zakresu od 01 do FF. Oznacza ona maksymalną głośność jaką dźwięk może uzyskać. Starsze 4 bity dotyczą obwiedni podstawowej, a młodsze 4- dodatkowej. Wartość ta interpretowana jest w sposób następujący: Po zanegowaniu tej wartości starsze 4 bity odejmowane są od obwiedni podstawowej, a młodsze 4 od dodatkowej. Np: wartośc ED oznacza, że przy każdym odgrywaniu dźwięku, od jego obwiedni podstawowej będzie odejmowana wartość 1, a od dodatkowej 2. W rzeczywistości w pamięci trzymana jest właśnie ta wartość zanegowana i właśnie dlatego nie można podać głośności 00 (co i tak byłoby bezcelowe, lepiej po prostu skasować dźwięk), gdyż w pamięci byłoby to FF, a ta wartość zarezerwowana jest dla kodu końca patternu.
- opcjonalnie na samym końcu może znajdować się parametr. Jeśli jest to liczba z zakresu 1-F, to oznacza zmianę prędkości odgrywania muzyczki. Wartość 0 oznacza, że ta linia będzie ostatnią linią odgrywaną w tym patternie.

Poniżej okna Pattern znajduje się malutkie okno informacyjne, w którym pokazywana jest:

- Sp:5 -aktualnie ustawiona prędkość odtwarzania muzyczki (jest to wartość o jeden mniejsza od podobnej wartości w CMC lub MPT). Przy takiej wartości tempa będzie zawsze na początku odtwarzana muzyczka. Co najwyżej potem tą wartość można zmienić w patternie. Wartośc ta znajduje się w danych muzyczki w bajcie 31 (ADRMUS+30).
- Fr:4 -częstotliwość odtwarzania na ramkę. Wartość ta w danych muzyczki znajduje się za wartością tempa.
- 1-2 -pokazuje w jakich oktawach będą grały instrumenty. Klawisze które powodują granie instrumentu są identyczne jak w CMC, MPT i Delcie.
- Zamiast tych informacji, niektóre procedury w tym właśnie okienku wyświetlają informacje dla użytkownika. Gasną one natychmiast po wyjściu z tych opcji.

Poniej numerów tracków znajduje się okno Song. Po lewej stronie znajduje się numer linii songu. Naraz widoczne są tylko 3 linie songu. Ciemniejsze tło określa, która linia jest linią edytowaną. Każda taka linia zajmuje 2 linie na ekranie, gdyż inaczej nie mogłem zmieścić 8 tracków. Wartości w górnym rzędzie są przeznaczone dla kanału lewego, a w niższym dla prawego. Na każdym tracku znajdują się 2 wartości. Pierwsza z zakresu 00-7F to numer patternu grającego na tym tracku, a druga to transpozycja dźwięków grającym w tym patternie. Zamiast numeru patternu na pierwszym tracku może znajdować się wartość większa od 7F. Jeżeli następna wartość jest mniejsza od 80 to oznacza to skok na pozycję w songu o podanym numerze, a wartość większa zatrzymanie odgrywania muzyczki. Z podawaniem numeru do którego należy skakać trzeba uważać, gdyż program nie zapisuje całych danych songu, a tylko linie do pierwszej linii wyglądającej tak jak po wczytaniu programu, za którą również znajdują się tak wyglądające linie. To znaczy, że z tak wyglądającego songu:

00 01-00 02-00 03-00 04-00
   00-00 00-00 00-00 00-00
01 FF-02 7F-FF 7F-FF 7F-FF
   7F-FF 7F-FF 7F-FF 7F-FF
02 FF-FF 7F-FF 7F-FF 7F-FF
   7F-FF 7F-FF 7F-FF 7F-FF

.. ..... ..... ..... ...dalej podobnie. Zapisane zostaną tylko dwie pierwsze linie. Tymczasem player odgrywając ten song natrafi na skok do linii drugiej, która nie została zapisana, co może spowodować dziwne efekty dźwiękowe. Również nie należy robić tak, aby skoki się zapętlały, gdyż spowoduje to niechybne zawieszenie programu.


Zajmijmy się teraz wyjaśnieniem pojęcia transpozycji. Jest to podniesienie dźwięku o podaną liczbę półtonów. Cała transpozycja jest zamknięta we wstęgę o długości 256 półtonów, to znaczy, że podniesienie dźwięku o 256 półtonów spowoduje powrócenie do początkowej wysokości. C#1 podniesione o jeden półton to D-1, a opuszczone o jeden półton, czyli podniesione o FF półtonów, to C-1. Podniesienie o oktawę to 0C półtonów, a opuszczenie o oktawę, to F4 półtonów. Ponieważ cała tablica częstotliwości składa się właściwie z 4 tablic, więc podniesienie o 40 półtonów nie powoduje podniesienia dźwięku, a jedynie pobieranie wartości częstotliwości z następnej tablicy.

 

Poniżej okna Song znajduje się okno Instrument. Poniżej napisu "Ins" znajduje się numer aktualnego dźwięku (wartość od 00 do 3F). Minus przed numerem oznacza, że dany dźwięk nie występuje w aktualnym patternie pokazywanym w oknie Pattern. Plus oznacza, że występuje. Część okna instrumentu, tą znajdującą się na ciemniejszym tle, można podzielić na pionowe kolumny. Jest ich 21. Zawierają one wartości, które są kolejno wsadzane przez player do komórek POKEY-ów. W każdej kolumnie znajdują się następujące wartości.

Od góry:

- słup pokazujący głośność obwiedni podstawowej.
- słup głośności obwiedni dodatkowej.
- zniekształcenie dźwięku.
- rodzaj akcentu.
- starsze 4 bity parametru akcentu.
- młodsze 4 bity parametru akcentu.

 

Głośność zORowana ze zniekształceniem to bezpośrednia wartość wsadzana do komórek POKEY-ów. Częstotliwość zależy od nuty, typu dźwięku itp. Można jednak dokładniej manipulować częstotliwością dźwięku za pomocą akcentów. Zależnie od rodzaju akcenty o danym numerze wywołują następujące reakcje:

- 0 -brak akcentu. Częstotliwość zależy tylko od typu dźwięku i nuty.
- 1 -parametr jest bezpośrednio wsadzany do komórki częstotliwości POKEY-a.
- 2 -poprzednia wartość wsadzona do POKEY-a, plus parametr, do POKEY-a.
- 3 -oryginalna wartość częstotliwości przed wsadzeniem do POKEY-a jest powiększana o parametr.
- 4 -parametr AND $D20A (RANDOM) jest wsadzany do POKEY-a.
- 5 -parametr oznacza numer nuty, której częstotliwość pobierana jest z tablicy częstotliwości i wsadzana do POKEY-a.
- 6 -podobnie jak poprzednio, ale przed wsadzeniem do POKEY-a wartość jest powiększona o dotychczasową wartość wsadzaną do POKEY-a.
- 7 -parametr jest transpozycją nuty.
- 8-F -akcenty te są identyczne z akcentami 0-7, z tym, że do komórki AUDCTL jest wsadzana zapasowa wartość AUDCTL dźwięku. Normalnie przy akcencie 0 wsadzana jest tam wartość standardowa, a przy pozostałych wartość 0.

W oknie Instrument na jasnym tle znajdują się parametry dźwięku. Pierwszy rząd ośmiu parametrów to transpozycje dźwięku. Na samej górze jest transpozycja o numerze 1, na dole o numerze 8. Drugi rząd to dziewięć parametrów dźwięku. Kolejno od góry:

- barwa filtru -jak łatwo się domyślić używana przy dźwiękach filtrowanych. Częstotliwość stransponowana przez tą wartość wsadzana jest do generatora filtrującego (o numerze o 2 większym).
- standardowa wartość AUDCTL dźwięku.
- zapasowa wartość AUDCTL (używana przy akcentach od 8 do F).
- szybkość opadania obwiedni podstawowej

Kiedy player zagra już wszystkie 21 kolumn obwiedni dźwięku, o głośności decyduje już tylko głośność na ostatniej kolumnie i szybkość opadania. Liczona jest ona w ilości wywołań playera. Wartość 10 oznacza zmniejszanie głośności o jeden co $10 wywołań playera. 0 to obwiednia stała.

- szybkość opadania obwiedni dodatkowej.
- starsze 4 bity oznaczają typ dźwięku.

Młodsze 4 to parametr. Poszczególne typy dźwięku to:

-0 -dźwięk normalny.
-1 -wibrato.
-2 -delikatne wibrato.
-3 -wibrato liczone w nutach.
-4 -opadanie dźwięku.
-5 -opadanie dźwięku liczone w nutach.
-6 -stałe podwyższenie wysokości.
-7 -dopóki głośność dźwięku na obwiedni podstawowej jest niezerowa, głośność obwiedni dodatkowej jest zwiększana o 1.

Typy dźwięku od 8 do F różnią się tym, że parametr jest brany z minusem.

- oczekiwanie na rozpoczęcie danego typu dźwięku. Do tej pory dźwięk brzmi jakby był typu 0.
- najstarsze 2 bity oznaczają tablicę częstotliwości, z której pobierana będzie częstotliwość. W rzeczywistości wartość ta jest dodawana do numeru nuty tak, że dla drugiej tablicy nuta C-1 ma numer $41. Pozostałe 6 bitów podaje zmniejszoną o 1 ilość wywołań playera po której następuje kolejne wywołanie procedury typu dźwięku, zmieniające odpowiednio dźwięk.
- młodsze 4 bity to zmniejszona o jeden ilość wywołań playera, po której odtwarzana jest następna transpozycja. Starsze 3 bity, to zmniejszona o jeden ilość używanych transpozycji. Transpozycje są odtwarzane od tej o numerze 1 aż do tej której numer wybraliśmy, a następnie znowu od tej o numerze 1. Jednakże jeżeli ilość transpozycji zwiększymy o 8, to będą one odtwarzane w kolejności od tej o numerze 1 w dół aż do tej której numer wybraliśmy, a następnie z powrotem w górę do pierwszej i tak w kółko.

Na samym dole ekranu znajduje się okno, w którym widzimy, w postaci słupków, częstotliwości i głośności odgrywanych dźwięków. W jaśniejszej części tego okna widzimy tylko głośności dźwięków odtwarzanych na poszczególnych generatorach.

Teraz pora na rzecz najważniejszą: obsługa programu.

Cały Composer jest podzielony na 3 osobne, nie związane ze sobą części: edycję patternów, songu i instrumentów. Jednakże mimo to część opcji działa we wszystkich tych częściach:


Informacja dotycząca używanych przycisków i skrótów w instrukcji/artykule:

! - oznacza klawisz "SHIFT"
^ - oznacza klawisz "CONTROL"
<- - strzałka w lewo
-> - strzałka w prawo
"góra" - strzałka do góry
"dół" - strzałka do dołu
!<-, -> - zmiana numeru instrumentu o 1.

!"góra", !"dół" - zmiana oktawy, w której będą grać dźwięki.

<, > - zmiana tracku, na którym będą grać dźwięki.

^S -zmiana tempa odgrywania muzyczki. Zmiany dokonujemy klawiszmi góra i dół, Esc bądź Return kończą edycję.

^G -zmiana częstotliwości odgrywania muzyczki na ramkę (edycja jak w opcji poprzedniej).

!/ -zmiana aktualnego patternu, instrumentu, pozycji w songu (zależnie, w którym oknie się znajdujemy). Podajemy
 najpierw bardziej znaczącą cyfrę liczby. Jeżeli już po niej naciśniemy Return, to zmianie ulegnie tylko ta cyfra.
 Jeżeli wprowadzimy również drugą cyfrę, to nie należy już naciskać klawisza Return. Esc to wyjście.

Tab -przejscie do następnego okna.

!^Esc -powrót do Menu.

Zaraz po wejściu do Composera znajdujemy się w oknie edycji patternu.

Mamy tutaj następujące opcje:

<- -> -zmiana numeru patternu o 1.

"góra", "dół" -ruch kursorem po patternie. klawisze nutowe -(czyli te będące odpowiednikami klawiszy fortepianowych) wpisywanie na danej pozycji w patternie aktualnego instrumentu (automatycznie ustawiana jest głośność FF).

^"góra", ^"dół" -zmiana o jeden głośności obwiedni podstawowej.

^<-, ^-> -to samo, ale dla dodatkowej.

^0..^9, ^A..^F -bezpośrednie wpisywanie głośności. Najpierw podaje się głośność obwiedni podstawowej, a następnie  program czeka na podanie głośności dodatkowej, ale możemy równie dobrze wybrać każdą inną opcję (Pamiętajmy, że wartości 00 nie można wpisać).

!0 -rozkaz zakończenia w tym miejscu odgrywania patternu.

!1..!9, !A..!F -rozkaz zmiany tempa.

Space -czyszczenie pozycji w patternie na pozycji kursora.

!Space -czyszczenie tylko dodatkowego parametru (zmiana tempa lub koniec odgrywania patternu).

!Z -ustawia na danej pozycji znacznik (kropka za numerem pozycji).

Delete -kopiuje pozycję przy znaczniku na pozycję, w której znajduje się kursor oraz przesuwa o 1 pozycję w dół znacznik i kursor.

!Insert -rozsuwa linie w patternie, wstawiając pustą linię na pozycji kursora.

!Delete -zsuwa linie wstawiając pustą linię na pozycji 3F.

^Clear, ^Insert, ^Delete -w programie znajduje się bufor, który używany jest przy kopiowaniu patternów. ^Clear czyści  pattern i zapisuje go do tego bufora.

^Insert odzyskuje go, a ^Delete zapisuje pattern do bufora bez kasowania patternu.

^T, !T -transpozycja instrumentu w patternie. Jeżeli w wyniku transpozycji miałby powstać dźwięk o numerze 0, to ponieważ  takiego dźwięku nie ma, dana pozycja w patternie jest czyszczona. Numer instrumentu oraz wielkość transpozycji podajemy w małym oknie pod patternem. Domyślnie przyjmowany jest instrument aktualny. Pomiędzy jedną wartością a drugą poruszamy się klawiszami <-, ->. Wartości możemy podawać normalnie, szesnastkowo, albo też za pomocą klawiszy "góra", "dół" zmieniających wartość o 1. Return powoduje wykonanie opcji, Esc to wyjście.

!T różni się tylko tym, że kursor już będzie ustawiony na drugiej wartości.

![, !] -transpozycja aktualnego instrumentu o 1.
^X, !X -zmiana dowolnego instrumentu w patternie na dowolnie wybrany. Domyślnie przyjmowany jest instrument aktualny. Proces  pobierania wartości podobnie jak przy transpozycji.

!Tab -zmienia numer instrumentu na pozycji kursora na aktualny oraz przesuwa kursor o jedną pozycję w dół.

Return, !Return -odgrywa pattern na aktualnym tracku. Jeżeli naciśnięty był Shift, to odgrywanie nastąpi od początku patternu. W przeciwnym przypadku będzie to od pozycji kursora. Dowolny klawisz przerywa odgrywanie.

!Inverse, ^Inverse, !Caps, ^Caps - program TMC został wyposażony w eksperymentalną opcję jaką jest wpisywanie nut do patternu na żywo (w czasie rzeczywistym) podczas grania patternu, przy jednoczesnym odsłuchiwaniu jego dotychczasowej  zawartości. Służą do tego owe cztery opcje. Różnią się one w sposób następujący. Klawisz Inverse oznacza, że pattern będzie puszczony
 od początku, zaś Caps, że od aktualnej pozycji kursora. Shift oznacza, że pattern zacznie być odgrywany dopiero, kiedy ten klawisz zostanie puszczony,
 zaś Control oznacza, że pattern nie zostanie puszczony dopóki nie naciśniemy jakiegoś klawisza. Podczas gdy program oczekuje na naciśniecie  dowolnego klawisza nutowego pattern jest w sposób normalny odsłuchiwany. Naciśniecie klawisza nutowego powoduje wpisanie go do  patternu na aktualnie odgrywanej pozycji oraz oczywiście zagranie wpisywanej nuty. Klawiszami "góra", "dół" zmieniamy aktualną oktawę. Esc powoduje powrót do edycji patternu.

Następnym oknem jakie odwiedzamy jest okno edycji instrumentu:

"góra", "dół", <-,  -> - tymi klawiszami poruszmy się po oknie.

^góra ^dół -jeżeli znajdujemy się na tej części okna z ciemniejszym tłem, to te klawisze powodują zmianę głośności obwiedni podstawowej w danej kolumnie.

^<-, ^-> -dotyczą obwiedni dodatkowej.

!^góra, !^dół -zmieniają głośność całej obwiedni podstawowej.

!^<-, !^-> -dotyczą obwiedni dodatkowej.

0..9, A..F -wpisywanie wartości.

^Clear, ^Insert ,^Delete -kopiowanie instrumentów. Działa tak samo jak w oknie edycji patternów.

klawisze nutowe -mimo iż klawisze cyfrowe zajmują część z nich, to jednak reszta działa i można za ich pomocą posłuchać sobie dźwięku. W razie, gdybyśmy potrzebowali akurat klawisza zajętego przez cyfrę, to możemy nacisnąć klawisz Shift lub Control (byle nie Control+S lub Control+G).

Ostatnim oknem jest okno songu:

"góra", "dół", <-,  -> -porusznie się po oknie.

0..9, A..F -wpisywanie wartości (nie można, za wyjątkiem tracku nr 1, podać numeru patternu większego od 7F. W ostatniej linii na pierwszym tracku może być tylko rozkaz skoku lub stopu).

!Insert -rozsuwa linie w songu, wstawiając zera na aktualnej pozycji.

!Delete -zsuwa linie songu. Na pozycji 7F wstawiana jest linia "pusta".

^X, !X -zmiana 2 tracków. Proces wyboru przebiega jak przy wyborze transpozycji w edycji patternu. Zamiana dokonywana jest od pozycji kursora w dół, tak więc jeżeli chcemy zamienić ze sobą zawartości tracków od pozycji 10 do 16 to należy przejść na pozycję 10, podać, które tracki chcemy zamienić, a następnie na pozycji 17 podać te same wartości. Domyślnie na początku przyjmowany jest track na którym stoi kursor.

^C, !C -tym razem jeden track jest kopiowany do drugiego. Również jest to robione od pozycji kursora, ale tym razem z powodu zamazywania starych wartości nie można zrobić poprzednio opisanej sztuczki.

!Tab -zmiana 2 tracków, ale nie trzeba podawać ich numerów. Wymieniane są ze sobą: track na którym stoi kursor oraz ten sam track tyle, że na przeciwnym kanale. Innymi słowy ta opcja pozwala zmieniać kanały lewy z prawym.

Return -odgrywa song od aktualnej pozycji. Podczas odgrywania działają następujące klawisze:

  <-, -> -zmiana instrumentu.
  gora, dół -zmiana oktawy.
  <, > -zmiana tracku.
  klawisze nutowe -granie wraz z muzyczką.
  Spacja, Esc -zakończenie odgrywania.

To tyle jeśli chodzi o obsługę mojego programu. Polecam sprawdzenie wszystkiego w naturze.


Plik do ściągnięcia:
thetamc.zip (wersja 1.0 i 1.11)


Poprzednia strona: Theta Music Composer v1.11
Następna strona: Theta Music Composer 2.0