Использование символов SAPI для ввода речевого словаря

Я проделал некоторую работу по добавлению слов и вариантов произношения в речевой словарь Windows через файл Интерфейс SpLexicon SAPI 5.4 (я думаю, это единственный способ сделать это) через AddPronunciation, или в моем случае:

// Initialize SpLexicon instance
SpLexicon lex = new SpLexicon();

// Specify the word to add to the speech dictionary
string myWord = "father";

// Set the language ID (US English)
int langid = new System.Globalization.CultureInfo("en-US").LCID;

// Specify the word's part of speech
SpeechPartOfSpeech mySpeechPart = SpeechPartOfSpeech.SPSNoun;

// Specify the word's pronunciation in SAPI phone symbols
string myPronunciation = "f aa dh er";

// Call actual speech API method for adding word data to the speech dictionary
lex.AddPronunciation(myWord, langid, mySpeechPart, myPronunciation);

Я ссылаюсь на Таблицу фонем американского английского, чтобы определить, какие символы SAPI использовать. Однако я заметил, что использование маркеров ударения «1» или «2», а также маркера слога «-», похоже, не влияет на произношение TTS. Эти символы-модификаторы используются только для ввода XML или я, возможно, делаю что-то не так?


person Exergist    schedule 11.04.2018    source источник
comment
Работает ли, если указать произношение через SSML? Кроме того, попробуйте использовать langID равный 0 (ноль), так как при этом используется другой преобразователь фонемы в ID.   -  person Eric Brown    schedule 15.12.2018
comment
Спасибо, что проверили это, Эрик! Сегодня я провел кучу тестов в VS, и на самом деле он работает так, как описано. Оглядываясь назад, я не уверен, что вызвало проблему, но мне все еще нужно интегрировать это с остальной частью моего проекта. Первичный и/или вторичный маркер ударения должен располагаться в конце слога (после последней фонемы слога). Одна вещь, которая мне показалась странной, заключалась в том, что у меня могло быть два первичных стрессора, два вторичных стрессора или их сочетание, и все варианты произношения звучали бы одинаково. Я обновлю этот пост с моими новыми выводами в ближайшие несколько дней.   -  person Exergist    schedule 15.12.2018
comment
В качестве расширения этого @EricBrown я опубликовал новый вопрос (надеюсь, последний для моего проекта). Возможно, когда у вас будет время, вы сможете это проверить: stackoverflow.com/questions/56245050/   -  person Exergist    schedule 21.05.2019
comment
@EricBrown в приведенном выше примере нужно ли что-то делать с объектом lex для правильной утилизации? Возможно, установить его на ноль? Или можно оставить его за рамками?   -  person Exergist    schedule 30.05.2019
comment
Установка его на ноль, вероятно, предпочтительнее; это COM-интерфейс, поэтому любой из них будет работать. Вам обязательно нужно знать, когда объект будет завершен? Если это так, вам, вероятно, придется взглянуть на Marshal.FinalReleaseComObject, но я бы не стал этого делать, если вам это абсолютно необходимо.   -  person Eric Brown    schedule 31.05.2019
comment
Я обнюхиваю весь свой код на предмет утечек и не знаю, нужно ли мне избавляться от материалов COM, связанных с SAPI 5.4. Я не знал, есть ли управляемая/неуправляемая серая зона с материалом SAPI.   -  person Exergist    schedule 01.06.2019
comment
@EricBrown Я использую вышеуказанные объекты SAPI как часть формы. Не могли бы вы предложить мне следовать этому сообщению (stackoverflow.com/a/20074069/9559499) и реализовать финализатор?   -  person Exergist    schedule 06.06.2019