ios swift avspeechsynthesizer

AVSpeechSynthesizer no funciona en iOS10



swift (5)

Acabo de encontrarme con este mismo problema en un iPad Mini 4. Esta versión no tiene un interruptor físico. Pero si abre el centro de control (deslice hacia arriba), hay un botón Silencio. Apaga esto y el problema se soluciona solo.

Mi código AVSpeechSynthesizer no funciona en el dispositivo (iOS 10), pero funcionó en iOS 9.x y ahora funciona en simulador

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)

Estoy recibiendo este 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}

Antes de eso había mensajes de error como ese:

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

¿Alguien sabe como resolver este problema? Sé que hay algunas soluciones (el usuario tiene que ir a Configuración-> General y cambiar la Selección de habla, por ejemplo) pero no creo que sea una solución real aquí.

Actualización: he creado un nuevo proyecto (XCode8 / Swift3 / no hay otros pods / frameworks, etc.). Funciona en el simulador, pero me da los mismos errores en mi dispositivo.

Actualización 2: Funciona en dispositivo. Tengo mensajes de error similares (No se pueden copiar los atributos de los activos, etc.), pero funciona por ahora. No sé qué fue.


Apague su modo silencioso (el interruptor físico). Funciona en mi caso.


En mi caso, podría resolverlo habilitando la conexión a Internet en el iPhone.

Un reconocedor de voz reconoce un solo idioma. Cuando usa el inicializador predeterminado, obtiene un reconocedor de voz para la configuración regional actual del dispositivo, si se admite un reconocedor para esa configuración regional. Tenga en cuenta que un reconocedor de voz compatible no es lo mismo que un reconocedor de voz disponible; por ejemplo, los reconocedores de algunas configuraciones regionales pueden requerir una conexión a Internet. Puede usar el método supportedLocales () para obtener una lista de las configuraciones regionales admitidas y la propiedad isAvailable para averiguar si el reconocedor de una configuración regional específica está disponible.

Source


En mi proyecto, aunque estaba teniendo problemas para que la síntesis produjera la primera emisión luego de la inicialización, pude solucionar eso al reorganizar el código. Pero todavía tengo docenas de líneas de basura que se arrojan a la consola cuando se inicializa AVSpeechSynthesizer, y cuando se produce su primer enunciado. Aquí hay una pequeña muestra:

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

Lo reproduje en un pequeño proyecto de demostración y no pude encontrar una solución alternativa. Lamentablemente, me temo que la respuesta correcta a esta pregunta es presentar un error , que acabo de hacer :(


He intentado su código con un solo cambio y está funcionando. Prueba esto una vez

synth.speak(utterance)

Todo mi código es como

**`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)