Skip to content

mizumura3/whisper-sample

Repository files navigation

Audio Stream Processing Application

リアルタイムの音声認識とテキスト読み上げを組み合わせたストリーミングアプリケーションです。入力された音声をWhisper.cppを使って認識し、認識されたテキストをNijiVoice APIを使って音声合成します。

機能

  • リアルタイム音声入力とVAD(Voice Activity Detection)による音声区間検出
  • Whisper.cppを使用したリアルタイム音声認識
  • NijiVoice APIを使用したテキスト読み上げ
  • 高品質な音声処理(ローパスフィルター、リサンプリング、正規化)

必要条件

  • Python 3.8以上
  • Whisper.cpp
  • CUDA対応GPU(Whisper.cppの実行に推奨)

セットアップ

  1. 依存パッケージのインストール:
uv sync
  1. Whisper.cppのセットアップ:
# Whisper.cppをクローン
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp

# ストリーミング機能を含むバージョンをビルド
make stream

# モデルをダウンロード(例:small)
bash ./models/download-ggml-model.sh small

# または、HuggingFaceから直接ダウンロード
# https://huggingface.co/ggerganov/whisper.cpp/tree/main

# モデルファイルの場所を確認
ls -l models/ggml-small.bin

注意:

  • CUDAを使用する場合はmake stream CUDA=1でビルドしてください
  • Apple Silicon (M1/M2) の場合は標準のMakefileでビルドできます。本アプリケーションはM2 Air で動作確認しています
  • ダウンロードできるモデルは他にもtinybasemediumlargeがあります
  • より多くのモデルバリエーション(量子化レベルやサイズの異なるモデル)はHuggingFaceから直接ダウンロードできます:
    • ggml-tiny.bin: 最小サイズ
    • ggml-base.bin: 基本モデル
    • ggml-small.bin: 小サイズ
    • ggml-medium.bin: 中サイズ
    • ggml-large.bin: 大サイズ
    • ggml-*-q4_0.bin: 4-bit量子化モデル(サイズ削減)
    • ggml-*-q4_1.bin: 改良版4-bit量子化
    • ggml-*-q5_0.bin: 5-bit量子化
    • ggml-*-q5_1.bin: 改良版5-bit量子化
    • ggml-*-q8_0.bin: 8-bit量子化(高精度)
  • モデルのパスは.envファイルのWHISPER_MODEL_PATHで指定します
  • Apple Silicon での実行時は、より小さな量子化モデル(q4_0やq4_1)を使用することで、メモリ使用量を抑えつつ高速な処理が可能です
  1. 環境変数の設定:

.envファイルを作成し、以下の設定を行ってください:

# 音声ストリーム設定
SAMPLE_RATE=16000
BLOCK_SIZE=4096
CHANNELS=1

# デバイスID設定
AUDIO_INPUT_DEVICE_ID=3
AUDIO_OUTPUT_DEVICE_ID=4

# Whisper設定
WHISPER_PATH=../../nagato0614-whisper.cpp/stream
WHISPER_MODEL_PATH=../../nagato0614-whisper.cpp/models/ggml-small-q8_0.bin
WHISPER_LANGUAGE=ja
WHISPER_THREADS=8
WHISPER_DEVICE_ID=2
WHISPER_STEP=0
WHISPER_LENGTH=5000
WHISPER_THRESHOLD=0.6

# NijiVoice API設定
NIJIVOICE_API_URL=https://api.nijivoice.com/api/platform/v1/voice-actors
NIJIVOICE_VOICE_ACTOR_ID=dba2fa0e-f750-43ad-b9f6-d5aeaea7dc16
NIJIVOICE_API_KEY=xxxxx # あなたのAPIキーを設定してください

# 音声処理設定
AMPLITUDE_THRESHOLD=1000
VAD_THRESHOLD=0.3
VOICE_SPEED=1
AUDIO_FORMAT=wav

使用方法

  1. アプリケーションの起動:
python audio_stream.py
  1. 利用可能な音声入力デバイスが表示されます。

  2. 音声入力を開始すると、以下の処理が実行されます:

    • VADによる音声区間の検出
    • Whisper.cppによる音声認識
    • NijiVoice APIによるテキスト読み上げ
  3. 終了するにはCtrl+Cを押してください。

主要な機能の説明

音声処理

  • apply_lowpass_filter: ローパスフィルターを適用して高周波ノイズを除去
  • high_quality_resample: 高品質な音声リサンプリングを実行
  • normalize_audio: 音声のRMSレベルを適切な値に正規化

音声認識と合成

  • VADモデルによる音声区間の検出
  • Whisper.cppによるリアルタイム音声認識
  • NijiVoice APIを使用した音声合成

エラーハンドリング

  • 音声デバイスのエラー処理
  • API通信のエラー処理
  • 音声処理中のエラー処理

注意事項

  • 音声入力デバイスとWhisper.cppの設定は環境に応じて適切に調整してください
  • NijiVoice APIの利用には有効なAPIキーが必要です
  • 処理性能はハードウェア環境に依存します
  • APIキーなどの機密情報は必ず環境変数で管理し、Gitなどのバージョン管理システムにコミットしないでください
  • .envファイルは.gitignoreに追加することを推奨します

ライセンス

MITライセンス

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages