[zxspectrum] Re: ZX Spectrum ItaSpeak 1.0 - Demo WAV
- From: Luca Alimandi <luca.alimandi62@xxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Thu, 29 Sep 2016 01:33:09 +0200
On Wed, Sep 28, 2016 at 12:12 PM +0800, "Giacomo Paganelli"
<detonazione@xxxxxxxxx <mailto:detonazione@xxxxxxxxx>> wrote:
Hey Luca, questo e' fantastico, mi riporta indietro con la memoria!! :)
Mi fa molto piacere!
Proprio come te, nell'83 (credo) creai un programma in assembly per
far parlare in Italiano il mio beneamato Spectrum 48K. Usai lo
Spectrum stesso per digitalizzare la via voce e, con mia grande
sorpresa, nonostante la terribile qualita' del campionamento, la voce
era intellegibile. Ovviamente scrissi una serie di regole per
interpretare il parlato, per esempio l'uso della C come /k/ o /tʃ/.
Già, questa è la parte più complessa, in effetti!
Ho provato a rintracciare il programma anni fa ma, ahime', ho scoperto
che la mia famiglia ha buttato via tutte le mie cassette, senza
informarmi. Ho perso tutto :(
Ahi ahi, che peccato!!! :-( Sarebbe stato fantastico poter condividere
quel lavoro oggi!
Ho ascoltato il tuo esempio e ho notato i gap tra i fonemi: ricordo
che ebbi lo stesso problema!!!
Se ti puo' essere di aiuto, risolvetti questo problema eliminando la
parte iniziale e finale dei fonemi - in pratica l'attack e decay - in
particolare le per consonanti. Ogni taglio richiese parecchia pazienza.
Verissimo. Ho fatto lo stesso!
Il modo in cui verificai la qualita' dei fonemi "tagliati" fu di
creare parole, vere o finte, con vocali e doppie consonanti e
ascoltare se erano pronunciate correttamente.
Uno schema puo' essere: consonante-vocale-consonante-consonante-vocale
Per la lettera B, un esempio puo' essere "BEBBE". Se il fonema e'
"tagliato" bene, non si sentira' il gap tra le doppie B/
All'incirca anche io faccio la stessa cosa... Se hai altra idee, fammi
sapere, che mi interessa!
Spero che questo sia di aiuto! Fammi sapere se hai bisogno di altre info.
Ciao,
Giacomo
Mooolto interessante! Allora non sono l'unico pazzo che crede (o ha
creduto) di poter "far parlare" lo Spectrum! :-)
Mi fa piacere che qualcun altro ha già tentato delle strade simili, e mi
invoglia a condividere quello che sto facendo adesso (a distanza di ben
30 anni dai primi esperimenti!... Se non so' pazzi non li volemo!... :-D
Comunque, entrando un po' in particolari (sarò un po' lungo e mi
dispiace per chi non è interessato!... Ma d'altra parte la lista è fatta
proprio per condividere anche queste esperienze!...), il metodo di
sintesi <
https://it.wikipedia.org/wiki/Sintesi_vocale> che ho adottato
io (perché il più semplice da realizzare) è quello "*concatenativo*"
(mentre la maggior parte delle sintesi odierne usa quello "*per difoni*").
Al momento sto usando un misto di fonemi:
- alcuni sono derivanti dal progetto iniziale (all'epoca li ottenni
*campionando* direttamente a 8 bit con lo Spectrum, come facesti tu,
credo, attraverso un'*interfaccia di conversione A/D e D/A* - mi pare
fosse un kit di "Nuova Elettronica" - che costruii in quegli anni -
ecco un paio di foto
<
https://drive.google.com/file/d/0B2gTtPKDTuD_enRGQUJvLUJqLWc/view?usp=sharing>
dell'attrezzo
<
https://drive.google.com/file/d/0B2gTtPKDTuD_c082OFNqWWhOZFk/view?usp=sharing>!)
- altri sono stati estrapolati da sintesi vocali per PC (ad esempio da
"*It_flite*" dell'IRST di Trento e dell'ISTC di Padova, del 2004),
rimaneggiati e riadattati a 8 bit e alla frequenza di campionamento che
uso sullo Spectrum
- altri campionati sul PC con programmi tipo *Audacity *e *Wavosaur*.
Tra parentesi, la sintesi It_flite sono riuscito ad adattarla per essere
usata senza istallazione, come programma *totalmente "portable"*, cosa
non da poco per una sintesi vocale!
Devo dire che, in se stessi, i fonemi sono abbastanza curati (anche se
ascoltando la sintesi non sembra, ci ho messo un sacco di tempo per
raffinarli al livello a cui sono ora!).
Il problema adesso è che la loro concatenazione deve essere pilotata da
un programma un po' più "*intelligente*" di quello attuale, che comunque
applica già un'analisi abbastanza sofisticata; ma se si vuole ottenere
qualcosa di ancora più comprensibile, occorre migliorare ancora, il che
però comporta una complicazione della fase di analisi e quindi rischia
di rallentare la fluidità del parlato.
L'analisi gestisce già abbastanza bene gli *spazi*, la *punteggiatura *e
le *lettere accentate* (a fine parola). C'è anche un abbozzo di
"*prosodia*" simulata (un andamento "ondulato" della frequenza di base,
che diminuisce un po' l'effetto "cantilena", o "monotonico").
Il problema delle *consonanti doppie*
<
http://www.treccani.it/enciclopedia/lettere-doppie_%28Enciclopedia-dell%27Italiano%29/>
è quasi risolto; ho individuato due tipi di doppie: io le ho definite
"sonore" e "mute". Le prime sono consonanti che, quando presenti a
coppia, producono un suono più lungo della consonante singola, ma non
possono essere ottenute concatenando due volte lo stesso fonema (si
sentirebbe una schifezza!...). Queste sono, ad esempio, le "mm", le
"nn", le "rr", ecc.. Le seconde sono consonanti che danno luogo ad una
sorta di "pausa" tra la consonante e la vocale immediatamente
precedente. Ed esempio "tt", "pp", "dd", ecc..
L'analisi del testo individua quali consonanti doppie si presentano e
nel primo caso utilizza un fonema specifico (la "doppia m", ecc..), nel
secondo caso produce semplicemente una *breve pausa* prima di
pronunciare la consonante.
Ora, l'effetto sgradevole di certe doppie nel file di esempio, l'ho
corretto abbastanza bene semplicemente *tarando* meglio questa pausa,
che era un po' troppo lunga.
Prossimamente condividerò un nuovo file per poter fare un confronto.
Non ho ancora trovato una soluzione al problema delle parole "sdrucciole
<
https://it.wikipedia.org/wiki/Parola_sdrucciola>" (o "bisdrucciole"),
ossia con accento tonico sulla terzultima (o quartultima) vocale.
Data la rarità di tali parole, si potrebbe accettare il compromesso di
non gestirle.
Altro problema sono il "dittongo
<
http://www.treccani.it/enciclopedia/dittongo_%28Enciclopedia-dell%27Italiano%29/>"
e lo "iato
<
http://www.treccani.it/enciclopedia/iato_%28Enciclopedia-dell%27Italiano%29/>".
Se nella mia parola si presentano due *vocali vicine*, come "ia" (di
"piano"), "io" (di "gioco"), "ie" (di "miele"), ecc., la "i" deve avere
una durata molto inferiore di una "i" "nornale" (per questo viene detta
"semivocale
<
http://www.treccani.it/enciclopedia/semivocali_%28Enciclopedia-dell%27Italiano%29/>").
In pratica, secondo il principio dei "difoni" (usati nelle sintesi
odierne) dovrei campionare l'intero dittongo, ma ottengo un risultato
abbastanza soddisfacente anche utilizzando un fonema "i" più breve, ed è
quello che faccio attualmente nella mia sintesi... Come immaginate, lo
spazio a disposizione per i fonemi non è molto, e la RAM in uno Spectrum
è una risorsa preziosa e va usata con molta parsimonia!.
Peccato che ci sono parole in cui le due vocali formano uno "iato",
ossia le due vocali fanno parte di due sillabe diverse, e in tal caso
vanno pronunciate entrambe come vocali "intere". Il problema è
progettare l'analizzatore di testo in modo che possa distinguere un
dittongo da uno iato, e pronunciare le due vocali nel modo corretto. Ma
regole semplici e chiare per discernere questi casi non ce ne sono,
purtroppo...
Di fatto, nella lingua italiana, lo iato è molto meno frequente del
dittongo, per cui potrei chiudere un occhio (anzi, un orecchio! :-)) e
accontentarmi di pronunciare i dittonghi sempre come... dittonghi. Ma
alcune parole di uso frequente suonano proprio male! Ad esempio le
parole "io", o "mio", se pronunciate come dittongo, nemmeno si capiscono
(è un po' come pronunciare la parola "miò"!). In parte ho risolto la
cosa scrivendo tali parole con la "ì" accentata. Così "mìo" viene
pronunciato correttamente. Ma sarebbe bello che questa "correzione"
fosse fatta automaticamente, non nel testo.
Una possibile soluzione è quella di fare un elenco delle parole più
comuni contenenti uno iato e controllare se la parola da pronunciare sia
una di esse, e comportarsi di conseguenza.
Altra questione difficile da gestire è la distinzione tra i due suoni
della "*z **dolce*", come in "zaino", e della "*z **aspra*", come in
"lenza".
Esistono delle regole <
http://www.attori.com/dizione/Diz11.htm> (anche
se con molte eccezioni), ma realizzare l'analisi è un po' complesso.
Semplificando un po', ci si potrebbe limitare a utilizzare la "z dolce"
nelle parole in cui si trova "izz" seguito da "a", "o", "i", "ò", "are",
"ato", "ati", "atore", "atori", "ando", "azione", ecc. (es.
"organ*_izz_are*", "organ*_izz_azione*"), e usare la "z aspra" nelle
parole in cui si trova "azz" oppure "ozz" seguito dalle stesse desinenze
(es. "amm*_azz_ato*"). Per lo meno così si mettono a posto i verbi e i
loro derivati! Quello che complica la cosa sono le molte eccezioni...
Infatti tali regole non valgono sempre. Ad esempio "ammortizzare" e
"raddrizzare" usano due diverse pronunce. Un casino, insomma!
Poi c'è tutta la questione delle parole "straniere", della lettura dei
"numeri", delle "abbreviazioni", degli "acronimi", ecc..
Per ora ho solo espanso i numeri "1", "2", ecc. nel corrispettivo
scritto "uno", "due", ecc.; ma anche qui occorre aggiungere maggiore
logica per distinguere numeri con virgola, decine, centinaia, migliaia,
milioni, e miliardi, numeri di telefono, ecc...
Insomma, è un lavoraccio! Ancora ne passerà prima di arrivare ad avere
una sintesi "come si deve", ma non demordo, e un passettino alla volta,
forse ci arriverò! ;-)
--
|_ /-\
Other related posts: