1

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

2 Ostatnio edytowany przez epi (2012-04-19 15:01:24)

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.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

3

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.

4

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).

https://www.youtube.com/watch?v=jofNR_WkoCE

5 Ostatnio edytowany przez xxl (2012-04-20 19:51:04)

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...

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

6

Czyli coś podobnego jak amigowskie trackery?

7

xxl - ale Ty piszesz o czym a la wavetable?
A ja chcialem po prostu odtwarzac pare sekund piosenki z wokalem.

8

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.

9

Rzeczywiście ciekawy pomysł. Wysokie tony na stałe, czy z częstotliwością zmienianą co ramkę?

https://www.youtube.com/watch?v=jofNR_WkoCE

10

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.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

11

Cyprian: wszyscy czekamy :)

What can be asserted without proof can be dismissed without proof.

12

Fox napisał/a:

Wysokie tony na stałe, czy z częstotliwością zmienianą co ramkę?

Co ramkę, żeby hyhka brzmiało shyshka.
albo hohobowhki jak shoshobowshki.

13

sqward napisał/a:

Cyprian: wszyscy czekamy :)

nie czekaj tylko zapodaj jakieś nowe demo :P

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org