Partager via


TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Méthode

Définition

Affiche le tableau TextFragment spécifié au format de sortie spécifié.

public:
 abstract void Speak(cli::array <System::Speech::Synthesis::TtsEngine::TextFragment ^> ^ fragment, IntPtr waveHeader, System::Speech::Synthesis::TtsEngine::ITtsEngineSite ^ site);
public abstract void Speak (System.Speech.Synthesis.TtsEngine.TextFragment[] fragment, IntPtr waveHeader, System.Speech.Synthesis.TtsEngine.ITtsEngineSite site);
abstract member Speak : System.Speech.Synthesis.TtsEngine.TextFragment[] * nativeint * System.Speech.Synthesis.TtsEngine.ITtsEngineSite -> unit
Public MustOverride Sub Speak (fragment As TextFragment(), waveHeader As IntPtr, site As ITtsEngineSite)

Paramètres

fragment
TextFragment[]

Tableau d'instances TextFragment contenant le texte devant être restitué par la reconnaissance vocale.

waveHeader
IntPtr

nativeint

IntPtr qui pointe vers une structure contenant le format de sortie audio.

site
ITtsEngineSite

Référence à une interface ITtsEngineSite passée par l'infrastructure de la plateforme pour autoriser l'accès aux ressources de l'infrastructure.

Exemples

L’exemple ci-dessous fait partie d’une implémentation de synthèse vocale personnalisée qui hérite de TtsEngineSsml, et utilise , TextFragmentSpeechEventInfoFragmentState, etTtsEventId

L’implémentation de Speak

  1. Reçoit un tableau d’instances et crée un tableau d’instances TextFragment à passer à la Speak méthode sur un moteur de TextFragment synthèse sous-jacent.

  2. Si la TtsEngineAction valeur d’énumération par trouvée à partir de la Action propriété sur le FragmentState retourné par la State propriété de chaque TextFragment instance est Speak, l’implémentation

    • Traduit l’américanisme en britishismes dans le texte à prononcer.

    • Si la EventInterest propriété sur les interfaces fournies à l’implémentation ITtsEngineSite prend en charge le WordBoundary type d’événement, une SpeechEventInfo instance est utilisée pour créer un événement afin de générer un compteur de progression du synthétiseur.

  3. Un moteur de rendu vocal est ensuite appelé avec le tableau modifié TextFragment .

private const int WordBoundaryFlag = 1 << (int)TtsEventId.WordBoundary;  
private readonly char[] spaces = new char[] { ' ', '\t', '\r', '\n' };  
internal struct UsVsUk  
{  
  internal string UK;  
  internal string US;  
}  

override public void Speak (TextFragment [] frags, IntPtr wfx, ITtsEngineSite site)  
{  
  TextFragment [] newFrags=new TextFragment[frags.Length];  

  for (int i=0;i<frags.Length;i++){  
    newFrags[i].State=frags[i].State;  
    //truncate  
    newFrags[i].TextToSpeak = frags[i].TextToSpeak.Substring(frags[i].TextOffset,  
                               frags[i].TextLength);  
    newFrags[i].TextLength = newFrags[i].TextToSpeak.Length;  
    newFrags[i].TextOffset = 0;  
    if (newFrags[i].State.Action == TtsEngineAction.Speak) {  
      //Us to UK conversion  
      foreach (UsVsUk term in TransList) {  
      newFrags[i].TextToSpeak.Replace(term.US, term.UK);  
      }  
      //Generate progress meter events if supported  
      if ((site.EventInterest & WordBoundaryFlag) != 0) {  
      string[] subs = newFrags[i].TextToSpeak.Split(spaces);  

      foreach (string s in subs) {  
        int offset = newFrags[i].TextOffset;  
        SpeechEventInfo spEvent = new SpeechEventInfo((Int16)TtsEventId.WordBoundary,   
                (Int16)EventParameterType.Undefined,   
                 s.Length, new IntPtr(offset));  
        offset += s.Length;  
        if (s.Trim().Length > 0) {  
          SpeechEventInfo[] events = new SpeechEventInfo[1];  
          events[0] = spEvent;  
          site.AddEvents(events, 1);  
        }  
      }  
      }  
    }  
  }  
    _baseSynthesize.Speak(newFrags, wfx, site);  

}  

Remarques

La structure utilisée en tant que waveHeader et retournée par la méthode doit être compatible avec la WAVEFORMATEX structure disponible sous SAPI.

struct doit fournir des fonctionnalités équivalentes à :

internal struct WaveFormat  
{  
    public Int16 FormatTag;  
    public Int16 Channels;  
    public int SamplesPerSec;  
    public int AvgBytesPerSec;  
    public Int16 BlockAlign;  
    public Int16 BitsPerSample;  
    public Int16 Size;  
}  

Notes pour les responsables de l’implémentation

Le synthétiseur vocal personnalisé implémente l’utilisation TtsEngineSsml et Speak(TextFragment[], IntPtr, ITtsEngineSite) fonctionne en tant que filtres ou intermédiaires entre les applications de synthétiseur construites à l’aide de l’infrastructure de la plateforme via les membres de l’espace System.Speech.Synthesis de noms et les moteurs de synthèse vocale système sous-jacents.

Implémentation Speak(TextFragment[], IntPtr, ITtsEngineSite) :

  1. Intercepte ou modifie des aspects des objets entrants TextFragment

  2. Génère tous les événements nécessaires à l’aide de la référence de site à une ITtsEngineSite instance

  3. Génère la parole synthétisée réelle.

La génération de la voix s’effectue généralement en appelant Speak sur l’un des moteurs de rendu vocal fournis par le système d’exploitation.

Si l’un des moteurs de rendu vocal disponibles n’est pas utilisé, un objet qui hérite de doit créer son propre moteur de TtsEngineSsml rendu vocal.

Accès à la méthode obtenue à l’aide Speak du registre et de la réflexion. .

Lorsque vous héritez de TtsEngineSsml, vous devez substituer les membres suivants : TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr), et Speak(TextFragment[], IntPtr, ITtsEngineSite).

S’applique à