No permission to create posts
RSS

HLAS - Prográmek na syntézu řeči přes pípák

06/12/2017 - 19:53
Avatar
Praha

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 :-)

06/12/2017 - 21:46
Avatar

V poho, přesunuto. Prográmek myslím znám, nebo jsem měl něco velmi podobného, nejmenovalo se to hlas, ale mluv.

06/12/2017 - 21:48
Avatar
Praha

Mluv byl tuším větší. Tohle je opravdu minimalistický ;-) Tuším, že ho tahám z disku na disk už od roku 97 - 98, kdy jsem ho jako šikovnou součást programového vybavení našel v jedné 286ce.

06/12/2017 - 23:00
Avatar
LubikCZ

HLAS jsem měl na Didaktiku M. Běh programu se dal zastavit a v "pouku" se dala nastavit rychlost řeči :)

HLAS.jpg

sp_PlupAttachments Attachments
07/12/2017 - 00:02
Avatar
Praha

Mno každopádně ať se to původně jmenovalo jakkoliv, já to našel jako hlas.com. Doporučuji vyzkoušet například na XTčku (10 MHz bude tak akorát). Mělo by to být čisté, tzn bez virů.

12/02/2018 - 22:21
Avatar

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 :-)

14/02/2018 - 01:40
Avatar
Praha

Aha, pěkné. Myslíš, že by bylo možné to nějak upravit, aby to bylo použitelné na dnešních strojích? Jinak čím jsi to dekompiloval? Rád bych něco podobného spáchal v QB, ale už jsem zapomněl víc, než jsem se naučil :-)

14/02/2018 - 08:24
Avatar

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.

14/02/2018 - 09:15
Avatar
MilasPce
Pardubice

Asi by stálo za úvahu přeprogramovat to tak, aby místo čekacích smyček používal přerušení časovače, pak by to jelo na všech kompech stejně a nemusela by se měřit rychlost. Otázka je, jestli lze nastavit tak rychlé přerušení, aby to stíhalo generovat zvuk.

14/02/2018 - 09:36
Avatar

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.

14/02/2018 - 10:10
Avatar
MilasPce
Pardubice

Problém bude v tom že se nejedná jen o generování kmitočtu, ale bude se měnit i střída signálu.

14/02/2018 - 10:53
Avatar
MilasPce
Pardubice

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.

14/02/2018 - 10:59
Avatar
MilasPce
Pardubice

Na řeč by stačilo možná i 10x míň, tedy 18,2kHz

14/02/2018 - 11:46
Avatar

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.

14/02/2018 - 13:12
Avatar
Praha

Škoda, že mi assembler nikdy nic neříkal. Makal jsem maximálně v QB, pak trošku v pascalu a to je asi tak všechno. Nedala by se z toho vyrobit něco jako "knihovna" pro QB? Možná bych toho po vás chtěl moc, ale hodilo by se to. 

14/02/2018 - 17:41
Avatar

Asi by to šlo. Ale není to nuda mít knihovnu v QB? Já s tím assemblerem taky začal tak čtyři neděle zpátky :-)

15/02/2018 - 01:00
Avatar
Praha

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.

17/02/2018 - 11:46
Avatar

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

17/02/2018 - 15:05
Avatar
Praha

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.

17/02/2018 - 18:35
Avatar
MilasPce
Pardubice

je mi divný že waitc čeká počet cyklů v CX, když v podprogramu waitc se do registru CX vůbec nezasahuje.

17/02/2018 - 18:46
Avatar
MilasPce
Pardubice

čí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.

17/02/2018 - 19:12
Avatar
MilasPce
Pardubice

MilasPce napsal(a)
je mi divný že waitc čeká počet cyklů v CX, když v podprogramu waitc se do registru CX vůbec nezasahuje.  

Aha CX snižuje instrukce LOOP tak to je dobře.

18/02/2018 - 12:15
Avatar

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í.

18/02/2018 - 13:51
Avatar
Praha

Pošli přeloženej com soubor a já to checknu. Mám tady na stole svou 386, takže stačí jen zapnout...

18/02/2018 - 20:36
Avatar
MilasPce
Pardubice

No myslím, že ani když to bude 18,2Hz tak si ani nevšimneš že ten prográmek čekal bo je to 0,05sec.

No permission to create posts
Časové pásmo: Europe/Prague

Nejvíce uživatelů online: 351

Právě online:
28 Host(é)

Právě prohlíží tuto stránku:
1 Host(é)

Nejaktivnejší uživatelé:

LubikCZ: 2166

MilasPce: 1512

Sany: 1498

Neny: 1136

Powerack: 967

Logout: 934

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ý, Milsa

Administrátoři: Sledge: 5655

Podpořit finančním příspěvkem »

Podpořit high-voltage.cz na STARTOVAČI

20 patronů přispívá částkou 2348 Kč měsíčně

Je to malá dvacka pro čtenáře, ale velká vzpruha pro HV! ;)
Podpořit nákupem na e-shopu »
Stojánek na Socket 7 procesorStojánek na Socket 7 procesor 24 Kč
Shadow bazar, retro herní džungle