DigiCMCTak naprawdę, to program Chaos Music Composer prócz niewątpliwych zalet posiada tyleż samo wad. Jedną z najpoważniejszych jest niezbyt dobra syntetyczna perkusja proponowana przez autora. Nie jest jednak tak bardzo źle, żeby nie mogło być lepiej. Zawsze można próbować stworzyć własne brzmienie. Nie będę Was zmuszał do wielogodzinnego ślęczenia nad klawiaturą, proponuję zdefiniowanie takiego instrumentu: 1. Weźmy brzmienie ATARI i umieśćmy w nim takie akcenty: abbabaaaaaaaaaa (a - akcent, b - brak akcentu). 2. Wpiszmy od góry cztery magiczne liczby w słupku: f0 a1 03 00. Brzmi nieźle, prawda? Wydaje mi się jednak, że to już wszystko, co można zrobić na ATARI XL/XE metodą sztucznego modelowania dźwięku. Istnieje jednak sposób, o którym świat już dawno wie i który obecnie masowo wykorzystywany jest na każdym kroku. Chodzi o sampling, czyli zapis i odtwarzanie dźwięku w sposób cyfrowy (przypominam, że swego czasu na łamach TA przedstawiony był schemat samplera dla ATARI). Jak wszystko inne, i ta metoda nie jest pozbawiona wad. Największą z nich jest niesamowita pamięciochłonność. Jednak wszyscy wiedzą, że istnieje wiele programów, które wykorzystują sample i wprowadzają w zadumę słuchających - jak takie małe może tak grać? Dobrym przykładem jest tu gra Vicky. Zdając się na siebie samego i na program CMC opracowałem metodę, która pozwala na stworzenie naprawdę niesamowitych efektów (posłuchajcie, jak gra demo z końca artykułu). Wszyscy, którzy zetknęli się z programem CMC wiedzą, że umożliwia on wykorzystanie trzech ścieżek. Pierwsza wykorzystuje dwa generatory dźwięku. I tutaj tkwi sedno sprawy. Kiedy łączymy sprzętowo dwa generatory, wartości częstotliwości wpisujemy do obu rejestrów AUDF, wykorzystując jednocześnie tylko jeden rejestr AUDC. Co by było, gdyby na drugim odgrywać próbki? Zacznijmy od kilku uwag: 1. Piszemy muzykę na CMC, przez cały czas używając na pierwszej ścieżce brzmienia SuperBass. Wiąże się to ze specyficznym zapisem wartości do rejestrów dźwięku przez CMC. 2. Zmieniamy w module odgrywającym rozkazy, które wpisują wartości bezpośrednio do rejestrów sprzętowych tak, aby wpisywały je do pamięci w inne miejsce. Później przepisujemy te wartości, dokładając próbki. 3. Piszemy odpowiednią procedurę, na przykład taką: opt %100101 na urządzenie zew. *--- memory location play equ $ffff adresy muzyki musadr equ $ffff i modułu start equ $a000 bufor equ $0600 *--- zero page dosvec equ $0a (2) irqen_ equ $10 timer equ $14 apat equ $f0 (2) adrsmp equ $f2 (2) *--- procedures plarti equ $c030 setvbl equ $e45c sysvbl equ $e45f *--- registers audfl equ $d200 audcl equ $d201 audctl equ $d208 vcount equ $d40b irqen equ $d20e consol equ $d01f runad equ $02e0 vimirq equ $0216 *--- const. lenpat equ $10 długość patternu * dla perkusji *--- demonstration org start lda vimirq pamiętamy stare ldx vimirq+$01 wartości sta oldvim stx oldvim+$01 lda irqen_ sta oldirq lda musadr+$13 aktualizowanie sta tempo tempa ldx <musadr inicjalizacja ldy >musadr muzyki lda #$70 jsr play+$03 lda #$00 tax jsr play+$03 jsr clear lda #$00 inicjalizacja sta czyper perkusji sta ltmp sta wskain sta wska lda #$06 ustawienie ldx >vblk wektora ldy <vblk przerwań jsr setvbl loop equ * lda consol czy START ? cmp #$06 bne loop lda #$06 ldx >sysvbl ldy <sysvbl jsr setvbl lda #$40 stop muzyka jsr play+3 sei oddaj stare lda oldvim wektory ldx oldvim+$01 sta vimirq stx vimirq+$01 lda oldirq sta irqen sta irqen_ cli jsr clear lda timer cmp timer beq *-2 powrót do jmp (dosvec) systemu vblk equ * jsr play+6 odgrywamy melodię jsr percus jsr copy jmp sysvbl clear equ * lda #$00 zerowanie ldx #$08 rejestrów i sta bufor,x buforu sta audfl,x dex bpl *-7 rts copy equ * kopiowanie do ldx #$01 rejestrów (tylko lda bufor,x część wartości) sta audfl,x lda bufor+$02,x sta audfl+$02,x lda bufor+$06,x sta audfl+$06,x dex bpl copy+2 lda bufor+$04 sta audfl+$04 lda bufor+8 sta audctl rts percus equ * właściwa procedur lda ltmp odgrywająca bne per4 sample ldy wska lda track,y bne per3 lda #$00 sta wska sta czyper jmp percus per3 equ * tay dey lda <patd1 sta apat lda >patd1 sta apat+$01 per1 equ * cpy #$00 beq per2 clc lda apat adc #lenpat sta apat lda apat+1 adc #$00 sta apat+1 dey jmp per1 per2 equ * ldy wskain lda (apat),y cmp #$00 beq per4 tay dey lda poczm,y sta adrsmp lda poczs,y sta adrsmp+1 lda kons,y sta skon jsr setirq per4 equ * inc ltmp lda ltmp cmp tempo bne endper lda #$00 sta ltmp inc wskain lda wskain cmp #lenpat bne endper lda #$00 sta wskain inc wska endper equ * rts setirq equ * lda <irq ldy >irq sta vimirq sty vimirq+$01 lda vcount cmp vcount beq *-3 lda #$01 sta irqen sta czyper rts irq equ * pha tya pha lda vcount cmp vcount beq *-3 lda #$01 sta irqen adr jmp irq1 irq2 equ * ldy #$00 lda (adrsmp),y lsr @ lsr @ lsr @ lsr @ ora #$10 sta audcl+$04 lda <irq1 ldy >irq1 sta adr+$01 sty adr+$02 pla tay pla rti irq1 equ * ldy #$00 lda (adrsmp),y ora #$10 sta audcl+$04 inc adrsmp bne ir1_ inc adrsmp+$01 lda adrsmp+$01 cmp skon beq endirq ir1_ equ * lda <irq2 ldy >irq2 sta adr+$01 sty adr+$02 pla tay pla rti endirq equ * ldaNalezy się tu parę słów wyjaśnienia, ale najpierw chcę opisać, w jaki sposób zmienić moduł odgrywający i dostosować go do naszych potrzeb. Sprawa jest prosta i sprowadza się do wykorzystania przy pomocy Patchera następującej łaty: 1000 REM Poprawka do Modułu CMC 1010 DATA 1541,210,6 1020 DATA 1562,210,6 1030 DATA 1575,210,6Spowoduje ona to, że moduł będzie wpisywał wartości na szóstą stronę pamięci, a nie do generatorów dźwięku. Dopiero nasz program przepisze je do odpowiednich rejestrów. Definiowanie własnych patternów rozpoczyna się od etykiety PATD1, natomiast ich długość określa zmienna LENPAT (wartość $10). Chciałbym tu zaznaczyć, że długość ta nie jest wybrana przypadkowo, równa się jednej czwartej długości partemu w CMC. Wyżej, wpisałem wartości w kodach ekranowych, co czyni program bardziej zrozumiałym, więc spacja oznaczać będzie ciszę, wykrzyknik - próbkę numer 1 itd. Z tak zdefiniowanych patternów układamy ścieżkę (patrz etykieta TRACK). Tu również wpisałem wartości w ten sam sposób, np. znak dolara oznacza pattern czwarty, wykrzyknik - pierwszy itd. Całą ścieżkę kończymy zerem, co spowoduje jej odgrywanie od początku. Ważne są jeszcze etykiety POCZM, POCZS, KONS: POCZM - młodszy bajt adresu pierwszej próbki w pamięci. POCZS - jak wyżej, tylko starszy bajt. KONS - starszy bajt adresu końca próbki w pamięci. Na koniec kilka uwag: 1. Przy pisaniu muzyki należy zwracać uwagę na głośność instrumentów, aby nie zagłuszyć samplingu. 2. Można wykorzystać dowolne sample, próbkowane co dwie synchronizacje poziome. 3. Podczas odgrywania muzyki z samplami należy optymalnie wykorzystać przerwania ANTIC-a, bowiem zniekształcają one digitalizację. 1000 REM *--------------------------* 1002 REM : CMC Demo : 1004 REM : autor: Michal Luberda : 1006 REM : (c) 1993 Tajemnice ATARI : 1008 REM *--------------------------* 1010 DATA ffff00a0f6a2a9008d2f028d00 1020 DATA d4a900a2a88d30028e3102a200 1030 DATA a040a970200350a900aa200350 1040 DATA a900a2089d00069d00d2ca10f7 1050 DATA a9008df7a28df9a28dfaa28dfb 1060 DATA a28d1da8a9038d0fd2a2a0a081 1070 DATA a906205ce4a9008dc4028dc502 1080 DATA 8dc802a90e8dc602a9baa2a0a0 1090 DATA c08d00028e01028c0ed4a9228d 1100 DATA 2f02a514c514f0fcad1fd0c906 1110 DATA d0f94c74e420065020eba0ad00 1120 DATA 06ae01068d00d28e01d2ad0206 1130 DATA ae03068d02d28e03d2ae04068e 1140 DATA 04d2ae0606ad07068e06d28d07 1150 DATA d2ad08068d08d24c5fe4488a48 1160 DATA a2ff8d0ad4e8ec1da8d0f7a200 1170 DATA bd1ea88d0ad48d16d0e8e016d0 1180 DATA f2ee1da8ad1da8c946d005a900 1190 DATA 8d1da868aa6840adf9a2d052ac 1200 DATA fba2b947a2d00da9008dfba2a9 1210 DATA 008df7a24ceba0a888a9e785f0 1220 DATA a9a185f1c000f01118a5f06910 1230 DATA 85f0a5f1690085f1884c0fa1ac 1240 DATA faa2b1f0c900f015a888b9e8a2 1250 DATA 85f2b9eda285f3b9f2a28df8a2 1260 DATA 2064a1eef9a2adf9a2c906d017 1270 DATA a9008df9a2eefaa2adfaa2c910 1280 DATA d008a9008dfaa2eefba260a97f 1290 DATA 8d1602a9a18d1702ad0bd4cd0b 1300 DATA d4f0fba9018d0ed28df7a26048 1310 DATA 9848ad0bd4cd0bd4f0fba9018d 1320 DATA 0ed24cada1a000b1f24a4a4a4a 1330 DATA 09108d05d2a9ada0a18d90a18c 1340 DATA 91a168a86840a000b1f209108d 1350 DATA 05d2e6f2d009e6f3a5f3cdf8a2 1360 DATA f00ea992a0a18d90a18c91a168 1370 DATA a86840a9308d1602a9c08d1702 1380 DATA a9008df7a28d0ed268a8684005 1390 DATA 00000001000000050000000100 1400 DATA 00000500010005030003030005 1410 DATA 00050301000500010005010003 1420 DATA 05000300050303030500000001 1430 DATA 00000003030000010000000000 1440 DATA 00000000000000000000000000 1450 DATA 00000000000000000001000100 1460 DATA 05010303050505050505050601 1470 DATA 01010101010101010401040104 1480 DATA 01040404040404040404040404 1490 DATA 04040404040202020202020202 1500 DATA 02020202020202020202020202 1510 DATA 02020203030303030303030303 1520 DATA 03030303030303030303030303 1530 DATA 03030303030303030303030303 1540 DATA 03030303030303030303030303 1550 DATA 03030303030303030303030303 1560 DATA 03030303030303030303020202 1570 DATA 02020202020404040404040404 1580 DATA 01010101010101010000000000 1590 DATA 006dff71ff756fff73ff7700a8 1600 DATA 1ca87070707070704234a8f070 1610 DATA 7070475ca80707707070707042 1620 DATA 98a84100a81ea8bfa800020406 1630 DATA 06080a0a0c0c0e0e0c0c0a0a08 1640 DATA 060604020000000034616a656d 1650 DATA 6e696365002134213229010000 1660 DATA 34616a656d6e69636500213421 1670 DATA 32290100000000000034212b00 1680 DATA 002d2f3a250027322123000000 1690 DATA 00000000000030322f2732212d 1700 DATA 1a0000000000002328212f3300 1710 DATA 2d3533292300232f2d302f3325 1720 DATA 32000000000000000033342132 1730 DATA 341a77796a7363696500646f00 1740 DATA 73797374656d75000000000000 1750 DATA 0000e002e10200a0ffff006d00 1760 DATA 6f9ffec979010000001affffff 1770 DATA fd000000000800baf769ddffff 1780 DATA fffffcd4055718787440000000 1790 DATA 007baffffcff9cfaffff521510 1800 DATA 00327a36ab60006a7bfffffdcf 1810 DATA fc43888cb77a7400000000dfff 1820 DATA fffc7ab7a08cedeffb83010243 1830 DATA 8cbcdafc535441306dffcaffcb 1840 DATA 14845548775353854039a69dfe 1850 DATA fdb7fcab57b77895bb07468739 1860 DATA 308788a6bada79b996888db897 1870 DATA a6424a67426568ac59a477b8a7 1880 DATA baa9dabaa8a48c685489444547 1890 DATA 47787bbcbe99a8988ca788c666 1900 DATA 5b9667797479a87777a997a8bc 1910 DATA 99abc8b7986966577b79789a69 1920 DATA 99a868886557696a67cda99899 1930 DATA 686899867666546a7679cba8aa 1940 DATA 9889977797656888a9aa7a9997 1950 DATA 66697a8aa7a885a77768977ab7 1960 DATA 997a769a8899988a988977a988 1970 DATA 8679898788799899978898aa9a 1980 DATA 9987558758797a898887877787 1990 DATA 8897878889989b9a9998888788 2000 DATA 76888888987a89879998a98987 2010 DATA 87778898978888888788898898 2020 DATA 78888889999998989877786988 2030 DATA 88899988888999998888878978 2040 DATA 88897889787888998999887777 2050 DATA 77789989989998988778787788 2060 DATA 88888999998988887787888887 2070 DATA 88778788888878888788788898 2080 DATA 98998898888888888888898888 2090 DATA 99989998888988978888888889 2100 DATA 99898988988888888888888888 2110 DATA 88899889988888888888888888 2120 DATA 98888888888888888888888898 2130 DATA 99898888888888888888888888 2140 DATA 88888888888888888888888888 2150 DATA 888888888888ffffff00750077 2160 DATA 8888888873f7f00f30bf0f0050 2170 DATA 7a0f20985bcbefffffffffefef 2180 DATA efffafff0ffb74200000000000 2190 DATA 00000011234454443220102024 2200 DATA 2479cdfffffffffffffffffffe 2210 DATA dccbbaa99888777899bdceefed 2220 DATA ecc98731000000000000000012 2230 DATA 23455667778889999999865552 2240 DATA 232135569aceffffffffffffff 2250 DATA ffffeddcbbaa99887776666655 2260 DATA 555556666667778989abdabcaa 2270 DATA ba8b45a7367133021100111122 2280 DATA 2334556677888999aaaabbbbbb 2290 DATA bbbbbbbbbbbbaaaaaaaa999989 2300 DATA 887776664554354445667789ab 2310 DATA cdeefffffffffffeedccbbaa99 2320 DATA 88887777666666666666666666 2330 DATA 777789abbcedefeddbba876432 2340 DATA 00000000000001223445567788 2350 DATA 8999aaabaababbabaaa9998887 2360 DATA 777777778999aaabbbcdccdddd 2370 DATA edeededdddcccbbcbbaa99a999 2380 DATA 88877878767666656556556555 2390 DATA 65555555555665776677766777 2400 DATA 77888788899999998999999999 2410 DATA 98aa8a999999999999998999a9 2420 DATA 99988899888888888887777888 2430 DATA 88777777777777788888798788 2440 DATA 8888889999999988a899999999 2450 DATA 99999999999989888888888888 2460 DATA 87888888888888888888888788 2470 DATA 88888888888888888888888888 2480 DATA 88979889788898879888888888 2490 DATA 89898888888888888888888888 2500 DATA 88888888888888888888888888 2510 DATA 88888888888888888888888888 2520 DATA 88888888888888888888888888 2530 DATA 88888888888888888888888888 2540 DATA 88888888888888888888888888 2550 DATA 888888888900ffff0071007388 2560 DATA 888888988888899a867977338d 2570 DATA a57a6ab9cbb859668c8a94a458 2580 DATA 9979eb67889a9a6a877949bab9 2590 DATA 8888887986789a8ab7745689a8 2600 DATA 7ba698603bdec8310fbc979697 2610 DATA 098845cc88cd637a879c8679eb 2620 DATA 86469bb8758968888797669768 2630 DATA 9a98996799789989878a988988 2640 DATA 988788788b9788898977899a9a 2650 DATA 9786788899ca6405d8cea8566a 2660 DATA 9bb99865777798879a5644a88a 2670 DATA aa999888767997686689a9a989 2680 DATA 88778998789767779a99888788 2690 DATA 899887878bc88c745889ba9779 2700 DATA a898987877989a9866689ab987 2710 DATA 88aa9888777888888888998889 2720 DATA 777888988877899a9888877899 2730 DATA 9877878889888a888877888899 2740 DATA 98888888888888889999898998 2750 DATA 87889888888899987889989888 2760 DATA 88988888898888889989988888 2770 DATA 8999a7b7336bbc759a55bc7897 2780 DATA 7a87987a67866a99a669989998 2790 DATA 7986898789789789878979a878 2800 DATA 99878899879987888898789788 2810 DATA 98986798898888889878988897 2820 DATA 99889988888a87888988898889 2830 DATA 88888889888977888888888888 2840 DATA 88887888888888888888888888 2850 DATA 88888888988888888888888888 2860 DATA 88888888888888888888888888 2870 DATA 88888888888888888888888888 2880 DATA 88888888888888888888888888 2890 DATA 88888888888888888888888888 2900 DATA 88888888888888888888888888 2910 DATA 88888888888888888888888888 2920 DATA 88888888888888888888888888 2930 DATA 88888888888888888888888888 2940 DATA 88888888888888888888888888 2950 DATA 8888888888ffff00402446a0e3 2960 DATA ede3a0e4e1f4e1a0e6e9ece5a0 2970 DATA 8e950d200612d7ec15004ca8c4 2980 DATA 3e689538197abcea0000000000 2990 DATA 0042000000ffffffffffffffff 3000 DATA ffffffffffffffffffffffffff 3010 DATA ffffffffffffffffffffffffff 3020 DATA ffffffff434443444343434344 3030 DATA 44444545454545ffffffffffff 3040 DATA ffffffffffffffffffffffffff 3050 DATA ffffffffffffffffffffffffff 3060 DATA ffffffffffffffffffffffffff 3070 DATA ffffff04a100200000f0c70020 3080 DATA 0000f0c370208000ec90f00080 3090 DATA 0008a10c20000000a100200000 3100 DATA 04a10020000004a10c000000c5 3110 DATA a10700480075a10500222075a1 3120 DATA 0400222075a10300222000a900 3130 DATA 000000f8c77020000000000000 3140 DATA 00000000000000000000000000 3150 DATA 00000000000000000000000000 3160 DATA 00000000000000000000000000 3170 DATA 00000000000000000000000000 3180 DATA 00000000000000000000000000 3190 DATA 00000056453423222222025644 3200 DATA 34333322220256443433222222 3210 DATA 02231100000000000067554434 3220 DATA 33232202112233334444440434 3230 DATA 22222211111101222222222222 3240 DATA 22023522110000000000444434 3250 DATA 23221101004444342322110100 3260 DATA 44443423221101005645343333 3270 DATA 33330356443433332222020000 3280 DATA 00000000000000000000000000 3290 DATA 00000000000000000000000000 3300 DATA 00000000000000000000000000 3310 DATA 00000000000000000000000000 3320 DATA 00000000000000000000000000 3330 DATA 00000000000000000000000000 3340 DATA 00000000000000000000000000 3350 DATA 00000001010101010101010101 3360 DATA 080901010b0d0d0d0d0dfefefe 3370 DATA fefefefefefefefefefefefefe 3380 DATA fefefefefefefefefefefefefe 3390 DATA fefefefefefefefefefefefefe 3400 DATA fefefefefefefefefefefefefe 3410 DATA fefefefefefefefefeef000000 3420 DATA 00050505050505000005050c05 3430 DATA 05050505ffffffffffffffffff 3440 DATA ffffffffffffffffffffffffff 3450 DATA ffffffffffffffffffffffffff 3460 DATA ffffffffffffffffffffffffff 3470 DATA ffffffffffffffffffffffffff 3480 DATA ffffffff020304030203060307 3490 DATA 040a0a020302030e0f0203ffff 3500 DATA ffffffffffffffffffffffffff 3510 DATA ffffffffffffffffffffffffff 3520 DATA ffffffffffffffffffffffffff 3530 DATA ffffffffffffffffffffffffff 3540 DATA ffffffffffffffffffffffff00 3550 DATA 5f8e05498c4b804c8e07648a63 3560 DATA 806180ff024781474780474781 3570 DATA 47804780478042814242804242 3580 DATA 81428042804280408140408040 3590 DATA 40814080408040804081404080 3600 DATA 404081408040804080ff024780 3610 DATA 0a530247478047470a53800247 3620 DATA 800a538002478042800a4e0242 3630 DATA 428042420a4e800242800a4e80 3640 DATA 02428040800a4c024040804040 3650 DATA 0a4c800240800a4c8002408040 3660 DATA 80094c024040094c024040094c 3670 DATA 80024080094c4c024080ff045f 3680 DATA 8e5a8a054682478e065352504e 3690 DATA 4c4e525355585a5e5a585553ff 3700 DATA 8700615f5e5c5a585a5e5f6164 3710 DATA 6a6b6a6664615f5e5c5a585a5e 3720 DATA 588e6463615f5e5c5a5e0c5385 3730 DATA ff00538653805380578058805a 3740 DATA 865a805a805c805e805f8a5f82 3750 DATA 0a588158588058800958805882 3760 DATA 5880ff00538661805f805e805c 3770 DATA 805a865a805a805c805e805f8e 3780 DATA 0a58815858805880005f805f80 3790 DATA 61806380ff0d5f865f805f8063 3800 DATA 80648066866680668068806a80 3810 DATA 6b8a6b826b6a68666463615f5e 3820 DATA 5c5a5857555352ff0d5352504e 3830 DATA 4c4b494746444240424446475a 3840 DATA 885a805c805e805f8c5f805881 3850 DATA 64588064806b805f8061806380 3860 DATA ff065380528050804e80538052 3870 DATA 8050804e805380528050804e80 3880 DATA 5380528050804e805380528050 3890 DATA 804e805380528050804e805380 3900 DATA 528050804e805380528050804e 3910 DATA 80ff0142804e4e804e80424280 3920 DATA 4e8042804e4249805555805580 3930 DATA 49498055804980554947805353 3940 DATA 80538047478053804780534747 3950 DATA 80535380538047478053804780 3960 DATA 5347ff07538e4e8e4c82036682 3970 DATA 074c82036682074c8203668207 3980 DATA 4c820366806680ff0142804246 3990 DATA 494e494642804246494e494649 4000 DATA 804944554d504449804944554d 4010 DATA 50444780474e534b534e498049 4020 DATA 44554d50444780474e534b534e 4030 DATA 4780474e534b534eff01428042 4040 DATA 46494e494642804246494e4946 4050 DATA 49804944554d50444980494455 4060 DATA 4d50444780474e534b534e4780 4070 DATA 474e534b534e4780474e534b53 4080 DATA 4e4780474e534b534eff006386 4090 DATA 61825f825e865e805e5f618063 4100 DATA 80648464805f8064805c806480 4110 DATA 58806480558064805380648050 4120 DATA 806480ff870057805755538052 4130 DATA 805380535250804e8053805352 4140 DATA 50804e805380535250804e8053 4150 DATA 80535250804e804c804c4e5080 4160 DATA 52804c804c4e50805280ff Michał Luberda
|