SpeechSynthesizer.AddLexicon не учитывает пользовательские переопределения

Я использую синтезатор речи для преобразования текста в речь. Я хотел использовать пользовательский файл лексики, поэтому я использовал метод AddLexicon, как рекомендовано для msdn

Вот моя функция

     public void ReadOut(string sentence)
    {
        using (SpeechSynthesizer synth = new SpeechSynthesizer())
        {
            synth.SelectVoiceByHints(gender: VoiceGender.Male, age: VoiceAge.Adult, voiceAlternate: 1, culture: CultureInfo.CreateSpecificCulture("en-US"));
            synth.Rate = -2;
            var fqn = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var uri = new Uri("file://" + fqn + "/CustomLexicon.pls");
            synth.AddLexicon(uri, "application/pls+xml");
            synth.Speak(sentence);
        }

    }

и мой файл лексики

 <?xml version="1.0" encoding="UTF-8"?>
 <lexicon version="1.0" 
  xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
  alphabet="x-microsoft-ups" xml:lang="en-US">
 <lexeme>
     <grapheme> BLUE </grapheme>
     <phoneme> B L I P </phoneme>
   </lexeme>
</lexicon>

Однако, когда я передаю "СИНИЙ" функции, он все равно выводит СИНИЙ вместо BLIP. Я что-то пропустил?

Примечание. Я убедился, что файл pls существует в нужном месте и его содержимое заполнено правильно.

1 ответ

Решение

Похоже, это ошибка в реализации синтезатора System.Speech, согласно принятому здесь ответу: Как я могу использовать лексикон с SpeechSynthesizer?

Другие вопросы по тегам