💁♀️
【iOS】AVSpeechSynthesizerでiPhoneを喋らせてみる
iOSのAVSpeechSynthesizerでiPhoneを喋らせてみよう
AVSpeechSynthesizer
を使用することで、テキストを自然な音声で読み上げさせることが可能になります。この記事では、様々な話し方でiPhoneに喋らせる方法を紹介します。
-
Avspeechsynthesizer
https://developer.apple.com/documentation/avfaudio/avspeechsynthesizer/
話し方の実装
TextToSpeechConverter
クラスでは、speakFast
、speakSlow
、speakHighPitch
、speakLowPitch
、およびspeakNormal
の各メソッドを公開します。これらのメソッドは、それぞれ異なるパラメータをAVSpeechUtterance
に設定し、AVSpeechSynthesizer
を使ってテキストを読み上げます。
public class TextToSpeechConverter {
let speechSynthesizer:AVSpeechSynthesizer
public init() {
speechSynthesizer = AVSpeechSynthesizer()
}
// 早口で話す
public func speakFast(text: String, language: String = "ja-JP") {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: language)
speechUtterance.rate = AVSpeechUtteranceMaximumSpeechRate
speechUtterance.pitchMultiplier = 1.0
speechUtterance.volume = 1.0
speechSynthesizer.speak(speechUtterance)
}
// ゆっくり話す
public func speakSlow(text: String, language: String = "ja-JP") {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: language)
speechUtterance.rate = AVSpeechUtteranceMinimumSpeechRate
speechUtterance.pitchMultiplier = 1.0
speechUtterance.volume = 1.0
speechSynthesizer.speak(speechUtterance)
}
// 高いピッチで話す
public func speakHighPitch(text: String, language: String = "ja-JP") {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: language)
speechUtterance.rate = AVSpeechUtteranceDefaultSpeechRate
speechUtterance.pitchMultiplier = 2.0
speechUtterance.volume = 1.0
speechSynthesizer.speak(speechUtterance)
}
// 低いピッチで話す
public func speakLowPitch(text: String, language: String = "ja-JP") {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: language)
speechUtterance.rate = AVSpeechUtteranceDefaultSpeechRate
speechUtterance.pitchMultiplier = 0.5
speechUtterance.volume = 1.0
speechSynthesizer.speak(speechUtterance)
}
// 通常の話し方
public func speakNormal(text: String, language: String = "ja-JP") {
let speechUtterance = AVSpeechUtterance(string: text)
speechUtterance.voice = AVSpeechSynthesisVoice(language: language)
speechUtterance.rate = AVSpeechUtteranceDefaultSpeechRate
speechUtterance.pitchMultiplier = 1.0
speechUtterance.volume = 1.0
speechSynthesizer.speak(speechUtterance)
}
}
SwiftUIの作成
SwiftUIを使用して、ユーザーが異なる話し方を選択できるインターフェースを提供します。AVSpeechSynthesizerView
という名前のビューを定義し、内部でTextToSpeechConverter
のインスタンスを使用して、ボタンタップに応じてテキストの読み上げを行います。
struct AVSpeechSynthesizerView: View {
private let speechConverter = TextToSpeechConverter()
var body: some View {
VStack(spacing: 20) {
Button("早口で話す") {
speechConverter.speakFast(text: "こんにちは、世界!")
}
Button("ゆっくり話す") {
speechConverter.speakSlow(text: "今日はいい天気ですね。")
}
Button("高いピッチで話す") {
speechConverter.speakHighPitch(text: "何をして遊びますか?")
}
Button("低いピッチで話す") {
speechConverter.speakLowPitch(text: "昨日は遅くまで起きていました。")
}
Button("通常の話し方") {
speechConverter.speakNormal(text: "このアプリは音声合成をサポートしています。")
}
}
}
}
実装のポイント
-
言語の選択:
AVSpeechSynthesisVoice
を使用して、読み上げる言語を指定します。これにより、多言語アプリケーションに対応できます。 -
読み上げ速度の調整:
AVSpeechUtterance
のrate
プロパティを変更することで、読み上げの速度を調整できます。 -
ピッチの調整:
pitchMultiplier
プロパティを使って、声の高さ(ピッチ)を調整します。 -
音量の調整:
volume
プロパティで、読み上げの音量を調整できます。
まとめ
以上がAVSpeechSynthesizerで発話させる方法でした。
今回の実装は下記のリポジトリで確認できますので、合わせて確認してください
Discussion