TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Yöntem

Tanım

Belirtilen TextFragment diziyi belirtilen çıkış biçiminde işler.

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)

Parametreler

fragment
TextFragment[]

Konuşmada TextFragment işlenecek metni içeren örnek dizisi.

waveHeader
IntPtr

nativeint

Ses IntPtr çıkış biçimini içeren bir yapıya işaret ediyor.

site
ITtsEngineSite

Altyapı kaynaklarına erişim ITtsEngineSite izni vermek için platform altyapısı tarafından geçirilen arabirim başvurusu.

Örnekler

Aşağıdaki örnek, 'den devralınan ve , , ve kullanımını kullanan TtsEngineSsml özel konuşma sentezi TextFragment uygulamasının SpeechEventInfo bir FragmentState parçasıdır TtsEventId

uygulamasının Speak

  1. Bir örnek dizisi alır ve temel alınan sentez altyapısında yöntemine TextFragment TextFragment geçirilen Speak yeni bir örnek dizisi oluşturur.

  2. her örneğinin özelliği tarafından döndürülen özelliğinden bulunan numaralama değeri TtsEngineAction Action FragmentState State TextFragment Speak ise, uygulama

    • Amerikanlığı, konuşulan metinde İngilizliklere çevirir.

    • Uygulamaya sağlanan arabirimlerde özelliği olay türünü destekliyorsa, bir sentezleyici ilerleme ölçümü oluşturmak için bir olay oluşturmak EventInterest ITtsEngineSite için bir örnek WordBoundary SpeechEventInfo kullanılır.

  3. Daha sonra değiştirilen dizi ile bir konuşma işleme altyapısı TextFragment çağrılır.

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

}  

Açıklamalar

olarak kullanılan ve yöntemi waveHeader tarafından döndürülen yapı, SAPI altında kullanılabilir WAVEFORMATEX ile uyumlu olmalıdır.

, struct aşağıdakilere eşdeğer işlevsellik sağlay şunları sağlayalı:

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

Uygulayanlara Notlar

Özel konuşma sentezleyici, ad alanı ve temel alınan sistem konuşma sentezi altyapılarının üyeleri aracılığıyla platform altyapısı kullanılarak oluşturulmuş olan sentezleyici uygulamaları arasında filtre veya aracı olarak kullanma TtsEngineSsml Speak(TextFragment[], IntPtr, ITtsEngineSite) ve çalışma System.Speech.Synthesis gerçekleştirmektedir.

Bir Speak(TextFragment[], IntPtr, ITtsEngineSite) uygulama:

  1. Gelen nesnelerin yönlerini yakalama veya TextFragment değiştirme
  2. Bir örneğin site başvurularını kullanarak gerekli tüm olayları ITtsEngineSite üretir
  3. Gerçek sentezlenmiş konuşmayı üretir.

Konuşma oluşturma işlemi genellikle işletim sistemi tarafından sağlanan konuşma işleme altyapılarından biri üzerinde Konuşma'nın çağrılarak yapılır.

Kullanılabilir konuşma işleme altyapılarından biri kullanılmazsa, 'den devralınan bir nesnenin kendi konuşma TtsEngineSsml işleme altyapısını oluşturması gerekir.

Kayıt defteri ve yansıma kullanılarak elde edilen üzerinde Konuşma yöntemine erişim. .

'den TtsEngineSsml devralınca, şu üyeleri geçersiz kılmalı: TtsEngineSsml(String) , , , ve AddLexicon(Uri, String, ITtsEngineSite) RemoveLexicon(Uri, ITtsEngineSite) GetOutputFormat(SpeakOutputFormat, IntPtr) Speak(TextFragment[], IntPtr, ITtsEngineSite) .

Şunlara uygulanır