{"id":341,"date":"2017-06-24T13:13:18","date_gmt":"2017-06-24T12:13:18","guid":{"rendered":"https:\/\/www.pmd85.cz\/?page_id=341"},"modified":"2019-10-20T17:23:10","modified_gmt":"2019-10-20T16:23:10","slug":"generovani-dvouhlase-hudby-na-jednobitovem-vystupu","status":"publish","type":"page","link":"https:\/\/www.pmd85.cz\/?page_id=341","title":{"rendered":"Generov\u00e1n\u00ed dvouhlas\u00e9 &#8222;hudby&#8220; na jednobitov\u00e9m v\u00fdstupu"},"content":{"rendered":"<p>Tento \u010dl\u00e1nek u\u017e byl jednou p\u0159ipraven k publikov\u00e1n\u00ed\u00a0ve stylu &#8222;zrychlil jsem hudebn\u00ed knihovnu, te\u010f bude d\u00edky p\u0159esn\u011bj\u0161\u00edmu \u010dasov\u00e1n\u00ed lep\u0161\u00ed..&#8220; Ale nebyla. P\u0159esto\u017ee se mi n\u00ed\u017ee uvedenou knihovnu poda\u0159ilo zrychlit o v\u00edce jak 20%, jej\u00ed zasazen\u00ed do frekven\u010dn\u00edho rastru v\u00fdsledn\u00fdch not bylo nakonec hor\u0161\u00ed ne\u017e u t\u00e9 p\u016fvodn\u00ed, pomalej\u0161\u00ed. Paradoxn\u011b i rozsah generovan\u00fdch t\u00f3n\u016f je\u00a0(s ohledem na dosahovan\u00e9 odchylky) v\u011bt\u0161\u00ed u t\u00e9 &#8222;pomalej\u0161\u00ed&#8220; verze. Tak\u017ee jsem dvout\u00fddenn\u00ed pr\u00e1ci dal bokem a za\u010dal znovu.<\/p>\n<p>Nyn\u00ed\u00a0tedy\u00a0pop\u00ed\u0161u knihovnu p\u016fvodn\u00ed a p\u0159ipoj\u00edm jej\u00ed p\u0159esn\u011bj\u0161\u00ed popis. P\u0159eci jen v hr\u00e1ch Arkanoid\u00a0a Treasure Island b\u011b\u017e\u00ed tato knihovna\u00a0stylem &#8222;funguje to,\u00a0nev\u00edm pro\u010d&#8220;. Tedy v\u00edm, ale nel\u00e1mal jsem si tam hlavu s frekvencemi t\u00f3n\u016f, jen jsem\u00a0pom\u011brov\u011b zm\u011bnil hodnoty jejich softwarov\u00fdch d\u011bli\u010dek. Nyn\u00ed jsem pro ka\u017ed\u00fd t\u00f3n vygeneroval v simul\u00e1toru PMD-85 od RM-TEAMu zvukov\u00fd z\u00e1znam, zm\u011b\u0159il \u010d\u00edm jak nejp\u0159esn\u011bji frekvence generovan\u00fdch t\u00f3n\u016f a pokou\u0161el se ud\u011blat optimalizace z pohledu kvartov\u00fdch, kvintov\u00fdch a okt\u00e1vov\u00fdch interval\u016f. Ov\u0161em jako nejlep\u0161\u00ed se nakonec s ohledem na hrub\u00fd rastr generovan\u00fdch frekvenc\u00ed (d\u011bli\u010dka m\u00e1 pouze 8 bit\u016f) jevilo &#8222;naladit&#8220; t\u00f3ny tak, aby frekvence ka\u017ed\u00e9ho jednoho t\u00f3nu byla \u010d\u00edm jak nejp\u0159esn\u011bji rovna frekvenci dan\u00e9ho t\u00f3nu v temperovan\u00e9m lad\u011bn\u00ed. Nav\u00edc je dopln\u011bn popis technick\u00e9ho \u0159e\u0161en\u00ed generov\u00e1n\u00ed dvouhlas\u00e9 hudby a p\u0159ipojen komentovan\u00fd v\u00fdpis programu. Program je tak\u00e9 o\u010di\u0161t\u011bn od zbyte\u010dnost\u00ed, kter\u00e9 tam byly historicky zavle\u010deny.<\/p>\n<p>Abych n\u011bkde za\u010dal, za\u010dnu tedy od absolutn\u00edho za\u010d\u00e1tku. Hudbu, \u010di l\u00e9pe \u0159e\u010deno zvuky, mohu na jednobitov\u00e9m digit\u00e1ln\u00edm v\u00fdstupu generovat tak, \u017ee budu\u00a0s dostate\u010dnou frekvenc\u00ed st\u0159\u00eddat logick\u00e9 nuly a jedni\u010dky a vytv\u00e1\u0159et takov\u00fd \u010dasov\u00fd pr\u016fb\u011bh nap\u011bt\u00ed, kter\u00fd se po zes\u00edlen\u00ed a p\u0159iveden\u00ed na reproduktor zm\u011bn\u00ed v akustick\u00e9 vln\u011bn\u00ed, kter\u00e9 na\u0161e ucho vn\u00edm\u00e1 jako zvuk. Pro zaj\u00edmavost dod\u00e1m, \u017ee pokud pou\u017eiju vzorkovac\u00ed frekvenci\u00a0\u0159\u00e1dov\u011b 1MHz a p\u0159ed zesilova\u010d um\u00edst\u00edm je\u0161t\u011b integra\u010dn\u00ed filtr (sta\u010d\u00ed oby\u010dejn\u00fd RC \u010dl\u00e1nek), mohu takto generovat celkem srozumiteln\u011b hlas \u010di z\u00e1znam jak\u00e9hokoliv n\u00e1stroje. Je tedy jen ot\u00e1zkou dosa\u017een\u00e9 frekvence v kombinaci s bitov\u00fdm rozli\u0161en\u00edm amplitudy, jak\u00e9 kvality dos\u00e1hneme. Te\u010f zp\u00e1tky na zem, na PMD-85 dos\u00e1hneme vzorkovac\u00ed frekvence \u0159\u00e1dov\u011b 10kHz, samoz\u0159ejm\u011b s rozli\u0161en\u00edm 1 bitu (proud reproduktorem bu\u010f te\u010de nebo nete\u010de). To\u00a0samo o sob\u011b je \u010d\u00e1st probl\u00e9mu. Druh\u00e1 polovina probl\u00e9mu je, kde uskladnit obrovsk\u00e9 mno\u017estv\u00ed po\u017eadovan\u00fdch dat, kter\u00e9 bych cht\u011bl na ten reproduktor pos\u00edlat.\u00a0Tak\u017ee na PMD-85 (stejn\u011b jako na ZX Spectru) m\u016f\u017eeme generovat pouze pravo\u00fahl\u00e9 sign\u00e1ly, jejich\u017e pr\u016fb\u011bhy lze\u00a0po\u010d\u00edtat za chodu a nemus\u00edme m\u00edt ulo\u017eena \u017e\u00e1dn\u00e1 data pro tvar generovan\u00e9 vlny.<\/p>\n<p>Princip generov\u00e1n\u00ed jednohlas\u00e9 hudby (t\u00f3nu) pomoc\u00ed obd\u00e9ln\u00edkov\u00e9ho tvaru vlny je tedy jasn\u00fd. Nebo taky ne. Pak v\u00e1s mohu odk\u00e1zat na detailn\u00ed \u010dl\u00e1nek Martina Mal\u00e9ho viz odkaz na konci \u010dl\u00e1nku. O level vy\u0161\u0161\u00ed probl\u00e9m je, jak\u00a0soub\u011b\u017en\u011b generovat\u00a0t\u00f3ny dva. To ukazuje n\u00e1sleduj\u00edc\u00ed obr\u00e1zek.<\/p>\n<p><img loading=\"lazy\" class=\"alignleft wp-image-342 size-full\" src=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mixed_waves.gif\" alt=\"\" width=\"90\" height=\"197\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>S frekvenc\u00ed\u00a0\u0159\u00e1dov\u011b \u00a0kolem 10kHz p\u0159ep\u00edn\u00e1me na digit\u00e1ln\u00ed v\u00fdstup st\u0159\u00eddav\u011b hodnotu vlny 1. t\u00f3nu (modr\u00e9 &#8222;hodnoty&#8220;) a hodnotu vlny 2. t\u00f3nu (\u010derven\u00e9 &#8222;hodnoty&#8220;). Ano, zcela spr\u00e1vn\u011b tu\u0161\u00edte, \u017ee p\u0159i trval\u00e9 logick\u00e9 nule u vlny \u010d.1 a trval\u00e9 logick\u00e9 jedni\u010dce u vlny \u010d.2 bude syst\u00e9m generovat parazitn\u00ed t\u00f3n na polovin\u011b &#8222;p\u0159ep\u00ednac\u00ed&#8220; frekvence. Ale pokud o\u0161et\u0159\u00edme tento nedostatek, kter\u00fd m\u016f\u017ee nastat pouze u generov\u00e1n\u00ed pauzy, nic dal\u0161\u00edho ne\u017e\u00e1douc\u00edho se ned\u011bje a princip funguje. J\u00e1dro procedury tedy bere hodnoty z t\u0159et\u00edho pr\u016fb\u011bhu na p\u0159ede\u0161l\u00e9m obr\u00e1zku v po\u0159ad\u00ed \u010derven\u00e1-modr\u00e1-\u010derven\u00e1-modr\u00e1-.. a tyto logick\u00e9 nuly \u010di jedni\u010dky &#8222;h\u00e1\u017ee&#8220; v pravideln\u00fdch intervalech na digit\u00e1ln\u00ed v\u00fdstup. Ta pravidelnost je d\u016fle\u017eit\u00e1, jinak se n\u00e1m v generovan\u00e9m zvuku za\u010dnou objevovat r\u016fzn\u00e9 pazvuky.<\/p>\n<p>Samotn\u00e1 knihovna pro p\u0159ehr\u00e1v\u00e1n\u00ed dvouhlas\u00e9 hudby na PMD-85 vypad\u00e1 takto.<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/music.txt\" target=\"_blank\" rel=\"noopener\">Knihovna pro generov\u00e1n\u00ed dvouhlas\u00e9 hudby na PMD-85<\/a><\/p>\n<p>Pokud chceme generovat hudbu soub\u011b\u017en\u011b s \u010dek\u00e1n\u00edm na stisk kl\u00e1vesy nebo prov\u00e1d\u011bt n\u011bjakou jinou nen\u00e1ro\u010dnou \u010dinnost b\u011bhem hudby, lze\u00a0takovou\u00a0programovou sekvenci\u00a0um\u00edstit do procedury &#8222;player&#8220; za instrukci &#8222;call tongen&#8220;. Ov\u0161em u\u017e t\u0159eba ono zm\u00edn\u011bn\u00e9 \u010dek\u00e1n\u00ed na stisk kl\u00e1vesy bude &#8222;obslou\u017eeno&#8220; v\u017edy a\u017e po dozn\u011bn\u00ed\u00a0t\u00f3nu, co\u017e m\u016f\u017ee b\u00fdt velmi dlouh\u00e1 a t\u00edm p\u00e1dem nedostate\u010dn\u00e1 \u010dasov\u00e1 odezva. Pak je nutno p\u0159est\u011bhovat takov\u00fd progr\u00e1mek dovnit\u0159 procedury &#8222;tongen&#8220; a\u017e t\u00e9m\u011b\u0159 na sam\u00fd z\u00e1v\u011br za sekvenci &#8222;dcr c\/jnz chanl1&#8220; a p\u0159ed sekvenci &#8222;dcr b\/jnz chanl1&#8220;. V praxi je odzkou\u0161eno, \u017ee i test n\u011bkolika kl\u00e1ves v tomto m\u00edst\u011b nem\u00e1 negativn\u00ed vliv na rychlost a \u010distotu p\u0159ehr\u00e1van\u00e9 hudby.<\/p>\n<p>V n\u00e1sleduj\u00edc\u00edm souboru v Excelu jsou na z\u00e1lo\u017ece TABLE uvedeny d\u011blic\u00ed pom\u011bry, skute\u010dn\u00e9 frekvence t\u00f3n\u016f a odchylky frekvenc\u00ed. Do b\u00edl\u00e9 tabulky (d\u011blic\u00ed pom\u011bry) zad\u00e1v\u00e1te hodnoty pro jednotliv\u00e9 t\u00f3ny, ostatn\u00ed (barevn\u00e9) tabulky se automaticky p\u0159epo\u010d\u00edt\u00e1vaj\u00ed.<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/gen2ton.xls\" target=\"_blank\" rel=\"noopener noreferrer\">P\u0159ehled t\u00f3n\u016f\u00a0a jejich odchylek<\/a>\u00a0(Excel &#8211; v\u00fdpo\u010dty platn\u00e9 pro PMD-85)<\/p>\n<p>Velice u\u017eite\u010dn\u00e9 pov\u00edd\u00e1n\u00ed o generov\u00e1n\u00ed jednobitov\u00e9 hudby lze nal\u00e9zt na n\u00ed\u017ee uveden\u00fdch odkazech:<\/p>\n<p>Martin Mal\u00fd: <a href=\"https:\/\/retrocip.cz\/symfonie-na-jednom-bitu\/\">https:\/\/retrocip.cz\/symfonie-na-jednom-bitu\/<\/a><\/p>\n<p>Franti\u0161ek Fuka: <a href=\"http:\/\/www.fffilm.name\/2012\/02\/hudebnim-skladatelem-snadno-rychle.html\">http:\/\/www.fffilm.name\/2012\/02\/hudebnim-skladatelem-snadno-rychle.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tento \u010dl\u00e1nek u\u017e byl jednou p\u0159ipraven k publikov\u00e1n\u00ed\u00a0ve stylu &#8222;zrychlil jsem hudebn\u00ed knihovnu, te\u010f bude d\u00edky p\u0159esn\u011bj\u0161\u00edmu \u010dasov\u00e1n\u00ed lep\u0161\u00ed..&#8220; Ale nebyla. P\u0159esto\u017ee se mi n\u00ed\u017ee uvedenou knihovnu poda\u0159ilo zrychlit o v\u00edce jak 20%, jej\u00ed zasazen\u00ed do frekven\u010dn\u00edho rastru v\u00fdsledn\u00fdch not bylo nakonec hor\u0161\u00ed ne\u017e u t\u00e9 p\u016fvodn\u00ed, pomalej\u0161\u00ed. Paradoxn\u011b i rozsah generovan\u00fdch t\u00f3n\u016f je\u00a0(s ohledem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":337,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/341"}],"collection":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=341"}],"version-history":[{"count":12,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/341\/revisions"}],"predecessor-version":[{"id":1025,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/341\/revisions\/1025"}],"up":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/337"}],"wp:attachment":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}