atarionline.pl Emulacja POKEY'a w przeglądarce - 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: CommentAuthormrk
    • CommentTime2 Dec 2020 zmieniony
     
    Jak widać w innym wątku emulacja ANTIC'a / CPU w przeglądarce zaczyna działać całkiem nieźle - za jakiś czas będę chciał się zabrać za emulację POKEY'a.

    Wydaje się że bardzo sensownie wygląda "Web Audio API" ->link<- - są na przykład oscylatory (można generować sinusoidę / prostokąt o zadanej częstotliwości), można chyba swobodnie wpływać na poziom (obwiednę) generowanego dźwięku, wszystko spokojnie na 4 kanałach. Można też oczywiście po prostu generować / odtwarzać sample.

    I teraz prośba do ludzi znających dobrze POKEY'a od strony programowania (@jhusak?) - było by super zerknąć w powyższą dokumentację i zastanowić się jak przełożyć wpisy do rejestrów POKEY'a na API calls z Web Audio API :) Czy ma sens w ogóle użycie na przykład tych oscylatorów czy od razu lepiej to odpuścić i próbować generować / odtwarzać sample? Użycie oscylalatorów jest o tyle spoko, że było by bardzo CPU-friendly i nie obciążało prawie głównego wątku emulatora. Tu jest sporo przykładów co można wycisnąć z tego API: ->link<- , w sieci jest pewnie sporo więcej.
    • 2: CommentAuthorpirx
    • CommentTime2 Dec 2020 zmieniony
     
    najlepszymi specjalistami tutaj są @f0x i @antrykot, emulgację pokeya masz w ->link<-
    to nie jest takie super hiper proste, bo oprócz cyfrowej syntezy poki ma też tor anal-ogowy, więc nie wychodzi z niego prostokąt, ale takie coś lekko piłokształtne (konkretniej to z wykładniczą krzywą rozładowania kondziora).
    asap zdaje się tego dokładnie nie emuluje, robi bardziej po prostej, altirra ma bardziej zbliżony kształt przebiegu.
    anywayz, żeby ładnie plumkało z wielkim powodzeniem wystarczy biblioteka f0xa z asapa.
    • 3:
       
      CommentAuthorjhusak
    • CommentTime2 Dec 2020 zmieniony
     
    W sumie (czując się wywołany do tablicy), ponad to, co pirx napisał:

    Pokey jest wredny, bo emu wymaga zasobów. Jest taktowany zegarem procka (1.79MHz). Można ograniczać się skutecznie do 64 khz i wiele muzyczek pójdzie na tym. O ile Antic wywołuje się 60/50 Hz, to z pokeyem może być (i będzie) "tricky". Poza tym to dość prosty układ, nie tak, jak YM, ale jednak dość prosty.

    Natomiast język polski nie jest prosty.

    Olałbym "sample", to będzie brzmieć w przybliżeniu, ale dalekim.

    Rzut oka na web audio api - ale kobyła. Niemniej, chyba dałoby radę asapa na to wrzucić. Fox?

    Marzy mi się pokey player w javascripcie.
    • 4: CommentAuthorlaoo
    • CommentTime3 Dec 2020 zmieniony
     
    Teza, że POKEY wymaga zasobów jest trochę śmiałą.

    Tu można sobie odpalić asapa w przeglądarce w wersji javascriptowej: ->link<-

    Z tego co patrzę to proces firefoxa z tą zakładką osiąga max 0.5% CPU. Dla porównania cała Altirra zajmuje tyle samo. Widać, że asap w js jest wielokrotnie mniej wydajny niż kodu C++, ale to wystarczy bo i tak nikt tego nie zauważy. A jakby ktoś bardzo chciał, to i można skompilować playera do WebAssembly.
    Więc wg mnie nie ma co się pchać w oscylatory (chyba, żeby napisać taki emulator dla sportu) tylko generować WAV'a i z głowy.
    • 5:
       
      CommentAuthorjhusak
    • CommentTime3 Dec 2020 zmieniony
     

    laoo:

    Teza, że POKEY wymaga zasobów jest trochę śmiałą.

    W zależności od punktu widzenia. Patrząc od strony Atmegi nie. A Javascript udźwignie Ci cały emulator. Ale fakt, nie dopisałem, że na małych systemach.
    Nadal jednak jest to bardziej skomplikowane, niż dodawanie wskaźników przy generacji sampli.

    Z drugiej strony - jak robimy na shaderach - to robimy na shaderach. Generowanie obrazu jest proste na shaderze, ale dźwięku - może być ciekawe.
    • 6: CommentAuthorbruno_j
    • CommentTime3 Dec 2020 zmieniony
     
    @jhusak
    Z drugiej strony - jak robimy na shaderach - to robimy na shaderach. Generowanie obrazu jest proste na shaderze, ale dźwięku - może być ciekawe.


    Skoro starusieńkie GTIA potrafi grać, to czemu nowoczesne shadery grać by nie miały? ;)

    [edit]

    A nie mówiłem? "Making Music with Shaders: Practical Additive GPU Audio Synthesis [pdf]"
    ->link<-
    • 7:
       
      CommentAuthorbocianu
    • CommentTime3 Dec 2020
     
    o, to jak już zrobicie tego pokeya, to ja potem poproszę jakiś porzadny tracker do Atari w przeglądarce :D
    • 8: CommentAuthormrk
    • CommentTime3 Dec 2020 zmieniony
     

    jhusak:

    Z drugiej strony - jak robimy na shaderach - to robimy na shaderach. Generowanie obrazu jest proste na shaderze, ale dźwięku - może być ciekawe.


    Zrobienie ANTIC'a i GTIA jest jak dla mnie wystarczająco trikowe, na razie pozostanę przy tym :)

    Ale nie wątpię że dało by się zrobić dzisiaj cały emulator na GPU - tu jest na przykład emulator Apple I (cpu: 6502) ->link<- - jednak większego sensu (poza udowodnieniem że się da) to nie ma.
    • 9:
       
      CommentAuthorjhusak
    • CommentTime3 Dec 2020
     
    @bocianu, to raczej Ty jesteś ten, którego proszą :)
    • 10: CommentAuthormakary
    • CommentTime3 Dec 2020
     
    No właśnie bocianu, przejęzyczenie jak mniemam, miało być 'napiszę' o wyszło 'poproszę' ;)
    • 11:
       
      CommentAuthorbocianu
    • CommentTime3 Dec 2020
     
    No dobra, w webowe apki troche umiem, to mogę pomóc. Ale nie umiem w pokeya, więc samodzielnie się nie piszę.

    Ale jak by się nagle powołał jakiś "Zespół do spraw uczynienia świata lepszym, przez stworzenie porządnego trackera na Atari" to mogę sie do niego zapisać :D
    • 12: CommentAuthorbruno_j
    • CommentTime3 Dec 2020
     
    GPU music:
    ;)
    • 13: CommentAuthorlaoo
    • CommentTime3 Dec 2020 zmieniony
     
    @bocianu Wg mnie to trochę wyważanie otwartych drzwi. Napisanie trackera jest trudne i niepotrzebne bo już istnieją dobre trackery. Jedyne czego potrzebujemy, to dobry edytor instrumentu oraz plugin VST, który potrafiłby grać ten instrument w OpenMPT. No potem potrzebny jest export, konwerter formatu tracka oraz jakiś player na Atari, ale to zdecydowanie mniej niż napisanie od zera trackera.
    • 14: CommentAuthorastrofor
    • CommentTime3 Dec 2020
     
    Taki amigowy ładny, trzeba by przerobic na atarowy ładny : ->link<-
    • 15: CommentAuthorCyprian
    • CommentTime3 Dec 2020
     
    @astrofor wczoraj trochę nad nim posiedziałem, bhttps://www.stef.be/bassoontracker/
    fajny, ale nie rozkminiłem jak zmienić długość paternu, domyślnie jest 64
    • 16: CommentAuthormakary
    • CommentTime3 Dec 2020 zmieniony
     
    Cyprian, w MOD mode jest domyślnie, w XM mode można zmienić.

    W MOD mode żeby zmienić / skrócić, trzeba w patternie użyć protrackerowej komendy DXX (skocz do linii XX kolejnego patternu). Zwykle D00.
    • 17: CommentAuthorCyprian
    • CommentTime3 Dec 2020
     
    @makary dzięki
    • 18:
       
      CommentAuthornogorg
    • CommentTime5 Dec 2020
     
    @mrk

    "Wydaje się że bardzo sensownie wygląda "Web Audio API" ->link<- - są na przykład oscylatory (można generować sinusoidę / prostokąt o zadanej częstotliwości)"

    Web Audio API to zabawka i do takich rzeczy jak emulacja POKEYa czy SIDa się nie nadaje. Wygenerowanie sinusa to najmniejszy problem w takiej emulacji.

    ->link<-
    • 19: CommentAuthormrk
    • CommentTime5 Dec 2020 zmieniony
     
    @nogorg sprawdzenie jak to zagra w podstawowej wersji, czyli 4 generatory (prostokąta a nie sinusa) + sterowanie głośnością to godzina roboty i raczej spróbuję to zrobić (w wątku o emulacji Antic'a na GPU też mnie przekonywano że się nie da / nie warto). Jak się nie uda - ok, mała strata (i na pewno pokażę jak to gra w takim Fredzie). Tekst który linkujesz mówi co prawda że "envelope generators" trudno zrobić dobrze (słychać trzaski przy przełączaniu parametrów oscylatorów z tego co rozumiem) ale ten tekst jest sprzed 3 lat i może warto sprawdzić czy nie zostało to poprawione.

    EDIT - bawię się: ->link<- i nie słyszę żadnych trzasków przy zmianie częstotliwości (przynajmniej na Chrome), wydaje mi się też że nie będzie problemów ze zmianą amplitudy.

    I nie twierdzę że jest to wystarczy oczywiście, ale jak rozumiem jest to całkiem istotna część emulacji (trzeba zrobić jeszcze generowanie szumu na przykład, co więcej - jeszcze nie wiem, stąd też ten wątek)
    • 20:
       
      CommentAuthorjhusak
    • CommentTime5 Dec 2020 zmieniony
     
    Metoda @mrk (w moim rozumieniu): mamy kilka pokeyowych fal/brzmień, które gramy na dzielnikach.
    Zniekształcenia 0,8, 4, 2, 6 oraz 10, dla 6 mamy z grubsza 2 używalne unikalne brzmienia.
    Zapamiętujemy pełne cykle fal dla krótkich poly i gramy tym! 95% melodyjek nie będzie słychać różnicy! Dla długich poly możemy zapamiętać część fali.

    Więc to nie będzie w pełni emulacja, ale będzie i będzie dobrze grać.
    • 21: CommentAuthormrk
    • CommentTime5 Dec 2020 zmieniony
     
    @nogorg - ok, poczytałem trochę o "Waweform selection" w Altirra Hardware Reference Manual i faktycznie będzie działało to średnio, bo można będzie uzyskać tylko czysty prostokąt w ten sposób.

    @jhusak - no nie do końca o tym myślałem, chciałem po prostu czysty prostokąt generować, więc było by faktycznie słabo. Ale skoro POKEY jest taktowany tak jak CPU, to mogę sobie faktycznie wyliczać output z generatorów co cykl procka i będą to banalne logiczne operacje, więc powinno być mega szybko (i jeśli wierzyć AltirManual powinno być bardzo dokładnie. Gość nawet parametry tych pseudolosowych generatorów podaje, więc identyczny szum można generować)
    • 22: CommentAuthorastrofor
    • CommentTime5 Dec 2020
     
    Ale cały czas mówimy o trackerze czy o playerze? Bo jak tracker to pewnie taki gdzie da się coś stworzyć i zapisać w formacie czytalnym (raczej grywalnym) przez atari.
    • 23: CommentAuthormrk
    • CommentTime5 Dec 2020 zmieniony
     
    Dobra, oto wynik eksperymentu ->link<- Muzykę trzeba włączyć wciskając F10

    Cztery oscylatory z WebAudio API, zawsze czysty prostokąt (nawet jak rejestry konfigurują inne brzmienia / szum), wsparcie dla dla zegara 15kHz, 64kHz i 1.79Mhz (z łączeniem kanałów 1/2 i 3/4).

    Sam początek brzmi chyba całkiem spoko, potem zaczyna się cyrk :) (prawdopodobnie przez brak czegokolwiek poza czystym prostokątem, aczkolwiek mogą być też po prostu jakieś bug'i). Ciekawy jestem waszych opinii :]
    • 24: CommentAuthormav
    • CommentTime5 Dec 2020 zmieniony
     
    Nie za szybko ta muzyczka gra?
    Ale poza tym niezłe jaja, działa, szacun. Ludzie to jednak mają łeb jak sklep, szkoda, że jest to poziom dla mnie nieosiągalny..
    • 25: CommentAuthormrk
    • CommentTime5 Dec 2020 zmieniony
     
    @mav cały emulator chodzi 20% za szybko (PAL w 60Hz). Ale to najłatwiej akurat poprawić. :)
    • 26: CommentAuthormav
    • CommentTime5 Dec 2020
     
    Na grze jakoś mi się mimo wszystko w oczy nie rzuciło - sam Fred zawsze był ślamazarny w ruchach i te 20% nie pomogło, Mariem to on nigdy nie był, ale muzyczka od razu rozpoznana :D
    • 27: CommentAuthorpirx
    • CommentTime5 Dec 2020
     
    nieeeezłe!!!! shatzoon! pewnie braknie zniekształceń do perki i basów oraz łączenia 2 kanałów w 16 bit.
    • 28: CommentAuthormrk
    • CommentTime5 Dec 2020
     
    @pirx łączenie kanałów akurat jest, brakuje szumów.
    • 29: CommentAuthorgorgh
    • CommentTime5 Dec 2020
     
    rewelka, emulator atarynki na www <3 stawiam ci zieloną herbatę na party!
    • 30: CommentAuthorlaoo
    • CommentTime5 Dec 2020
     
    Teraz piecze dupa wszystkich co chcieli napisać emulator Atari na www i im się nie udało ;)
    To może ja pierwszy: eeee, nie jest cycle exact i ma poziom xformera sprzed 25 lat ;)

    Ale jest. I napisany w tydzień. A od tego można piąć się w górę.

    Ogólnie 8-bitowe Atari jest chyba najgorzej obstawioną emulatorowo platformą. Każda inna ma po kilka/kilkanaście implementacji, a my mamy 2-3 na krzyż.

    Chociaż nie. Atari Lynx ma gorzej - tam jest tylko kiepski Handy.
  1.  
    WWW to tylko jedna z platform wspierana przez Bevy. Docelowo, to równie dobrze może być emulec na Androida i na te drugie smartfony dla bogatszych.
    • 32: CommentAuthormrk
    • CommentTime6 Dec 2020
     
    Dodałem odtwarzanie szumu, dzięki czemu w muzyczce z Fred'a pojawiły się nareszcie jakieś basy: ->link<- :)

    Nadal jest to wszystko mega uproszczone (odtwarzam po prostu biały szum - POKEY używa trzech generatorów pseudolosowych o różnych parametrach) - ale na pewno będą poprawki, stay tuned!
    • 33:
       
      CommentAuthornogorg
    • CommentTime6 Dec 2020
     
    W pierwszym poście pisałeś o emulacji POKEYa, a teraz go poprawiasz! :D
    • 34:
       
      CommentAuthorjhusak
    • CommentTime6 Dec 2020 zmieniony
     
    @mgr_inz_rafal, dzięki :D

    Ciekawy ten Bevy:
    ->link<-
    • 35: CommentAuthorAlex
    • CommentTime6 Dec 2020
     
    U mnie wszystko razem z muzyką działa z prędkością jakieś 40%... :/
    • 36: CommentAuthormrk
    • CommentTime6 Dec 2020
     
    @Alex - warto spróbować w innej przeglądarce (na przykład na Ubuntu 20.04 w Firefox mam 45 klatek / sek, na Chrome stabilne 60 FPS ze zużyciem procka (pojedynczego rdzenia) rzędu 40%)
  2.  
    @jhusak,
    Bevy jest mega ciekawy, na razie jednak tylko do zabawy, gdyż jak autorzy sami twierdzą:

    "However Bevy is still in its infancy. (...) If you are currently trying to pick an engine for your Next Big Project™, we recommend that you check out <wstaw nazwę innego projektu>".

    Dlatego tylko go pogłaskałem po wierzchu, a do mojego Next Big Projectu™ wezmę pewnie Unity albo ewentualnie Godot.
    • 38:
       
      CommentAuthorjhusak
    • CommentTime6 Dec 2020
     
    @mgr jakby co, to w godocie jestem zaawansowany :)
    • 39: CommentAuthormrk
    • CommentTime6 Dec 2020 zmieniony
     
    @mgr_inz_rafal @jhusak - zabawę z Bevy polecam w jednym konkretnym przypadku - mianowicie nauka RUST'a. (Bevy zresztą w przeciwieństwie do Godot'a / Unity jest RUST-only i pewnie nieprędko pojawią się jakieś 'bindings' do innych języków). Ale do nauki języka jest świetny - pisząc jakąś prostą grę czy implementując kolejny feature w emulatorze mamy 'instant gratification' co jest mega ważne by mieć motywację do dalszej pracy / zabawy :)

    A to że Bevy jest jeszcze w powijakach ma jedną fajną zaletę - łatwo można 'kontrybuować' do projektu implementując jakieś brakujące rzeczy czy poprawiając bugi.
    • 40:
       
      CommentAuthormiker
    • CommentTime6 Dec 2020
     
    @mrk: Brawo! Co prawda basu tam jeszcze nie ma, ale i tak pełny szacunek! Czekam na dalszy rozwój sytuacji i trzymam kciuki! :)
    • 41: CommentAuthorgolomolo
    • CommentTime6 Dec 2020
     
    Na Atari w czarnobiałym telewizorze kineskopowym to jakoś te pixele były mniejsze i Fred był ładniejszy :)
    A na marginesie, jeżeli chodzi o pokeya w przeglądarce to jest jeszcze WEB AUDIO CSOUND - ->link<-
    Tutaj jest trochę teorii - ->link<-
    W csound były już próby pokeya - ->link<-
    • 42: CommentAuthorAlex
    • CommentTime7 Dec 2020 zmieniony
     
    @mrk - sprawdzam pod Windows na różnych przeglądarkach (nie przepadam za Linuxem i nie mam wolnego na dysku).

    Chrome - wolno i tnie muzykę
    Firefox - wolniej, ale nie tnie muzyki tylko spowalnia
    Opera - też wolniej i też tylko spowalnia
    Edge - bardzo wolno, tnie i spowalnia

    EDIT:
    Aby był punkt odniesienia. Testowałem na Windows 7 x64, Intel Core i5-3317U 1,7GHz, 4GB RAM.

    Dodam też, że emulator C64 chodzi jak złoto bez żadnych opóźnień - ->link<-
    • 43:
       
      CommentAuthormiker
    • CommentTime7 Dec 2020 zmieniony
     
    Dla porządku sprawdziłem jeszcze:
    - u mnie (i7) - Chrome - OK, Edge - nie uruchamia się w ogóle (ale mam powyłączane nieco usług, w ramach przyspieszenia komputera).
    - u Sylwii (i3) Chrome - OK, Edge - uruchamia po małych przycięciach.

    Na obu Win10 x64.
    • 44: CommentAuthorilmenit
    • CommentTime7 Dec 2020
     
    Firefox i Chrome - u mnie działa OK, bez przycięć.

    Z ciekawych webowych alternatyw dla Unity czy Godota jest też ->link<- Działa zaskakująco dobrze też na telefonach.
    • 45: CommentAuthortatqoo
    • CommentTime7 Dec 2020
     
    Ponieważ inaczej nie jestem w stanie, to jestem gotowy wesprzeć finansowo wykonanie porządnego trackera na A8 (+player na A8) odpalanego z przeglądarki. Mam również nadzieję, że w zespole od początku będzie Emkay i wcale nie żartuję.

    Trzymam kciuki.
    • 46: CommentAuthormrk
    • CommentTime7 Dec 2020 zmieniony
     
    Jak się gdzieś nie walnąłem, to powinno być bliskie basowi, którego nie słychać jeszcze we Fredzie: ->link<- (po skopiowaniu wkleić w konsoli js w przeglądarce)

    i odpowiadać następującej sekwencji POKE:
    PA = 13*4096 + 2*256
    POKE PA+8, 40
    POKE PA+4, 14*16+6
    POKE PA+6, 5
    POKE PA+5, 0
    POKE PA+7, 12*16+7



    Porównuję z emulatorem Atari800 i jest chyba ok :)
    • 47: CommentAuthormrk
    • CommentTime9 Dec 2020 zmieniony
     
    Aktualizacja:

    Zaimplementowałem generatory szumów (w locie generowane są krótkie sample na podstawie dokumentacji opisanej w Altirra Hardware Reference Manual, sample są keszowane, więc nadal powinno być to bardzo wydajne). Są jeszcze niestety jakieś bugi (nie brzmi to tak czysto jak powinno, w Robbo wybuchy bomb brzmią mega dziwnie) ale z czasem pewnie uda się to poprawić.

    Nie zaimplementowane są tylko filtry górnoprzepustowe (ktoś tego używa w ogóle?) oraz maskowanie czystego dźwięku 5-bitowym generatorem szumu (to powinno być w miarę proste).

    Wymusiłem też nareszcie 50Hz, więc muzyka powinna być odtwarzana z dobrą prędkością.

    Rezultaty do posłuchania tutaj:

    Fred: ->link<-
    Robbo: ->link<-
    LaserDemo: ->link<-
    • 48: CommentAuthorAlex
    • CommentTime9 Dec 2020
     
    30% szybkości.... ale fajnie ;)
    • 49: CommentAuthorpirx
    • CommentTime9 Dec 2020
     
    co Ty za złom masz, na moim 3 letnim biurowym lapku śmiga znacznie szybciej, niż fabryka dała ;]
    • 50: CommentAuthormakary
    • CommentTime9 Dec 2020
     
    @mrk: 'Nie zaimplementowane są tylko filtry górnoprzepustowe (ktoś tego używa w ogóle?)'

    Muzyczki z 'synthami', np. ta w LaserDemo.