TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esegue il rendering della matrice TextFragment nel formato di output specificato.
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)
Parametri
- fragment
- TextFragment[]
Matrice di istanze di TextFragment che contengono il testo di cui eseguire il rendering come input vocale.
- site
- ITtsEngineSite
Riferimento a un'interfaccia ITtsEngineSite passata dall'infrastruttura della piattaforma per consentire l'accesso alle risorse dell'infrastruttura.
Esempio
L'esempio seguente fa parte di un'implementazione di sintesi vocale personalizzata che eredita da TtsEngineSsmle usando l'uso di TextFragment, SpeechEventInfoFragmentState, eTtsEventId
Implementazione di Speak
Riceve una matrice di istanze e crea una nuova matrice di TextFragmentTextFragment istanze da passare al
Speak
metodo in un motore di sintesi sottostante.Se il TtsEngineAction valore di enumerazione trovato dalla proprietà sulla proprietà restituita dalla ActionState proprietà FragmentState di ogni TextFragment istanza è Speak, l'implementazione
Traduce l'americanismo nei britishismi nel testo da parlare.
Se la EventInterest proprietà nelle ITtsEngineSite interfacce fornite all'implementazione supporta il WordBoundary tipo di evento, SpeechEventInfo viene usata un'istanza per creare un evento per guidare un contatore di stato del sintetizzatore.
Viene quindi chiamato un motore di rendering vocale con la matrice modificata 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);
}
Commenti
La struttura utilizzata come waveHeader
e restituita dal metodo deve essere compatibile con l'oggetto WAVEFORMATEX
disponibile in SAPI.
L'oggetto struct
deve fornire funzionalità equivalenti a:
internal struct WaveFormat
{
public Int16 FormatTag;
public Int16 Channels;
public int SamplesPerSec;
public int AvgBytesPerSec;
public Int16 BlockAlign;
public Int16 BitsPerSample;
public Int16 Size;
}
Note per gli implementatori
Il sintetizzatore vocale personalizzato implementa l'uso TtsEngineSsml e Speak(TextFragment[], IntPtr, ITtsEngineSite) il funzionamento come filtri o intermediari tra applicazioni di sintetizzatore costruite usando l'infrastruttura System.Speech.Synthesis della piattaforma tramite i membri dello spazio dei nomi e i motori di sintesi vocale sottostanti.
Implementazione Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Trap o modificare gli aspetti degli oggetti in ingresso TextFragment
Genera eventuali eventi necessari usando il riferimento al sito a un'istanza ITtsEngineSite
Genera il riconoscimento vocale sintetizzato effettivo.
La generazione del riconoscimento vocale viene in genere eseguita chiamando Speak
uno dei motori di rendering vocale forniti dal sistema operativo.
Se uno dei motori di rendering vocale disponibili non viene usato, un oggetto che eredita da TtsEngineSsml deve creare il proprio motore di rendering vocale.
Accesso al Speak
metodo ottenuto usando il Registro di sistema e la reflection. .
Quando si eredita da TtsEngineSsml, è necessario eseguire l'override dei membri seguenti: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite)RemoveLexicon(Uri, ITtsEngineSite), , GetOutputFormat(SpeakOutputFormat, IntPtr)e Speak(TextFragment[], IntPtr, ITtsEngineSite).