AVSpeechSynthesizerを使用して話すiOSアプリがあります。 iPadやその他のデバイスで動作しますが、iPhone 6Plusでは動作しないことがわかりました。
コンソール出力を調べると、次のエラーが表示されます。
| AXSpeechAssetDownloader |エラー| ASAssetQueryエラーフェッチ結果エラードメイン= ASエラーコード= 21 "操作を完了できませんでした。(ASエラーエラー21-アセット情報をコピーできません)" UserInfo = 0x174a7e100 {NSDescription =アセット情報をコピーできません}
アプリが実行されているデバイスにはネットワーク接続があります。
これを解決し始める方法について何かアイデアはありますか?
私は同じ問題を抱えていました。助けが見つからなかったので、いろいろ試してデバッグしなければなりませんでした。
私が見つけたのは、[設定]-> [一般]-> [スピーチ]にアクセスし、[選択を話す]を有効にして英語の音声をいじくり回すと、機能し始めるということです。
これが役立つかどうか教えてください。
これは、必要な言語を話すために必要なリソースがダウンロードされておらず、アプリがそれを自動的に実行できなかったことを意味します。 @softwarenerdが言及しているように、[設定]-> [一般]-> [音声]に移動し、[音声]に移動して、必要な音声をダウンロードできます。
しかし、アプリストア用のアプリを開発している場合、これは実際には良い解決策ではありません。ダウンロードを自動的かつオンデマンドで処理する方法が必要です。
言語AのAVSpeechUtteranceコンストラクターに文字列を渡しているが、言語Bを使用して音声を使用するように要求している場合にも、このエラーが表示されることがあります。
例:
let utterance = AVSpeechUtterance(string: "Hello")
utterance.voice = AVSpeechSynthesisVoice(language: "pl-PL")
この場合、「Hello」はポーランド語(pl-PL)ではありません。アプリはそのようなエラーを表示し、(場合によっては)テキストをスピーチすることがあります。
私の場合、発話文字列をutterance.voiceafterに設定することで、これを解決することができました。
speechUtterL1 = AVSpeechUtterance(string: ("أتمنى لك نهارا سعيد"))
speechUtterL1.voice = AVSpeechSynthesisVoice(language: "ar-SA")
逆に、音声を1回だけ設定すると、エラーが発生します。
[TTS]カスタム音声クエリの実行中にエラーが発生しましたErrorDomain = ASError Code = 15 "アセットタイプcom.Apple.MobileAssetの https://mesu.Apple.com/assets/ からアセット情報をコピーできません。 VoiceServices.GryphonVoice "UserInfo = {NSDescription =アセットタイプcom.Apple.MobileAsset.VoiceServices.GryphonVoice}からアセット情報をコピーできません https://mesu.Apple.com/assets/
IOS9でもまったく同じ問題が発生します。これが私の回避策です。これは完璧ではありませんが、少なくともクラッシュを回避します。
let voices = AVSpeechSynthesisVoice.speechVoices()
for voice in voices {
if lang == voice.language {
utterance.voice = voice
break;
}
}