🗨️

AivisSpeech-Engine を使って音声合成してみた

2024/11/21に公開3

しゃべらせるまでの作業ログ

AivisSpeech-Engine とは

https://aivis-project.com/

AivisSpeech Engine は、VOICEVOX ENGINE をベースにした、日本語音声合成エンジンです。
(README.md より)

プロジェクトリポジトリはこちら
https://github.com/Aivis-Project/AivisSpeech-Engine

ダウンロードして起動

プロジェクトリポジトリの releases から PC のアーキテクチャに合ったものをダウンロードして解凍して起動

PS> .\run.exe --host=0.0.0.0 --use_gpu

このあたりは VOICEVOX と同じなので、非常に簡単

起動するとデフォルトの音声モデルが含まれていないので自動ダウンロードされる(約 1.3GB)

[2024/11/21 08:26:12] INFO:     Started server process [34364]
[2024/11/21 08:26:12] INFO:     Waiting for application startup.
[2024/11/21 08:26:12] INFO:     Application startup complete.
[2024/11/21 08:26:12] INFO:     Uvicorn running on http://0.0.0.0:10101 (Press CTRL+C to quit)

uvicorn の listen 開始メッセージがログに出れば起動完了

承前

すでに VOICEVOX API でしゃべらせる部分を実装していたので

https://github.com/sharl/amedas/blob/af450eae03d13ce49a8dbb1367b8cb4191dca095/vvox.py

これをそのまま利用

呼び出しサンプル

sample.py
# -*- coding: utf-8 -*-
import sys
import io

from vvox import vvox


if __name__ == '__main__':
    sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')

    if not sys.stdin.isatty():
        text = sys.stdin.read().strip()
    else:
        text = '\n'.join(sys.argv[1:])

    vvox(text)

しゃべらせる前に話者 ID を確認

VOICEVOX API と同様に確認できる

PS> curl -s localhost:10101/speakers | jq .
[
  {
    "name": "Anneli",
    "speaker_uuid": "e756b8e4-b606-4e15-99b1-3f9c6a1b2317",
    "styles": [
      {
        "name": "ノーマル",
        "id": 888753760,
        "type": "talk"
      },
      {
        "name": "通常",
        "id": 888753761,
        "type": "talk"
      },
      {
        "name": "テンション高め",
        "id": 888753762,
        "type": "talk"
      },
      {
        "name": "落ち着き",
        "id": 888753763,
        "type": "talk"
      },
      {
        "name": "上機嫌",
        "id": 888753764,
        "type": "talk"
      },
      {
        "name": "怒り・悲しみ",
        "id": 888753765,
        "type": "talk"
      }
    ],
    "version": "1.0.0",
    "supported_features": {
      "permitted_synthesis_morphing": "NOTHING"
    }
  }
]

サンプルコードにポートと話者IDを指定して実行

-    vvox(text)
+    vvox(text, port=10101, speaker=888753761)
PS> echo おはようなのだ | python sample.py

と、しゃべらせるだけなら非常に簡単 👍

Enjoy!!

Discussion

masatatsu8masatatsu8

やってみました! 最初、めちゃくちゃ野太い声になったのでビックリしましたw 周波数を 24000 から 44100 にしたらそれっぽくなりました。

しゃあるしゃある

気づいていただけましたか
実際に手を動かしてもらえて、大変嬉しいです

AivisSpeechのデフォルトサンプリングレートは明記されていませんが
ソースを見ると 44100 Hz になっています
https://github.com/Aivis-Project/AivisSpeech/blob/db279b787842730e3ebd325dc3bed359cf046dc8/src/domain/project/index.ts#L17

なので Anneli ちゃんの声にするためにはそこを変更する必要があったのです

本当にありがとうございます