見出し画像

vits-simple-api使用時のクライアント側のコード (chat) とても表情豊かな声

import json
import os
import time
from datetime import datetime
import openai
import requests
import playsound

# playsoundはwindowsの場合、1.2.2。linuxの場合1.3.0をインストールすること。

openai_key = os.environ.get("OPENAI_API_KEY")

def create_synthesis(text,count):
    # 音声合成用のクエリを作成
    parameters = {"text": text,
                  "id": 0}      # 必要最低限のパラメータ
    # 音声合成用のクエリを使用して音声合成する
    endpoint = "http://localhost:23456/voice/bert-vits2" # 最後にスラッシュは付けない
    headers = {
        "Content-Type": "application/json"
    }
    response_synth = requests.get(endpoint, params=parameters, headers=headers)

    # レスポンスから音声データを取得
    audio_data = response_synth.content
    # 音声データを保存
    # ディレクトリvoicesをあらかじめ作っておいてください。
    output_path = "./voices/output" + str(count) + ".wav"
    with open(output_path, mode="wb") as f:
        f.write(audio_data)
    time.sleep(0.4)
    return output_path

system_content = f"""あなたは優秀なAIアシスタントです。楽しい会話をしましょう。
現在時刻は{datetime.now()}です。"""

messages = [{"role": "system", "content": system_content}]
client = openai.OpenAI()

print("チャッピーとチャットしよう。with Bert-Vits2 TTS")
print("Speakerを取得する")
speaker_url = "http://127.0.0.1:23456/voice/speakers" # 最後にスラッシュは付けない。
# IDを投げるとnameが返ってくる
speaker = requests.get(speaker_url,params=json.dumps({"BERT-VITS2":[{"id": 0,"lang":"ja"}]}))
print(speaker.text)
count = 0
while True:
    try:
        u = input("ユーザー: ")
        if not u:
            break
        messages.append({"role": "user", "content": u})
        resp = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages,
        )
        a = resp.choices[0].message.content
        print(" チャッピー: " + str(a))
        messages.append({"role": "assistant", "content": str(a)})

        output_path = create_synthesis(str(a),count)
        if count == 0:
            time.sleep(5) # 初回のみ5秒待つ
        playsound.playsound(output_path)
        count += 1
    except KeyboardInterrupt:
        break

この記事が気に入ったらサポートをしてみませんか?