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

Definice

Vykreslí zadané TextFragment pole v zadaném výstupním formátu.

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)

Parametry

fragment
TextFragment[]

Pole TextFragment instancí obsahující text, který má být vykreslen do řeči.

waveHeader
IntPtr

nativeint

Odkazující IntPtr na strukturu obsahující formát zvukového výstupu.

site
ITtsEngineSite

Odkaz na ITtsEngineSite rozhraní předané infrastrukturou platformy, které umožňuje přístup k prostředkům infrastruktury.

Příklady

Následující příklad je součástí vlastní implementace syntézy řeči, která dědí z TtsEngineSsmla používá , a .TextFragmentSpeechEventInfoFragmentStateTtsEventId

Provádění Speak

  1. Obdrží pole TextFragment instancí a vytvoří nové pole TextFragment instancí, které se předají Speak metodě v podkladovém modulu syntézy.

  2. Pokud je hodnota výčtu TtsEngineActionAction nalezená z vlastnosti FragmentState vrácené State vlastností každé TextFragment instance Speak, implementace

    • V mluveném textu překládá americanismus na britštinu.

    • EventInterest Pokud vlastnost v ITtsEngineSite rozhraních poskytovaných pro implementaci podporuje WordBoundary typ události, SpeechEventInfo instance se použije k vytvoření události pro řízení měřiče průběhu syntetizátoru.

  3. Modul pro vykreslování řeči se pak zavolá s upraveným TextFragment polem.

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

}  

Poznámky

Struktura používaná jako waveHeader a vrácená metodou by měla být kompatibilní s strukturou dostupnou WAVEFORMATEX v rámci SAPI.

Musí struct poskytovat funkce ekvivalentní:

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

Poznámky pro implementátory

Vlastní syntetizátor řeči implementuje použití TtsEngineSsml a Speak(TextFragment[], IntPtr, ITtsEngineSite) práci jako filtry nebo prostředníky mezi syntetizátorovými aplikacemi vytvořenými pomocí infrastruktury platformy prostřednictvím členů oboru názvů a modulů syntézy řeči základního System.Speech.Synthesis systému.

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

  1. Umožňuje soutisky nebo změnit aspekty příchozích TextFragment objektů.

  2. Vygeneruje všechny nezbytné události pomocí odkazu na lokalitu na ITtsEngineSite instanci.

  3. Generuje skutečnou syntetizovanou řeč.

Generování řeči se nejčastěji provádí voláním Speak jednoho z modulů pro vykreslování řeči poskytovaných operačním systémem.

Pokud některý z dostupných modulů pro vykreslování řeči není použit, musí objekt zděděný z TtsEngineSsml vytvořit vlastní modul pro vykreslování řeči.

Přístup k Speak metodě získané pomocí registru a reflexe. .

Když dědíte z TtsEngineSsml, musíte přepsat následující členy: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)a Speak(TextFragment[], IntPtr, ITtsEngineSite).

Platí pro