TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した出力形式で、指定した 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 インスタンスの配列。
- site
- ITtsEngineSite
インフラストラクチャのリソースにアクセスできるようにするために、プラットフォームのインフラストラクチャによって渡される ITtsEngineSite インターフェイスへの参照。
例
次の例は、 をTtsEngineSsml継承し、および の使用を使用するカスタム音声合成実装のTextFragmentSpeechEventInfoFragmentState一部です。TtsEventId
の実装 Speak
インスタンスの TextFragment 配列を受け取り、基になる合成エンジンの TextFragment メソッドに渡されるインスタンスの
Speak
新しい配列を作成します。各インスタンスの TtsEngineAction プロパティによって返される State の プロパティFragmentStateから Action が見つかった列挙値が の場合、実装は ですSpeak。TextFragment
話されるテキストの中でアメリカ主義を英国主義に翻訳します。
実装に 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);
}
注釈
メソッドによって として waveHeader
使用され、返される構造体は、SAPI で使用可能な と WAVEFORMATEX
互換性がある必要があります。
には 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;
}
注意 (実装者)
カスタム音声シンセサイザーは、 名前空間のメンバーとSpeak(TextFragment[], IntPtr, ITtsEngineSite)基になるシステム音声合成エンジンのメンバーを介してプラットフォーム インフラストラクチャを使用して構築されたシンセサイザー アプリケーションの間でSystem.Speech.Synthesis、 を使用TtsEngineSsmlして を実装し、フィルターまたは中間として機能します。
実装 Speak(TextFragment[], IntPtr, ITtsEngineSite) :
受信 TextFragment オブジェクトの側面をトラップまたは変更する
インスタンスへのサイト参照を使用して、必要なイベントを ITtsEngineSite 生成します
実際に合成された音声を生成します。
ほとんどの場合、音声の生成は、オペレーティング システムによって提供される音声レンダリング エンジンの 1 つで を呼び出 Speak
すことによって行われます。
使用可能な音声レンダリング エンジンの 1 つを使用しない場合、 から TtsEngineSsml 継承するオブジェクトは、独自の音声レンダリング エンジンを作成する必要があります。
レジストリとリフレクションを Speak
使用して取得された の メソッドへのアクセス。 .
からTtsEngineSsml継承する場合は、、、GetOutputFormat(SpeakOutputFormat, IntPtr)AddLexicon(Uri, String, ITtsEngineSite)RemoveLexicon(Uri, ITtsEngineSite)および の各メンバーTtsEngineSsml(String)をオーバーライドするSpeak(TextFragment[], IntPtr, ITtsEngineSite)必要があります。
適用対象
.NET