mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-04 22:38:33 +00:00
[1.39.07]
Fix SSML <prosody rate> to allow the maximum rate of 390 wpm. Fixes to the generation of the dict_phonemes report. Lang=en-n adjust vowel sounds. Compile phonemes: automatically assume vowel-break marker in second keyframe of a vowel file if none is set. Set letter group 'A' to "vowel letters only" for Indic alphabets. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@195 d46cf337-b52f-0410-862d-fd96e6ae7743
This commit is contained in:
+45
-5
@@ -381,6 +381,8 @@ void FindPhonemesUsed(void)
|
||||
char *next;
|
||||
unsigned char c;
|
||||
int count = 0;
|
||||
int ignore;
|
||||
char phonetic[N_WORD_PHONEMES];
|
||||
|
||||
// look through all the phoneme strings in the **_rules data
|
||||
// and mark these phoneme codes as used.
|
||||
@@ -419,21 +421,37 @@ void FindPhonemesUsed(void)
|
||||
p += (strlen(p)+1);
|
||||
}
|
||||
|
||||
while((((c = *p) != RULE_PHONEMES)) && (c != 0)) p++;
|
||||
while((c = *p) != 0)
|
||||
{
|
||||
if(c == RULE_CONDITION)
|
||||
p++; // next byte is the condition number, which may be 3 (= RULE_PHONEMES)
|
||||
if(c == RULE_PHONEMES)
|
||||
break;
|
||||
p++;
|
||||
}
|
||||
|
||||
|
||||
count++;
|
||||
if(c == RULE_PHONEMES)
|
||||
{
|
||||
ignore = 0;
|
||||
start = p;
|
||||
p++;
|
||||
while(*p != 0)
|
||||
while((c = *p) != 0)
|
||||
{
|
||||
phoneme_tab_flags[*p & 0xff] |= 2;
|
||||
if(c == phonSWITCH)
|
||||
ignore = 1;
|
||||
|
||||
if(ignore == 0)
|
||||
phoneme_tab_flags[c] |= 2;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
// NOTE, we should recognise langopts.textmode and ignore the *_list file (lang=zh)
|
||||
|
||||
for(hash=0; hash<N_HASH_DICT; hash++)
|
||||
{
|
||||
p = translator->dict_hashtab[hash];
|
||||
@@ -446,11 +464,33 @@ void FindPhonemesUsed(void)
|
||||
if((p[1] & 0x80) == 0)
|
||||
{
|
||||
p += ((p[1] & 0x3f) + 2);
|
||||
while(*p != 0)
|
||||
strcpy(phonetic,p);
|
||||
p += strlen(phonetic) +1;
|
||||
|
||||
// examine flags
|
||||
ignore = 0;
|
||||
while(p < next)
|
||||
{
|
||||
phoneme_tab_flags[*p & 0xff] |= 2;
|
||||
if(*p == BITNUM_FLAG_TEXTMODE)
|
||||
{
|
||||
ignore = 1;
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
if(ignore == 0)
|
||||
{
|
||||
p = phonetic;
|
||||
while((c = *p) != 0)
|
||||
{
|
||||
if(c == phonSWITCH)
|
||||
break;
|
||||
|
||||
phoneme_tab_flags[c] |= 2;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
p = next;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user