1

Powiedzmy ze skodowalem kilka efektow graficznych w asm i chcialbym teraz do tego dodac jakas muzyke.
No i jak sie do tego najlepiej zabrac? Jest kilka trackerow, ktore obsluguja rozne formaty i sporo muzyki w sieci... tylko jak to odegrac podczas generowania efektow graficznych? Z tego co wyczytalem robi sie to za pomoca przerwan... ale czy sa moze jakies gotowe przykladowego procedurki odtwarzajace popularne formaty "w tle"?
Aha, no i jakiej dodatkowej konsumpcji czasu procesora powinienem sie spodziewac? (jakiego spowolnienia moich efektow hehe)

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

2 Ostatnio edytowany przez gorgh (2012-05-24 22:31:13)

procki do odtwarzania różnych formatów są już gotowe, wystarczy trochę pogrzebać w sieci, zdaje się że w paczce MADS są, podobnie z paczką RMT. Odgrywając raz na ramkę ubywa circa 1/10 - 1/7 cykli.

3

W paczce RMT masz dema w asm jak odtwarzac. Procedura inicjalizacji zwraca Ci jak często musisz wywolywac procedurę grającą: 1, 2, 3 lub 4 razy na ramkę. To zalezy od muzyki.
Jesli musisz odtwarzac kilka razy na ramke, to w paczce RMT znajdziesz tez demo w jaki sposob obliczac kiedy to robic (w jakich odstepach).

Nie musisz na prerwaniu. Ale wazne jest zebys wywolywal procedure odtwarzajaca w rozwnych odstepach zeby dobrze brzmialo. Czyli jesli robisz to w petli glownej programu to musisz sie jakos synchronizowac w stosunku do ramki i uniezaleznic to od wykonywania innych kawalkow kodu.

4

Dzieki,
Faktycznie MADS ma juz takie procedurki, zerkne jeszcze na RMT.
Na razie nie moge sie w tym jeszcze odnalezc, ale sie nie poddaje. Jakby co bede wolal o ratunek;)

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

5

Udalo mi sie uruchomic mpt playera z paczki mads jako muzyczke w tle do jakiegos prostego rysowania po ekranie. Fajna sprawa i dziala:) Mam jednak kilka pytan...
W przykladach z Mads procedura odtwarzania jest wywolywana raz na ramke (zaraz po wyczekaniu na jej poczatek). Zalatwia to synchronizacje, o ktorej pisal Nosty. No ale jako, iz glowna petla mojego prostego testowego programu wykonuje sie duzo duzo czesniej niz ramka to dodanie kodu "czekania" jest mi nie na reke. Powiedzmy ze petla glowna to:

main
   jsr czekamNaRamke
   jsr mpt_player.play
   jsr rysujCos
   jmp main

Czy w takim przypadku powinienem zmienic procedure rysujCos tak by trwala "prawie" ramke (na przyklad wykonujac swoj kod w petli n razy, gdzie n musze dobrac pewnie empirycznie)? Czy olac czekanie na ramke i probowac synchronizowac to recznie? (na przyklad wywolujac procedure grajaca raz na n iteracji petli glownej)? Czy moze jednak uzyc przerwan? Pewnie robiliscie juz takie myki wiec moze macie jakis best practice;)
No a jesli muzyka wymaga wywolanie procedury czesciej niz raz na ramke odpowiednie miejsca kodu gdzie takie wywolania wrzucic nalezy dobrac po prostu empirycznie?

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

6

moim zdaniem najlatwiej posluzyc sie przerwaniami. "na" przerwaniu VBI odtwarzac muzyke.

http://atari.pl/hsc/ad.php?i=1.

7

Faktycznie udalo sie z VBI. Dzieki na hint:)

Zrobilem tez eksperyment z probowalem podpiac procedure odgrywajaca pod DLI, gdzie DLI bylo wlaczone tylko dla jednej linii ekranu. Spodziewalem sie wiec, ze efekt powinien byc dokladnie taki sam jak przy VBI a tu niespodzianka. Pod DLI muzyka zmienila sie troche w sieczke... efekt taki jak na poczatku gdy odgrywanie mialem w petli glownej programu bez czekami na ramke (petla wywolywala sie wiele razy na ramke). Tak z ciekawosci, dlaczego taki efekt? Przecie DLI tez jest wywolywane raz na ramke, nie?

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

8

Widocznie wywołanie DLI następowało więcej razy niż raz na ramkę. Jak miałeś zdefiniowaną display listę?

9

No faktycznie mialem bug'a w display liscie... Mialem wpis typu:  :89 dta b($e) i wywolanie DLI podpilalem do niego, co powodowalo wywolanie troche wiecej niz raz na ramke;) Dzieki.

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF