きっかけ
時間を読み上げる時報アプリの影響を受けて
とりあえずiPhoneに喋らせてみよう!となりました
コードを小出しに
まずはインポート
import
// とりあえずインポート
import SwiftUI
import AVFoundation
喋るための設定
// 何を喋らせるか設定
let utterance = AVSpeechUtterance(string: "こんにちは")
// 喋る言語の設定
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
// 喋るスピードの設定 個人的に0.5くらいが普通と感じます
utterance.rate = 0.5
// よくわからんが設定!
let synthesizer = AVSpeechSynthesizer()
// 発話
synthesizer.speak(utterance)
でもボタンに仕込むの面倒だからfuncに放り込んだ
// アンダーバーが肝らしいが使いこなせてません
func text2speech(_ text: String) {
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
utterance.rate = 0.5
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
}
変数の設定
// @Stateで変数の変化に対応
@State private var text: String = ""
喋らせたい言葉をTextFieldへ
// $マークが必須
TextField("入力してね", text: $text)
.padding(30)
ボタンの設定
// 手抜きボタン!
Button("発話") {
// テキストフィールドから受け取った言葉をtextToSpeechへ
text2speech(text)
}
// ボタンを押しやすいように大型化
.font(.largeTitle)
.padding()
.background(Color.blue)
.foregroundColor(.white)
全体像
import SwiftUI
import AVFoundation
struct ContentView: View {
@State private var text: String = ""
var body: some View {
// 上下に並ぶようにVStackで囲います
VStack {
Spacer()
TextField("入力してね", text: $text)
.padding(30)
Button("発話") {
text2speech(text)
}
.font(.largeTitle)
.padding()
.background(Color.blue)
.foregroundColor(.white)
Spacer()
}
}
func text2speech(_ text: String) {
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
utterance.rate = 0.5
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
}
}
最後に
ネットで検索してもあまり出てこないのね
Speech to Textの方はいくらでも出てきましたが
Text to Speechは少ないですね(特に日本語記事!)
実際のところ
シミュレーターでは喋ってくれたのですが
実機にインストールしようとしても失敗しちゃうんですよね…
なんでだろ
環境
MacBook pro 2014 Mid Big Sur
Xcode 12.5
iPhone 12 Pro iOS 14.5.1
お願いします
インストールできない理由がわかる方居たら助けてください
よろしくお願いします
Communication with Apple failed.
Your maximum App ID limit has been reached.
You may create up to 10 App IDs every 7 days.
だそうです…