- Notifications
You must be signed in to change notification settings - Fork0
route250/fastrtc-jp
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
fastrtc用の日本語TTSとSTT追加キット(日本語音声合成・認識モジュール)
fastrtcは高性能なリアルタイム通信フレームワークですが、現状では日本語の音声合成(TTS)および音声認識(STT)機能が不十分です。このプロジェクトは、fastrtcに日本語対応の音声処理機能を追加するための拡張パッケージです。
主な機能:
- 日本語に特化した音声合成モデル(VOICEVOX、Style-Bert-VITS2, gTTS)
- 日本語に対応した音声認識モデル(MlxWhisper, Vosk、Google Speech Recognition)
fastrtcの詳細な使い方については、fastrtc公式ドキュメントを参照してください。
クラス | 説明 | 追加パッケージ | 特徴 |
---|---|---|---|
VoicevoxTTSModel | VOICEVOXのapiで音声合成するクラス | - | 高品質な日本語音声、多様な話者、感情表現が可能 |
StyleBertVits2 | Style-Bert-VITS2で音声合成するクラス | style-bert-vits2 / pyopenjtalk | 高品質な音声合成が可能、事前学習済みモデルに対応 |
GTTSModel | Google Text-to-Speechで音声合成するクラス | gtts | インターネット接続が必要、自然な発話 |
VoskSTT | Voskエンジンで音声認識するクラス | vosk | オフライン動作可能、軽量 |
MlxWhisper | mlx-whisperで音声認識するクラス | mlx-whisper | 高精度な音声認識、Apple Silicon最適化 |
GoogleSTT | SpeechRecognizerのGoogleエンジンで音声認識するクラス | SpeechRecognition==3.10.0 | 高精度、インターネット接続が必要 |
- Python 3.12以上
- Ubuntu 24.04 LTS, macOS Sonoma 15.4 にて動作確認
- 各モデルの追加要件は以下の「インストール」セクションを参照
基本的な使い方として、Python仮想環境を作成してからpipでインストールすることをお勧めします。
# 仮想環境の作成と有効化(オプション)python -m venv .venvsource .venv/bin/activate# pipをアップデート.venv/bin/python3 -m pip install -U pip setuptools# 基本パッケージのインストールpip install fastrtc-jp
必要に応じて、以下の追加パッケージをインストールしてください:
VOICEVOXは、無料で使える高品質な日本語音声合成エンジンです。VOICEVOXと音声モデルの使用条件については公式ドキュメントなどで確認して下さい。VOICEVOX公式を参照し、APIでアクセスできる環境を準備してください。
- VoicevoxTTSModelクラス
環境変数VOICEVOX_HOSTLISTにVOICEVOXサーバのアドレスとポートを設定して下さい。.envファイルもしくはconfig.envファイルに以下のように記述して下さい。記述がない場合は下記のデフォルトが設定されます。
VOICEVOX_HOSTLIST=http://127.0.0.1:50021
VoicevoxTTSOptionsクラス
speaker_name
: キャラクターの名前speaker_style
: 声のスタイルspeaker_id
: 話者ID(整数)speedScale
: 話速スケール(デフォルト: 1.0)
http://127.0.0.1:50021/speakersなどで、キャラクターの名前、スタイル、idを調べて、話者IDもしくは、名前とスタイルを設定して下さい。
Style-Bert-Vits2は、高品質な音声合成が可能なTTSモデルです。事前学習済みモデルを使って、自然な日本語音声を生成できます。Style-Bert-Vits2と音声モデルの使用条件については公式ドキュメントなどで確認して下さい。詳細はstyle-bert-vits2リポジトリを参照して下さい。pythonのstyle-bert-vits2パッケージをpythonコードから利用するには、APIサーバを起動してAPIをコールする方法と、直接実行する方式があります。このパッケージでは、直接実行する方式を実装しています。
pip install fastrtc-jp[sbv2]
- StyleBertVits2クラス
標準音声モデルもしくは、別途、音声モデルを使用することができます。
StyleBertVits2Optionsクラス
model
: モデルプリセット名model_path
: モデルファイルのパスconfig_path
: 設定ファイルのパスstyle_vec_path
: スタイルベクトルファイルのパスdevice
: 使用するデバイス(デフォルト: "cpu")speaker_id
: 話者ID (各モデルのconfig.jsonで確認して下さい)speaker_style
: スタイル(各モデルのconfig.jsonで確認して下さい)
モデルプリセット名には以下のプリセット名を指定できます。プリセットを設定する場合、model_path,config_path,style_vec_pathは設定不要です。プリセット以外のモデルは、別途ダウンロードして、model_path,config_path,style_vec_pathを指定して下さい。モデルの利用条件は、配布元にて確認して下さい。
それぞれのファイルは、初回にダウンロードされます。ダウンロード先は、$HOME/.cache/huggingface/hubです。
StyleBertVits2Options( device="cpu", model_file = "model/jvnv-M1-jp/jvnv-M1-jp_e158_s14000.safetensors", config_file = "model/jvnv-M1-jp/config.json", style_file = "model/jvnv-M1-jp/style_vectors.npy",)
詳細はgTTSリポジトリを参照して下さい。gTTSはgoogleのapiを使用しますので、インターネット接続が必要です。
pip install fastrtc-jp[gtts]
- GTTSModelクラス
Google Text-to-Speechを使用した音声合成モデルです。
GTTSOptionsクラス
speed
: 話す速度(デフォルト1.0)
Voskは、オフラインで動作する音声認識エンジンです。詳細はVoskの公式を参照してください。一応、日本語のモデルを自動でダウンロードするようにしています。ダウンロード先は、$HOME/.cache/voskです。
pip install fastrtc-jp[vosk]
- VoskSTTクラス
現在は、'vosk-model-ja-0.22'に固定です。
mlx-whisperはApple Silicon向けに最適化されたWhisperモデルの実装です。詳細は、MLX Examplesリポジトリを参照してください。
pip install fastrtc-jp[mlx]
- MlxWhisperクラス
現在は、'mlx-community/whisper-medium-mlx-q4'に固定です。mlx-communityから、mlx対応のモデルを自動的にダウンロードするようにしています。ダウンロード先は、$HOME/.cache/huggingface/hubです。
- 詳細はspeech_recognitionリポジトリを参照してください。
pip install fastrtc-jp[sr]
- GoogleSTTクラスGoogleの音声認識エンジンを使用します。インターネット接続が必要です。
マイクの音声をそのままスピーカーにエコーバックするシンプルな例です。
importsys,osimportnumpyasnpfromfastrtcimportReplyOnPausefromfastrtc.reply_on_pauseimportAlgoOptionsfromfastrtc.streamimportStream"""マイクの音声をそのままスピーカーにエコーバックするだけのサンプル"""defechoback(audio:tuple[int,np.ndarray]):print(f"shape:{audio[1].shape} dtype:{audio[1].dtype}{audio[0]}Hz{audio[1].shape[1]/audio[0]}秒の音声が入力されました。")yieldaudiodefexample_echoback():algo_options=AlgoOptions(audio_chunk_duration=0.6,started_talking_threshold=0.5,speech_threshold=0.1, )stream=Stream(handler=ReplyOnPause(echoback,algo_options=algo_options,input_sample_rate=16000,output_sample_rate=16000, ),modality="audio",mode="send-receive", )stream.ui.launch()if__name__=="__main__":example_echoback()
importsys,osimportnumpyasnpfromfastrtcimportReplyOnPausefromfastrtc.reply_on_pauseimportAlgoOptionsfromfastrtc.streamimportStreamfromfastrtc_jp.text_to_speech.voicevoximportVoicevoxTTSModel,VoicevoxTTSOptions"""VOICEVOXで音声合成するだけのサンプル"""tts_model=VoicevoxTTSModel()# デフォルトはlocalhostの50021ポートに接続voicevox_opt=VoicevoxTTSOptions(speaker=8,# つむぎspeedScale=1.0,# 話速(1.0が標準))defvoicevox(audio:tuple[int,np.ndarray]):print(f"shape:{audio[1].shape} dtype:{audio[1].dtype}{audio[0]}Hz{audio[1].shape[1]/audio[0]}秒の音声が入力されました。")response="やっほー、今日も元気だ。やきとり食べよう。"foraudio_chunkintts_model.stream_tts_sync(response,voicevox_opt):print("Sending audio")yieldaudio_chunkdefexample_voicevox():algo_options=AlgoOptions(audio_chunk_duration=0.6,started_talking_threshold=0.5,speech_threshold=0.1, )stream=Stream(handler=ReplyOnPause(voicevox,algo_options=algo_options,input_sample_rate=16000,output_sample_rate=16000, ),modality="audio",mode="send-receive", )stream.ui.launch()if__name__=="__main__":example_voicevox()
importsys,osimportnumpyasnpfromfastrtcimportReplyOnPausefromfastrtc.reply_on_pauseimportAlgoOptionsfromfastrtc.streamimportStreamfromfastrtc_jp.speech_to_text.sr_googleimportGoogleSTT# from fastrtc_jp.speech_to_text.vosk import VoskSTTfromfastrtc_jp.text_to_speech.voicevoximportVoicevoxTTSModel,VoicevoxTTSOptions# from fastrtc_jp.text_to_speech.gtts import GTTSModel, GTTSOptions"""マイクの音声をSTT->TTSしてエコーバックするサンプル"""# 音声認識モデルの初期化stt_model=GoogleSTT()# stt_model = VoskSTT() # Voskを使用する場合# 音声合成モデルの初期化tts_model=VoicevoxTTSModel()voicevox_opt=VoicevoxTTSOptions(speaker_id=8,# つむぎspeedScale=1.0,)# tts_model = GTTSModel() # gTTSを使用する場合defechoback(audio:tuple[int,np.ndarray]):print(f"shape:{audio[1].shape} dtype:{audio[1].dtype}{audio[0]}Hz{audio[1].shape[1]/audio[0]}秒の音声が入力されました。")# 音声認識user_input=stt_model.stt(audio)print(f"音声認識結果:{user_input}")# 認識した文章をそのまま音声合成してエコーバックresponse=user_inputforaudio_chunkintts_model.stream_tts_sync(response,voicevox_opt):print("Sending audio")yieldaudio_chunkdefexample_echoback():algo_options=AlgoOptions(audio_chunk_duration=0.6,started_talking_threshold=0.5,speech_threshold=0.1, )stream=Stream(handler=ReplyOnPause(echoback,algo_options=algo_options,input_sample_rate=16000,output_sample_rate=16000, ),modality="audio",mode="send-receive", )stream.ui.launch()if__name__=="__main__":example_echoback()
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルを参照してください。
fastrtcの詳細な使い方については、fastrtc公式ドキュメントを参照してください。
About
fastrtc用の日本語TTSとSTT追加キット
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.