TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vykreslí zadanou TextFragment matici v zadaném výstupním formátu.
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)
Parametry
- fragment
- TextFragment[]
Pole instancí obsahujících TextFragment text, který se má vykreslit do řeči.
- site
- ITtsEngineSite
Odkaz na ITtsEngineSite rozhraní předávané infrastrukturou platformy umožňující přístup k prostředkům infrastruktury.
Příklady
Následující příklad je součástí vlastní implementace syntézy řeči zděděné z TtsEngineSsml, a použití použití TextFragment, SpeechEventInfo, FragmentStatea , a TtsEventId
Provádění Speak
Přijme pole TextFragment instancí a vytvoří novou matici TextFragment instancí, která se předá
Speakmetodě v podkladovém syntetizačním modulu.Pokud je hodnota výčtu TtsEngineAction nalezena z Action vlastnosti FragmentState vrácené State vlastností každé TextFragment instance je Speakimplementace
Překládá americanismus do britštiny v textu, který se má vyslovovat.
EventInterest Pokud vlastnost v ITtsEngineSite rozhraní poskytovaných pro implementaci podporuje WordBoundary typ události, SpeechEventInfo instance se použije k vytvoření události pro řízení syntetizátoru průběhu měřiče.
Potom se zavolá modul pro vykreslování řeči s upraveným TextFragment polem.
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);
}
Poznámky
Struktura používaná waveHeader metodou a vrácená metodou by měla být kompatibilní s dostupnými WAVEFORMATEX v rámci SAPI.
Musí struct poskytovat funkce, které odpovídají:
internal struct WaveFormat
{
public Int16 FormatTag;
public Int16 Channels;
public int SamplesPerSec;
public int AvgBytesPerSec;
public Int16 BlockAlign;
public Int16 BitsPerSample;
public Int16 Size;
}
Poznámky pro implementátory
Vlastní syntetizátor řeči implementuje použití TtsEngineSsml a Speak(TextFragment[], IntPtr, ITtsEngineSite) funguje jako filtry nebo zprostředkovatelé mezi syntetizátorovými aplikacemi vytvořenými pomocí infrastruktury platformy prostřednictvím členů System.Speech.Synthesis oboru názvů a základního systémového syntezátoru syntézy řeči.
Implementace Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Soutisky nebo úpravy aspektů příchozích TextFragment objektů
Vygeneruje všechny nezbytné události pomocí odkazu na lokalitu na ITtsEngineSite instanci.
Generuje skutečnou syntetizovanou řeč.
Generování řeči se nejčastěji provádí voláním Speak jednoho z modulů pro vykreslování řeči poskytovaných operačním systémem.
Pokud se nepoužívá některý z dostupných modulů pro vykreslování řeči, musí objekt zděděný z TtsEngineSsml tohoto modulu vytvořit vlastní modul pro vykreslování řeči.
Přístup k Speak metodě získané pomocí registru a reflexe. .
Při dědění z TtsEngineSsml, musíte přepsat následující členy: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)a Speak(TextFragment[], IntPtr, ITtsEngineSite).