TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Renderiza a matriz TextFragment especificada 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[]
Uma matriz de instâncias TextFragment contendo o texto a ser renderizado em fala.
- waveHeader
-
IntPtr
nativeint
Um IntPtr apontando para uma estrutura que contém o formato de saída de áudio.
- site
- ITtsEngineSite
Uma referência a uma interface ITtsEngineSite passada pela infraestrutura de plataforma para permitir o acesso aos recursos de infraestrutura.
Exemplos
O exemplo a seguir faz parte de uma implementação de síntese de fala personalizada herdando de TtsEngineSsmle usando o uso de TextFragment, SpeechEventInfo, FragmentStatee TtsEventId
A implementação de Speak
Recebe uma matriz de TextFragment instâncias e cria uma nova matriz de TextFragment instâncias a serem passadas para o
Speak
método em um mecanismo de síntese subjacente.Se o TtsEngineAction valor de enumeração encontrado na Action propriedade no FragmentState retornado pela State propriedade de cada TextFragment instância for Speak, a implementação
Traduz o americanismo para os britânicos no texto a ser falado.
Se a EventInterest propriedade nas ITtsEngineSite interfaces fornecidas à implementação der suporte ao WordBoundary tipo de evento, uma SpeechEventInfo instância será usada para criar um evento para conduzir um medidor de progresso do sintetizador.
Em seguida, um mecanismo de renderização de fala é chamado com a matriz modificada 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);
}
Comentários
A estrutura usada como waveHeader
e retornada pelo método deve ser compatível com a WAVEFORMATEX
disponível em SAPI.
O struct
deve fornecer funcionalidade equivalente 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 aos Implementadores
O sintetizador de fala personalizado implementa o uso TtsEngineSsml e Speak(TextFragment[], IntPtr, ITtsEngineSite) o trabalho como filtros ou intermediários entre aplicativos sintetizadores construídos usando a infraestrutura de plataforma por meio dos membros do namespace e dos System.Speech.Synthesis mecanismos de síntese de fala do sistema subjacente.
Uma Speak(TextFragment[], IntPtr, ITtsEngineSite) implementação:
Intercepta ou modifica aspectos dos objetos de entrada TextFragment
Gera todos os eventos necessários usando a referência do site para uma ITtsEngineSite instância
Gera a fala sintetizada real.
A geração de fala normalmente é feita chamando Speak
um dos mecanismos de renderização de fala fornecidos pelo sistema operacional.
Se um dos mecanismos de renderização de fala disponíveis não for usado, um objeto herdado de TtsEngineSsml deverá criar seu próprio mecanismo de renderização de fala.
Acesso ao Speak
método obtido usando o registro e a reflexão. .
Ao herdar de TtsEngineSsml, você deve substituir os seguintes membros: TtsEngineSsml(String), AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite), GetOutputFormat(SpeakOutputFormat, IntPtr)e Speak(TextFragment[], IntPtr, ITtsEngineSite).