
HLAS - Prográmek na syntézu řeči přes pípák
Možná to neznáte, možná ano. A možná vás překvapí i velikost souboru - 921 bajtů. Odkaz ke stažení http://srotiste.powerack.cz/ke-stazeni/
Pardon, špatná kategorie. Myslel jsem, že jsou tu i programy :-)
Ahoj,
tak jsem si s hlasem o víkendu pohrál a disassembloval jsem ho.
Lehce okomentovaný zrdojáček je k dispozici zde:
https://github.com/berk76/hlas
Po kompilaci je binárka nachlup (na bit) shodná s originálem.
Snad se někomu bude hodit a třeba vyrobí nějakou mluvící hru :-)
Ahoj, upravit ten program byl trochu i záměr ale nebude to tak jednoduché.
Nicméně hned na začátku je malá rutina, která měří počet cyklů které procesor udělá za sekundu. Z toho pak spočítá dva koeficienty k1 a k2. Tak, že počet cyklů vydělí 1024 a v případě k1 vynásobí 3kou a pro k2 vynásobí 210kou. Ty koeficienty pak používá rutina pro moulaci hlasu.
Pokud máte možnost ten zdroják přeložit tak si můžete zaexperimentovat a změnit násobitele 3 a 210 které jsou uložené jako počáteční hodnoty v proměnných k1 a k2.
Problém je v tom že tato metoda měření rychlosti procesoru na dnešních procesorech které mají spekulativní vykonávání kódu, pipelining atd není ideální.
Při disassemblování jsem používal starý dobrý turbo debuger.
No přesně - timer 0 tiká 1/18 sekundy což je asi málo. Všimnul jsem si že frekvence pípáku je generovaná jen zalojováním a odpojováním pípáku místo aby se nastavovala frekvence na timeru 2 kde je pípák připojený. To podle mě ukazuje na to že ten program nebyl původně napsaný pro ibm pc. Řešením by tedy mohlo být použití timeru 2 pro generování frekvence. To ale znamená dobře se zorientovat v těch datech a není to už tak triviální úprava.
Timer v PC jde přeprogramovat z 18,2 Hz (konstanta 65535 default) až do rychlosti 1,193182 MHz (konstanta 1), takže pokud bude rychlý procesor, aby stačil všechno přepočítat a nehrabal se jen v přerušení, tak lze zvuk generovat v pohodě. Myslím, že na generování analogového signálu impulzní metodou by bylo ideální 182kHz a jednou za 10 000 cyklů zavolat původní procedury, aby šli správně hodiny atd.
To sedí.
Timery ma pcčko 3.
Timer0 řídí čas v počítači pokud mu změní timeout tak půjdou špatně hodiny
Timer1 řídí refresh paměti. Na něj se sahat tedy nedá.
Timer2 je k dispozici ale připojuje se na něj pípák. Pokud budeme měnit jeho frekvenci tak pípák bude pípat různě vysoko. S tím je potřeba počítat.
Naopak, dá se to pak nalinkovat prakticky k čemukoliv.
A když se upraví timer, aby to "mlelo" na každým stroji stejně rychle, bude to paráda.
Jasně že by ta syntéza snesla ještě i další úpravy, ale osobně mi stačí, aby to frčelo všude stejně rychle.
No a pokud jde o assembler, myslím, že pro moje účely to není ono. Zůstanu u svého upraveného QB.
Objevil jsem hezký článek popisující zapojení timeru2 a speakeru
Schema je na Obr. 5-4
http://www.dnp.fmph.uniba.sk/~kollar/prak_asm/deb_5.htm
Snažím se využít timer 2 pro čekání, ale nefunguje mi to. Nevím zda něco peřhlížím, nebo možná jen nefunguje v DosBoxu a na reálném železe by fungovalo?
https://gist.github.com/berk76/922c654fcbb22c9c2492ee722ba161ab
Možná by stálo za námahu napsat ten program znovu s využitím získaných znalostí, než ho upravovat. Ale já se do toho pouštět nebudu, protože moje znalosti assembleru končí u první instrukce. Pokud by to ale šlo napsat v QB (neříkám že nejde, jen jsem nezjistil jak), pak by to bylo o hodně jednodušší, protože prakticky jakýkoliv prográmek se dá přiložit k dalšímu jako knihovna. Tedy je nutné to přeložit jako knihovnu a správně nalinkovat.
MilasPce napsal(a)
čítac 2 nastavuješ s konstantou 210 to je 1,19 MHz /210= 5,66kHz.Když pak testuješ v proceduře waitone na 5-tém bitu úroveň a čekáš na změnu stane se tak za 0,00017 sec. tak to ani nemůžeš postřehnout že se něco stalo.
Nefunguje to ani když nastavím countdown 65535 což je těch 18,2Hz. Chyba bude někde jinde. Buď dělám něco špatně, nebo je to tak neobvyklé použití, že ho DosBox nepodporuje. Nemám teď bohužel prostor abych vytáhnul svou krásnou 386-ku a vyzkoušel to na ní.
Nejvíce uživatelů online: 351
Právě online:
28 Host(é)
Právě prohlíží tuto stránku:
1 Host(é)
Statistiky uživatelů:
Hosté: 14
Členové: 714
Moderátoři: 0
Administrátoři: 1
Statistiky fóra:
Skupiny: 5
Fóra: 24
Témata: 1441
Příspěvky: 24054
Nejnovější uživatelé:
Michalzchvostoskoku, gjames, Martin Janočko, jakub crhák, retro, Vince Howerton, Standa, Libertarian771, Mastafos77, sleepingmouse, Fleet, SirKoki, awlo, Jiří Dobrý, MilsaAdministrátoři: Sledge: 5655