iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
文章を読み上げる機能は、過去、様々な年化があったが、これが現在の方法のようだ。
文章と音声の設定する。
// Create an utterance.
let utterance = AVSpeechUtterance(string: text)
// Configure the utterance.
utterance.rate = 0.57
utterance.pitchMultiplier = 0.8
utterance.postUtteranceDelay = 0.2
utterance.volume = 0.8
// Retrieve the Japanese voice.
let voice = AVSpeechSynthesisVoice(language: "ja-JP")
// Assign the voice to the utterance.
utterance.voice = voice
文章を読み上げる。
// Create a speech synthesizer.
synthesizer = AVSpeechSynthesizer()
// Tell the synthesizer to speak the utterance.
synthesizer!.speak(utterance)
これをSwiftUIで利用できるようにする。
struct ContentView: View {
@State var text = ""
@State var synthesizer: AVSpeechSynthesizer?
var body: some View {
VStack {
TextField("Input text", text: $text)
Button(action: {
// Create an utterance.
let utterance = AVSpeechUtterance(string: text)
// Configure the utterance.
utterance.rate = 0.57
utterance.pitchMultiplier = 0.8
utterance.postUtteranceDelay = 0.2
utterance.volume = 0.8
// Retrieve the Japanese voice.
let voice = AVSpeechSynthesisVoice(language: "ja-JP")
// Assign the voice to the utterance.
utterance.voice = voice
// Create a speech synthesizer.
synthesizer = AVSpeechSynthesizer()
// Tell the synthesizer to speak the utterance.
synthesizer!.speak(utterance)
}) {
Text("Say")
}
}
.padding()
}
}
#Preview {
ContentView()
}
文章やAVSpeechSynthesizerのインスタンスは@Stateで永続的に保持し、バインディングでTextFieldの値を渡している。