Voicevox の読み上げ
YouTubeで人気「ずんだもん」の音声を利用、LLMの返答をPythonで読み上げる
を参考にする
Pyttxsで読み上げの長文が可能だが
Windows Macでしかできない
ラズパイと ubuntu では音声エンジンが使えないので
Voicevox を使っているがdocker だと100文字以上だとエラーになるので
docker以外を使う
ollama run gemma2:2b
で使っているが欲しいのはvoicevox の導入と音声の生成部分
https://github.com/VOICEVOX/voicevox_core/releases
の中から
m1MacbookAir なので
macOS arm64
の
download-osx-arm64
を選択する
なお whlファイルも必要らしいので調べる
download-osx-arm64 と voicevox_core-0.16.0-cp310-abi3-macosx_11_0_arm64.whl について知りたい
項目 | 意味
voicevox_core | VOICEVOX(音声合成ソフト)の「コア機能ライブラリ」
0.16.0 | バージョン番号(この場合は 0.16.0)
cp310 | CPython 3.10向け(Python 3.10に対応)
abi3 | 複数のPythonバージョンに対応できるABI (バイナリ互換性)
macosx_11_0_arm64 | macOS 11.0 (Big Sur)以降、Apple Silicon (ARM64) 向け
つまりこのファイルは、
* Python 3.10 上で動かすために作られた
* Mac (Apple Silicon版) 用の
* VOICEVOXのコア部分のバイナリパッケージ(wheelファイル、.whl) ということです!
この .whl ファイルをインストールすると、Pythonプログラムから VOICEVOX のエンジン(音声合成)を直接呼び出して使えるようになります。
pip install voicevox_core-0.16.0-cp310-abi3-macosx_11_0_arm64.whl
でインストール
項目 | 内容
download-osx-arm64 | Apple Silicon Mac用の何かをダウンロードするもの(具体的な中身は文脈次第)
voicevox_core-0.16.0-…whl | Python 3.10対応のVOICEVOXエンジンをApple Silicon Mac用にビルドしたインストールファイル
とのこと
そのままdownload-osx-arm64 をクリックしても動かないので
https://github.com/VOICEVOX/voicevox_core/blob/main/docs/guide/user/usage.md
を参考に
mv ~/Downloads/download-osx-arm64 .
DirectML 版や CUDA 版があるらしいけど
m1macbookAir だとGPUは使えないらしい
https://github.com/VOICEVOX/voicevox_core/blob/main/docs/guide/user/usage.md
によれば
# CPU版を利用する場合
./download --exclude c-api # C APIを使う場合は`--exclude c-api`は無し
で
thread 'main' panicked at /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/minus-5.6.1/src/state.rs:322:24: byte index 84 is not a char boundary; it is inside 'く' (bytes 82..85) of `上下キーとスペースでスクロールし、読み終えたらqを押してください` note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ERROR something went wrong with the pager ダウンロードには以下の利用規約への同意が必要です。 (矢印キーで移動、q で終了) ─┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ # VOICEVOX 音声モデル 利用規約 │ │ ## 許諾内容 │ │ 1. 商用・非商用問わず利用することができます │ 2. アプリケーションに組み込んで再配布することができます │ 3. 作成された音声を利用する際は、各音声ライブラリの規約に従ってください │ 4. 作成された音声の利用を他者に許諾する際は、当該他者に対し本許諾内容の 3 及び 4 の遵守を義務付けてください │ │ ## 禁止事項 │ │ - 逆コンパイル・リバースエンジニアリング及びこれらの方法の公開すること │ - 製作者または第三者に不利益をもたらす行為 │ - 公序良俗に反する行為 │ │ ## 免責事項 │ │ 本ソフトウェアにより生じた損害・不利益について、製作者は一切の責任を負いません。 │ │ ## その他 │ │ ご利用の際は VOICEVOX を利用したことがわかるクレジット表記が必要です。 │ │ --- │ │ # 音声ライブラリ利用規約 │ │ ## 四国めたん │ │ 四国めたんの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:四国めたん」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zunko.jp/con_ongen_kiyaku.html │ │ ## ずんだもん │ │ ずんだもんの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:ずんだもん」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zunko.jp/con_ongen_kiyaku.html │ │ ## 春日部つむぎ │ │ 春日部つむぎの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:春日部つむぎ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://tsumugi-official.studio.site/rule │ │ ## 波音リツ │ │ 波音リツの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:波音リツ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ http://canon-voice.com/kiyaku.html │ │ ## 玄野武宏 │ │ 玄野武宏の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:玄野武宏」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://virvoxproject.wixsite.com/official/voicevoxの利用規約 │ │ ## 白上虎太郎 │ │ 白上虎太郎の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:白上虎太郎」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://virvoxproject.wixsite.com/official/voicevoxの利用規約 │ │ ## 青山龍星 │ │ 個人が青山龍星の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:青山龍星」とクレジットを記載すれば、商用・非商用で利用可能です。 │ ただし企業が携わる形で利用する場合は、「ななはぴ(https://v.seventhh.com/contact/)」に対し事前確認を取る必要があります。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://virvoxproject.wixsite.com/official/voicevoxの利用規約 │ │ ## 冥鳴ひまり │ │ 冥鳴ひまりの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:冥鳴ひまり」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://meimeihimari.wixsite.com/himari/terms-of-use │ │ ## 九州そら │ │ 九州そらの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:九州そら」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zunko.jp/con_ongen_kiyaku.html │ │ ## もち子さん │ │ 個人がもち子さんの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:もち子(cv 明日葉よもぎ)」とクレジットを記載すれば、 │ 音声作品・音声素材・ゲーム作品等を除いて商用・非商用で利用可能です。 │ ただし企業が携わる形で利用する場合は、「もちぞら模型店(https://vtubermochio.wixsite.com/mochizora/contact)」に対し事前確認を取る必要があります。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://vtubermochio.wixsite.com/mochizora/利用規約 │ │ ## 剣崎雌雄 │ │ 剣崎雌雄の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:剣崎雌雄」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://frontier.creatia.cc/fanclubs/413/posts/4507 │ │ ## WhiteCUL │ │ WhiteCUL の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:WhiteCUL」とそれぞれクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://www.whitecul.com/guideline │ │ ## 後鬼 │ │ 個人が後鬼の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:後鬼」とクレジットを記載すれば、商用・非商用で利用可能です。 │ ただし企業が携わる形で利用する場合は、「【鬼っ子ハンターついなちゃん】プロジェクト(https://ついなちゃん.com/mail/)」に対し事前確認を取る必要があります。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://ついなちゃん.com/voicevox_terms/ │ │ ## No.7 │ │ 個人が No.7 の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:No.7」とクレジットを記載すれば、非商用(同人利用や配信による収入は OK)で利用可能です。 │ その他商用利用の場合は、「No.7 製作委員会(https://voiceseven.com/)」に対し事前確認を取る必要があります。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://voiceseven.com/#j0200 │ │ ## ちび式じい │ │ ちび式じいの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:ちび式じい」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://docs.google.com/presentation/d/1AcD8zXkfzKFf2ertHwWRwJuQXjNnijMxhz7AJzEkaI4 │ │ ## 櫻歌ミコ │ │ 櫻歌ミコの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:櫻歌ミコ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://voicevox35miko.studio.site/rule │ │ ## 小夜/SAYO │ │ 小夜/SAYO の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:小夜/SAYO」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://316soramegu.wixsite.com/sayo-official/guideline │ │ ## ナースロボ_タイプT │ │ ナースロボ_タイプTの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:ナースロボ_タイプT」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://www.krnr.top/rules │ │ ## †聖騎士 紅桜† │ │ †聖騎士 紅桜†の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:†聖騎士 紅桜†」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://commons.nicovideo.jp/material/nc296132 │ │ ## 雀松朱司 │ │ 雀松朱司の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:雀松朱司」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://virvoxproject.wixsite.com/official/voicevoxの利用規約 │ │ ## 麒ヶ島宗麟 │ │ 麒ヶ島宗麟の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:麒ヶ島宗麟」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://virvoxproject.wixsite.com/official/voicevoxの利用規約 │ │ ## 春歌ナナ │ │ 春歌ナナの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:春歌ナナ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://nanahira.jp/haruka_nana/guideline.html │ │ ## 猫使アル │ │ 猫使アルの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:猫使アル」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://nekotukarb.wixsite.com/nekonohako/利用規約 │ │ ## 猫使ビィ │ │ 猫使ビィの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:猫使ビィ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://nekotukarb.wixsite.com/nekonohako/利用規約 │ │ ## 中国うさぎ │ │ 中国うさぎの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:中国うさぎ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zunko.jp/con_ongen_kiyaku.html │ │ ## 栗田まろん │ │ 栗田まろんの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:栗田まろん」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://aivoice.jp/character/maron/ │ │ ## あいえるたん │ │ あいえるたんの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:あいえるたん」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://www.infiniteloop.co.jp/special/iltan/terms/ │ │ ## 満別花丸 │ │ 満別花丸の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:満別花丸」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://100hanamaru.wixsite.com/manbetsu-hanamaru/rule │ │ ## 琴詠ニア │ │ 琴詠ニアの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:琴詠ニア」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://commons.nicovideo.jp/works/nc315435 │ │ ## Voidoll │ │ 個人が Voidoll の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:Voidoll(CV:丹下桜)」とクレジットを記載すれば、商用・非商用で利用可能です。 │ ただし法人による利用の場合は、個別に問い合わせ(https://qa.nicovideo.jp/)が必要です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://blog.nicovideo.jp/niconews/224589.html │ │ ## ぞん子 │ │ ぞん子の音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:ぞん子」とクレジットを記載すれば、商用・非商用で利用可能です。 │ ただし商用利用の場合は、個別に問い合わせ(https://zonko.zone-energy.jp/contact)が必要です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zonko.zone-energy.jp/guideline │ │ ## 中部つるぎ │ │ 中部つるぎの音声ライブラリを用いて生成した音声は、 │ 「VOICEVOX:中部つるぎ」とクレジットを記載すれば、商用・非商用で利用可能です。 │ │ 利用規約の詳細は以下をご確認ください。 │ https://zunko.jp/con_ongen_kiyaku.html ─┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ # VOICEVOX ONNX Runtime 利用規約 │ │ ## 許諾内容 │ │ 1. 商用・非商用問わず利用することができます │ 2. アプリケーションに組み込んで再配布することができます │ 3. 作成された音声を利用する際は、各音声ライブラリの規約に従ってください │ 4. 作成された音声の利用を他者に許諾する際は、当該他者に対し本許諾内容の 3 及び 4 の遵守を義務付けてください │ │ ## 禁止事項 │ │ - 逆コンパイル・リバースエンジニアリング及びこれらの方法の公開すること │ - 製作者または第三者に不利益をもたらす行為 │ - 公序良俗に反する行為 │ │ ## 免責事項 │ │ 本ソフトウェアにより生じた損害・不利益について、製作者は一切の責任を負いません。 │ │ ## その他 │ │ ご利用の際は VOICEVOX を利用したことがわかるクレジット表記が必要です。 ─┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── [Agreement Required] 「VOICEVOX 音声モデル 利用規約」と「VOICEVOX ONNX Runtime 利用規約」に同意しますか? 同意する場合は y を、同意しない場合は n を、再確認する場合は r を入力し、エンターキーを押してください。 [y,n,r] :
となるので
Y
これでインストールが始まる
次にライブラリインストール
pip install voicevox_core-0.16.0-cp310-abi3-macosx_11_0_arm64.whl
音声ファイルの再生で必要になる、「soundfile」と「sounddevice」という2つのライブラリをインストール
pip install soundfile sounddevice
次に使用モデルを変更する
elyza:jp8bを使用するようにコード変更
python ollama_voicevox_test.py
として保存する
保存先はvoicevox_coreフォルダの中にする
cd voicevox_core touch ollama_voicevox_test.py
内容は
import ollama
from pathlib import Path
from voicevox_core import VoicevoxCore
import soundfile as sf
import sounddevice as sd
# Ollamaでelyza:jp8bにチャットする
response = ollama.chat(model="elyza:jp8b", messages=[
{
"role": "system",
"content": "あなたは何でも丁寧に、短く答えてくれる日本語アシスタントです"
},
{
"role": "user",
"content": "生成AIの未来はどうなりますか?"
}
])
# Ollamaからのレスポンス本文を取り出し
response_text = response["message"]["content"]
print(response_text)
print("クレジット表記 VOICEVOX:ずんだもん")
# VoicevoxCoreの初期化
vv_core = VoicevoxCore(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
speaker_id = 1 # ずんだもん
vv_core.load_model(speaker_id)
# テキストを音声に変換
voice_data = vv_core.tts(response_text, speaker_id)
# 音声ファイルとして保存
with open("output.wav", "wb") as f:
f.write(voice_data)
# 保存した音声ファイルを再生
data, samplerate = sf.read("output.wav")
sd.play(data, samplerate)
sd.wait()
としたけど
Traceback (most recent call last):
File "/Users/snowpool/aw10s/gemini/voicevox_core/ollama_voicevox_test.py", line 3, in <module>
from voicevox_core import VoicevoxCore
ImportError: cannot import name 'VoicevoxCore' from 'voicevox_core' (/Users/snowpool/.pyenv/versions/3.11.0/lib/python3.11/site-packages/voicevox_core/__init__.py)
となる
これは
いまの voicevox_core では
→ VoicevoxCore というクラス名では提供されていません!
とのこと
VoicevoxCore ではなく、
VoicevoxCoreClient を使う
インポートは
from voicevox_core import VoicevoxCoreClient
に変わり
初期化も
vv_core = VoicevoxCoreClient(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
となる
しかしコードを
import ollama
from pathlib import Path
from voicevox_core import VoicevoxCoreClient
import soundfile as sf
import sounddevice as sd
import asyncio
async def main():
# Ollamaで elyza:jp8b にチャットする
response = ollama.chat(model="elyza:jp8b", messages=[
{
"role": "system",
"content": "あなたは何でも丁寧に、短く答えてくれる日本語アシスタントです"
},
{
"role": "user",
"content": "生成AIの未来はどうなりますか?"
}
])
response_text = response["message"]["content"]
print(response_text)
print("クレジット表記 VOICEVOX:ずんだもん")
# VoicevoxCoreClientの初期化
vv_core = VoicevoxCoreClient(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
# クライアントの起動
async with vv_core:
speaker_id = 1 # ずんだもん
await vv_core.load_model(speaker_id)
# テキストを音声に変換(非同期)
voice_data = await vv_core.tts(response_text, speaker_id)
# 音声ファイルとして保存
with open("output.wav", "wb") as f:
f.write(voice_data)
# 保存した音声ファイルを再生
data, samplerate = sf.read("output.wav")
sd.play(data, samplerate)
sd.wait()
# 非同期実行
asyncio.run(main())
と変更しても変わらない
調べた結果、ver0.16以降は色々変わっているらしい
こうなった場合ChatGPTはほぼ機能しない
Ollama Index の時のように間違ったコードのループになるだけなので
別のサイトを参考にする
これでやりたいのは
おまけ(大量の文章の読み上げサンプル)
ファイルの書き込み用に、aiofilesを使用
pip install aiofiles
でインストール
import asyncio
import aiofiles
from voicevox_core.asyncio import Onnxruntime, OpenJtalk, Synthesizer, VoiceModelFile
texts = [
... # 文章一覧をここに
]
async def tts(synthesizer, text, style_id, index):
# 音声合成してファイルに保存するコルーチン
wav = await synthesizer.tts(text, style_id)
async with aiofiles.open(f"output_{index}.wav", mode="wb") as f:
await f.write(wav)
async def main(texts):
# synthesizerの作成
voicevox_onnxruntime_path = "onnxruntime/lib/" + Onnxruntime.LIB_VERSIONED_FILENAME
open_jtalk_dict_dir = "dict/open_jtalk_dic_utf_8-1.11"
ort = await Onnxruntime.load_once(filename=voicevox_onnxruntime_path)
ojt = await OpenJtalk.new(open_jtalk_dict_dir)
synthesizer = Synthesizer(ort, ojt)
# VVMファイルの読み込み
async with await VoiceModelFile.open("models/vvms/0.vvm") as model:
await synthesizer.load_voice_model(model)
# 音声合成の一括実行
# ttsのコルーチンのリストを作成し、asyncio.gatherで実行する
style_id = 5 # ずんだもんノーマル(スタイルID: 5)
await asyncio.gather(*[
tts(synthesizer, t, style_id, i)
for i, t in enumerate(texts)
])
asyncio.run(main(texts))
がコード
まずはこれで動くかテストする
touch voice016test.py
でファイルを作成し
import asyncio
import aiofiles
from voicevox_core.asyncio import Onnxruntime, OpenJtalk, Synthesizer, VoiceModelFile
texts = [
"これはテストです"
]
async def tts(synthesizer, text, style_id, index):
# 音声合成してファイルに保存するコルーチン
wav = await synthesizer.tts(text, style_id)
async with aiofiles.open(f"output_{index}.wav", mode="wb") as f:
await f.write(wav)
async def main(texts):
# synthesizerの作成
voicevox_onnxruntime_path = "onnxruntime/lib/" + Onnxruntime.LIB_VERSIONED_FILENAME
open_jtalk_dict_dir = "dict/open_jtalk_dic_utf_8-1.11"
ort = await Onnxruntime.load_once(filename=voicevox_onnxruntime_path)
ojt = await OpenJtalk.new(open_jtalk_dict_dir)
synthesizer = Synthesizer(ort, ojt)
# VVMファイルの読み込み
async with await VoiceModelFile.open("models/vvms/0.vvm") as model:
await synthesizer.load_voice_model(model)
# 音声合成の一括実行
# ttsのコルーチンのリストを作成し、asyncio.gatherで実行する
style_id = 5 # ずんだもんノーマル(スタイルID: 5)
await asyncio.gather(*[
tts(synthesizer, t, style_id, i)
for i, t in enumerate(texts)
])
asyncio.run(main(texts))
を実行
なお voicevox のファイルパスを変えてなかったので
mv voice016test.py voicevox_core cd voicevox_core python voice016test.py
で実行
すると
output_0.wav
ができるので
これを再生すると音声ができているのが確認できる
短文はできるので100文字以上の音声を作成する
しかし文面を変更しても
これはテストです
が繰り返されるだけで他の音声にならない
なので別の方法を使う
Cd ../ touch voice016.py
で別のディレクトリで試す
from voicevox_core.blocking import Onnxruntime, OpenJtalk, Synthesizer, VoiceModelFile
voicevox_onnxruntime_path = "voicevox_core/onnxruntime/lib/" + Onnxruntime.LIB_VERSIONED_FILENAME
open_jtalk_dict_dir = "voicevox_core/dict/open_jtalk_dic_utf_8-1.11"
synthesizer = Synthesizer(Onnxruntime.load_once(filename=voicevox_onnxruntime_path), OpenJtalk(open_jtalk_dict_dir))
with VoiceModelFile.open("voicevox_core/models/vvms/0.vvm") as model:
synthesizer.load_voice_model(model)
style_id = 5
text = "こんにちは、これはテストです。"
wav = synthesizer.tts(text, style_id)
# wavをファイルに書き出す
with open("output.wav", "wb") as f:
f.write(wav)
これで実行すると音声が生成される
しかし
これを長文の
不要な情報(価格、電話番号、住所、営業時間など)を取り除き、食材に焦点を当ててレシピを提案します。 鶏むね肉と夏野菜の炒め物 材料: 鶏むね肉 (100g):一口大に切る トウモロコシ:実を外す ピーマン (1パック):種を取り、細切りにする トマト (1パック):くし切りにする キュウリ (1パック):薄切りにする 旬彩盛 (1パック):内容に応じて適当な大きさに切る (例:もやしならそのまま、ニラなら3cm程度に切る) サラダ油:大さじ1 塩コショウ:少々 醤油:小さじ1 酒:小さじ1 鶏ガラスープの素:小さじ1/2 作り方: フライパンにサラダ油を熱し、鶏むね肉を炒める。 鶏肉の色が変わったら、ピーマン、キュウリ、旬彩盛を加えて炒める。 野菜がしんなりしてきたら、トウモロコシ、トマトを加えて軽く炒める。 塩コショウ、醤油、酒、鶏ガラスープの素で調味する。 全体に味がなじんだら、火を止めて完成。 うなぎと野菜の丼 材料: うなぎ (1串):温める ピーマン (1パック):千切りにする キュウリ (1パック):千切りにする トマト (1パック):薄切りにする 温かいご飯:適量 刻み海苔:適量 作り方: 温かいご飯を丼によそう。 ピーマン、キュウリ、トマトを丼に盛り付ける。 うなぎを乗せる。 刻み海苔を散らして完成。 国産牛ロースのミニステーキ 材料: 国産牛ロース (100g):軽く塩コショウを振る サラダ油:小さじ1 醤油:小さじ1/2 わさび:お好みで 作り方: フライパンにサラダ油を熱し、牛ロースを焼く。 片面1~2分ずつ焼き、焼き加減を調整する。 醤油を回し入れて香りを出す。 皿に盛り付け、お好みでわさびを添えて完成。 これらのレシピは、提示された少ない食材で簡単に作れるものです。旬彩盛の内容がわからないため、具体的な調理法は示していませんが、他の野菜と同様に炒めたり、丼に添えたりできます。 必要に応じて、他の調味料や食材を追加してアレンジしてみてください。
とするとメモリが足りずにエラーとなる
このためpyttsx で音声再生をすることにする
とりあえずコンセプトとしては音声でのみのやり取り
まずは ollama + gemma3 4B の結果の音声で再生から実験
ウェイクワードエンジンで起動
faster-whisperで音声を取得し ollama + gemma3 に渡す
処理結果を pyttsx で再生
これを機能分解して作成してく