Browse Source

Better document the other condition checks (isDiminished, etc.).

master
Reece H. Dunn 8 years ago
parent
commit
8338cdd250
3 changed files with 50 additions and 49 deletions
  1. 16
    16
      src/libespeak-ng/compiledata.c
  2. 16
    16
      src/libespeak-ng/synthdata.c
  3. 18
    17
      src/libespeak-ng/synthesize.h

+ 16
- 16
src/libespeak-ng/compiledata.c View File

@@ -120,22 +120,22 @@ static keywtab_t k_properties[] = {

{ "isVel", 0, CONDITION_IS_PLACE_OF_ARTICULATION | phPLACE_VELAR },

{ "isDiminished", 0, i_isDiminished },
{ "isUnstressed", 0, i_isUnstressed },
{ "isNotStressed", 0, i_isNotStressed },
{ "isStressed", 0, i_isStressed },
{ "isMaxStress", 0, i_isMaxStress },
{ "isPause2", 0, i_isBreak },
{ "isWordStart", 0, i_isWordStart },
{ "isWordEnd", 0, i_isWordEnd },
{ "isAfterStress", 0, i_isAfterStress },
{ "isNotVowel", 0, i_isNotVowel },
{ "isFinalVowel", 0, i_isFinalVowel },
{ "isVoiced", 0, i_isVoiced }, // voiced consonant, or vowel
{ "isFirstVowel", 0, i_isFirstVowel },
{ "isSecondVowel", 0, i_isSecondVowel },
{ "isTranslationGiven", 0, i_IsTranslationGiven }, // phoneme translation given in **_list or as [[...]]
{ "isDiminished", 0, CONDITION_IS_OTHER | isDiminished },
{ "isUnstressed", 0, CONDITION_IS_OTHER | isUnstressed },
{ "isNotStressed", 0, CONDITION_IS_OTHER | isNotStressed },
{ "isStressed", 0, CONDITION_IS_OTHER | isStressed },
{ "isMaxStress", 0, CONDITION_IS_OTHER | isMaxStress },
{ "isPause2", 0, CONDITION_IS_OTHER | isBreak },
{ "isWordStart", 0, CONDITION_IS_OTHER | isWordStart },
{ "isWordEnd", 0, CONDITION_IS_OTHER | isWordEnd },
{ "isAfterStress", 0, CONDITION_IS_OTHER | isAfterStress },
{ "isNotVowel", 0, CONDITION_IS_OTHER | isNotVowel },
{ "isFinalVowel", 0, CONDITION_IS_OTHER | isFinalVowel },
{ "isVoiced", 0, CONDITION_IS_OTHER | isVoiced },
{ "isFirstVowel", 0, CONDITION_IS_OTHER | isFirstVowel },
{ "isSecondVowel", 0, CONDITION_IS_OTHER | isSecondVowel },
{ "isTranslationGiven", 0, CONDITION_IS_OTHER | isTranslationGiven },

{ NULL, 0, 0 }
};

+ 16
- 16
src/libespeak-ng/synthdata.c View File

@@ -636,22 +636,22 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
return ((ph->phflags >> 16) & 0xf) == data;
case CONDITION_IS_PHFLAG_SET:
return (ph->phflags & (1 << data)) != 0;
case 0x80:
case CONDITION_IS_OTHER:
switch (data)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case isDiminished:
case isUnstressed:
case isNotStressed:
case isStressed:
case isMaxStress:
return StressCondition(tr, plist, data, 0);
case 5: // isBreak, Either pause phoneme, or (stop/vstop/vfric not followed by vowel or (liquid in same word))
case isBreak:
return (ph->type == phPAUSE) || (plist_this->synthflags & SFLAG_NEXT_PAUSE);
case 6: // isWordStart
case isWordStart:
return plist->sourceix != 0;
case 8: // isWordEnd
case isWordEnd:
return plist[1].sourceix || (plist[1].ph->type == phPAUSE);
case 9: // isAfterStress
case isAfterStress:
if (plist->sourceix != 0)
return false;
do {
@@ -661,9 +661,9 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,

} while (plist->sourceix == 0);
break;
case 10: // isNotVowel
case isNotVowel:
return ph->type != phVOWEL;
case 11: // isFinalVowel
case isFinalVowel:
for (;;) {
plist++;
if (plist->sourceix != 0)
@@ -671,13 +671,13 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
if (plist->ph->type == phVOWEL)
return false;
}
case 12: // isVoiced
case isVoiced:
return (ph->type == phVOWEL) || (ph->type == phLIQUID) || (ph->phflags & phVOICED);
case 13: // isFirstVowel
case isFirstVowel:
return CountVowelPosition(plist) == 1;
case 14: // isSecondVowel
case isSecondVowel:
return CountVowelPosition(plist) == 2;
case 0x10: // isTranslationGiven
case isTranslationGiven:
return (plist->synthflags & SFLAG_DICTIONARY) != 0;
}
break;

+ 18
- 17
src/libespeak-ng/synthesize.h View File

@@ -312,26 +312,27 @@ typedef struct {
#define i_WAVADD 0xf000

// conditions
#define i_isDiminished 0x80
#define i_isUnstressed 0x81
#define i_isNotStressed 0x82
#define i_isStressed 0x83
#define i_isMaxStress 0x84

#define i_isBreak 0x85
#define i_isWordStart 0x86
#define i_isWordEnd 0x88
#define i_isAfterStress 0x89
#define i_isNotVowel 0x8a
#define i_isFinalVowel 0x8b
#define i_isVoiced 0x8c
#define i_isFirstVowel 0x8d
#define i_isSecondVowel 0x8e
#define i_IsTranslationGiven 0x90

#define CONDITION_IS_PHONEME_TYPE 0x00
#define CONDITION_IS_PLACE_OF_ARTICULATION 0x20
#define CONDITION_IS_PHFLAG_SET 0x40
#define CONDITION_IS_OTHER 0x80

// other conditions
#define isDiminished 0
#define isUnstressed 1
#define isNotStressed 2
#define isStressed 3
#define isMaxStress 4
#define isBreak 5 // pause phoneme or (stop/vstop/vfric not followed by vowel or (liquid in same word))
#define isWordStart 6
#define isWordEnd 8
#define isAfterStress 9
#define isNotVowel 10
#define isFinalVowel 11
#define isVoiced 12 // voiced consonant, or vowel
#define isFirstVowel 13
#define isSecondVowel 14
#define isTranslationGiven 16 // phoneme translation given in **_list or as [[...]]

#define i_StressLevel 0x800


Loading…
Cancel
Save