TtsEngineSsml.Speak(TextFragment[], IntPtr, ITtsEngineSite) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Отрисовывает указанный TextFragment массив в указанном выходном формате.
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)
Параметры
- fragment
- TextFragment[]
Массив экземпляров TextFragment , содержащих текст для отрисовки в речь.
- site
- ITtsEngineSite
Ссылка на интерфейс, переданный ITtsEngineSite инфраструктурой платформы, чтобы разрешить доступ к ресурсам инфраструктуры.
Примеры
Приведенный ниже пример является частью пользовательской реализации синтеза речи, наследуемой от TtsEngineSsml, и использования , и использования TextFragment, SpeechEventInfoFragmentStateиTtsEventId
Реализация Speak
Получает массив TextFragment экземпляров и создает новый массив экземпляров, передаваемый TextFragment
Speakметоду в базовом подсистеме синтеза.TtsEngineAction Если значение перечисления, найденное из Action свойстваFragmentState, возвращаемого State свойством каждого TextFragment экземпляра, является Speakреализацией.
Преобразует американизм в британизм в тексте, который следует говорить.
EventInterest Если свойство в ITtsEngineSite интерфейсах, предоставленных реализации, поддерживает WordBoundary тип события, SpeechEventInfo экземпляр используется для создания события для управления счетчиком хода выполнения синтезатора.
Затем модуль отрисовки речи вызывается с измененным 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);
}
Комментарии
Структура, используемая как waveHeader и возвращаемая методом, должна быть совместима с WAVEFORMATEX доступным в SAPI.
Необходимо struct предоставить функциональные возможности, эквивалентные следующим:
internal struct WaveFormat
{
public Int16 FormatTag;
public Int16 Channels;
public int SamplesPerSec;
public int AvgBytesPerSec;
public Int16 BlockAlign;
public Int16 BitsPerSample;
public Int16 Size;
}
Примечания для тех, кто реализует этот метод
Пользовательский синтезатор речи реализует использование TtsEngineSsml и Speak(TextFragment[], IntPtr, ITtsEngineSite) работу в качестве фильтров или посредников между приложениями синтезатора, созданными с помощью инфраструктуры платформы через члены System.Speech.Synthesis пространства имен и базовых системных подсистем синтеза речи.
Реализация Speak(TextFragment[], IntPtr, ITtsEngineSite) :
Ловушки или изменение аспектов входящих TextFragment объектов
Создает все необходимые события с помощью ссылки на сайт экземпляра ITtsEngineSite
Создает фактическую синтезированную речь.
Создание речи чаще всего выполняется путем вызова Speak одного из обработчиков рендеринга речи, предоставляемых операционной системой.
Если один из доступных обработчиков рендеринга речи не используется, объект, наследуемый от TtsEngineSsml него, должен создать собственный механизм отрисовки речи.
Доступ к методу, полученному Speak с помощью реестра и отражения. .
При наследовании TtsEngineSsmlот , необходимо переопределить следующие члены: TtsEngineSsml(String), , AddLexicon(Uri, String, ITtsEngineSite), RemoveLexicon(Uri, ITtsEngineSite)GetOutputFormat(SpeakOutputFormat, IntPtr)и Speak(TextFragment[], IntPtr, ITtsEngineSite).