質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3118閲覧

AVSpeechSynthesizerの動作

mochi-mochi

総合スコア9

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/10/30 11:05

前提

AVSpeechSynthesizerを使用して、話すコメントを引数で受け渡して音声で発話する関数を作成しましたが、iPhoneのOSが15.2では発話するのですが、16.0になると発話しません。
シュミレータでもOSの古いXcodeでは発話するのですが、最新のものでは発話しません。

AVSpeechSynthesizerは、新しいOSでは動作しないのでしょうか。
ご存じの方がおりましたらご教授いただけないでしょうか。
また、新しいOSでの対応方法をご存じの方が折れれましたら、対応方法をご教授お願い致します。

なお、シュミレータで新旧OSでの動作上、エラーは発生していません。

ソースコード func Remaining_time_announcement(comment:String) { // 話すコメントを設定 let utterance = AVSpeechUtterance(string: comment) // 話す速度を設定(0.0〜1.0) utterance.rate = 0.5 // 声の高さを設定(0.5〜2.0) utterance.pitchMultiplier = 1.2 // スピーチ シンセサイザが発話を発声した後、キュー内の次の発話を処理する前に一時停止する時間 utterance.postUtteranceDelay = 0.2 // スピーチ シンセサイザーが発話時に使用する音量 utterance.volume = 1.0 // 言語を日本語に設定 utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP") // 音声シンセサイザーを作成 let synthesizer = AVSpeechSynthesizer() // 発話を話すようにシンセサイザーに指示(音声を発話で実行) synthesizer.speak(utterance) } ### 試したこと 新しいXcodeのバージョンは、 14.0.1 古いXcodeのバージョンは、 13.2.1 で、同じソースコードのAPを使用しております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次の質問・回答の内容は関係していそうでしょうか?

The settings that Rohit describes worked for me on the iOS 16 simulator. Apparently the iOS 16 simulators are not loaded with any voices by default. The exact sequence was as follows on the simulated device itself:
Settings/Accessibility/Spoken Content Must turn on Speak Selection. That will list Voices. Touch that. Select your language. Pick a voice. Click the download button. Wait. When done, you can back out and turn off Speak Selection on the way if you want. Turning it on is necessary to be able to select and download a voice.
(機械翻訳)Rohitが説明する設定は、iOS 16のシミュレータで私には機能しました。どうやらiOS 16のシミュレータはデフォルトでボイスがロードされていないようです。正確には、シミュレータ本体で以下のような手順でした。
Settings/Accessibility/Spoken Content Speak Selectionをオンにする必要があります。そうするとVoicesがリストアップされる。それをタッチします。言語を選択します。音声を選びます。ダウンロードボタンをクリックします。待つ。終了したら、途中でバックアウトしてSpeak Selectionをオフにしてもかまいません。オンにすると、音声の選択とダウンロードができるようになります。
https://stackoverflow.com/questions/73706115/avspeechsynthesizer-isnt-working-under-ios16-anymore

「Settings/Accessibility/Spoken Content Speak Selection」は日本語だと
「設定アプリ - アクセシビリティ - 読み上げコンテンツ」でしょうか。

追記です。

コメントありがとうございます。

AVSpeechSynthesizerを使用した関数APでは残念ながら発話しませんでした。

リンク先の回答には
次の行をクラス直下に移動して(メソッド内ではなく)、
クラスの定数ストアドプロパティとして扱うように、
という記載もあるようでした。

let synthesizer = AVSpeechSynthesizer()

このような修正をしても解消しないでしょうか?

2つ目の追記です。

コメントありがとうございます。

今回の関数「func Remaining_time_announcement(comment:String)」の外側に「let synthesizer = AVSpeechSynthesizer()」を記述することで良いでしょうか。

メソッドが入れ子になっていないのであればそれで大丈夫だと思います。

ちなみにリンク先のログと同じような内容のログを出力しておりますが、3行目の『識別子の音声が見つかりません。:(null)』が気になります。
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")が効いていないのでしょうか。

コード側の問題ではなさそうな気がしますが、このエラーは原因を表していそうですね。


実は、手元の環境で試してみたところ、ボイスをロードしなくても喋ってくれました。
その際にログが出力されていたのですが、次のような感じでした。
*OKの場合もNGの場合もあまり違いはありませんでした
*NGの場合でも「Could not find voice for identifier: (null)」のような出力はありませんでした

OKの場合

2022-10-31 18:50:52.191816+0900 AVSpeechProduct[93332:970493] [asset] Failed to get sandbox extensions 2022-10-31 18:50:52.241814+0900 AVSpeechProduct[93332:970493] [catalog] Unable to list voice folder 2022-10-31 18:50:52.241833+0900 AVSpeechProduct[93332:970492] [catalog] Query for com.apple.MobileAsset.VoiceServices.VoiceResources failed: 2 2022-10-31 18:50:52.252044+0900 AVSpeechProduct[93332:970492] [catalog] Query for com.apple.MobileAsset.VoiceServices.VoiceResources failed: 2 2022-10-31 18:50:52.259001+0900 AVSpeechProduct[93332:970493] [catalog] Unable to list voice folder 2022-10-31 18:50:52.261602+0900 AVSpeechProduct[93332:970493] [catalog] Unable to list voice folder 2022-10-31 18:50:52.271545+0900 AVSpeechProduct[93332:970493] [catalog] Unable to list voice folder 2022-10-31 18:50:52.295957+0900 AVSpeechProduct[93332:970547] [AXTTSCommon] MauiVocalizer: 11006 (Can't compile rule): regularExpression=\Man On the Moon III\b, message=unrecognized character follows \, characterPosition=1 2022-10-31 18:50:52.307970+0900 AVSpeechProduct[93332:970547] [AXTTSCommon] MauiVocalizer: 11016 (Ruleset parse failed: Ignoring unknown option): option=/ 2022-10-31 18:50:52.310365+0900 AVSpeechProduct[93332:970547] [AXTTSCommon] MauiVocalizer: 16038 (Resource load failed): component=ttt/re, uri=, contentType=application/x-vocalizer-rettt+text, lhError=88602000 2022-10-31 18:50:52.350038+0900 AVSpeechProduct[93332:970493] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600000c341a0> F8BB1C28-BAE8-11D6-9C31-00039315CD46

NGの場合
(let synthesizer = AVSpeechSynthesizer()をメソッド内に記述)

2022-10-31 18:52:35.346536+0900 AVSpeechProduct[93405:972878] [asset] Failed to get sandbox extensions 2022-10-31 18:52:35.387313+0900 AVSpeechProduct[93405:972878] [catalog] Unable to list voice folder 2022-10-31 18:52:35.404685+0900 AVSpeechProduct[93405:972878] [catalog] Unable to list voice folder 2022-10-31 18:52:35.407498+0900 AVSpeechProduct[93405:972878] [catalog] Unable to list voice folder 2022-10-31 18:52:35.417734+0900 AVSpeechProduct[93405:972878] [catalog] Unable to list voice folder 2022-10-31 18:52:35.418257+0900 AVSpeechProduct[93405:972882] [catalog] Query for com.apple.MobileAsset.VoiceServices.VoiceResources failed: 2 2022-10-31 18:52:35.420116+0900 AVSpeechProduct[93405:972882] [catalog] Query for com.apple.MobileAsset.VoiceServices.VoiceResources failed: 2 2022-10-31 18:52:35.465714+0900 AVSpeechProduct[93405:972934] [AXTTSCommon] MauiVocalizer: 11006 (Can't compile rule): regularExpression=\Man On the Moon III\b, message=unrecognized character follows \, characterPosition=1 2022-10-31 18:52:35.478539+0900 AVSpeechProduct[93405:972934] [AXTTSCommon] MauiVocalizer: 11016 (Ruleset parse failed: Ignoring unknown option): option=/ 2022-10-31 18:52:35.483518+0900 AVSpeechProduct[93405:972934] [AXTTSCommon] MauiVocalizer: 16038 (Resource load failed): component=ttt/re, uri=, contentType=application/x-vocalizer-rettt+text, lhError=88602000 2022-10-31 18:52:35.511815+0900 AVSpeechProduct[93405:972880] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600001078500> F8BB1C28-BAE8-11D6-9C31-00039315CD46

手元の環境は次の通りです。

  • macOS Ventura 13.0
  • Xcode 14.0
  • SwiftUIプロジェクトで一から作成

一度シミュレータのメニューから、
Devide - Erase All Content and Settings...
をしても解消されないでしょうか。

あとは、
質問の内容から、以前のバージョンから作成されたプロジェクトだと思うのですが、
新しいXcodeで新たにプロジェクトを作成して、
質問欄のコードを一から実装してみたら何か変わるでしょうか?
(let synthesizer = AVSpeechSynthesizer()はメソッドの外側に)
*macOSやXcodeやシミュレータの設定の問題か、プロジェクトの設定の問題か、切り分けできるのかなと思います

投稿2022/10/30 23:40

編集2022/10/31 10:17
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mochi-mochi

2022/10/31 03:57

iOS16のシュミレータには、確かに音声がロードされていませんでしたのでダウンロードし、テスト用音声で発話を確認できました。 しかし、いただいた回答では機能した。とありましたが、AVSpeechSynthesizerを使用した関数APでは残念ながら発話しませんでした。 他に設定するようなところがあるのでしょうか。
mochi-mochi

2022/10/31 09:16

”次の行をクラス直下”とは、今回の関数「func Remaining_time_announcement(comment:String)」の外側に「let synthesizer = AVSpeechSynthesizer()」を記述することで良いでしょうか。 実施してみましたが発話しませんでした。 ちなみにリンク先のログと同じような内容のログを出力しておりますが、3行目の『識別子の音声が見つかりません。:(null)』が気になります。 utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")が効いていないのでしょうか。 [asset] Failed to get sandbox extensions [catalog] Unable to list voice folder [AXTTSCommon] Could not find voice for identifier: (null) [AXTTSCommon] File did not exist at content path: (null) (null). Attempting to fallback to default voice for language: (null) [AXTTSCommon] Error: Unable to speak. No speech service: voice: (null) identifier: (null), language: (null), resource: (null) よろしくお願いします。
mochi-mochi

2022/11/01 03:03

当方の環境は、以下の通りです。  macOS Monterey 12.6.1  Xcode 14.0.1 教えていただいたシュミレータのDevide - Erase All Content and Settings...では解消出来ませんでした。 また、上記の環境での新規プロジェクト作成でも解消できませんでした。 なお、新規プロジェクト実行のログで以下のようなログがありました。 objc[1012]: Class SBFCARendererImageRepresentation is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/SpringBoardFoundation.framework/SpringBoardFoundation (0x10ce2c028) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/PaperBoardUI.framework/PaperBoardUI (0x1090cc218). One of the two will be used. Which one is undefined. また、試験的にもう1台の以下のような環境下で上記のプロジェクトをコピーしましたが、作成したXcodeの違いで実施できませんでした。 これが、以前のバージョンで作成したものとの事なのでしょうな。 そこで、この環境下で新規に作成してみましたが、こちらでは発話を確認できました。  macOS Big Sur 11.7.1  Xcode 13.2.1 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2022/11/01 06:24

コメントありがとうございます。 > 当方の環境は、以下の通りです。 環境は私と逆なのですね・・ *macOSが新しいか、Xcodeが新しいか > 教えていただいたシュミレータのDevide - Erase All Content and Settings...では解消出来ませんでした。 > また、上記の環境での新規プロジェクト作成でも解消できませんでした。 ダメでしたか・・ Xcode 14.0.1の新規プロジェクトでも変わらないのであれば、プロジェクトの設定はあまり関係ないのかもしれませんね。 --- ``` [AXTTSCommon] File did not exist at content path: (null) (null). Attempting to fallback to default voice for language: (null) [AXTTSCommon] Error: Unable to speak. No speech service: voice: (null) identifier: (null), language: (null), resource: (null) ``` stackoverflowの質問と、今回の質問で共通するのはこのエラーだと思います。 このエラーはボイスをダウンロードすることで解消しているっぽいですので、このあたりを中心にもう少し調査をしてみると良いのかもしれませんね。 *少し前にダウンロードしたのは日本語でしょうか?そうであれば英語などの言語でも試してみるのも良いかもしれませんね *手元の環境では同じ問題を再現できませんでしたので・・もうあまりお力になれないかもしれません・・
mochi-mochi

2022/11/01 13:39

他の音源でとの事から、オプション指定の方法を調べていたら英語の”Alex”の紹介しているサイトを見つけオプションを”en-US"で"Alex"にしてみたところ男性の声で発話しました。 そこで、これまで日本語の”Siri”を使用していましたが、"kyoki"・"Otoya"の通常?、拡張版にしたところ無事に発話しました。 また、実機iPhoneでも発話することが出来ました。 その後、日本語の”Siri”に戻したところ発話しております。 なにか最初のきっかけが必要なのかと思います。(個人的なかんそうです。) 解決出来て良かったです。 いろいろと教えていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問