LoginSignup
soyfoods0804
@soyfoods0804

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VOICEVOXの音声データが再生されない

解決したいこと

とある本を参考にしながら、VOICEVOXとChatGPTを連携し、対話できるチャットボットを勉強のために作成しています。現在音声合成の実装段階まできているのですが、以下のコードを実行するとエラーが出てしまい困っています。

内容としては指定のテキストをVOICEVOXに渡し、音声として再生させるというものなのですが、テキストから音声変換には成功しているようですが、音声の再生に至りません。どなたか原因がわかる方お教えいただきたいです。

発生している問題・エラー

ファイル名:text_to_speech.py
※requests playsoundライブラリインストール済み

import requests
from playsound import playsound

# VOICEVOX EngineのURL
VOICEVOX_URL = "http://localhost:50021"

# 音声に変換したいテキスト
text = "マグロが好きにゃ。"

# 音声合成のためのクエリを生成
response = requests.post(
    f"{VOICEVOX_URL}/audio_query",
    params={
        "text": text,
        "speaker": 58,
    },
)
audio_query = response.json()

# 音声合成を行う
response = requests.post(
    f"{VOICEVOX_URL}/synthesis",
    headers={
        "Content-Type": "application/json",
    },
    params={
        "speaker": 58,
    },
    json=audio_query,
)

# ステータスコードが200以外の場合はエラーメッセージを表示
if response.status_code != 200:
    print("エラーが発生しました。ステータスコード: {}".format(response.status_code))
    print(response.text)
else:
    # 音声データを取得
    audio = response.content

    # 音声データをファイルに保存
    with open("output.wav", "wb") as f:
        f.write(audio)

    # 音声データを再生
    playsound("output.wav")

以下エラーです。

(venv) nekonekobasu@nekonekobasunoMacBook-Pro Chapter04 % python text_to_speech.py
/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/urllib3/__init__.py:34: NotOpenSSLWarning: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
playsound is relying on a python 2 subprocess. Please use `pip3 install PyObjC` if you want playsound to run more efficiently.
Traceback (most recent call last):
  File "/Users/nekonekobasu/devel/voice-chat-bot/Chapter04/text_to_speech.py", line 45, in <module>
    playsound("output.wav")
  File "/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/playsound.py", line 244, in <lambda>
    playsound = lambda sound, block = True: _playsoundAnotherPython('/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python', sound, block, macOS = True)
  File "/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/playsound.py", line 229, in _playsoundAnotherPython
    t.join()
  File "/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/playsound.py", line 218, in join
    raise self.exc
  File "/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/playsound.py", line 211, in run
    self.ret = self._target(*self._args, **self._kwargs)
  File "/Users/nekonekobasu/devel/voice-chat-bot/venv/lib/python3.9/site-packages/playsound.py", line 226, in <lambda>
    t = PropogatingThread(target = lambda: check_call([otherPython, playsoundPath, _handlePathOSX(sound) if macOS else sound]))
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 368, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 349, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/subprocess.py", line 1821, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python'

自分で試したこと

どこまでプログラムが実行されているのか訴求して確かめたところコード内にある

# 音声データをファイルに保存
    with open("output.wav", "wb") as f:
        f.write(audio)

まではうまくいっているようで指定のテキストがoutput.wavに入り、そちらからは再生できました。

 # 音声データを再生
    playsound("output.wav")

↑こちらで引っかかっているようなのですが、エラーを調べても情報が少なく、なぜこのようなエラーが出るのかわかりません。

お助けいただけますと幸いです。
何卒よろしくお願いいたします。

0

1Answer

エラーメッセージを見るとPyObjCをインストールするようにと書いてあるようです。

pip3 install PyObjC

0

Comments

  1. @soyfoods0804

    Questioner

    インストールしたところ無事再生され解決いたしました。最後のFileNotFoundError: [Errno 2]
    に目がいってしまい、見逃しておりました。ありがとうございます。

  2. 解決したのであれば、クローズにするといいですよ。

  3. @soyfoods0804

    Questioner

    そうでした。ありがとうございます。

Your answer might help someone💌