TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Renderiza o array especificado TextFragment no formato de saída especificado.
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)
Parâmetros
- fragment
- TextFragment[]
Um conjunto de TextFragment instâncias contendo o texto a ser transformado em fala.
- waveHeader
-
IntPtr
nativeint
Um apontar para uma estrutura contendo IntPtr formato de saída de áudio.
- site
- ITtsEngineSite
Uma referência a uma ITtsEngineSite interface passada pela infraestrutura da plataforma para permitir o acesso aos recursos da infraestrutura.
Exemplos
O exemplo abaixo faz parte de uma implementação personalizada de síntese de voz que herda de TtsEngineSsml, e utiliza o uso de TextFragment, SpeechEventInfo, FragmentState, e TtsEventId
A implementação de Speak
Recebe um array de TextFragment instâncias e cria um novo array de TextFragment instâncias para serem passados ao
Speakmétodo num motor de síntese subjacente.Se o TtsEngineAction valor de enumeração por encontrado a partir da Action propriedade em o FragmentState devolvido pela State propriedade de cada TextFragment instância for Speak, a implementação
Traduz o americanismo para os britishismos no texto a ser falado.
Se a EventInterest propriedade nas ITtsEngineSite interfaces fornecidas à implementação suportar o WordBoundary tipo de evento, uma SpeechEventInfo instância é usada para criar um evento que impulsione um medidor de progresso do sintetizador.
É então chamado um motor de renderização de fala com o array modificado 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);
}
Observações
A estrutura usada como waveHeader e devolvida pelo método deve ser compatível com a WAVEFORMATEX disponível sob o SAPI.
Deve struct fornecer funcionalidades equivalentes 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;
}
Notas para Implementadores
Sintetizadores de voz personalizados implementam e TtsEngineSsmlSpeak(TextFragment[], IntPtr, ITtsEngineSite) funcionam como filtros ou intermediários entre aplicações de sintetizador construídas usando a infraestrutura da plataforma através dos membros do System.Speech.Synthesis namespace e dos motores de síntese de voz do sistema subjacente.
Uma Speak(TextFragment[], IntPtr, ITtsEngineSite) implementação:
Aprisionar ou modificar aspetos dos objetos que TextFragment entram
Gera quaisquer eventos necessários usando a referência do site a uma ITtsEngineSite instância
Gera a fala sintetizada realmente.
A geração de fala é mais tipicamente feita apelando Speak a um dos motores de renderização de fala fornecidos pelo sistema operativo.
Se um dos motores de renderização de fala disponíveis não for utilizado, um objeto que herda de TtsEngineSsml terá de criar o seu próprio motor de renderização de voz.
Acesso ao Speak método obtido usando o registo e reflexão. .
Quando herdas de TtsEngineSsml, deves sobrepor os seguintes membros: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr), e Speak(TextFragment[], IntPtr, ITtsEngineSite).