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 specificata 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 TextFragment istanze che contengono il testo di cui eseguire il rendering in voce.
- waveHeader
-
IntPtr
nativeint
Oggetto IntPtr che punta a una struttura contenente il formato di output audio.
- 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 personalizzata della sintesi vocale che eredita da TtsEngineSsmle usando l'uso di TextFragment, SpeechEventInfoFragmentState, eTtsEventId
Implementazione di Speak
Riceve una matrice di TextFragment istanze e crea una nuova matrice di istanze da passare al
Speakmetodo in un motore di TextFragment sintesi sottostante.Se il TtsEngineAction valore di enumerazione trovato dalla Action proprietà nell'oggetto FragmentState restituito dalla State proprietà di ogni TextFragment istanza è Speak, l'implementazione
Traduce l'americanismo in britishismi nel testo da pronunciare.
Se la EventInterest proprietà nelle ITtsEngineSite interfacce fornite all'implementazione supporta il WordBoundary tipo di evento, viene usata un'istanza SpeechEventInfo di per creare un evento per l'unità di un contatore dello stato di avanzamento 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 usata come waveHeader e restituita dal metodo deve essere compatibile con l'oggetto WAVEFORMATEX disponibile in SAPI.
Deve struct 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) funzionano come filtri o intermediari tra le applicazioni di sintetizzatore costruite usando l'infrastruttura della piattaforma tramite i membri dello System.Speech.Synthesis spazio dei nomi e i motori di sintesi vocale di sistema sottostanti.
Implementazione Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Trap o modifica gli aspetti degli oggetti in ingresso TextFragment
Genera tutti gli eventi necessari usando il riferimento al sito a un'istanza ITtsEngineSite
Genera il riconoscimento vocale sintetizzato effettivo.
La generazione del parlato viene in genere eseguita chiamando Speak su 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 un 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).