I have followed the example here for adding a custom lexicon to my speech SSML. However, it is being ignored. I tried it with my own lexicon and also with the sample. At first the sample seemed to work, but when I removed the lexicon it still expanded out BTW as "By the Way" so it appears it was having no impact for the sample either.
For reference, here is the sample code used to create the lexicon
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias>By the way</alias>
</lexeme>
<lexeme>
<grapheme> Benigni </grapheme>
<phoneme> bɛˈniːnji</phoneme>
</lexeme>
</lexicon>
And here is the sample SSML (in which the lexicon is ignored)
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="http://www.w3.org/2001/mstts"
xml:lang="en-US">
<voice name="en-US-JennyNeural">
<lexicon uri="MY_PATH_TO/customlexicon.xml"/>
BTW, we will be there probably at 8:00 tomorrow morning.
Could you help leave a message to Robert Benigni for me?
</voice>
</speak>
I have tried accessing the lexicon from local storage as well as from a site hosted by Azure App Service. I also looked to see if the Javascript had any sort of "addLexicon" method within SpeechConfig or SpeechSynthesizer, but I couldn't find anything. Anyone have any ideas why this isn't working and what I need to do to fix it?
According to Microsoft, a path to the lexicon on your local machine does not work. It must be hosted on the web somewhere. If you have any app service plan, this is extremely lightweight (it's just hosting an XML file) so you can just create a new app service to host it. Of course if you have other methods to expose files via web uri that should work fine too.
Also, I was having issues with the hosted files using sapi alphabet. The alphabet abbreviation in the documentation is incorrect. It should be x-microsoft-sapi
, not just sapi
. Once I corrected that I was able to get both ipa (which is correct as ipa
) and sapi lexicons working when hosted on a remote server.