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
     
    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
     
    moze jakims rozwiazaniem by bylo opuszczanie co 6 wywolanie plajera jesli jestesmy w NTSC?
    • 3:
       
      CommentAuthorlarek
    • CommentTime20 Dec 2014 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 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
     
    Dzięki. Wdrażam w życie. Zobaczymy, co z tego wyjdzie :)
    • 6: CommentAuthormono
    • CommentTime20 Dec 2014 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
     
    pomijać ramkę
    • 8:
       
      CommentAuthorlarek
    • CommentTime20 Dec 2014
     
    Dzięki za rady. Wygląda na to, że pomijanie ramki działa. A przynajmniej tak słyszałem ;-)
    • 9: CommentAuthorwieczor
    • CommentTime20 Dec 2014 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
     
    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
     
    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 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
     
    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 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 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
     
    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
     
    xxl: przeanalizowałem to właśnie w symulatorze 6502 i wciąż się dziwię, że to naprawdę działa :)
    • 18:
       
      CommentAuthorjhusak
    • CommentTime21 Dec 2014
     
    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
     
    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
     
    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
     
    Ha czyli to tylko kwestia przyjęcia offsetu. Jasna sprawa - dzięki 0xF!