Autor Wątek: Beeper i głośność  (Przeczytany 12721 razy)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Beeper i głośność
« dnia: 2011.12.10, 02:15:37 »
Beeper jako 1-bitowy generator teoretycznie powinien odtwarzać wszystkie dźwięki z jednakową głośnością.
Tak jest w przypadku większości utworów - poniżej przykład z gry Dark Fusion.
Słuchając utworu wydaje się on bardzo dynamiczny, perkusja gra mocno, basy cicho, glide'y pośrednio,
lecz po załadowaniu utworu w .wav do edytora widać, że ogólna głośność jest stała:



Jednak słuchając muzyki z North Star (tego samego autora), wyraźnie słychać, że pod koniec ona się ścisza.
Po załadowaniu pliku .wav do edytora widać około 8 poziomów głośności. Jaki trick został tutaj użyty?


AY Music, ULA plus.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: Beeper i głośność
« Odpowiedź #1 dnia: 2011.12.10, 10:16:52 »
teoretycznie mozna uzyskac 15 stopni glosnosci ale nie wiem czy to wyjdzie na tym Twoim wykresie, sprobuj.

jesli to o to chodzi to moge przyblizyc najprostrza metode.

w zalaczniku masz zgranego deflektora z regulacja glosnosci tu wszystkie kanaly regulowane sa jednoczesnie (mam nadzieje bedzie to dobrze slychac) ale ocywiscie nic nie stoi na przeszkodzie zeby regulowac glosnosc pojedynczego kanalu lub kazdego osobno.

http://atari.pl/deflektor.rar

---
albo tak: http://atari.pl/deflektor_vol.mp3
« Ostatnia zmiana: 2011.12.10, 10:19:14 wysłana przez Szuwarek »

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Beeper i głośność
« Odpowiedź #2 dnia: 2011.12.10, 18:52:40 »
Deflektor to ten sam tracker, co North Star, którego używał Ben Daglish.
Również Tim Follin w swoich utworach na beeper regulował głośność.
Tutaj Star Tip 2 (3 kanałowy) i powiększenie zaznaczonego fragmentu.





W utworach z większą ilością kanałów tego już nie widać na wykresie.
Poniżej Agent X 2 (na sam beeper bez perkusji z AY)
Ściszenia widoczne są tylko w momentach gdy wchodzi "syrena" (zaznaczone żółtą linią)



Widać, że można regulować głośność, lecz w jaki sposób?
Impuls na beeper wysyła się przez bit 3 lub 4 portu 254 (OUT 254,8 lub OUT 254,16)
Przynajmniej Timex 2048 tak ma, że OUT 254,8 wysyła sygnał tylko na wyjście MIC,
a OUT 254,16 na wyjście MIC i na wewnętrzny głośnik,
jednak to z pewnością nie ma wpływu na głośność emitowanego dźwięku.

Nadal nie mam pojęcia jak tego dokonano,
powiadasz o 16 poziomach głośności - nawet gdyby sample były 4bitowe,
to odtwarzane przez 1bitowy układ, byłyby "spłaszczone" do jednakowej głośności, czy ja już całkiem zgłupiałem?  :-\ :-X
Różna głośność wymagałaby różnego napięcia podawanego na beeper, a tego chyba nie da się osiągnąć wysyłając 0 lub 1.
« Ostatnia zmiana: 2011.12.10, 19:03:15 wysłana przez Abrimaal »
AY Music, ULA plus.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: Beeper i głośność
« Odpowiedź #3 dnia: 2011.12.10, 19:54:56 »
ja znam 2 sposoby, pierwszy najlatwiejszy ten ktory masz w moim poscie wyzej dziala mniej wiecej tak:
kanal jest na liczniku 8 bitowym, cyklicznie zmniejszasz licznik i jesli sie przepelni ustawiasz go na pierwotna wartosc oraz zerujesz beepera, czekasz VOLUME czasu i ustawiasz beepera, czekasz 16-VOLUME czasu i kolejny kanal. ot i cala magia.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Beeper i głośność
« Odpowiedź #4 dnia: 2011.12.11, 00:10:17 »
Teraz to już kompletnie nic nie pojmuję, mógłbyś trochę jaśniej?
Czekanie z wysyłaniem impulsów obniżyłoby jedynie wysokość dźwięku.
Może jakoś byś to przedstawił "na osi czasu", jak ma się czas operacji na liczniku do długości sampla/dźwięku?
AY Music, ULA plus.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: Beeper i głośność
« Odpowiedź #5 dnia: 2011.12.11, 02:16:33 »
eeeee, za wysokosc dzwieku odpowiada wartosc w liczniku... nie wiem czy dam rade Ci pomoc.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Beeper i głośność
« Odpowiedź #6 dnia: 2011.12.11, 02:53:34 »
eeeee, za wysokosc dzwieku odpowiada wartosc w liczniku... nie wiem czy dam rade Ci pomoc.
Nie rozumiemy się, bo ja myślę z poziomu kodu maszynowego, a Tobie chodzi chyba o tracker.
Może jakiś screenshot?
AY Music, ULA plus.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: Beeper i głośność
« Odpowiedź #7 dnia: 2011.12.11, 07:50:19 »
przedstawilem najprostrzy algorytm jakim zaprogramowalem regulacje glosnosci dla 3 kanalow (niezalezna glosnosc dla kazdego kanalu) opartych o liczniki 8bitowe. w odpowiedzi 1 masz efekt dzialania tego algorytmu. moze stworz na poczatek w asm jednokanalowy beeper i pojdziemy dalej.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Beeper i głośność
« Odpowiedź #8 dnia: 2011.12.11, 19:56:09 »
To zależy, czy miałby być to odtwarzacz sampli zapisanych w pamięci,
czy generator dźwięków opisanych na podstawie matematycznych parametrów.

To pierwsze jest w miarę proste do napisania, ale na beeperze grałby ze stałą głośnością.
Co do drugiego - to z pewnością nie potrafiłbym.
AY Music, ULA plus.

Gryzor

  • *****
  • Wiadomości: 1906
  • Miejsce pobytu:
    Warszawa
Odp: Beeper i głośność
« Odpowiedź #9 dnia: 2011.12.11, 20:49:39 »
PWM + charakterystyka wyjscia tworza cuda  :D
Na spectrum mozna zwiekszysc glosnosc beepera ustawiajac MIC,
ale to bylo zalezne od wersji. W 128 to juz w ogole nie pamietam.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Beeper i głośność
« Odpowiedź #10 dnia: 2011.12.11, 21:01:00 »
Na spectrum mozna zwiekszysc glosnosc beepera ustawiajac MIC,
Właśnie o to chodzi mi od początku - w jaki sposób?
Czy przez jakąś instrukcję OUT lub POKE, która jest znana tylko nielicznym?
AY Music, ULA plus.

Gryzor

  • *****
  • Wiadomości: 1906
  • Miejsce pobytu:
    Warszawa
Odp: Beeper i głośność
« Odpowiedź #11 dnia: 2011.12.11, 22:34:21 »
Spectrum ma tak zrobione wyjscie, ze ustawienie bitow MIC i BEEP na 1 daje wyzsze napiecie na glosniku niz samo ustawienie BEEP. Nie jest to duzo, ale zawsze. Poszukam opisu.
O ile pamietam to w niektorych grach geniusze korzystali jeszcze z charakterystyki glosnika, tak jak niektore konwertery do tasm maja opcje real MIC.
Mam gdzies jeszcze kody do odtwarzania 8-bitowych PCM na PC speaker, tam tez robilo sie rozne sztuczki.

rafamiga

  • ***
  • Wiadomości: 203
  • Miejsce pobytu:
    Warszawa
Odp: Beeper i głośność
« Odpowiedź #12 dnia: 2011.12.17, 19:23:26 »
Beeper jako 1-bitowy generator teoretycznie powinien odtwarzać wszystkie dźwięki z jednakową głośnością.
Tak jest w przypadku większości utworów - poniżej przykład z gry Dark Fusion.

To iluzja zmiany siły głosu, a nie prawdziwa zmiana. Efekt polega na sprytnym wykorzystaniu właściwości odtwarzania fali kwadratowej, jedynej, którą jest w stanie wygenerować głośniczek.

Efekt, w skrócie, polega na tym, że [w wieeelkim uproszeniu] dla większośći stopnia jej wypełnienia, odbierana głośność dźwięku jest identyczna. Ale, gdy wygenerujesz kwadrat, którego wypełnienie to np. 0,5% okresu [dla uproszczenia, chodzi o to jak długo fala jest "na górze"] to mózg zinterpretuje to jako dźwięk bardzo cichy, z charakterystycznym "przesunięciem ku sopranom", czyli wrażeniem "syczenia" albo "piaskiem na górze".

Tak wygenerowany dźwięk dalej będzie miał daną częstotliwość, np. 440 Hz, ale będzie się składał głównie z harmonicznych, a nie z tonu podstawowego -- im mniejsze będzie wypełnienie, tym wyższa jest częstotliwość harmonicznych, które jesteś w stanie usłyszeć.  Dzieje się tak, bo tak naprawdę nie jest generowany ton główny, np. 440 Hz, ale co 1/440 sekundy krótki ton o częstotliwości... 88000 Hz, trwający 1 okres, czyli 1/440*100/0,5=1/88000 s. Mózg "szłyszy" to jako ton 440 Hz, ale baaaardzo cichy + ton 88 kHz, którego oczywiście nie słyszysz, bo jest nie tylko nieszłyszalny, ale do tego czas jego trwania jest praktycnie niezauważalny poza oscyloskopem. [Ale już przy 10% wypełnienia ton 4400 Hz słychać wyraźnie + wszystkie harmoniczne.]

Przy 50-procentowym wypełnieniu fali kwadratowej harmonicznych głównego tonu, 440 Hz, nie usłyszysz albo nie rozróżnisz. One dalej są, dlatego fala kwadratowa ma charakterystyczny, metaliczny przydźwięk, ale większość harmonicznych zanika [harmoniczne zawsze są cichsze niż dźwięk bazowy, nie tylko dla kwadratu, tym cichsze im ich częstotliwość jest wyższa] i/lub jest przez mózg ignorowana -- tę cechę słuchu wykorzystuje zresztą większość algorytmów kodowania stratnego dźwięku -> Wikipednia, hasło "Model psychoakustyczny".

Ale gdy procent wypełnienia fali kwadratowej jest ekstremalnie niski, zostają po prostu same harmoniczne SZTUCZNEGO dźwięku 440 Hz, który jest tak naprawdę "pseudo-harmoniczną" dźwięku o o wiele wyższej częstotliwości, ale czasie trwania któszym, niż okres jednej fali 440 Hz. [Pseudo, bo częstotliwości harmoniczne są wyłącznie krotnościami pierwszej składowej.]

Swoją drogą, bardzo ładnie bujanie wypełnieniem fali kwadratowej wykorzystane jest z melodyjkach gierek Imagine/Ocean na 48k, np. w Mikie albo Ping Pongu. Zamiast drętwego bib bip bip mamy przyjemniejszy, modulowany dźwięk.

Moją koncepcję możesz sprawdzić, oglądając "ściszany" fragment w dużym powiększeniu -- powinno być widać same "szpilki", zamiast fali kwadratowej.

PS. Nie znam się na elektroakustyce, jak na sali jest technik/fizyk proszę krytykować w wiadomości prywatnej. 8^)
--
rafamiga

Duddie

  • ****
  • Wiadomości: 402
  • Miejsce pobytu:
    Warszawa
Odp: Beeper i głośność
« Odpowiedź #13 dnia: 2011.12.17, 20:00:03 »
Rafał, wystarczy układ RC na linii i sterując wypełnieniem sterujesz amplitudą....  A Spectrum taki układ ma.
ZX Spectrum 48K, ZX Spectrum+, ZX Spectrum 128K, ZX Spectrum +2/+3, Timex 2048, Unipolbrit 2086, FDD3000, Timex Terminal 3000, PlusD, Multiface 128, Multiface +3, divIDE Plus, IF1+microdrive

rafamiga

  • ***
  • Wiadomości: 203
  • Miejsce pobytu:
    Warszawa
Odp: Beeper i głośność
« Odpowiedź #14 dnia: 2011.12.17, 20:28:51 »
Rafał, wystarczy układ RC na linii i sterując wypełnieniem sterujesz amplitudą....  A Spectrum taki układ ma.

Zapewne, w sprzęcie nigdy nie byłem dobry. 8^) Ale ciszej jest też na emulatorach, a te IMHO nie emulują tego elementu, a przynajmniej nie wszystkie, więc wydaje mi się, że to tylko dodatkowa cecha sprzętu Speca, która sprzyja powstawaniu wrażenia ściszania dźwięku.

Ale bez RC, efekt, o którym napisałem, ładnie słychać i widać -- choć przez dosłownie chwilkę -- ok 1:43 w filmiku: http://www.youtube.com/watch?v=rtR5n5smQio. To ta sama fala kwadratowa [ok, jej aproksymacja, ale zasada jest zachowana], a dźwięk ładnie raz "gaśnie" właśnie dlatego, że wypełnienie schodzi prawie do zera.

BTW: RC to nie zwykły filtr? W tym wypadku, dolnoprzepustowy? Jak tak, to harmoniczne są tłumione jeszcze bardziej, co potwierdza mojej stwierdzenie.

Swoją drogą, głośnością Spec mógłby pięknie sterować, gdyby był... szybszy. Wtedy wykorzystywałby fizyczną bezwładność głośnika. No ale ZX Spectrum do szybkości działania 1-bitowego przetwornika D/A to trochę daleko. 8^)
« Ostatnia zmiana: 2011.12.17, 20:46:01 wysłana przez rafamiga »
--
rafamiga