音声区間検出
2つのVADモデルが利用可能です:高精度なオフラインバッチ処理用のPyannoteセグメンテーションと、ストリーミング低レイテンシー検出用のSilero VAD v5。どちらも完全にオンデバイスで動作します。
Pyannote(オフライン)
Pyannote segmentation-3.0は、PyanNetアーキテクチャを使用して高精度のVADを提供します。1秒ステップの10秒スライディング窓で音声を処理し、オーバーラップする予測を集約してヒステリシス平滑化を適用します。
アーキテクチャ
| ステージ | 詳細 |
|---|---|
| SincNet | 40の学習可能なバンドパスフィルター(合計80:40 cos + 40 sin) |
| BiLSTM | 4レイヤー、hidden=128、双方向(256次元出力) |
| Linear | LeakyReLU付き2線形レイヤー(negative_slope=0.01) |
| 出力 | ヒステリシス後処理付き7クラスsoftmax |
モデルサイズ:約1.49Mパラメーター、ディスク上約5.7 MB。
デフォルトしきい値
- オンセット:
0.767— この確率を超えると音声が検出される - オフセット:
0.377— この確率を下回ると音声が終了する
CLIの使用法
# オフラインVAD
.build/release/audio vad recording.wav
# JSON出力
.build/release/audio vad recording.wav --json
# カスタムしきい値
.build/release/audio vad recording.wav --onset 0.6 --offset 0.3
Silero VAD v5(ストリーミング)
Silero VAD v5は、512サンプルチャンク(16 kHzで32 ms)を処理する軽量ストリーミングモデルです。リリースモードで23倍のリアルタイム速度で動作し、ライブ音声アプリケーションに適しています。
アーキテクチャ
| ステージ | 詳細 |
|---|---|
| STFT | Conv1d (1から258チャネル)、64の右側のみ反射パッド |
| エンコーダー | 4x Conv1d + ReLU |
| LSTM | 隠れサイズ128、状態はチャンクを越えて伝達 |
| デコーダー | LSTM隠れ状態上のConv1d (128から1)、シグモイド出力 |
モデルサイズ:約309Kパラメーター、ディスク上約1.2 MB。
ストリーミングステートマシン
ストリーミングVADプロセッサは、クリーンな音声セグメントを生成するために4状態マシンを使用します:
- silence — 音声が検出されない
- pendingSpeech — オンセットしきい値を超えた、最小音声継続時間を待機中
- speech — 確認された音声セグメントが進行中
- pendingSilence — オフセットしきい値を下回った、最小無音継続時間を待機中
デフォルトしきい値
- オンセット:
0.5 - オフセット:
0.35 - 最小音声継続時間:
0.25秒 - 最小無音継続時間:
0.1秒
CLIの使用法
# ストリーミングVAD
.build/release/audio vad-stream recording.wav
# カスタムしきい値
.build/release/audio vad-stream recording.wav --onset 0.6 --offset 0.3
# 最小継続時間
.build/release/audio vad-stream recording.wav --min-speech 0.5 --min-silence 0.2
# エンジンを選択
.build/release/audio vad-stream recording.wav --engine coreml
オプション
| オプション | 適用 | 説明 |
|---|---|---|
--onset | 両方 | 音声オンセット確率しきい値 |
--offset | 両方 | 音声オフセット確率しきい値 |
--min-speech | ストリーミング | 最小音声セグメント継続時間(秒) |
--min-silence | ストリーミング | セグメントを終了する最小無音継続時間(秒) |
--engine | ストリーミング | 推論エンジン:mlxまたはcoreml |
--json | 両方 | JSON出力形式 |
重要
リアルタイムアプリケーションには、Silero VADでaudio vad-streamを使用してください。Pyannoteモデルは完全な音声ファイルを必要とし、精度が優先されるオフラインバッチ処理に適しています。
モデルダウンロード
| モデル | バックエンド | サイズ | HuggingFace |
|---|---|---|---|
| Silero-VAD-v5 | MLX | 約1.2 MB | aufklarer/Silero-VAD-v5-MLX |
| Silero-VAD-v5 | CoreML | 約1.2 MB | aufklarer/Silero-VAD-v5-CoreML |
| Pyannote-Segmentation-3.0 | MLX | 約5.7 MB | aufklarer/Pyannote-Segmentation-MLX |
Swift API
import SpeechVAD
// オフラインVAD (Pyannote)
let pyannote = try await PyannoteVAD.loadFromHub()
let segments = try await pyannote.detectSpeech(audioFile: "recording.wav")
for segment in segments {
print("\(segment.start)s - \(segment.end)s")
}
// ストリーミングVAD (Silero)
let silero = try await SileroVAD.loadFromHub()
let processor = StreamingVADProcessor(model: silero, config: .sileroDefault)
for chunk in audioChunks {
if let segment = try processor.process(chunk: chunk) {
print("Speech: \(segment.start)s - \(segment.end)s")
}
}
Android と Linux (ONNX Runtime経由)でも利用可能です。