atarionline.pl Tempo grania dla PAL i NTSC - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorlarek
      • CommentTime20 Dec 2014 18:12
       
      Pytanie dla wtajemniczonych :)
      Jak zmienić tempo grania muzyki na komputerze NTSC?

      Chodzi mi o to, że muzyka zrobiona w RMT odgrywana jest w grze na przerwaniach, czyli w komputerach PAL jest to 50 razy na sekundę. Jak sobie uruchomimy grę na komputerze NTSC, to muzyka nam przyspiesza, bo odgrywana jest 60 razy na sekundę.
      Co i jak można zmienić/ustawić, aby muzyka grała w "normalnym" tempie, czyli tak jak na komputerze 50Hz?

      Nie mam komputera NTSC, więc zmieniłem sobie tylko system w emulatorze na NTSC i takiego właśnie przyspieszenia doświadczyłem :)
      Może coś jeszcze powinienem poprzestawiać oprócz systemu video?
      • 2: CommentAuthorxxl
      • CommentTime20 Dec 2014 19:12
       
      moze jakims rozwiazaniem by bylo opuszczanie co 6 wywolanie plajera jesli jestesmy w NTSC?
      • 3:
         
        CommentAuthorlarek
      • CommentTime20 Dec 2014 19:12 zmieniony
       
      Będzie wówczas równo grać? Nie wiem, jak to wyrazić, ale czy to nie będzie tak, że w takim przypadku będziemy słyszeć zmiany tempa?
      • 4: CommentAuthorwieczor
      • CommentTime20 Dec 2014 19:12 zmieniony
       
      Sprawdzone w praktyce - tak właśnie się robi to najprościej. Wywołujesz player w 5 na 6 wywołaniach VBLANK.

      Grać będzie równo, bo to raptem brak 1/20 sekundy, właściwie nie zauważalne dla ucha, a tempo wychodzi to samo. Przy najbardziej popularnym tempie modułu - 6 - jest 6 wywołań playera na jeden wiersz więc to inny rząd wielkości niż tempo. Mógłbyś usłyszeć zmianę raczej w brzmieniu (obwiedni) ale w praktyce nie usłyszysz.
      • 5:
         
        CommentAuthorlarek
      • CommentTime20 Dec 2014 19:12
       
      Dzięki. Wdrażam w życie. Zobaczymy, co z tego wyjdzie :)
      • 6: CommentAuthormono
      • CommentTime20 Dec 2014 19:12 zmieniony
       
      Ouszczanie ramki to najgorsze rozwiązanie. Proponowałbym odgrywanie co 312 linii skanninowych. Problem jest jednak taki, że jeśli nie masz wolnego generatora POKEYa, to trzeba się posiłkować DLI, a te niestety są generowane tylko w liniach 8..247. Trzeba sobie więc na VBLK wyznaczać linię w której odpalisz playera no i niestety opuszczać dziury w liniach - na to nic się nie da poradzić, aczkolwiek po prostu kiedy wypadnie linia 248..312 oraz 0..7 możesz ustawić po prostu linię 8 (kumulując resztę dla wyznaczenia kolejnej linii poprawnie - nie powinno wprowadzić  to dużych zniekształceń).

      Edit: Poprawka. Moje podejście jest jednak dość teoretyczne - Wieczór jako praktyk może mieć rację, choć osobiście jednak manipulowałbym DLI :)
      • 7: CommentAuthortebe
      • CommentTime20 Dec 2014 20:12
       
      pomijać ramkę
      • 8:
         
        CommentAuthorlarek
      • CommentTime20 Dec 2014 21:12
       
      Dzięki za rady. Wygląda na to, że pomijanie ramki działa. A przynajmniej tak słyszałem ;-)
      • 9: CommentAuthorwieczor
      • CommentTime20 Dec 2014 22:12 zmieniony
       
      @mono: Twoje podejście jest formalnie poprawne, tzn. nie wprowadzi żadnych zniekształceń, ale poziom skomplikowania powoduje, że nie warta skórka wyprawki :) Bawiłem się tym - ot tak dla teorii, bo nie mam ciśnienia na wspieranie NTSC, ktoś mnie pytał - zniekształcenie na pewno jest ale trwa 1/5 sekundy, ja nie słyszałem, może ktoś ze słuchem absolutnym ;)

      PS. Zresztą można mówić o ew. zniekształceniu w obwiedni, nie tempa. Jeśli dopuszczamy, że w NTSC kolory wyglądają trochę inaczej, to i muzyka może brzmieć nieco inaczej ;)
      • 10: CommentAuthormono
      • CommentTime20 Dec 2014 22:12
       
      Ano. Inżynierski kompromis :) W grze może nie ma znaczenia, ale gdyby tak robić jakiś program dla muzyków do studia muzycznego to pewnie trzeba by się jednak pofatygować. Czyli Larek wystarczy jak zrobisz, jak mówi Wieczór :)
      • 11: CommentAuthorbrx
      • CommentTime21 Dec 2014 00:12
       
      Z innej beczki. Pochwali się może ktoś swoim kodem jak można najprościej i najefektywniej pomijać szóstą ramkę? Poniżej mój koderski dziwoląg :)

      ldx zp_NTSCplayer
      lda NTSCtable2, x
      sta zp_NTSCplayer
      ; (..)
      dforce bit rtplay ; przy ANTIC PAL zmieniaj na jmp

      lda zp_NTSCplayer ; co 6 wywołań nie graj
      beq no_rmt

      rtplay jsr RASTERMUSICTRACKER+3 ;1 play

      no_rmt
      ; (...)
      NTSCtable2
      dta 1, 2, 3, 4, 5, 0
      • 12:
         
        CommentAuthorlarek
      • CommentTime21 Dec 2014 00:12 zmieniony
       
      Zaraz pewnie mnie Wieczór zj...e, że to wstyd pokazywać...

      ;
      dec ntsc+1
      ntsc lda #6
      bne play
      lda #6
      sta ntsc+1
      bne exit
      play jsr RASTERMUSICTRACKER+3
      exit
      • 13: CommentAuthorbrx
      • CommentTime21 Dec 2014 01:12
       
      larek: no świetny trik! Że też sam na niego nie wpadłem ani nie znalazłem, a że z samomodyfikacją kodu (jeśli o to chodzi), to u mnie normalne niestety :) Dzięki )
      • 14: CommentAuthorwieczor
      • CommentTime21 Dec 2014 01:12 zmieniony
       
      A co ja mam tu kogo zjadać, co ja koder, czy co ? :)



      Robiłem właśnie w ten sposób ;) A samomodyfikacja to standard w asmie, po co zajmować pamięć jakąś zmienną, trzeba to jeszcze odczytać, zapisać... Jak można wprost tam gdzie jest ;)
      • 15: CommentAuthorxxl
      • CommentTime21 Dec 2014 10:12 zmieniony
       
      @Larek: brakuje Ci jeszcze decyzji czy wogole opuszczac wywolania. polaczylbym to w jedna procke:
      asl ntsc+1
      bcc @+
      lda #%00000100
      sta ntsc+1
      ntsc bne *+2
      unused .byte $ff
      @ jsr RASTERMUSICTRACKER+3

      jesli do ntsc+1 wpiszesz 0 - to masz normalna predkosc w PAL, jesli wpiszesz $04 to masz predkosc odtwarzania ntsc.

      ten bne wykona sie zawsze (moze kiedysc uda sie przekonac TEBE zeby operandem w trybie adresowania wzglednym mogla byc wprost podana liczba) tu trzymamy zmienna wprost w opernadzie rozkazu skoku wzglednego

      masz jedna procke, krotsza a dodatkowo jedna komorke wolna na jakas zmienna.
      • 16:
         
        CommentAuthorlarek
      • CommentTime21 Dec 2014 11:12
       
      Dzięki, przyda się z pewnością w przyszłości. Teraz i tak gra była cała przystosowywana do NTSC, więc nie było wyboru PAL/NTSC. Oprócz muzyki musiałem i tak dokonać więcej zmian, aby czasy dopasować do 60Hz.
      • 17: CommentAuthorbrx
      • CommentTime21 Dec 2014 11:12
       
      xxl: przeanalizowałem to właśnie w symulatorze 6502 i wciąż się dziwię, że to naprawdę działa :)
      • 18:
         
        CommentAuthorjhusak
      • CommentTime21 Dec 2014 15:12
       
      To nie jest dziwne. To jest przykład, jak bardzo rozminąć może się teoria z praktyką i jak nie warto się spierać o drugie miejsce po przecinku.
      • 19: CommentAuthorbrx
      • CommentTime21 Dec 2014 22:12
       
      Ano... Są rzeczy na niebie i na ziemi, o których się nie śniło nawet filozofom. A i trudna sztuka filozofii być może przyda się programiście, jeśli pozwoli mu przestawić umysł na wyższy poziom abstrakcji, często nieosiągalny dla zwykłych śmiertelników. Także po to, by znaleźć, odkryć lub zbudować nowe i krótsze ścieżki prowadzące do miejsc, do których droga była kręta lub w ogóle nieznana...

      ;)

      PS. Procedurka jest już w LP :)
      • 20: CommentAuthor0xF
      • CommentTime21 Dec 2014 22:12
       
      mono: Da się to zrobić na DLI. Wiem, bo robiłem. Zauważ, że w NTSC tylko 22 linie skaningowe są poza obrazem, da się więc tak ustawić DLI, żeby wypadało co 312 linii skaningowych.
      • 21: CommentAuthormono
      • CommentTime22 Dec 2014 13:12
       
      Ha czyli to tylko kwestia przyjęcia offsetu. Jasna sprawa - dzięki 0xF!