SpeechEventInfo(Int16, Int16, Int32, IntPtr) 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建構適當的 SpeechEventInfo。
public:
SpeechEventInfo(short eventId, short parameterType, int param1, IntPtr param2);
public SpeechEventInfo (short eventId, short parameterType, int param1, IntPtr param2);
new System.Speech.Synthesis.TtsEngine.SpeechEventInfo : int16 * int16 * int * nativeint -> System.Speech.Synthesis.TtsEngine.SpeechEventInfo
Public Sub New (eventId As Short, parameterType As Short, param1 As Integer, param2 As IntPtr)
參數
- eventId
- Int16
TtsEventId的執行個體,指出SpeechEventInfo 物件要處理的語音平台事件的排序。
- parameterType
- Int16
EventParameterType的執行個體,指出param2
的System.IntPtr
參考的解譯方式,以及隱含地指出param1
的使用。
- param2
-
IntPtr
nativeint
參考物件的 System.IntPtr
執行個體。 當要建構的 SpeechEventInfo 的執行個體所要求的事件產生時,要傳遞至語音平台的整數值。
必須參考的型別是由 parameterType
值來明確定義的。 值 System.IntPtr.Zero
。
範例
下列範例是自訂語音合成衍生的一部分 TtsEngineSsml ,並使用 TextFragment 、 SpeechEventInfo 、 FragmentState 和 TtsEventId
的執行 Speak
接收實例的陣列 TextFragment ,並建立新的實例陣列, TextFragment 以傳遞至
Speak
基礎合成引擎上的方法。如果在 TtsEngineAction Action FragmentState State 每個實例之屬性所傳回的屬性中找到列舉值,則 TextFragment 會 Speak 執行
將要說出的文字中的 Americanism 轉譯為 Britishisms。
如果 EventInterest 提供給實作為的介面上的屬性 ITtsEngineSite 支援 WordBoundary 事件種類,則 SpeechEventInfo 會使用實例來建立事件,以建立可驅動合成器進度計量的事件。
接著會使用修改過的陣列來呼叫語音轉譯引擎 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);
}
備註
用於 parameterType
、 param1
、和其意義的允許值 param2
是由所要求的事件種類所指定,如所使用的成員所指定 TtsEventId eventId
。
如需、和之適當值的詳細資訊, parameterType
param1
param2
請參閱檔。 EventId
您可以透過的 EventInterest 合成器引擎網站執行上的屬性,取得可由語音平臺基礎結構處理的事件種類 ITtsEngineSite 。