Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AVSpeechSynthesizer doesn't work on iOS10

My AVSpeechSynthesizer code is not working on device (iOS 10), but it worked on iOS 9.x and it is working now in simulator.

let str = self.audioOutput //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.speakUtterance(utterance)

I'm getting this error:

MobileAssetError:1] Unable to copy asset attributes
Could not get attribute 'LocalURL': Error Domain=MobileAssetError Code=1 "Unable to copy asset attributes"
UserInfo={NSDescription=Unable to copy asset attributes}
0x1741495e0 Copy assets attributes reply: XPC_TYPE_DICTIONARY  <dictionary: 0x1741495e0> { count = 1, transaction: 0, voucher = 0x0, contents =
"Result" => <int64: 0x1744203a0>: 1}

Before that there were error messages like that:

Unable to copy asset information from https://mesu.apple.com/assets/ for asset type

Does anyone know how to solve this issue? I know there is some workarounds (user has to go to Settings->General and switch Speak Selection, for example) but I don't think it's a real solution here.

Update: I created a new project (XCode8/Swift3/no other pods/frameworks and so on). It works in simulator, but it gives me the same errors on my device.

Update 2: It works on device. I have similar error messages (Unable to copy asset attributes and so on), but it works for now. I don't know what it was.

like image 284
lithium Avatar asked Oct 05 '16 16:10

lithium


3 Answers

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

like image 112
kaka Avatar answered Oct 23 '22 06:10

kaka


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.

enter image description here

like image 10
Carsten Avatar answered Oct 23 '22 04:10

Carsten


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 :(

like image 3
Jerry Krinock Avatar answered Oct 23 '22 05:10

Jerry Krinock