TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Renderuje określoną TextFragment tablicę w określonym formacie danych wyjściowych.
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[]
Tablica wystąpień TextFragment zawierających tekst do renderowania w mowie.
- waveHeader
-
IntPtr
nativeint
Wskazuje IntPtr strukturę zawierającą format danych wyjściowych dźwięku.
- site
- ITtsEngineSite
Odwołanie do interfejsu przekazywanego ITtsEngineSite przez infrastrukturę platformy w celu umożliwienia dostępu do zasobów infrastruktury.
Przykłady
Poniższy przykład jest częścią niestandardowej implementacji syntezy mowy dziedziczonej z TtsEngineSsml, i przy użyciu metody TextFragment, SpeechEventInfo, FragmentStatei TtsEventId
Implementacja Speak
Odbiera tablicę TextFragment wystąpień i tworzy nową tablicę TextFragment wystąpień, która ma zostać przekazana do metody w
Speak
podstawowym aucie syntezy.TtsEngineAction Jeśli wartość wyliczenia znaleziona z Action właściwości FragmentState zwróconej przez State właściwość każdego TextFragment wystąpienia to Speak, implementacja
Tłumaczy amerykanizm na Brytyjczyków w tekście, który ma być wypowiadany.
EventInterest Jeśli właściwość w ITtsEngineSite interfejsach dostarczonych do implementacji obsługuje WordBoundary typ zdarzenia, SpeechEventInfo wystąpienie jest używane do utworzenia zdarzenia w celu napędzania syntetyzatora miernika postępu jest tworzony.
Aparat renderowania mowy jest następnie wywoływany TextFragment za pomocą zmodyfikowanej tablicy.
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);
}
Uwagi
Struktura używana jako waveHeader
i zwracana przez metodę powinna być zgodna z dostępnym w WAVEFORMATEX
obszarze SAPI.
Element struct
musi zapewniać funkcjonalność równoważną:
internal struct WaveFormat
{
public Int16 FormatTag;
public Int16 Channels;
public int SamplesPerSec;
public int AvgBytesPerSec;
public Int16 BlockAlign;
public Int16 BitsPerSample;
public Int16 Size;
}
Uwagi dotyczące implementowania
Syntetyzator mowy niestandardowej implementuje używanie TtsEngineSsml i Speak(TextFragment[], IntPtr, ITtsEngineSite) pracę jako filtry lub pośredników między aplikacjami syntezatora skonstruowanymi przy użyciu infrastruktury platformy za pośrednictwem elementów członkowskich System.Speech.Synthesis przestrzeni nazw i podstawowych aparatów syntezy mowy systemu.
Implementacja Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Pułapki lub modyfikowanie aspektów obiektów przychodzących TextFragment
Generuje wszelkie niezbędne zdarzenia przy użyciu odwołania lokacji do ITtsEngineSite wystąpienia
Generuje rzeczywistą syntetyzowaną mowę.
Generowanie mowy jest najczęściej wykonywane przez wywołanie Speak
jednego z aparatów renderowania mowy dostarczonych przez system operacyjny.
Jeśli jeden z dostępnych aparatów renderowania mowy nie jest używany, obiekt dziedziczony z TtsEngineSsml musi utworzyć własny aparat renderowania mowy.
Dostęp do metody uzyskanej Speak
przy użyciu rejestru i odbicia. .
Po dziedziczeniu z TtsEngineSsmlprogramu należy zastąpić następujące elementy członkowskie: TtsEngineSsml(String), , AddLexicon(Uri, String, ITtsEngineSite)RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)i Speak(TextFragment[], IntPtr, ITtsEngineSite).