アーキテクチャ — Android

speech-androidは、speech-core C++エンジン上の薄いKotlin SDK + JNIブリッジです。すべてのML推論とパイプラインオーケストレーションはspeech-core内に存在し、speech-androidはAndroidパッケージングのみを担当します。Linux/自動車(Yocto、QNN対応のQualcomm SA8295P/SA8255P)はspeech-core/examples/linuxで直接ホストされています。

スタック

モデルラッパー(Silero VAD、Parakeet STT、Kokoro TTS、DeepFilterNet3)はspeech-coreのインターフェース(VADInterfaceSTTInterfaceTTSInterfaceEnhancerInterface)を直接実装するため、JNIブリッジはそれらを構築してspeech_core::VoicePipelineに参照を渡すだけで済み、C vtableアダプターのボイラープレートは不要です。

┌────────────────────────────────────────────────┐
│     SpeechPipeline (Kotlin public API)       │
│             ↓ JNI                            │
│     jni_bridge.cpp (~250 lines)              │
└──────────────────┬───────────────────────────┘
                   │
┌──────────────────┴───────────────────────────┐
│       speech_core_models (git submodule)      │
│   Silero / Parakeet / Kokoro / DeepFilter     │
│       speech_core                             │
│   ターン検出 · 割り込み · コンテキスト          │
└──┬────────┬────────┬────────┬────────────────┘
   │        │        │        │  direct interface impl
┌──┴──┐  ┌──┴──┐  ┌──┴──┐  ┌─┴────────┐
│ VAD │  │ STT │  │ TTS │  │ Enhancer │
└──┬──┘  └──┬──┘  └──┬──┘  └─┬────────┘
   └────────┴────────┴────────┘
       ONNX Runtime (CPU / NNAPI)

パイプライン

音声パイプラインは3つのステージを順次実行します:VAD → STT → TTS。音声区間検出が録音をトリガーし、STTが音声を文字起こしし、TTSが応答を生成します。バージイン(barge-in)サポートにより、応答の途中でユーザーが話し始めたときにTTS再生を中断できます。

speech-coreは、ターン検出、割り込み処理、会話コンテキストを管理します。モデルラッパーはspeech-coreのインターフェースを直接実装しており — C vtableアダプター層は存在しません — そのため、同じインターフェースに準拠する非ONNXバックエンド(例:speech-swiftのCoreML/MLX実装)も同様に容易に差し込むことができます。

モデル

すべてのモデルはデフォルトでINT8量子化のONNX形式を使用します。モデルはaufklarer組織下のHuggingFaceでホストされており、ModelManager.kt経由で初回使用時に自動ダウンロードされます。

モデルタスク量子化サイズ
Parakeet TDT v3STT (114言語、8192 BPE語彙)INT8約500 MB
Kokoro-82MTTSINT8約89 MB
Silero VAD v5音声区間検出float32約1.2 MB
DeepFilterNet3ノイズキャンセリングFP16約4.2 MB

モデルの合計ダウンロード量は約1.2 GBです。初回ダウンロード後、すべての推論は完全にオフラインで実行されます。

推論: OnnxEngine

onnx_engine.hラッパーは、プラットフォームに応じた実行プロバイダー(EP)選択を提供します。実行時に利用可能なEPを探索し、グレースフルにフォールバックします。

プラットフォームチップセットアクセラレーション
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
任意のAndroidCPUフォールバックXNNPACK

QNN(Hexagon DSP)対応の自動車向けQualcomm SA8295P/SA8255Pについては、speech-core/examples/linuxを参照してください。

主要なC++ファイル

ファイル目的
jni_bridge.cppspeech_core::*モデルラッパーを構築し、VoicePipelineに参照を渡す
parakeet_stt.cppTDTグリーディデコーダーと特徴量ごとのmel正規化を備えたSTT
kokoro_tts.cppE2Eモデルとアテンションマスクを備えたTTS
kokoro_phonemizer.cppTTS入力用の辞書ベースのphonemizer
silero_vad.cpp音声区間検出
deepfilter.cppSTFT/ERB処理によるノイズキャンセリング
onnx_engine.hプラットフォーム対応のONNX Runtimeラッパー(Android上のNNAPI、Linux上のQNN、CPUフォールバック)

モデルラッパーとonnx_engine.hは、モデル抽出リファクタリングでspeech-coreに移動しました。完全な一覧についてはdocs/models.mdを参照してください。

ソース構造

speech-android/
  speech-core/              C++ エンジン + ONNX モデルラッパー(git サブモジュール)
  sdk/src/main/
    cpp/jni_bridge.cpp      speech_core::VoicePipeline 上の薄い JNI ブリッジ
    cpp/CMakeLists.txt      add_subdirectory(SPEECH_CORE_WITH_ONNX=ON) で speech-core を取得
    kotlin/.../speech/      Kotlin パブリックSDK (SpeechPipeline, ModelManager)
  sdk/src/androidTest/      インストルメント化されたE2Eテスト
  app/                      デモアプリケーション

Linux / 自動車(C ABI、ALSA デモ、CLI ツール)は以下に配置されています:
  speech-core/examples/linux/

ソースコード: github.com/soniqo/speech-android