WWDC25:Bring advanced speech-to-text to your app with SpeechAnalyzer

speech-to-text に関するセッション。段階的に音声を追いながら精度を高めているというところが興味深かった。タイムコードをもとに、音声再生とテキストとを表示の上で対応づけられる点も面白い。


0:00 – Introduction

  • 新しい speech-to-text API SpeechAnalyzer を紹介
  • SpeechAnalyzer は Notes, Voice Memos, Journal など多くのシステムアプリで採用
  • Apple Intelligence と組み合わせることで通話要約などの強力な機能を実現
  • iOS 10 でで導入された SFSpeechRecognizer:音声テキスト変換モデルを提供
  • 短い音声入力で高い精度、Apple のサーバー活用
  • 一部ユースケースで期待に満たなかった
  • このセッションでは API の概要、新モデルの機能、実装デモを解説
  • iOS 26 で導入された SpeechAnalyzer
  • 高速かつ柔軟な新しい speech-to-text モデルを採用し
  • 長文や遠距離の音声(会議、会話など)に強い

2:41 – SpeechAnalyzer API

  • SpeechAnalyzer は分析セッションを管理し、SpeechTranscriber などの用途に応じたモジュールを追加して使用
  • 音声バッファは非同期で処理され、入力と結果は AsyncSequence で処理を分離
  • タイムコードを使って音声と結果を正確に関連付け
  • すべての API 操作はタイムコードでスケジュールされ、処理順序が予測可能に
  • モジュールの処理範囲が順番かつ重複せず、オーディオ全体を網羅
  • オプションで 暫定結果を有効にし、段階的な結果表示が可能
    • 発話と同時のリアルタイムで推測結果をおおまかに表示(Volatile results)
    • 音声とコンテクストを追加してあとから精度を上げて更新する(Finalized results)

7:03 – SpeechTranscriber model

  • SpeechTranscriber は Apple が設計した新しいオンデバイスモデルを採用
  • マイクから遠い話者がいる会議など、長文や会話のユースケースをサポート
  • 低遅延、高精度、高い可読性を実現し、ユーザーのプライバシーを保護
  • AssetInventory API を介して必要なモデルアセットをオンデマンドでインストール
  • モデルはシステムストレージに保持され、アプリのダウンロードサイズやメモリ使用量を圧迫しない
  • アップデートは自動的にインストール
  • 多くの言語に対応し、watchOS を除く全プラットフォームで利用可能
  • 未対応の言語やデバイス向けに、従来の SFSpeechRecognizer と同等の機能を持つ DictationTranscriber も提供

9:06 – Build a speech-to-text feature

  • SpeechAnalyzer を使ってライブ文字起こし機能を実装するデモを紹介
  • 音声を再生すると再生中に対応するテキストセグメントが自動でハイライト
  • 3つのステップで実装:SpeechTranscriber の設定、モデルの存在確認、結果のハンドリング
  • SpeechTranscriber を初期化し、volatile results や finalized results などのオプションを設定
  • AssetInventory を使って、文字起こしに必要な言語モデルがダウンロードされているか確認し、なければリクエスト
  • AsyncStream を介して返される結果オブジェクトには、AttributedString 形式のテキストと、isFinal プロパティが含まれる
  • volatileTranscriptfinalizedTranscript を個別に管理し、UIに反映
  • audioTimeRange 属性(CMTimeRange)を使って、音声再生とテキストのハイライトを同期
  • AVAudioEngine を使って音声入力ストリームを処理し、SpeechTranscriber に渡す
  • 録音停止時は、finalize を呼び出して volatile results を確定させることが重要
  • FoundationModels API と連携して、文字起こし結果からタイトルを生成するような応用も可能

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です