♫ ♩ ♪ Michał Jelonek, Piotr Fronczewski ☘ Aria Skołuby (Straszny dwór) ♪ ♩ ♫
https://youtu.be/hPa0yTAFnDQ
Na forum poruszono już temat współpracy systemu CA80 z magnetofonem kasetowym. I w zasadzie wszystko byłoby fajnie, gdyby nie fakt, że pomijamy tam tor analogowy interfejsu magnetofonowego. No niby w dzisiejszych czasach kaseciak niespecjalnie ma rację bytu, ale chyba warto mieć CA80 w stanie jak najbardziej kompletnym, tak jak opisują tomiki MIK i jednak wykorzystać jego możliwości przy minimalnej ingerencji sprzętowej.
Celem ćwiczenia będzie zatem spreparowanie prostego programiku (hex2wav), który przetworzy plik Intel Hex na plik audio, w formacie przyjmijmy że WAV, który to plik możemy odegrać z komputera czy odtwarzacza CD. Możemy też taki materiał audio udostępnić innym w mniej lub bardziej fikuśnej formie (np.YouTube) - jedynym sprzętem koniecznym do załadowania kodu będzie...kabelek.
Co nam potrzeba? Oczywiście karty dźwiękowej, to można przyjąć w komputerze ma każdy. Ja do swoich złącz line-out mam zapiętą Toscę i za żadne skarby nie zrezygnuję z muzyki podczas majstrowania, zatem konieczne było dostawienie blaszakowi drugiej karty, świetnie sprawdził się wyrób soundblasteropodobny kupiony w pobliskim lombardzie za kilkadziesiąt złotych. Linux bez problemu obsługuje dwie karty na raz, kwestia tylko odpowiednio wskazać oprogramowaniu z której ma skorzystać.
Konieczna jest też weryfikacja czy sygnał audio z CA80 da się nagrać na komputer naszym egzemplarzem karty, a potem stabilnie i bez błędów wczytać nazat do CA80. To sprawdzenie wykonałam w wątku https://microgeek.eu/viewtopic.php?f=82&t=2158#p13243 i nagrywanie programem Audacity okazało się całkiem skuteczne. Odtwarzanie też, aczkolwiek wymagana była korekcja amplitudy aby CA80 zaskoczył z transmisją, mój okaz ewidentnie lubi delikatne przestery.
Skoro ćwierkania z CA80 dało się zapisać do pliku audio i potem wczytać jako program zleceniem *6 , to naturalnym wydaje się pomysł: a może by tak spreparować plik audio na podstawie pliku wynikowego IHEX – wtenczas będzie możliwość wczytywania dowolnych, przygotowanych na PC programików.
Cała sztuka polega na przygotowaniu materiału dźwiękowego (tonu) modulowanego w rytm kolejnych bitów/bajtów/rekordów zgodnie z opisem w książce MIK05. Wiemy z niej, że częstotliwością wyjściową przy nagrywaniu jest ~3kHz i taki sygnał musimy zsyntezować. Warto jednak upewnić się, czy tor odbiorczy ma pasującą do nadawczego charakterystykę. Filtr pasmowy w CA80 może mieć nieco inne zdanie na temat środkowej częstotliwości z uwagi na rozrzut wartości elementów, możemy więc ją fizycznie zbadać mierząc napięcie AC na nodze 6 układu U14 (wyjście 741), a sygnał podajemy choćby ze stronki https://www.szynalski.com/tone-generator/ Wykonując kilka prób w przedziale 2..4kHz (np. co 100Hz) na pewno trafimy na środkową f. dla naszego układu filtra, dla niej amplituda wyjściowa będzie największa spośród badanych. W moim przypadku wyszło 3.5kHz i taka wartość będzie używana dalej na zasadzie cyt. "jak doświadczalnie stwierdzono".
Sama synteza w pigułce - obrazek niżej to jeden bajt żywych, nagranych w Audacity danych z CA80 – w celach poglądowych naniosłam opisy zgodnie z tereścią MIK05.
Garść faktów - domyślna transmisja jest 140 bitów/sek, jeden sygnał jednego bitu trwa 1/140 sekundy czyli ~7 ms; chcemy odtwarzać z częstotliwością 44.1kHz czyli 1 sekunda to 44100 próbek. Z powyższych wynika, że dzieląc szybkość samplowania przez szybkość transmisji uzyskamy ilość próbek sinusa na jeden bit zapisanej informacji, wychodzi ich nieco ponad 300. I to jest mega ważne – ponieważ umożliwia określenie długości tabeli próbek dla zadanej porcji danych. Jeden nagrywany bajt to: bit startu, 8 bitów danych, dwa bity stopu (ciszy), razem 11 elementarnych odcinków sygnału lub jego braku. To oczywiście mnożymy przez narzut protokołu magnetofonowego CA80, dodajemy także rozbiegówkę, czyli dwa razy po 32 bajty. No i po trzech wieczorach kodowania dochodzimy do zabawki jak w załączniku – zagadnienie jest zdekomponowane na proste funkcje: appendDataBit(), appendStopBit(), appendByte() i nieco bardziej wysokopoziomowe: appendHex(), appendEOF() czy appendSynch(). Nazwy mówią same za siebie.
Funkcyjka appendDataBit() jest o tyle śmieszna, że tam generowanie bitu (cisza/sygnał lub sygnał/cisza) jest poprzez wyzerowanie amplitudy sygnału, przy ciągle zmieniającej się wraz z próbkami dziedzinie czasu, to zapewnia ciągłość przebiegu przy przechodzeniu na kolejne numery bitów i wyżej - bajtów.
Aby nie wynajdywać Ameryki od nowa skorzystałam z bardzo wdzięcznej mini-biblioteki ze stronki https://www3.nd.edu/~dthain/courses/cse ... 3/wavfile/ naprawdę szacunek wielki dla autorów za tek kawałek kodu, wiele krwi mi oszczędził. Program nie jest jakimś specjalnym cudem, ale działa dość skutecznie a przede wszystkim jest wdzięcznym poletkiem do dalszych doświadczeń i zabaw, jeżeli ktoś zechce podjąć temat.
Kompilacja nowego przydasia:
Kod: Zaznacz cały
gcc -o hex2wav hex2wav.c wavfile.c -lm
Programik uruchamiamy następująco, przykład:
Kod: Zaznacz cały
hex2wav test.hex AA C000 test.wav
Pliki *.wav wyprodukowane przez konwerter są dość spore, testowy hex zawierający pełne 8kB danych dał finalnie około 86MB materiału audio. To sporo, więc zaraz pomniejszymy, najpierw test jak taki WAV wczyta się do CA80.
Do odtwarzania z konsoli (ponieważ celuje w kierunku integracji z make) wykorzystałam jeden z popularniejszych linuksowych programików - play. Program znajdziemy w pakiecie sox, niejako z pudełka odtwarza pliki *.wav. Po doinstalowaniu kodeków z paczki libsox-fmt-all potrafi odegrać także pliki *.mp3
Wspominałam o dwóch kartach dźwiękowych - programik play zauważa zmienną środowiskową AUDIODEV, wybrany dla CA80 kanał audio wskazujemy ustawiając jej wartość np. AUDIODEV=hw:2,0 i tyle.
Odegranie naszego programu sprowadza się do wywołania:
Kod: Zaznacz cały
play -v 3 test.wav
Zwracam uwagę na parametr -v to podniesienie poziomu głośności, wspominałam że mój CA80 lubi przestery...
Jeżeli wejdziemy w zlecenie *6 i podamy niepoprawną wartość nazwy aplikacji (liczbę hex) na ekranie CA80 będą pojawiały się kolejne analizowane przez komputerek rekordy.
Kolejny, finalny etap zabawy to wplecenie w/w konwersji w make, nie jest to zbyt skomplikowane i przykładowy makefile możemy
zobaczyć tu https://raw.githubusercontent.com/biena ... o/makefile
Kolejne wywołania:
Kod: Zaznacz cały
make all
make tape
make noise
zbudują alikację `cALo`, przygotują materiał analogowy w formacie *.mp3 na koniec dadzą go CA80 do posłuchania (wczytania). Bardziej na żywo wygląda to tak:
https://youtu.be/hO_ohr0mwaI
A posiadanie programu dla CA80 w formie ścieżki dźwiękowej to prosta droga do publikacji tego `w chmurze` czyli przy pomocy np. kdenlive składamy serie obrazków z popiskiwaniem - proszę, oto zrobiona na kolanie i gotowa do załadowania wersja `cALo`, nazwa na taśmie - AA, wgrywa się pod adres 0x4000.
https://youtu.be/rvnyFHX4Vag
Taka mnie światła myśl na koniec naszła, że nagrywając te programiki w formacie wav czy mp3 na płytę kompaktową i podłączając wyjście odtwarzacza do CA80 uzyskamy - komputer CA80 z CDROM
#slowanawiatr