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í zadané TextFragment pole 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 TextFragment instancí obsahující text, který má být vykreslen do řeči.
- site
- ITtsEngineSite
Odkaz na ITtsEngineSite rozhraní předané infrastrukturou platformy, které umožňuje přístup k prostředkům infrastruktury.
Příklady
Následující příklad je součástí vlastní implementace syntézy řeči, která dědí z TtsEngineSsmla používá , a .TextFragmentSpeechEventInfoFragmentStateTtsEventId
Provádění Speak
Obdrží pole TextFragment instancí a vytvoří nové pole TextFragment instancí, které se předají
Speak
metodě v podkladovém modulu syntézy.Pokud je hodnota výčtu TtsEngineActionAction nalezená z vlastnosti FragmentState vrácené State vlastností každé TextFragment instance Speak, implementace
V mluveném textu překládá americanismus na britštinu.
EventInterest Pokud vlastnost v ITtsEngineSite rozhraních poskytovaných pro implementaci podporuje WordBoundary typ události, SpeechEventInfo instance se použije k vytvoření události pro řízení měřiče průběhu syntetizátoru.
Modul pro vykreslování řeči se pak zavolá 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á jako waveHeader
a vrácená metodou by měla být kompatibilní s strukturou dostupnou WAVEFORMATEX
v rámci SAPI.
Musí struct
poskytovat funkce ekvivalentní:
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) práci jako filtry nebo prostředníky mezi syntetizátorovými aplikacemi vytvořenými pomocí infrastruktury platformy prostřednictvím členů oboru názvů a modulů syntézy řeči základního System.Speech.Synthesis systému.
Implementace Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Umožňuje soutisky nebo změnit aspekty 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 některý z dostupných modulů pro vykreslování řeči není použit, musí objekt zděděný z TtsEngineSsml vytvořit vlastní modul pro vykreslování řeči.
Přístup k Speak
metodě získané pomocí registru a reflexe. .
Když dědíte 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).