forum speccy.pl

ZX Spectrum => MUZYKA => Wątek zaczęty przez: Abrimaal w 2011.12.10, 02:15:37

Tytuł: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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:

(http://abrimaal.pro-e.pl/network/darkfusion-wave.jpg)

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?

(http://abrimaal.pro-e.pl/network/northstar-wave.jpg)
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Szuwarek w 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
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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.

(http://abrimaal.pro-e.pl/network/startip2-wave.png)

(http://abrimaal.pro-e.pl/network/startip2-zoom.png)

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

(http://abrimaal.pro-e.pl/network/agentx2-48-wave.png)

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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Szuwarek w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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?
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Szuwarek w 2011.12.11, 02:16:33
eeeee, za wysokosc dzwieku odpowiada wartosc w liczniku... nie wiem czy dam rade Ci pomoc.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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?
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Szuwarek w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Gryzor w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 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?
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Gryzor w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: rafamiga w 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^)
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Duddie w 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.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: rafamiga w 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^)
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 2011.12.17, 23:20:37
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....

To jest to, i tak samo "usłyszał" te dźwięki edytor, który po konwersji dżwięku do .wav pokazał mniej więcej średnią amplitudę, a nie wszystkie składowe, które zostały "zgubione". Poza tym chyba edytory używają takiego algorytmu, aby wyświetlały tylko częstotliwości w zakresie słyszalności, i już sam format wav częściowo je eliminuje w zależności od częstotliwości samplowania (22/44/48/96kHz) - czym wyższa tym lepiej słyszalne są wysokie składowe.
"Czysta" fala kwadratowa, w powiększeniu wyglądałaby tak:
_____|─────|______|───── (nie znalazłem lepszego znaku graficznego dla "góry"),
natomiast przy prostym operowaniu wypełnieniem zapewne przypominałaby coś takiego:
_____|─|___________|─|____ główna freq. pozostaje taka sama, amplituda też ta sama, ale dźwięk odbierany jest 1/4 cichszy (czy tak?).
Przy procesorze 3.500.000 Hz w pełni zaangażowanym w konstrukcję fali możliwości zarówno operowaniem głośnością i barwą wydają się ogromne.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: rafamiga w 2011.12.18, 00:59:40
natomiast przy prostym operowaniu wypełnieniem zapewne przypominałaby coś takiego:
_____|─|___________|─|____ główna freq. pozostaje taka sama, amplituda też ta sama, ale dźwięk odbierany jest 1/4 cichszy (czy tak?).

Nie, dźwięk nie będzie o 1/4 cichszy. Będzie tak samo głośny jak dźwięk o częstotliwości 4 razy wyższej, ale grany co czwarty okres fali. 8^) Dopiero przy naprawdę małym wypełnieniu fali następuje efekt "ściszania", gdy wydaje się, że zanika ton podstawowy, a słyszalne są tylko częstotliwości harmoniczne, których głośność spada wprost proporcjonalnie do stosunku ich częstotliwości do tonu podstawego -- i to jeszcze stosunek jest wyrażany w dB, a to skala logarytmiczna.

Dalej jednak, taki "kwadrat" wypełniony tylko w 0,5% to dźwięk tak samo "głośny" jak zdrowy "kwadrat" 50-procentowy, bo amplitudy obu są identyczne.

Jedyny trop prowadzi do obserwacji zachowania mierników poziomu sygnału -- na zwykłym, cyfrowym mierniku szczytowym będziesz miał pełną amplitudę na obu dźwiękach, natomiast na mierniku VU, którego wskazania są bardziej adekwatne do wrażenia głośności odbieranego przez mózg, będzie to widoczne. Ale to typowe dla tego pomiaru -- im więcej w sygnale stanów nieustalonych, typu krótkie "piki", tym bardziej wskazania miernika VU będą różnić się wskazań od miernika szczytowego. I tu kapituluję, bo potrzebny jest rasowy akustyk, aby wytłumaczył dlaczego tak się dzieje, że "szpilka" 0,5% jest cichszsza od 50%, bo IMHO ani filtr, ani fizyczna bezwładność głośnika nie tłumaczą tego fenomenu. Niemniej, to działa. 8^)

Przy procesorze 3.500.000 Hz w pełni zaangażowanym w konstrukcję fali możliwości zarówno operowaniem głośnością i barwą wydają się ogromne.

I tak, i nie. Musiałbyś dokładnie wiedzieć z jaką częstotliwością "ładować" stany logiczne do wyjścia głośnika, aby zacząć sterować głośnikiem na zasadzie "to rusz się troszeczkę w dół". 1-bitowe przetwornika DAC robią to np. ze 128-krotnym oversamplingiem, co daje 6,144 MHz dla częstotliwości próbkowania 48 kHz [taką stosuje się w sprzęcie profesjonalnym; dla CD to nieco mniej]. A to już mocno poza możliwościami ZX.
Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Abrimaal w 2011.12.18, 01:27:44
Ja to narysowałem w ogromnym uproszczeniu, załóżmy że okres fali trwa 440Hz, i w pierwszym przypadku "czystej fali" przez 1/220sek podawane jest napięcie, przez drugie 1/220sek nie jest.
W drugim, które zacytowałeś, co 1/440 sek podawane jest napięcie, lecz np. przez 1/88000 sek,

albo jeszcze inaczej
przez pierwszą połowę fali, co jakiś określony czas podawany jest ten krótki impuls, przez drugie 1/220 sek oczywiście nic, coś takiego:
(pierwsze 1/220 sek |_____________________________________|____________________________________________|_______________ itd.)
(drugie 1/220 sek _______________________________________________________________________________________________________)

Bezwładność głośnika w tym wypadku nie ma znaczenia, gdyż chyba wszyscy słuchamy z wyjścia audio.

Cytuj
co daje 6,144 MHz dla próbkowania 48 kHz
- czyli Pentagon z Turbo 7MHz powinien sobie poradzić :)

Z wypełnianiem fali to jest coś podobnego do nakładania fal. W załączniku prosty przykład dla AY (nie dla beepera)
Program uruchomiony z tymi parametrami generuje standardową kwadratową falę w kanale A,
zmieniając w linii 35 wartość 15 na 16 (i RUN) na tą falę nałożona zostaje druga, piłokształtna - obie odtwarzane są w kanale A.

Tytuł: Odp: Beeper i głośność
Wiadomość wysłana przez: Duddie w 2011.12.18, 10:21:19
RC to filtr dolnoprzepustowy - masz rację. Zasada działania takiego pseudo-przetwornika C/A opiera się na tym, że kondensator ładuje się napięciem przyłożonym do jego elektrod - tym wolniej, im większa jego pojemność i większa rezystancja rezystora R. Niestety, proces ten nie jest liniowy, a wykładniczy. Ale im dłużej czekamy, tym większe napięcie - czyli, im większe wypełnienie impulsu, tym większe napięcie będzie na jego elektrodach.

Ładowanie kondensatora (zmiany napięcia Uc) teoretycznie przebiega wg wzoru:

Uc(t)=Ucc*e^(-1/R*C)

dla czasu t=RC, napięcie na kondensatorze osiąga:

 Uc(t=RC)=Ucc*(1-1/e) , co w przybliżeniu daje  0,632*Ucc.

Powyższy wzór jest prawdziwy jeżeli kondensator ładuje się od 0V (czyli był całkowicie rozładowany.

Rozładowanie kondensatora przebiega:

 Uc(t)=Uc0*e^(-1/RC)

Uc0 - napięcie początkowe na kondensatorze,

dla czasu t=RC, napięcie na kondensatorze osiągnie:

 Uc(t=RC)=Uc0/e=0.368*Uc0

e - podstawa logarytmu naturalnego = 2.7182818