Chcialbym odtwarzac parusekundowy sampl w kółko jako tlo dzwiekowe do gry.
Prosba o krotkie odpowiedzi:
Jak to mozna odtworzyc w asm i jak przygotowac plik (probkowanie, rozdzielczosc, format danych)?
Ile to zeżre czasu procesora circa coma?
Dzieki
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
TURGEN 9.3.0 Kolejna wersja multiplatformowego narzędzia do zarządzania obrazami taśm.
SV 2024 WE - program imprezy Już za tydzień odbędzie się zimowa edycja Silly Venture
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
atari.area forum » Programowanie - 8 bit » Odtwarzanie sampli na Atari 8-bit
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Chcialbym odtwarzac parusekundowy sampl w kółko jako tlo dzwiekowe do gry.
Prosba o krotkie odpowiedzi:
Jak to mozna odtworzyc w asm i jak przygotowac plik (probkowanie, rozdzielczosc, format danych)?
Ile to zeżre czasu procesora circa coma?
Dzieki
Rozdzielczość waha się od 4 do 8 bitów, zależnie od techniki odtwarzania. W najprymitywniejszej LDA próbka, STA $d201 potrzebujesz jednobajtowych wartości w postaci xxx1yyyy (binarnie), gdzie xxx są dowolne a yyyy to 4-bitowa wartość próbki.
Większość narzędzi pecetowych potrafi zrobić próbki 8-bitowe bez znaku, które są dobrym punktem wyjścia do dalszej obróbki. Nie zapomnij odfiltrować przed resamplingiem!
Plik zapisujesz jako wave PCM, lub, jeśli masz możliwość, raw PCM. W tym pierwszym przypadku po prostu olewasz 44-bajtowy nagłówek. W tym drugim masz już dane jak należy, można wypuszczać bezpośrednio na Covox, lub przerobić do postaci jak w poprzednim akapicie przy pomocy własnoręcznie napisanego jednolinijkowca (obcinając najmniej znaczące bity).
Jeśli gra jest raczej statyczna, to sprawa jest prosta:
pętla: STA WSYNC
LDA a:adr ; lub a:adr,x lub (adr),y - zależy od różnych rzeczy.
STA $d201
... następny adres
JMP pętla
W przypadku kiedy na ekranie coś się jednak dzieje, zwykle niełatwo to pogodzić z docyklowaniem odtwarzania sampla, dlatego wygodniej będzie pewnie puścić sample na przerwaniu Pokeya.
W tym przypadku masz bezcenną możliwość dobrania takiej częstotliwości odtwarzania, która pogodzi jakość dźwięku i ilość zajętej pamięci z płynnością animacji. Przerazisz się, bo nie jest to łatwe - sporo czasu pożre ci obsługa przerwania. Jak już znajdziesz, wracasz do pecetowego edytora dźwięku, resamplujesz z oryginału do tejże częstotliwości i opcjonalnie robisz dalszą konwersję.
Odtwarzanie na Pokeyu można sobie utrudnić na różne sposoby, na przykład:
- Jeśli masz mało pamięci, możesz pakować sample. Dwie próbki radośnie mieszczą się w bajcie i wystarczy tu zamaskować, tam przesunąć.
- Możesz spróbować odtwarzać sample 5-bitowe, 6-bitowe - wymaga to zapisu do kilku kanałów Pokeya z możliwie najmniejszym opóźnieniem, czyli najlepiej STA, STX, STY bezpośrednio po sobie. Poprawa jakości dźwięku jest jednakowoż dyskusyjna.
- Zamiast sterowania samym poziomem na wyjściu (xxx1yyyy w AUDC) możesz puścić ultradźwiękowy prostokąt o różnej głośności (AUDF = 0, AUDCTL = 0, AUDC = 1x10yyyy). Podobno od tego wyjście się nieco linearyzuje, ale sam nie mierzyłem.
Jeśli chcesz mieć sample stereo, to można ułożyć dane na wiele sposobów.
- Twój pecetowy edytor dźwięku najprawdopodobniej zapisze dźwięk stereo przeplatając na przemian próbkę 0 lewą, próbkę 0 prawą, próbkę 1 lewą itd., czasami to jest wygodne.
- Możesz chcieć trzymać kanał lewy i prawy w osobnych tablicach.
- Możesz chcieć przeplatać je np. co stronę - takie rozwiązanie okazało się optymalne przy odtwarzaniu danych doczytywanych na bieżąco z twardego dysku.
O kurcze! Moze wato dodac taki elegancki przepis do Atariki?
Dzieki epi.
Boję się ze nie wyrobię z obslugą tego w czasie gry bo sporo sie dzieje... Ale moze zagram na planszy tytulowej chociaz.
Jak obetniesz 8-bitowego sampla do 4 bitów będzie szumić - była o tym mowa.
Dobrze zrobiony sampel 4-bit będzie ładnie grał na 15556 Hz - tylko policz sobie, ile pamięci zajmie taki parusekundowy. :)
Często spotyka się dwukrotnie mniejszą częstotliwość, ale IMHO nadaje się ona do czegoś, co i tak szumi (perkusja).
zgadza sie, sample moga zajmowac sporo ale jest sposob na to, zeby zajmowaly kilka, gora kilkadziesiac bajtow.
kazdy sampel mozna podzielic na "gloski", instrumenty nawet latwiej. np. definiujemy ilosc powtorzen(czyli jak dlugo sampel ma grac), dlugosc definicji "sampla", [wartosc rejestru (np) glosnosci i licznik powtorzen ostatniej wartosci] - to w nawiasie to definicja sampla, dluzsza im sampel bardziej skomplikowany. tak zrobil szuwarek w syntezie mowy w tym demie:
http://www.youtube.com/watch?v=1P1d4mbO_dg
z instrumentami powinno byc nawet latwiej, mozna wprowadzic modyfikator np. wybrzmiewanie...
xxl - ale Ty piszesz o czym a la wavetable?
A ja chcialem po prostu odtwarzac pare sekund piosenki z wokalem.
Warto wspomnieć, że aby nie było zniekształceń w dziedzinie częstotliwości, sample muszą być równo grane. w przypadku niskiej częstotliwości próbkowania może to być przerwanie IRQ pokeya, co poostawia nam procesor; w przypadku 8 khz (ca 7800 Hz) można już w ten sposób zatrzymać grę. Jednak w przypadku czołówki, gdzie nie ma akcji, synchronizujemy się z licznikiem linii obrazu VCOUNT, a jeśli odtwarzamy ca 15600, to z licznikiem obrazu a następnie sta WSYNC. Wtedy pomimo włączonego antica dźwięk będzie "gładki" i przyjemny dla ucha.
Ciekawym pomysłem jest przepuścić sampla przez filtr górnoprzepustowy i zamienić to co zostanie na dźwięk pokeya z rozdzielczością 50 Hz. Wtedy można grać sample 4 khz z interpolacją liniową do 8 albo 16 khz khz, żeby nie miały metalicznego pogłosu. Wysokie tony gramy pokeyem :)
Wszędzie, gdzie piszę 16khz zaokrąglam z 15556.
Rzeczywiście ciekawy pomysł. Wysokie tony na stałe, czy z częstotliwością zmienianą co ramkę?
qbahusak, fajna idea, ciekawy jestem rezultatu.
Podobną metodę chciałbym zastosować na ST i podzielić dzwięk na dwa pasma - górne i dolne;
Górne odtwarzane przez przetworniki DAC 50khz oraz dolne przez YM albo / mikser LMC. Myślę że powinno to poprawić dynamikę dzwięku.
Cyprian: wszyscy czekamy :)
Wysokie tony na stałe, czy z częstotliwością zmienianą co ramkę?
Co ramkę, żeby hyhka brzmiało shyshka.
albo hohobowhki jak shoshobowshki.
Cyprian: wszyscy czekamy :)
nie czekaj tylko zapodaj jakieś nowe demo :P
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Programowanie - 8 bit » Odtwarzanie sampli na Atari 8-bit
Wygenerowano w 0.019 sekund, wykonano 62 zapytań