O! teraz jest prościej i elastyczniej. Podoba mi się.
FUJI dzięki za bugreporty. Z tym flacem prostokątnym to wynika z naiwnej wersji dekodera PWM:
sygnał = (sample > poprzedni_sample)
czyli jest źle jak 2 próbki pod rząd mają tę samą wartość.
Chciałbym niebawem zacząć dodawać obsługę nowych typów bloków do A8CAS. Czy sądzisz że obecna postać jest w miarę ostateczna? Zajrzałeś jeszcze to tego Turbo ROM-a? Tak mi chodzi po głowie - być może w przyszłości zamiast rozszerzać blok 'pwms' pod dziwactwa w stylu Turbo ROM bardziej elegancko byłoby stworzyć nowy typ bloku, taki 'pwms' tylko dla Turbo ROM?
Uwaga dot. zapisu częstotliwości próbkowania. Zauważyłem podczas moich prób z emulacją odczytu Blizzarda, że przy częstotliwości 48kHz bardzo zauważalne są wahania w długościach sygnałów (jitter), i że raczej nie wyjdzie emulacja, jeśli nie spróbuję podbić częstotliwości sygnału dźwiękowego do np. 96kHz (nie trzeba nagrywać w takiej częstotliwości, wystarczy dobrej jakości upsampling). Ale ponieważ bloki 'pwmi' mają być wykorzystywane do debugowania kaset podczas konwersji, to wydaje się sensowne, żeby w nich także była możliwość ustawienia takiej wysokiej częstotliwości próbkowania. Ale 96000 w 2 bajtach w bloku 'pwms' się nie zmieści. Może więc 4 bajty?
Blok 'pwmc': Hmmm. Nowy blok na każdy sygnał? A może niech blok 'pwmc' przechowuje w sobie dowolną ilość sygnałów?
$70 $77 $6d $63 ; 'pwmc' - PWM cycles
$02 $00 ; długość bloku = 3*ilość sygnałów
$LL $MM ; (aux1,2) IRG, czyli cisza, w ms
i teraz po 3 bajty na każdy nowy sygnał:
$xx ; szerokość impulsu wyrażona w próbkach
$LL $MM ; ilość impulsów (cykli 0-1 lub 1-0)
...