はじめに — Android

speech-androidはONNX Runtimeを使用してAndroid上でオンデバイス音声処理を提供します。パイプラインはVAD + STT + TTSをバージインサポートで実行し、モデルダウンロード後は完全にオフラインで動作します。

動作要件

すぐに試すためにプリビルドデモアプリをダウンロード:

Gradle依存関係

build.gradle.ktsにSDKを追加します:

implementation("audio.soniqo:speech:0.0.9")

クイックスタート

val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
    when (event) {
        is SpeechEvent.TranscriptionCompleted -> println(event.text)
        is SpeechEvent.ResponseDone -> pipeline.resumeListening()
        else -> {}
    }
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32
重要

モデルは初回使用時にHuggingFaceから自動ダウンロードされます(合計約1.2 GB)。初回ダウンロード後、すべての推論は完全にオフラインで実行されます。

システム音声入力 (RecognitionService)

SDK には、Android フレームワークの SpeechRecognizer API に組み込めるすぐに使える SpeechRecognitionService が含まれています — コードを書く必要はありません。アプリがデフォルトの音声認識サービスに選択されると、SpeechRecognizer.createSpeechRecognizer(context)(ComponentName なし)を呼び出す任意のサードパーティアプリが、あなたのパイプラインを通じて完全なオンデバイス STT を利用できます。

1. AndroidManifest.xmlRECORD_AUDIO とサービスを宣言します:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application>
    <service
        android:name="audio.soniqo.speech.service.SpeechRecognitionService"
        android:exported="true"
        android:permission="android.permission.RECORD_AUDIO">
        <intent-filter>
            <action android:name="android.speech.RecognitionService" />
        </intent-filter>
        <meta-data
            android:name="android.speech"
            android:resource="@xml/recognition_service" />
    </service>
</application>

2. app/src/main/res/xml/recognition_service.xml を追加します:

<?xml version="1.0" encoding="utf-8"?>
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" />

3. サービスをシステムデフォルトに設定します(標準 Android では 設定 → システム → 言語と入力 → 音声入力ピッカー、または adb 経由):

adb shell settings put secure voice_recognition_service \
  your.package/audio.soniqo.speech.service.SpeechRecognitionService

4. デモアプリの Recognizer test 画面を実行して確認します。これは SpeechRecognizer.createSpeechRecognizer(ctx)(コンポーネントなし)を呼び出し、すべてのフレームワークコールバックをログに記録します — logcat なしで binder のラウンドトリップを確認するのに便利です。

サービスは onCheckRecognitionSupport(API 33+)を実装し、Parakeet TDT v3 がカバーする 27 の BCP-47 言語を返します。モデルが存在する場合は installedOnDeviceLanguage、ダウンロード中は pendingOnDeviceLanguage でマークされます。セッション中は AUDIOFOCUS_GAIN_TRANSIENT でオーディオフォーカスを取得します。

注意

Gboard、Samsung Keyboard、Google Assistant は独自の認識エンジンを同梱しており、システムデフォルトをスキップします。あなたのサービスを通過するのは、フレームワーク SpeechRecognizer API を明示的に呼び出すアプリ(またはその上に独自 UI を構築するアプリ)です。

モデル

すべてのモデルはNNAPIアクセラレーションを備えたONNX Runtime経由で実行されます。デフォルトでINT8量子化されます。

モデルタスクサイズ
Parakeet TDT v3 (INT8)音声認識 (114言語)490 MB
Kokoro-82M (INT8)音声合成 (7言語)89 MB
Silero VAD v5音声区間検出1.2 MB
DeepFilterNet3 (FP16)ノイズキャンセリング4.2 MB

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

次のステップ