Freigeben über


TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Methode

Definition

Rendert angegebenes TextFragment-Array im angegebenen Ausgabeformat.

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)

Parameter

fragment
TextFragment[]

Ein Array von TextFragment Instanzen, die den in Sprache umzuwandelnden Text enthalten.

waveHeader
IntPtr

nativeint

Ein IntPtr, das auf eine Struktur zeigt, die Audioausgabeformat enthält.

site
ITtsEngineSite

Ein Verweis auf eine ITtsEngineSite-Schnittstelle, die durch die Plattforminfrastruktur übergeben wird, um Zugriff auf Infrastrukturressourcenn zu ermöglichen.

Beispiele

Das folgende Beispiel ist Teil einer benutzerdefinierten Sprachsyntheseimplementierung, die von TtsEngineSsmlerbt und die Verwendung von TextFragment, SpeechEventInfo, FragmentStateund verwendet. TtsEventId

Die Implementierung von Speak

  1. Empfängt ein Array von TextFragment Instanzen und erstellt ein neues Array von TextFragment Instanzen, die an die Speak -Methode in einer zugrunde liegenden Synthese-Engine übergeben werden sollen.

  2. Wenn der TtsEngineAction Enumerationswert von, der von der Action -Eigenschaft gefunden wird, für die FragmentState von der State -Eigenschaft der einzelnen TextFragment Instanzen zurückgegeben wird, lautet Speakdie -Implementierung.

    • Übersetzt Amerikanismus in den zu sprechenden Text in britishisms.

    • Wenn die EventInterest -Eigenschaft auf den Schnittstellen, die ITtsEngineSite für die Implementierung bereitgestellt werden, den WordBoundary Ereignistyp unterstützt, wird eine SpeechEventInfo -Instanz verwendet, um ein Ereignis zu erstellen, um eine Synthesizer-Fortschrittsanzeige zu steuern.

  3. Anschließend wird mit dem geänderten TextFragment Array eine Sprachrendering-Engine aufgerufen.

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

}  

Hinweise

Die als verwendete waveHeader und von der -Methode zurückgegebene Struktur sollte mit der unter SAPI verfügbaren WAVEFORMATEX kompatibel sein.

Die struct muss Funktionen bereitstellen, die folgendes äquivalent sind:

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

Hinweise für Ausführende

Der benutzerdefinierte Sprachsynthesizer TtsEngineSsml implementiert und Speak(TextFragment[], IntPtr, ITtsEngineSite) arbeitet als Filter oder Vermittler zwischen Synthesizeranwendungen, die mithilfe der Plattforminfrastruktur über die Member des Namespaces und die System.Speech.Synthesis zugrunde liegenden Systemsprachsynthese-Engines erstellt wurden.

Eine Speak(TextFragment[], IntPtr, ITtsEngineSite) Implementierung:

  1. Abfangen oder Ändern von Aspekten der eingehenden TextFragment Objekte

  2. Generiert alle erforderlichen Ereignisse mithilfe des Websiteverweis auf eine ITtsEngineSite -Instanz.

  3. Generiert die tatsächliche synthetisierte Sprache.

Die Generierung von Sprache erfolgt in der Regel durch Aufrufen Speak einer der sprachrendering-Engines, die vom Betriebssystem bereitgestellt werden.

Wenn keine der verfügbaren Sprachrendering-Engines verwendet wird, muss ein Objekt, das von TtsEngineSsml erbt, eine eigene Sprachrendering-Engine erstellen.

Zugriff auf die Speak -Methode bei , die mithilfe der Registrierung und Reflektion abgerufen wurde. .

Wenn Sie von erben TtsEngineSsml, müssen Sie die folgenden Member überschreiben: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)und Speak(TextFragment[], IntPtr, ITtsEngineSite).

Gilt für: