Předmagnetizace jazyka C pro analogový záznam

1. 11. 2023
Doba čtení: 8 minut

Sdílet

Autor: Depositphotos
S předmagnetizací podobnou té magnetofonové je jazyk C schopen analogového záznamu, který kompilátorem C přehrajeme na analogový signál, aniž by se musel instalovat přehrávací program.

S dostatkem laterálního myšlení lze sjednotit dva tak odlišné objekty, jako je analogová magnetofonová páska a jazyk C.

Skalní audiofilové si budou moci užívat ideologicky čistého principiálně analogového záznamu, aniž by museli platit velkou velikostí souborů FLAC s vysokou bitovou hloubkou. Dokonce budou moci vysílat vlastní autenticky znějící analogové AM nebo FM rádio a toto v analogové formě distribuovat po Internetu v různých odstupech signálu od šumu pro různě rychlá připojení, což může být odpověď za oslavu 100 let Českého rozhlasu ohňostrojem odstřelů a vypínání vysílačů. Toto analogové vysílání naladíte i na Androidu: v Termuxu nainstalujete kompilátor C příkazem apt install clang. Na iPhone to funguje v iSH (pomalu z důvodu emulace).

Pro skalní audiofily může být atraktivní vědomí, že záznam obsahuje pouze aditivní šum a žádnou digitální kvantizaci a žádnou spektrální cenzuru ztrátovými kodeky, byť by ta spektrální cenzura byla transparentní. Pokud byla zdrojem nahrávka z analogového rádia, nebo je při poslechu přítomen šum prostředí, šum bude vnímán tak jako tak. Pak je možné zaznamenat analogový záznam s horším odstupem od šumu, odstup od šumu prakticky nezhoršit a přitom ušetřit bitovou rychlost.

Dále pro některé umělce může být šum vítaným doplňkem záznamu a spoluvytvářet atmosféru lo-fi, vaporwave, synthwave, retro, nebo zopakovat zážitek z hudby v době, kdy bývala poslouchána z kazety.

Já se domnívám, že takzvaný hřejivý pocit z analogových nosičů je způsobem šumem záznamu, který vyplňuje sterilní mezery, v kterých je slyšet akustika studia, a posluchač si tam tak může představit prostředí dle své preference.

Analogový typ nahrávky se může hodit i pro vědecké či technické záznamy, kde zkreslení perceptuálními kodeky není přípustné, není nutný velký odstup od šumu a nahrávky jsou dlouhé. Jedním z nich jsou kazety pro ZX spektrum, u kterých perceptuální komprese vadí.

Záznamem přímo v jazyce C sice odpadá nutnost instalovat přehrávací program, nicméně k zaručení ochrany před trojany je třeba potenciálně zdlouhavý audit zdrojového kódu.

Vhodným předmagnetizačním signálem lze linearizovat harmonická zkreslení kompilátoru C a získat virtuální analogovou kazetu tak portabilní jako kompilátor C. Fandové analogového záznamu již nebudou muset opravovat staré neskladné magnetofony se zpuchřelými řemínky a sjetými hlavami.

Ukázky k poslechu: Peter McCormick | Fear Of Falling

Později budeme touto skladbou testovat různé hodnoty preemfáze. Teď můžeme srovnat různé odstupy signálu od šumu a modulační procesory. Potenciálně analogovou hudbu (kdyby tak byl 24-bitový zdroj!) zkompilujeme a přehrajeme příkazem:

bzip2 -dc fear_of_falling_8464.c.bz2 | cc -O3 -x c - -lm -o recording && ./recording 0 | mpv -
           _______________________________________________________
          (+)  _______________________________________________  (+)
          |   / Last Day On Earth(UK)/Peter McCormick |       \   |
          |  | Fear Of Falling | CC-BY-SA 4.0 International    |  |
          |  | Indie rock, 2013                                |  |
          |  | https://archive.org/details/LastDayOnEarthCC    |  |
          |  |        _________________________________        |  |
          |  |       /            _________            \       |  |
          |  |      |  A " A     |         |     A " A  |      |  |
          |  |      | (     )    |   | |   |    (     ) |      |  |
          |  |      |  v , v     |_________|     v , v  |      |  |
          |  | 70 μs \_________________________________/       |  |
          |  |                                                 |  |
          |  | VIRTUAL ANALOG CASSETTE        BY KAREL KULHAVÝ |  |
          |  |_________________________________________________|  |
          |            /             (+)             \            |
          |           /        _             _        \           |
          |          /   _    (_)           (_)    _   \          |
          (+)_______/___(_)_______________________(_)___\_______(+)

obrazek

Obálka alba Last Day On Earth CC, z kterého Fear Of Falling pochází. CC-BY-SA 4.0 Last Day On Earth (UK)/Peter McCormick.

Zakomprimovaný zdroják ke stažení Délka souboru zakomprimovaná Odstup analogového signálu od šumu analogové nahrávky analogizované na digitální nosič Preemfáze Modulační procesor Počet symbolů digitálního nosiče analogové nahrávky Bitová rychlost ve zkomprimovaném stavu Bitová rychlost zdroje Délka min:sec vzorkovací frekvence Počet kanálů Kvalita zdroje SHA256 .c.bz2 souboru
fear_of_falling_8464.c.bz2 14 560 317 B 80 dB 70 μs žádný 8464 921 kbps 1,4 Mbps 2:06 44 100 Hz stereo 16-bit WAV 44 100 Hz 5D09CFF3D4FCFE055B5027CFC4F657A0 A9F08772EC945352720DE62AED0BB0AE
fear_of_falling_fm_256.c.bz2 8 707 829 B 50 dB 50 μs (evropské FM rádio) SoX FM 256 551 kbps 1,4 Mbps 2:06 44 100 Hz stereo 16-bit WAV 44 100 Hz 49964377CEEF05D3DF216BD28E54A8DE 9C190B70EA7C089EF37F42C8B4A2235D
fear_of_falling_512.c.bz2 8 484 425 B 56 dB 70 μs žádný 512 537 kbps 1,4 Mbps 2:06 44 100 Hz stereo 16-bit WAV 44 100 Hz 2E20D2FBE7EDD85793AD7373683936FF 81DDB8FAE2FAE56F70A3915AE7958E6B
fear_of_falling_wam_256.c.bz2 2 490 131 B 50 dB 75 μs (AM rádio) SoX AM 256 158 kbps 1,4 Mbps 2:06 22 050 Hz mono 16-bit WAV 44 100 Hz 0374947AA60D12458A1EAAD8C61B7F04 FAF3A68B719D9795BB67010F76A40103

Můj program, kterým jsem tento záznam vytvořil, je uvolněn pod GPL a jmenuje se Twibright VAC.

Mystified | Lost In Prehistory

           _______________________________________________________
          (+)  _______________________________________________  (+)
          |   / Mystified | Lost In Prehistory | CC0 1.0 http \   |
          |  | s://archive.org/details/gt390FandorinProjet2    |  |
          |  | Žánry: drone, ambient                           |  |
          |  | Z kompilace Genetic Trance: Fandorin Projet 2   |  |
          |  |        _________________________________        |  |
          |  |       /            _________            \       |  |
          |  |      |  A " A     |         |     A " A  |      |  |
          |  |      | (     )    |   | |   |    (     ) |      |  |
          |  |      |  v , v     |_________|     v , v  |      |  |
          |  | 70 μs \_________________________________/       |  |
          |  |                                                 |  |
          |  | VIRTUAL ANALOG CASSETTE        BY KAREL KULHAVÝ |  |
          |  |_________________________________________________|  |
          |            /             (+)             \            |
          |           /        _             _        \           |
          |          /   _    (_)           (_)    _   \          |
          (+)_______/___(_)_______________________(_)___\_______(+)

obrazek

Obálka kompilace Fandorin Projet 2 od Genetic Trance, které je Lost In Prehistory součástí. CC0.

Zakomprimovaný zdroják ke stažení Délka souboru zakomprimovaná Odstup analogového signálu od šumu analogové nahrávky analogizované na digitální nosič Preemfáze Modulační procesor Počet symbolů digitálního nosiče analogové nahrávky Bitová rychlost ve zkomprimovaném stavu Bitová rychlost zdroje Délka min:sec vzorkovací frekvence Počet kanálů Kvalita zdroje SHA256 .c.bz2 souboru
lost_in_prehistory_8464.c.bz2 14 501 738 B 80 dB 70 μs žádný 8464 586 kbps 2,3 Mbps 3:18 48 kHz stereo 24-bit WAV 48 kHz B3D419A8FCF108358700CDE73BBE612D 8F238A97BB40C0D9A83D4A9AED84A1E1
lost_in_prehistory_1500.c.bz2 7 576 121 B 65 dB 70 μs žádný 1500 306 kbps 2,3 Mbps 3:18 48 kHz stereo 24-bit WAV 48 kHz 28F470DAA79E5BE505C4EEDF2C665E24 CDA6C4D5D466D1FA9960E3120A4ECC57
lost_in_prehistory_fm_384.c.bz2 7 050 543 B 53 dB 50 μs SoX FM 1500 285 kbps 2,3 Mbps 3:18 44 100 Hz stereo 24-bit WAV 48 kHz D7E88FB8FE655EBB5B61265DAEABA512 8A5D173D3A3160150A3784F76771CF2C

Proč jazyk C předmagnetizovat?

Bez předmagnetizace je zvukový záznam nesený programem v C digitální, protože jazyk C je definován nad diskrétní množinou symbolů – znakovou sadou. Kvůli tomu trpí, podobně jako magnetická páska, takzvaným crossover zkreslením. V určitých bodech plynulé zvyšování vstupního signálu nevede ke zvyšování výstupního signálu. Magnetická páska má tento bod 1, ale jazyk C jich má 65536, 256, nebo tolik, na kolik digitálních symbolů si naprogramujeme záznam.

(A) původní vstupní signál do magnetické pásky bez předmagnetizace, (B) přehraný signál má kvůli magnetické hysterezi („vůli ve volantu“) pásky v místě nuly schod. ( C) Střídavá předmagnetizace schod rozmaže přičtením silného vysokofrekvenčního signálu – předmagnetizace, takže je výsledná charakteristika velmi lineární. V případě nahrávání do zdrojáku v jazyce C bude dokonce dokonale lineární.

Zdroj: O'Kelly, Terence, „Bias“ (PDF), The Inventor's Notebook, BASF

Jak vidíme, 15symbolový digitální přenos (záznam do zdrojáku C) má těchto bodů crossover zkreslení 15. Zbavíme se jich stejnou technikou jako u magnetofonu: rozmažeme je signálem střídavé předmagnetizace, pseudonáhodným mnohabitovým (prakticky analogovým) šumovým signálem který má amplitudu 1 schodu v procesu který jsem vynalezl a nazval analogizace.

Benkevitch, Leonid & Rogers, A. & Lonsdale, Colin & Cappallo, R. & Oberoi, D. & Erickson, Philip & Baker, K.. (2016). Van Vleck correction generalization for complex correlators with multilevel quantization.

Protože magnetofon používá nadzvukový neslyšitelný signál, není jej třeba v přehrávači odstraňovat: posluchač by ho stejně neslyšel, není problém udělat zesilovač, který ho nepřenese a pravděpodobně ho nepřenese ani ta páska. Nicméně předmagnetizaci GCC budeme dělat slyšitelným šumem operací přičtení, proto ho musíme v přehrávači odstranit. Přehrávač přidáme do zdrojáku C operací zřetězení a bude součástí nahrávky, kromě GCC nebude třeba další software a tak vlastě záznam přehraje přímo GCC. Spustitelný kód je tak součástí předmagnetizačního signálu, který se přimíchá do nahrávky (zdrojáku C) a předmagnetizuje kompilátor GCC tak, aby se z kompilátoru se zkreslením stal kompilátor, který propouští analogový signál bez zkreslení.

Na magnetofonové pásce se předmagnetizace dělá pouze operací přičtení. U předmagnetizace GCC je část předmagnetizačního signálu přidávána operací přičtení a část operací zřetězení (konkatenace).

Poulsenův dráťák Telegrafon.

CC-BY-SA 2.5/GFDL Xavax, Bitman

Historie předmagnetizace

  • Již v roce 1900 dán Valdemar Poulsem průkopnicky nahrál císaře Františka Josefa na svůj vynález Telegrafon, což byl dráťák a používal buď žádnou nebo stejnosměrnou předmagnetizaci, jejíž značný šum a zkreslení byly problémem pro širší využití (str. 36 značená jako 34).
  • V r. 1928 Fritz Pfleumer vynalezl páskový stroj a nazval ho magnetofon. V tu dobu se stále používala stejnosměrná předmagnetizace.
  • Střídavou předmagnetizaci patentovali v roce 1921 Carlson a Carpenter v USA, ale znovu ji náhodou objevila a do produkce zavedla německá AEG s Magnetofonem K4. Zkreslení kleslo z 5% pod 3 % (str. 37 značená jako 35).

Magnetofon AEG K4, který měl první střídavou předmagnetizaci

CC-BY-SA 3.0 Friedrich Engel

Kompilátor C bez předmagnetizace vs. s předmagnetizací

  • Zvuková ukázka původní hudba.
  • Zvuková ukázka bez předmagnetizace 16 dB odstup od „šumu“ (kvantizačního zkreslení), 5 úrovní, bez preemfáze, 192 kbps MP3. Hudba je zkreslená a v tišších místech vynechává.
  • Zvuková ukázka s předmagnetizací 16 dB odstup od šumu, 5 úrovní, bez preemfáze, 192 kbps MP3. Hudba má nulové harmonické zkreslení a obsahuje neměnný aditivní bílý šum, který s hudbou nekoreluje.
  • Pouze pro zajímavost: Zvuková ukázka s ditheringem 16 dB odstup od šumu, 5 úrovní, bez preemfáze, 192 kbps MP3. Šum je drsný, řezavý, je přerušován (modulován) v rytmu hudby, jeho hlasitost koreluje s hlasitostí hudby. Není to tedy aditivní šum, ale dle mého názoru zkreslení. Může měnit faktický obsah hudby – např. budit dojem, že na bubny se hraje rumba koulemi.

Skladba: Last Day On Earth(UK)/Peter McCormick: Fear Of Falling, CC-BY-SA 4.0 International

Původní

Autor: Karel Kulhavý

Bez předmagnetizace

Autor: Karel Kulhavý

S předmagnetizací (analogizací)

Autor: Karel Kulhavý

Pouze pro zajímavost: dithering – šum se přičte při záznamu, ale neodečte při přehrávání.

Autor: Karel Kulhavý

Všechny čtyři mají stejné parametry: 16 dB odstup od šumu, 5 úrovní, bez preemfáze.

Stejná situace nastává i při poslechu 16-bitového digitálního zvuku. Ten sice nemá 5 symbolů, ale 65536 symbolů. V tichých pasážích se ale opakuje přesně stejná situace: je-li hlasitost pasáže –82 dBFS, zabírá rozkmitem pouze 5 schodů z 65536 a opakuje se stejné zkreslení. U 8bitového zvuku to nastává již při –34 dBFS.

Situace se dále zhoršuje pokud takový záznam nahrajeme do editoru a zvýšíme hlasitost vynásobením číslem. Existující nepřesnosti se tak ještě zesílí.

Často se používá dithering, který ale nejen že moduluje šum v rytmu hudby, ale také má šum o 3 dB silnější a odstup signálu od šumu o 3 dB horši: sčítají se totiž dva statisticky nezávislé šumy stejné velikosti: šum ditheringu a šum zaokrouhlování kvantizace.

Příště si zkusíme ještě jednou to samé s preemfází 70 μs.

Autor článku

Karel Kulhavý vystudoval operační systémy, sítě a překladače na MFF UK a je autorem optického pojítka Twibright Ronja a spoluautorem textového a grafického webového prohlížeče Twibright Links.