ガイド

Swift で iOS アプリに自然な音声読み上げを

iOS の音声読み上げは AVSpeechSynthesizer から始まります。Swift を数行書けば、スマホが内蔵の声でどんなテキストもオフラインで無料で読み上げます。ただ、その声はユーザーが入れているものしだいで、ほかのアプリと同じ声です。

無料の SuperClonica エンジンなら、iOS や macOS のアプリに独自の自然な声を持たせられます。方法は2つ。アプリに同梱する事前音声化ファイルか、アプリが呼び出す音声サーバーです。このガイドでは両方を Swift のコード付きで紹介し、AVSpeechSynthesizer で十分な場面も説明します。

iOS アプリを話させる3つの方法

多くのアプリは組み合わせます。UI には同梱のセリフ、ユーザーのテキストにはサーバー、予備にシステムの声。

  • AVSpeechSynthesizer:システムの声。オフラインで無料ですが、ユーザーの環境しだいです。
  • 同梱の音声:決まったセリフを SuperClonica で一度音声化してアプリに入れます。
  • 音声サーバー:アプリが SuperClonica サーバーにテキストを送り、返ってきた WAV を再生します。
  • SuperClonica は31言語を話します。中国語にはまだ対応していません。

無料でオンラインで声を選ぶ

どの声のページでも、アプリのセリフを30〜100文字で入力し、言語を選んで生成ボタンを押します。数秒で合う声かが分かります。アカウント不要で、iPhone からそのまま使えます。

音声化したセリフを同梱

同梱ファイルはオフラインで遅延もありませんが、変更には新しいアプリのバージョンが必要です。

  • Mac でエンジンを使ってセリフを音声化:python -m pip install superclonica-cpu のあと、superclonica --text "おかえりなさい!" --voice F1 --lang ja --output welcome.mp3。
  • ファイルを Xcode プロジェクトに追加し、アプリのバンドルにコピーされるようにします。
  • AVFoundation で再生:player = try AVAudioPlayer(contentsOf: Bundle.main.url(forResource: "welcome", withExtension: "mp3")!); player.play()
  • player はクラスのプロパティで保持しましょう。ローカルの AVAudioPlayer は解放されるとすぐ止まります。

自前の音声サーバーを呼ぶ

自分で管理するマシンでサーバーを動かします:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。iOS は既定で HTTPS を求めるので証明書の内側に置き、SUPERCLONICA_API_KEY を設定して自分のアプリだけが使えるようにします。セリフ1つがリクエスト1回です:var request = URLRequest(url: URL(string: "https://tts.example.com/synthesize")!); request.httpMethod = "POST"; request.setValue("application/json", forHTTPHeaderField: "Content-Type"); request.httpBody = try JSONEncoder().encode(["text": "ご注文の商品を発送しました。", "voice": "F1", "lang": "ja"]); let (data, _) = try await URLSession.shared.data(for: request); player = try AVAudioPlayer(data: data); player.play() キーを Authorization ヘッダーで付け、くり返すセリフのデータはキャッシュしましょう。

AVSpeechSynthesizer で十分なとき

通知の読み上げ、アクセシビリティ補助、プロトタイプ、ネットなしで話す必要のあるアプリなど、声が「伝わればよい」なら AVSpeechSynthesizer で十分です。語学の先生、ゲームキャラクター、ガイド付き瞑想、どのユーザーにも同じ声で聞こえるべきブランドなど、声が製品の一部なら SuperClonica を選びましょう。