メインコンテンツまでスキップ

音声合成

選択中の AI プロバイダーでテキストを音声に変換し、アプリで再生または処理できるローカル音声ファイルを受け取ります。

前提条件

  • AIBudsAISDK が初期化済みで、登録済みのプロバイダーが選択されていること。
  • プロバイダーが TTSServiceAPI に対応していること。
  • 必要な場合に、プロバイダー認証とネットワーク接続を利用できること。
  • 公開 SDK の仕様に従い、音声合成をバックグラウンドスレッドから呼び出すこと。

AI を活用して実装

AI で実装

AI でこのワークフローを実装

公式の「AIBuds テキスト読み上げの実装」スキルを使い、アプリに合わせて実装します。

https://docs-aibuds.github.io/ja/skills/implement-aibuds-text-to-speech を読み、その指示に従ってください。このスキルで「AIBuds テキスト読み上げの実装」をこの iOS プロジェクトに実装し、検証してください。
公式スキルを見る

API リファレンス

フレームワーク

AIBudsAI.xcframework

インポート

Swift
import AIBudsAI
import AIBudsAIFoundation

宣言

Swift
/// Synthesizes text into speech.
/// - Parameters:
///   - text: The text to synthesize.
///   - config: The synthesis configuration.
///   - completion: Called with the task identifier, success state, optional
///     result, and optional error when synthesis completes.
/// - Important: Call this method from a background thread to avoid blocking
///   the main thread.
public static func synthesizeText(_ text: String,
                                  config: TTSConfig = .default,
                              completion: ((
                                  _ taskId: String?,
                                  _ success: Bool,
                                  _ response: TTSResultModel?,
                                  _ error: NSError?
                              ) -> Void)? = nil) -> Void

synthesizeText を参照してください。

設定と結果

TTSConfig は任意の speakerId を公開します。nil の場合は、プロバイダーの既定話者が選択されます。

成功すると、TTSResultModel から次の値を取得できます。

プロパティ説明
audioFileアプリの Documents ディレクトリを基準とする音声ファイルの相対パス。
audioFilePath生成された音声ファイルのフルパス。
audioFormat生成された音声ファイルの形式。

使用例

Swift
let config = TTSConfig.default
config.speakerId = nil

DispatchQueue.global(qos: .userInitiated).async {
    AIBudsAISDK.synthesizeText(
        "Hello, how can I help you?",
        config: config
    ) { taskId, success, response, error in
        guard success, let response else {
            print(error?.localizedDescription ?? "Synthesis failed")
            return
        }

        print("Task: \(taskId ?? "Unavailable")")
        print("Audio: \(response.audioFilePath)")

        DispatchQueue.main.async {
            playAudio(atPath: response.audioFilePath)
        }
    }
}

注意事項

  • この API は音声ファイルを生成するだけで、デバイスでの再生は開始しません。また、stopSpeaking()isSpeaking() は公開していません。
  • successresponseerror をまとめて判定します。成功とみなすには success == true かつ応答値が nil ではないことが必要です。
  • 話者 ID はプロバイダー固有です。選択中のプロバイダーが文書化している ID だけを設定してください。
  • UI と音声プレーヤーの更新はメインスレッドへ戻してください。