アーキテクチャ — 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 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
自動車SA8295P / SA8255PQNN → Hexagon DSP
任意CPUフォールバックXNNPACK

主要なC++ファイル

ファイル目的
jni_bridge.cppONNXモデル実装をvtables経由でspeech-core C APIに接続
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フォールバック)
linux/src/speech.cppLinux C API実装
linux/include/speech.hLinuxパブリック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