アーキテクチャ — Android と Linux
speech-androidは、プラットフォーム固有のフロントエンドを備えた共有C++コアを通じて、AndroidおよびembedデッドLinux向けにオンデバイス音声処理を提供します。すべての推論はハードウェアアクセラレーション実行プロバイダーを備えたONNX Runtimeを使用してローカルで実行されます。
クロスプラットフォームスタック
AndroidとLinuxはspeech-core C++サブモジュールを共有しており、完全な音声パイプラインを調整します。各プラットフォームは、vtableベースのインターフェースを通じてspeech-coreに委譲する薄いフロントエンドを提供します。
┌────────────────────────────────────────────────┐
│ Android: SpeechPipeline (Kotlin/JNI) │
│ Linux: speech.h (C API) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech-core (C++ サブモジュール) │
│ ターン検出 · 割り込み · コンテキスト │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ vtables
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI / QNN)プラットフォームパス
Android
Kotlin SDK(SpeechPipeline.kt)がパブリックAPIを提供します。JNIを通じてjni_bridge.cppを呼び出し、speech-coreにvtableコールバックを登録します。ONNX RuntimeはNNAPI実行プロバイダーで動作し、Qualcomm、Samsung、Googleのチップセット上でハードウェアアクセラレーションを提供します。
Kotlin SDK → JNI ブリッジ → speech-core → ONNX Runtime (NNAPI)Linux
C API(speech.h)は、embedded Linuxターゲット(自動車、Yocto)向けに同じパイプラインを公開します。Qualcomm自動車プラットフォーム(SA8295P、SA8255P)では、ONNX RuntimeはQNN実行プロバイダーを使用してHexagon DSPアクセラレーションを行います。
C API → speech-core → ONNX Runtime (QNN)パイプライン
音声パイプラインは3つのステージを順次実行します:VAD → STT → TTS。音声区間検出が録音をトリガーし、STTが音声を文字起こしし、TTSが応答を生成します。バージイン(barge-in)サポートにより、応答の途中でユーザーが話し始めたときにTTS再生を中断できます。
speech-coreは、ターン検出、割り込み処理、会話コンテキストを管理します。モデル実装(VAD、STT、TTS、Enhancer)はC vtableインターフェースを通じて差し込まれ、コアパイプラインロジックをプラットフォームに依存しないものにします。
モデル
すべてのモデルはデフォルトで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 |
| 自動車 | SA8295P / SA8255P | QNN → Hexagon DSP |
| 任意 | CPUフォールバック | XNNPACK |
主要なC++ファイル
| ファイル | 目的 |
|---|---|
jni_bridge.cpp | ONNXモデル実装をvtables経由でspeech-core C APIに接続 |
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フォールバック) |
linux/src/speech.cpp | Linux C API実装 |
linux/include/speech.h | Linuxパブリックcヘッダー |
ソース構造
speech-android/
speech-core/ C++ サブモジュール(パイプラインオーケストレーション)
sdk/src/main/
cpp/ ONNX Runtime モデル実装、JNIブリッジ、音声DSP
kotlin/.../speech/ Kotlin パブリックSDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ インストルメント化されたE2Eテスト(23テスト、5スイート)
linux/
include/speech.h パブリックCヘッダー
src/speech.cpp Linux C API 実装
tests/ Linux テストスイート(11テスト)
app/ デモアプリケーションソースコード: github.com/soniqo/speech-android