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

Definition

Renderar angiven TextFragment matris i det angivna utdataformatet.

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)

Parametrar

fragment
TextFragment[]

En matris med TextFragment instanser som innehåller texten som ska återges till tal.

waveHeader
IntPtr

nativeint

En IntPtr som pekar på en struktur som innehåller ljudutdataformat.

site
ITtsEngineSite

En referens till ett ITtsEngineSite gränssnitt som skickas in av plattformsinfrastrukturen för att tillåta åtkomst till infrastrukturresurserna.

Exempel

Exemplet nedan är en del av en anpassad implementering av talsyntes som ärver från TtsEngineSsmloch använder användningen av TextFragment, SpeechEventInfo, FragmentStateoch TtsEventId

Genomförandet av Speak

  1. Tar emot en matris med TextFragment instanser och skapar en ny matris med TextFragment instanser som ska skickas till Speak metoden på en underliggande syntesmotor.

  2. TtsEngineAction Om uppräkningsvärdet som hittas från Action egenskapen på den FragmentState som returneras av egenskapen för State varje TextFragment instans är , är Speakimplementeringen

    • Översätter amerikanismen till britishismer i texten som ska talas.

    • EventInterest Om egenskapen på de ITtsEngineSite gränssnitt som tillhandahålls till implementeringen stöder WordBoundary händelsetypen, används en SpeechEventInfo instans för att skapa en händelse för att köra en synthesizer-förloppsmätare skapas.

  3. En talrenderingsmotor anropas sedan med den ändrade TextFragment matrisen.

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

}

Kommentarer

Den struktur som används som waveHeader och returneras av metoden bör vara kompatibel med den WAVEFORMATEX tillgängliga under SAPI.

struct Måste tillhandahålla funktioner som motsvarar:

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

Anteckningar till implementerare

Anpassad talsyntes implementerar användning TtsEngineSsml och Speak(TextFragment[], IntPtr, ITtsEngineSite) fungerar som filter eller mellanhänder mellan syntprogram som skapats med hjälp av plattformsinfrastrukturen via medlemmarna i System.Speech.Synthesis namnområdet och underliggande systemtalsyntesmotorer.

En Speak(TextFragment[], IntPtr, ITtsEngineSite) implementering:

  1. Sväller eller ändrar aspekter av inkommande TextFragment objekt

  2. Genererar alla nödvändiga händelser med hjälp av platsreferensen till en ITtsEngineSite instans

  3. Genererar det faktiska syntetiserade talet.

Talgenerering görs oftast genom att anropa Speak en av de talrenderingsmotorer som tillhandahålls av operativsystemet.

Om en av de tillgängliga talrenderingsmotorerna inte används måste ett objekt som ärver från TtsEngineSsml skapa en egen talrenderingsmotor.

Åtkomst till metoden som Speak hämtas med hjälp av registret och reflektionen. .

När du ärver från TtsEngineSsmlmåste du åsidosätta följande medlemmar: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)och Speak(TextFragment[], IntPtr, ITtsEngineSite).

Gäller för