Udostępnij za pośrednictwem


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

Definicja

Renderuje określoną TextFragment tablicę w określonym formacie danych wyjściowych.

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[]

Tablica wystąpień TextFragment zawierających tekst do renderowania w mowie.

waveHeader
IntPtr

nativeint

Wskazuje IntPtr strukturę zawierającą format danych wyjściowych dźwięku.

site
ITtsEngineSite

Odwołanie do interfejsu przekazywanego ITtsEngineSite przez infrastrukturę platformy w celu umożliwienia dostępu do zasobów infrastruktury.

Przykłady

Poniższy przykład jest częścią niestandardowej implementacji syntezy mowy dziedziczonej z TtsEngineSsml, i przy użyciu metody TextFragment, SpeechEventInfo, FragmentStatei TtsEventId

Implementacja Speak

  1. Odbiera tablicę TextFragment wystąpień i tworzy nową tablicę TextFragment wystąpień, która ma zostać przekazana do metody w Speak podstawowym aucie syntezy.

  2. TtsEngineAction Jeśli wartość wyliczenia znaleziona z Action właściwości FragmentState zwróconej przez State właściwość każdego TextFragment wystąpienia to Speak, implementacja

    • Tłumaczy amerykanizm na Brytyjczyków w tekście, który ma być wypowiadany.

    • EventInterest Jeśli właściwość w ITtsEngineSite interfejsach dostarczonych do implementacji obsługuje WordBoundary typ zdarzenia, SpeechEventInfo wystąpienie jest używane do utworzenia zdarzenia w celu napędzania syntetyzatora miernika postępu jest tworzony.

  3. Aparat renderowania mowy jest następnie wywoływany TextFragment za pomocą zmodyfikowanej tablicy.

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

}  

Uwagi

Struktura używana jako waveHeader i zwracana przez metodę powinna być zgodna z dostępnym w WAVEFORMATEX obszarze SAPI.

Element struct musi zapewniać funkcjonalność równoważną:

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

Uwagi dotyczące implementowania

Syntetyzator mowy niestandardowej implementuje używanie TtsEngineSsml i Speak(TextFragment[], IntPtr, ITtsEngineSite) pracę jako filtry lub pośredników między aplikacjami syntezatora skonstruowanymi przy użyciu infrastruktury platformy za pośrednictwem elementów członkowskich System.Speech.Synthesis przestrzeni nazw i podstawowych aparatów syntezy mowy systemu.

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

  1. Pułapki lub modyfikowanie aspektów obiektów przychodzących TextFragment

  2. Generuje wszelkie niezbędne zdarzenia przy użyciu odwołania lokacji do ITtsEngineSite wystąpienia

  3. Generuje rzeczywistą syntetyzowaną mowę.

Generowanie mowy jest najczęściej wykonywane przez wywołanie Speak jednego z aparatów renderowania mowy dostarczonych przez system operacyjny.

Jeśli jeden z dostępnych aparatów renderowania mowy nie jest używany, obiekt dziedziczony z TtsEngineSsml musi utworzyć własny aparat renderowania mowy.

Dostęp do metody uzyskanej Speak przy użyciu rejestru i odbicia. .

Po dziedziczeniu z TtsEngineSsmlprogramu należy zastąpić następujące elementy członkowskie: TtsEngineSsml(String), , AddLexicon(Uri, String, ITtsEngineSite)RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)i Speak(TextFragment[], IntPtr, ITtsEngineSite).

Dotyczy