アーキテクチャ — 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のインターフェース(VADInterface、STTInterface、TTSInterface、EnhancerInterface)を直接実装するため、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 v3 | STT (114言語、8192 BPE語彙) | INT8 | 約500 MB |
| Kokoro-82M | TTS | INT8 | 約89 MB |
| Silero VAD v5 | 音声区間検出 | float32 | 約1.2 MB |
| DeepFilterNet3 | ノイズキャンセリング | FP16 | 約4.2 MB |
モデルの合計ダウンロード量は約1.2 GBです。初回ダウンロード後、すべての推論は完全にオフラインで実行されます。
推論: OnnxEngine
onnx_engine.hラッパーは、プラットフォームに応じた実行プロバイダー(EP)選択を提供します。実行時に利用可能なEPを探索し、グレースフルにフォールバックします。
| プラットフォーム | チップセット | アクセラレーション |
|---|---|---|
| Android | Snapdragon 8 Gen 1+ | NNAPI → Hexagon NPU |
| Android | Samsung Exynos 2200+ | NNAPI → Samsung NPU |
| Android | Google Tensor G2+ | NNAPI → Google TPU |
| 任意のAndroid | CPUフォールバック | XNNPACK |
QNN(Hexagon DSP)対応の自動車向けQualcomm SA8295P/SA8255Pについては、speech-core/examples/linuxを参照してください。
主要なC++ファイル
| ファイル | 目的 |
|---|---|
jni_bridge.cpp | speech_core::*モデルラッパーを構築し、VoicePipelineに参照を渡す |
parakeet_stt.cpp | TDTグリーディデコーダーと特徴量ごとのmel正規化を備えたSTT |
kokoro_tts.cpp | E2Eモデルとアテンションマスクを備えたTTS |
kokoro_phonemizer.cpp | TTS入力用の辞書ベースのphonemizer |
silero_vad.cpp | 音声区間検出 |
deepfilter.cpp | STFT/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