TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Geeft de opgegeven TextFragment matrix weer in de opgegeven uitvoerindeling.
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)
Parameters
- fragment
- TextFragment[]
Een matrix met TextFragment exemplaren die de tekst bevatten die in spraak moet worden weergegeven.
- site
- ITtsEngineSite
Een verwijzing naar een ITtsEngineSite interface die door de platforminfrastructuur wordt doorgegeven om toegang tot de infrastructuurbronnen toe te staan.
Voorbeelden
Het onderstaande voorbeeld maakt deel uit van een aangepaste implementatie voor spraaksynthese die wordt overgenomen van TtsEngineSsml, en het gebruik van TextFragment, SpeechEventInfoen FragmentStateTtsEventId
De implementatie van Speak
Hiermee ontvangt u een matrix met TextFragment exemplaren en maakt u een nieuwe matrix met TextFragment exemplaren die moeten worden doorgegeven aan de
Speakmethode op een onderliggende synthese-engine.Als de TtsEngineAction opsommingswaarde op basis van de Action eigenschap op de FragmentState geretourneerde State eigenschap van elke TextFragment instantie is, is Speakde implementatie
Vertaalt Americanisme in Britishismen in de tekst die moet worden gesproken.
Als de EventInterest eigenschap op de ITtsEngineSite interfaces die zijn opgegeven voor de implementatie het WordBoundary gebeurtenistype ondersteunt, wordt er een SpeechEventInfo exemplaar gebruikt om een gebeurtenis te maken om een synthesizervoortgangsmeter aan te sturen.
Vervolgens wordt een spraakrenderingsengine aangeroepen met de gewijzigde TextFragment matrix.
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);
}
Opmerkingen
De structuur die door waveHeader de methode wordt gebruikt en geretourneerd, moet compatibel zijn met de WAVEFORMATEX beschikbare SAPI.
De struct moet functionaliteit bieden die gelijk is aan:
internal struct WaveFormat
{
public Int16 FormatTag;
public Int16 Channels;
public int SamplesPerSec;
public int AvgBytesPerSec;
public Int16 BlockAlign;
public Int16 BitsPerSample;
public Int16 Size;
}
Notities voor uitvoerders
Custom Speech Synthesizer implementeert het gebruik en TtsEngineSsmlSpeak(TextFragment[], IntPtr, ITtsEngineSite) werk als filters of tussenpersonen tussensynthesetoepassingen die zijn samengesteld met behulp van de platforminfrastructuur via de leden van de System.Speech.Synthesis naamruimte en onderliggende spraaksynthese-engines van het systeem.
Een Speak(TextFragment[], IntPtr, ITtsEngineSite) implementatie:
Aspecten van de binnenkomende TextFragment objecten trapsen of wijzigen
Genereert alle benodigde gebeurtenissen met behulp van de sitereferentie naar een ITtsEngineSite exemplaar
Hiermee wordt de werkelijke gesynthetiseerde spraak gegenereerd.
Het genereren van spraak wordt meestal uitgevoerd door een van de spraakrenderingsengines aan te roepen Speak die door het besturingssysteem worden geleverd.
Als een van de beschikbare spraakrenderingsengines niet wordt gebruikt, moet een object dat overneemt TtsEngineSsml van een eigen spraakrenderingsengine maken.
Toegang tot de Speak methode voor verkregen gebruik van het register en reflectie. .
Wanneer u overdrat van TtsEngineSsml, moet u de volgende leden overschrijven: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr), en Speak(TextFragment[], IntPtr, ITtsEngineSite).