AVSpeechSynthesizer doesn't work on iOS10

徘徊边缘 提交于 2019-12-03 05:36:10

Turn off your silent mode (the physical switch). It works in my case.

I just ran into this same issue on an iPad Mini 4. This version doesnt have a physical switch. But if you open control center (swipe up), there is a Silent button. Turn this off and the issue fixes itself.

In my project, although I was having trouble getting synthesis to produce the first utterance after initialization, I was able to work around that by rearranging code. But I still have dozens of lines of garbage being spewed to the console when AVSpeechSynthesizer is initialized, and when its first utterance is produced. Here is a little sample:

2016-12-27 06:45:08.579510 SpeechBug1226[2155:859123] [MobileAssetError:1] Unable to copy asset attributes
2016-12-27 06:45:08.580248 SpeechBug1226[2155:859123] Could not get attribute 'LocalURL': Error Domain=MobileAssetError Code=1 "Unable to copy asset attributes" UserInfo={NSDescription=Unable to copy asset attributes}
2016-12-27 06:45:08.585959 SpeechBug1226[2155:859123] 0x174157fa0 Copy matching assets reply: XPC_TYPE_DICTIONARY  <dictionary: 0x174157fa0> { count = 2, transaction: 0, voucher = 0x0, contents =
"Assets" => <data: 0x17426c700>: { length = 1237 bytes, contents = 0x62706c6973743030d4010203040506636458247665727369... }
"Result" => <int64: 0x174220180>: 0

I reproduced this in a small demo project and was unable to find a workaround. Sadly, I'm afraid that the correct answer to this question is to file a bug, which I just did :(

I have try your code with just one change and its working. Try this once

 synth.speak(utterance)

My whole code is like

**`import  AVFoundation`**


        let str = "once" //just some string here, this string exists, and it's in english
        let synth = AVSpeechSynthesizer()
        let utterance = AVSpeechUtterance(string: str)
        utterance.rate = AVSpeechUtteranceDefaultSpeechRate
        let lang = "en-US"

        utterance.voice = AVSpeechSynthesisVoice(language: lang)
        synth.speak(utterance)

In my scenario, I could solve it by enabling Internet Connection in iPhone.

A speech recognizer recognizes only one language. When you use the default initializer, you get a speech recognizer for the device's current locale, if a recognizer is supported for that locale. Note that a supported speech recognizer is not the same as an available speech recognizer; for example, the recognizers for some locales may require an Internet connection. You can use the supportedLocales() method to get a list of supported locales and the isAvailable property to find out if the recognizer for a specific locale is available.

Source

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!