見出し画像

Style-bert-vits2(chat)のクライアント側のコード、改。

import os
import time
from datetime import datetime
import openai
import wave
import pyaudio
import requests

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

def create_synthesis(text,count):
    parameters = {"text": text,"model_id": 4,"style": "Neutral",
                  "style_weight": 0} # 最低限のパラメーター。
    # style: Neutral,Angry,Disgust,Fear,Happy,Sad,Surprise。 Neutralがデフォルト。

    endpoint = "http://localhost:5000/voice/"
    headers = {
        "Content-Type": "application/json" }
    response_synth = requests.get(endpoint, params=parameters, headers=headers)
    # レスポンスから音声データを取得
    audio_data = response_synth.content
    # 音声データを保存
    output_path = "./voices/output" + str(count) + ".wav"
    with open(output_path, mode="wb") as f:
        f.write(audio_data)
    time.sleep(0.5)
    return output_path

def playback(output_path):
    with wave.open(output_path, 'rb') as f:
        p = pyaudio.PyAudio()
        def _callback(in_data, frame_count, time_info, status):
            data = f.readframes(frame_count)
            return (data, pyaudio.paContinue)
        stream = p.open(format=p.get_format_from_width(width=f.getsampwidth()),
                        channels=f.getnchannels(),
                        rate=f.getframerate(),
                        output=True,
                        stream_callback=_callback)
        stream.start_stream()
        while stream.is_active():
            time.sleep(0.1)
        time.sleep(0.3) # ここで0.3秒待つと尻切れにならない。
        stream.stop_stream()
        stream.close()
        p.terminate()

system_content = f"""あなたは優秀なAIアシスタント。名前はチャッピーです。楽しく会話しましょう。
現在時刻は{datetime.now()}です。"""

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

print("あなたの友達チャッピーに挨拶しましょう。")
count = 0
while True:
    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(2)
    playback(output_path)
    count += 1

音声再生時に最後の部分が尻切れになってしまうので、違う再生方法で解決しました。気になる方はこちらを使ってみてください。


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