本文へスキップ
hdknr blog
戻る

Microsoft VibeVoice 徹底解説 — 60分の文字起こしと長尺音声合成をローカル無料で(OSS音声AI)

VibeVoice は、60 分の長尺 ASR(音声認識)と 90 分のマルチ話者 TTS(音声合成)をローカル無料で実現する Microsoft 製の OSS 音声 AI。本記事では特徴・モデル構成・TTS コード削除の経緯を解説する。

microsoft/VibeVoice は GitHub スター数 45,000 超(2026-04-29 時点)。ICLR 2026 に Oral 採択されたペーパーも公開されており、ASR・TTS の両領域で「フロンティア級」と呼べる性能を、軽量モデルで提供している。一方で、後述のとおり利用可能性については重要な注意点がある。

VibeVoice とは何か

VibeVoice は、TTS と ASR を統合した「音声 AI モデルファミリー」として Microsoft Research が公開している OSS。中核のイノベーションは、7.5 Hz という超低フレームレートで動作する連続音声トークナイザー(Acoustic + Semantic)を用いて、長尺音声の処理効率と忠実度を両立した点にある。

LLM(Qwen2.5 1.5B ベース)が文脈・対話の流れを理解し、Diffusion ヘッドで高品質な音響細部を生成する next-token diffusion フレームワークを採用している。

モデルラインナップ

モデルパラメータ用途状態
VibeVoice-ASR-7B7B60分対応の話者識別付き音声認識✅ 利用可能
VibeVoice-TTS-1.5B1.5B90分・最大4話者の長尺TTS⚠️ コード削除済み
VibeVoice-Realtime-0.5B0.5B約300ms の低遅延ストリーミングTTS✅ 利用可能

1. VibeVoice-ASR — 60分の長尺音声認識(文字起こし)

従来の ASR は音声を短いチャンクに分割するため、長尺になると話者識別や文脈の一貫性が失われやすい。VibeVoice-ASR は 64K トークン長で最大 60 分の連続音声を 1 パスで処理できる。

主な特徴:

オンラインの Playground で試せる。

2. VibeVoice-Realtime-0.5B — 300ms 起動のリアルタイム音声合成

リアルタイム音声生成向けの軽量モデル。

Colab デモ で実際に動かせる。

3. VibeVoice-TTS-1.5B — 90分・4話者の長尺TTS(提供停止中)

ICLR 2026 に Oral 採択された目玉モデル。1パスで最大 90 分、最大 4 話者の対話音声を、話者一貫性を保ったまま生成できる。ただし、後述の事情により現状はコードが削除されている

⚠️ VibeVoice-TTS のコードは削除されている

リポジトリの News セクションに、Microsoft からの以下の声明が掲載されている:

2025-09-05: VibeVoice is an open-source research framework intended to advance collaboration in the speech synthesis community. After release, we discovered instances where the tool was used in ways inconsistent with the stated intent. Since responsible use of AI is one of Microsoft’s guiding principles, we have removed the VibeVoice-TTS code from this repository.

つまり、2025-08-25 に公開された VibeVoice-TTS は、意図に反する使われ方(おそらくディープフェイク等の悪用)が確認されたため、Microsoft が同年 9 月にコードをリポジトリから削除している。README のモデル一覧でも VibeVoice-TTS-1.5B の Quick Try は “Disabled” と表示されている。

ペーパーや Hugging Face のウェイト情報は残っているが、「Microsoft 公式の TTS-1.5B をすぐに動かす」ことは現状できない。代替として:

ライセンスと商用利用上の留意点

VibeVoice の README 末尾には「Risks and Limitations」セクションがあり、以下の警告が明記されている:

実際に TTS コードが削除された前例があるため、配布形態が今後変わる可能性も念頭に置きたい。

iPad / iPhone を入力端末とする場合の典型構成

iPadOS / iOS には Python ランタイムも CUDA も無いため、端末側でモデルを動かすことは現実的ではない。代わりに、端末は録音・再生・UI に専念し、推論はサーバ側 GPU で行う構成が定番となる。

iPad/iPhoneを入力端末としてVibeVoiceシステムを組む典型構成図。クライアント層(iPad/iPhone)でマイク入力・スピーカー再生・音声エンコードを行い、HTTPSとWebSocket経由でEdge層(CDN・リバースプロキシ・APIゲートウェイ)に接続。アプリケーション層(FastAPI・ジョブキュー・ストリーミングルータ)が推論層(GPU上のVibeVoice-ASR-7BとRealtime-0.5B)を呼び出し、ストレージ層(S3・PostgreSQL・Redis・Vault)に音声・トランスクリプト・状態を保存する全体アーキテクチャ

各層の役割

想定ユースケース

ユースケース端末側サーバ側
60分録音 → 文字起こし録音→アップロード→進捗を SSE で受信非同期キュー → ASR-7B → 結果を DB 保存
リアルタイム文字起こしマイクストリーム送信WebSocket で ASR ストリーミング推論
テキスト読み上げ文字列送信→音声受信→再生Realtime-0.5B で 300ms レイテンシ生成

このパターンの利点

応用: 準リアルタイム議事録生成への発展構成

VibeVoice-ASR は本来「60分の長尺音声を 1 パスで処理して精度を出す」モデルであり、Whisper のように低遅延ストリーミング向けには設計されていない。それでも、議事録ユースケースで「会議中の暫定字幕」と「会議終了直後の高品質確定版」を両立させるには、3 レーン並走の構成が有効である。

準リアルタイム議事録生成のアーキテクチャ図。クライアント(iPad/iPhone)が30秒ローリングチャンクで連続録音し、Session Orchestratorが3つのレーン(Quickレーン:30秒チャンクで暫定字幕、Refinementレーン:5〜10分ウィンドウで文脈補正、Finalレーン:会議終了時に最大60分1パスで確定議事録とLLM要約)に音声を分配。GPU PoolではvLLMが優先度キューでQuick/Refine/Finalを共用処理し、Storage層では暫定/補正/確定の3版トランスクリプトとMarkdown議事録、ホットワード辞書を保存する全体構成

3 つのレーン

レーン入力役割体感遅延表示
🔥 Quick直近 30 秒チャンク(5 秒重複)暫定字幕の即時生成30〜35 秒🟡 黄色 = 暫定
🔄 Refinement直近 5〜10 分のスライディング文脈で固有名詞・代名詞を解決5〜10 分ごとに更新🟢 緑 = 補正済み
🏁 Finalセッション全音声(最大 60 分)確定議事録 + LLM 要約会議終了から数分🔵 青 = 確定

クライアント側は色で確度を視覚化することで、まだ確定していない情報を読者が判断できるようにする。

Session Orchestrator の責務

30秒チャンク到着 → 累積バッファに追加
              ├→ Quick レーン即時発火(毎回)
              ├→ Refinement レーン条件発火(5〜10分経過 or N チャンクごと)
              └→ END イベントで Final レーン発火

トランスクリプトマージャ:
  Quick 結果でライブストリーム開始
  → Refinement 結果で同区間を上書き(タイムスタンプ整合)
  → Final 結果で全体を確定置換

Redis Streams などの Pub/Sub で「暫定 → 補正 → 確定」を同じ WebSocket チャネルから順次配信すれば、クライアントは差分だけ受け取って画面を更新できる。

GPU プールと優先度設計

3 レーンが同じ vLLM サーバを共有する場合、優先度キューで「Quick > Refine > Final」を守ることが重要だ。Quick が遅延すると暫定字幕の体験が崩れるため、最低 1 枚は Quick 専用 GPU を確保する設計が現実的。

GPU 用途推奨スペックスケーリング
Quick 専用A10 / L4(軽量・常時稼働)会議数に応じて水平
Refinement + FinalA100 / H100(バースト)オートスケール
LLM 要約マネージド API(Claude / GPT)でも可API 課金で十分

Quick レーンが渋滞した場合のフォールバックとして、端末側 SFSpeechRecognizer(iPad/iPhone のオフライン ASR)に切り替える設計も組み込んでおくと、ネットワーク劣化時にも字幕表示が止まらない。

ホットワードでの精度向上

VibeVoice-ASR の強みであるカスタムホットワードは、議事録ユースケースで特に効果を発揮する:

セッション開始時にこれらを Vault 内のホットワード辞書から読み込んで全レーンに渡せば、固有名詞の認識精度が大幅に向上する。

ストレージ保存ポリシー

3 版のトランスクリプトを永続化するとコストが嵩むため、TTL を分けて運用するのが定石:

この構成の限界と注意点

AWS マネージドサービスへのマッピング

3 レーン構成を AWS にデプロイする場合の典型構成。サーバレス(API Gateway / Lambda / Step Functions / SQS / Bedrock)と GPU 常駐(ECS on EC2 / SageMaker)を使い分ける。

VibeVoice準リアルタイム議事録のAWSマネージドサービス構成図。クライアントはRoute53→CloudFront→WAF→API Gateway(WebSocket+REST)経由でVPC内のECS Fargate(Session Orchestrator)に接続。SQSの3キュー(quick標準、refine FIFO、final EventBridge起動)がそれぞれECS on EC2 g5(Quick常時稼働)、ECS Capacity Provider(Refinement)、SageMaker Async Endpoint(Final)にディスパッチ。Step Functionsが音声連結→ASR→Bedrock Claude要約→Aurora保存をオーケストレーション。ElastiCache Redis StreamsがWebSocket Connection ID管理と暫定/補正/確定字幕のFan-out配信を担当し、S3 Intelligent Tiering+Aurora Serverless v2+KMS+Cognito+Secrets Managerでデータと認証を保護

サービス対応表

役割採用サービス備考
認証Cognito User Pool + API Gateway オーソライザiOS は Keychain にトークン保管
エッジRoute 53 / CloudFront / WAF / ShieldDDoS と TLS 終端
APIAPI Gateway(REST + WebSocket)$connect/$disconnect 管理、postToConnection で字幕配信
アプリECS Fargate(Session Orchestrator)FastAPI コンテナ、Internal ALB
Quick レーンECS on EC2 g5.xlarge (A10G)常時稼働、Service Auto Scaling
Refinement レーンECS Capacity Provider g5.2xlargeSQS FIFO 駆動 / スポット可
Final レーンSageMaker Async Endpointゼロスケール対応、Step Functions から呼び出し
ジョブキューSQS Standard / FIFO + DLQFIFO は MessageGroupId=sessionId で順序保証
オーケストレーションStep FunctionsEND イベント → 連結 → ASR → Bedrock → 保存
Pub/Sub・キャッシュElastiCache for Redis (cluster)Redis Streams で字幕 Fan-out
LLM 要約Amazon Bedrock(Claude Sonnet 4.6)Guardrails で PII マスキング
音声 / 議事録S3 Intelligent Tiering + SSE-KMSLifecycle で 30 日後 Glacier
トランスクリプト DBAurora PostgreSQL Serverless v2暫定/補正/確定の 3 版を保存
イベント連携EventBridgeEND 検知 / 後続ワークフロー(Slack 通知等)
機密情報Secrets Manager + KMSBedrock キー、ホットワード辞書
監視CloudWatch + X-Rayキュー深度・遅延 P50/P95
ネットワークVPC + VPC EndpointsS3 / Bedrock / SQS は NAT を経由しない

AWS 固有の設計ポイント

コスト試算(東京リージョン・1 日 10 セッション × 60 分の場合)

項目概算(月額 USD)
g5.xlarge × 1 常時稼働(Quick)$750
g5.2xlarge スポット(Refinement、ピーク時)$200
SageMaker Async Endpoint(Final、推論時間課金)$50
Bedrock Claude Sonnet 4.6(要約)$30
S3 + Aurora Serverless v2 + ElastiCache + SQS + API Gateway$150
合計約 $1,200 / 月

GPU 常時稼働分が支配的なので、夜間の Quick GPU を停止する運用ができれば 30〜40% カットできる。

Bedrock を採用する理由

LLM 要約に外部 API(Claude API 直叩き)を使うこともできるが、Bedrock を選ぶ動機は次の通り:

iPad / iPhone クライアントのプログラム構成

クライアント側は Swift 6 + SwiftUI ネイティブアプリを推奨する。理由は次の通り:

4 層構成(Clean Architecture)

iPad/iPhoneクライアントのSwift 6 + SwiftUIレイヤード構成図。Presentation層にRecordingView/LiveCaptionView/MinutesView/HistoryListView/SettingsViewとDesignSystem。Application層に@Observable ViewModel群(RecordingViewModel・CaptionViewModel・MinutesViewModel)とSessionStateMachine(Actor)、AppRouter、ErrorRouter。Domain層にStartSession/StreamAudio/ReceiveCaptions/EndSession/ExportMinutesの各UseCaseと、Foundation のみに依存するピュアモデル(Session/AudioChunk/Caption/Speaker/Minute/Hotword)、Repositoryプロトコル群。Infrastructure層にAudio Pipeline(AVAudioEngine + ChunkerActor + SFSpeechRecognizerフォールバック)、Network(URLSessionWebSocketTask + APIClient + NWPathMonitor)、Auth+Persistence(Cognito + Keychain + SwiftData)、Lifecycle/Background(BGTaskScheduler + APNs + ScenePhase)の4ブロック。依存方向はView→ViewModel→UseCase→Repositoryプロトコルで、Infrastructureが具体実装を差し込む構成

役割主な要素
🎨 PresentationSwiftUI View / DesignSystemRecordingView / LiveCaptionView / MinutesView / HistoryListView / SettingsView
🧩 Application@Observable ViewModel と状態遷移RecordingViewModel / CaptionViewModel / SessionStateMachine(Actor) / AppRouter
🧠 DomainUseCase + ピュアモデル(Foundation のみ)StartSessionUseCase / StreamAudioUseCase / ReceiveCaptionsUseCase / EndSessionUseCase / Repository protocol 群
InfrastructureApple SDK / AWS SDK の具体実装AVAudioEngine / URLSessionWebSocketTask / Cognito / Keychain / SwiftData / BGTaskScheduler

依存方向は 上 → 下の単方向。Infrastructure を protocol の裏に隠すことで、Domain と Application は単体テストがフレームワーク非依存・高速で回る。

キーモジュールの設計

🎙 Audio Pipeline(Actor で並行安全)

actor AudioChunker {
    private let engine = AVAudioEngine()
    private var buffer: [Int16] = []

    func chunks() -> AsyncStream<AudioChunk> {
        AsyncStream { continuation in
            engine.inputNode.installTap(onBus: 0, bufferSize: 4096, format: format) { buf, _ in
                Task { await self.append(buf) }
            }
            Task { await self.startWindowTimer(continuation: continuation) }
        }
    }
}

🌐 WebSocket クライアント(再接続ロジック内蔵)

actor WebSocketClient {
    private var task: URLSessionWebSocketTask?
    private var backoff = ExponentialBackoff(initial: 0.5, max: 30)

    func send(_ chunk: AudioChunk) async throws { /* ... */ }
    func receive() -> AsyncThrowingStream<CaptionEvent, Error> { /* ... */ }
}

🔐 認証は Cognito + Keychain

🟡🟢🔵 字幕の差分マージ

サーバから WebSocket で来る CaptionEvent はタイムスタンプ付きで届く:

enum CaptionTier { case provisional, refined, final }

struct CaptionEvent {
    let sessionId: UUID
    let timeRange: Range<TimeInterval>
    let speaker: SpeakerID
    let text: String
    let tier: CaptionTier
}

@Observable
final class CaptionViewModel {
    private(set) var captions: [Caption] = []

    func apply(_ event: CaptionEvent) {
        captions.upsert(event)
    }
}

🔁 バックグラウンドとプッシュ通知

状況仕組み
アプリが背景に回るUIBackgroundModes: audio で録音継続
電話で中断AVAudioSession.interruptionNotification でセッション保留→復帰
ネットワーク切断中の録音チャンクを FileManager のローカル音声バッファに保存
復帰時の再送BGTaskScheduler で再アップロード
確定議事録の通知EventBridge → SNS → APNs → UNUserNotificationCenter

モジュール分割(Swift Package)

Sources/
├── App/                  # @main エントリ
├── Features/
│   ├── Recording/
│   ├── Captions/
│   ├── Minutes/
│   └── History/
├── DesignSystem/         # Color, Typography, Components
├── Domain/               # UseCase + Models + Repository protocols
├── Data/                 # Repository 実装
├── Infrastructure/
│   ├── Audio/
│   ├── Network/
│   ├── Auth/
│   └── Persistence/
└── TestSupport/          # Mock Repository

Package.swift で Feature ごとにターゲット分離すれば、ビルドが並列化されて開発速度が上がる。

iPadOS 特有の配慮

テスト戦略

まとめ — 何ができて、何ができないか

VibeVoice の 2026-04-29 時点で利用可能なもの:

現状利用が制限されているもの:

「ローカルで完全無料で動く長尺ASR」という用途では、現状 VibeVoice-ASR が最有力候補と言える。一方、長尺マルチ話者 TTS については、Microsoft 自身が責任ある AI の観点から提供を停止している点を踏まえて代替手段を検討する必要がある。

参考リンク



前の記事
Warp がオープンソース化 — AI エージェントが主役を担う新しい開発協働モデル
次の記事
22歳の学生が $5 から 370 万ドルを稼いだ Polymarket アルゴトレーディング戦略の全解析