Freigeben über


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

Definition

Rendert das angegebene 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 Text enthalten, der in die Sprache gerendert werden soll.

waveHeader
IntPtr

nativeint

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

site
ITtsEngineSite

Ein Verweis auf eine ITtsEngineSite Schnittstelle, die von der Plattforminfrastruktur übergeben wird, um den Zugriff auf die Infrastrukturressourcen zu ermöglichen.

Beispiele

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

Die Umsetzung der Speak

  1. Empfängt ein Array von Instanzen und erstellt ein neues Array von TextFragmentTextFragment Instanzen, das an die Speak Methode für ein zugrunde liegendes Synthesemodul übergeben werden soll.

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

    • Übersetzt den Amerikanischen Inserismus in den zu sprechenden Text.

    • Wenn die Eigenschaft für die EventInterestITtsEngineSite Schnittstellen, die der Implementierung bereitgestellt werden, den WordBoundary Ereignistyp unterstützen, wird eine SpeechEventInfo Instanz verwendet, um ein Ereignis zu erstellen, um eine Synthesizer-Statusanzeige zu steuern.

  3. Anschließend wird ein Sprachrenderingmodul mit dem geänderten TextFragment Array 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 von der Methode verwendete waveHeader und zurückgegebene Struktur sollte mit der WAVEFORMATEX verfügbaren unter SAPI kompatibel sein.

Die struct Funktionalität muss für Folgendes bereitgestellt werden:

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

Benutzerdefinierte Sprachsynthesizer implementiert die Verwendung TtsEngineSsml und Speak(TextFragment[], IntPtr, ITtsEngineSite) Arbeit als Filter oder Zwischenvermittler zwischen Synthesizeranwendungen, die mithilfe der Plattforminfrastruktur über die Member des System.Speech.Synthesis Namespace und zugrunde liegende Systemsprachsynthesemodule erstellt wurden.

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

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

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

  3. Generiert die eigentliche synthetisierte Sprache.

Die Generierung von Spracherkennung erfolgt in der Regel durch Aufrufen Speak eines der vom Betriebssystem bereitgestellten Sprachwiedergabemodule.

Wenn eines der verfügbaren Sprachrenderingmodule nicht verwendet wird, muss ein objekt, das von TtsEngineSsml ihm erbt, ein eigenes Sprachrenderingmodul erstellen.

Zugriff auf die Methode, die Speak mit der Registrierung und Reflexion abgerufen wurde. .

Wenn Sie von TtsEngineSsmlerben, müssen Sie die folgenden Member außer Kraft setzen: TtsEngineSsml(String), , AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), , GetOutputFormat(SpeakOutputFormat, IntPtr)und Speak(TextFragment[], IntPtr, ITtsEngineSite).

Gilt für: