TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) 메서드

정의

명시된 출력 양식에서 명시된TextFragment 배열을 제공한다.

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)

매개 변수

fragment
TextFragment[]

음성에 렌더링할 텍스트를 포함하는 TextFragment 인스턴스의 배열

waveHeader
IntPtr

nativeint

오디오 출력 형식을 포함하는 구조체를 가리키는 IntPtr

site
ITtsEngineSite

인프라 리소스에 대한 액세스를 허용하기 위해 플랫폼 인프라에서 전달하는 ITtsEngineSite 인터페이스에 대한 참조입니다.

예제

아래 예제에서 상속 하는 사용자 지정 음성 합성 구현의 일부인 TtsEngineSsml, 및을 사용 하 여 TextFragment, SpeechEventInfo, FragmentState, 및 TtsEventId

구현 Speak

  1. 배열을 받습니다 TextFragment 인스턴스 및 새 배열을 만듭니다 TextFragment 전달 되는 인스턴스는 Speak 기본 합성 엔진에서 메서드.

  2. 경우는 TtsEngineAction 에서 열거형 값에서 찾을 Action 속성에는 FragmentState 반환한를 State 의 각 속성 TextFragment 인스턴스가 Speak, 구현

    • 읽을 텍스트의 Americanism Britishisms 변환 합니다.

    • 경우는 EventInterest 속성에는 ITtsEngineSite 구현 지원 제공 하는 인터페이스를 WordBoundary 이벤트 유형는 SpeechEventInfo 인스턴스 이벤트 신시사이저 진행률 표시기가 만든 드라이브를 만드는 데 사용 됩니다.

  3. 이라고 하는 음성 렌더링 엔진이 수정 된 TextFragment 배열입니다.

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

}  

설명

로 사용 되는 구조 waveHeader 반환한 메서드에 호환 없어야 합니다 WAVEFORMATEX SAPI에서 사용할 수 있습니다.

struct 에 해당 하는 기능을 제공 해야 합니다.

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

구현자 참고

사용 하 여 사용자 지정 음성 신시사이저 구현 TtsEngineSsml 하 고 Speak(TextFragment[], IntPtr, ITtsEngineSite) 필터나 신시사이저 애플리케이션의 멤버를 통해 플랫폼 인프라를 사용 하 여 생성 간에 중간으로 회사는 System.Speech.Synthesis 네임 스페이스 및 기본 시스템 음성 합성 엔진입니다.

Speak(TextFragment[], IntPtr, ITtsEngineSite) 구현 합니다.

  1. 트랩 들어오는의 측면을 수정 하거나 TextFragment 개체
  2. 에 대 한 사이트 참조를 사용 하 여 필요한 이벤트를 생성 한 ITtsEngineSite 인스턴스
  3. 실제 합성 된 음성을 생성합니다.

음성 생성 호출 하 여 가장 일반적으로 이루어집니다 말하기 음성 운영 체제에서 제공 하는 엔진을 렌더링 중 하나입니다.

사용할 음성 렌더링 엔진 중 하나를 사용 하지 않으면 개체에서 상속 하는 경우 TtsEngineSsml 자체 음성 렌더링 엔진을 만들어야 합니다.

에 대 한 액세스는 말하기 레지스트리 및 리플렉션에는 가져온를 사용 하 여 메서드. .

상속 하는 경우 TtsEngineSsml, 다음 멤버를 재정의 해야 합니다: TtsEngineSsml(String)AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite)GetOutputFormat(SpeakOutputFormat, IntPtr), 및 Speak(TextFragment[], IntPtr, ITtsEngineSite)합니다.

적용 대상