这是代码。其目的是使用VLC进行IBM的文本到语音转换,以便在Python IDE中说话。这是我为助理迈出的第一步。此问题不同于常规字符串和字节错误,因为它涉及 IBM Cloud 而不是简单的程序错误。
import vlc
from ibm_watson import TextToSpeechV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
authenticator = IAMAuthenticator("API Key Here")
text_to_speech = TextToSpeechV1(
authenticator=authenticator
)
text_to_speech.set_service_url(
'https://api.us-south.text-to-speech.watson.cloud.ibm.com/instances/113cd664-f07b-44fe-a11d-a46cc50caf84')
# define VLC instance
instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
# Define VLC player
player = instance.media_player_new()
# Define VLC media
media = instance.media_new(
text_to_speech.synthesize(
'Hello world',
voice='en-US_AllisonVoice',
accept='audio/wav').get_result().content)
# Set player media
player.set_media(media)
# Play the media
player.play()
我收到此错误...
Traceback (most recent call last):
File "C:/Users/PycharmProjects/IBM Test/iBM tEST.py", line 24, in <module>
accept='audio/wav').get_result().content)
File "C:UsersPycharmProjectsIBM Testvenvlibsite-packagesvlc.py", line 1947, in media_new
if ':' in mrl and mrl.index(':') > 1:
TypeError: a bytes-like object is required, not 'str'
我试过这个...
text_to_speech.synthesize('Hello world'.encode(), ...)
我收到此错误...
b'Hello world' is not JSON serializable
如果有人认识到这个问题,请让我知道我可能做错了什么。我正在尝试在我的Python IDE中播放一个简单的文本行。我正在用PyCharm编码。
我知道这个代码块有效,因为它直接来自IBM的API文档。我已经用这个为自己测试...
from ibm_watson import TextToSpeechV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
authenticator = IAMAuthenticator('{apikey}')
text_to_speech = TextToSpeechV1(
authenticator=authenticator
)
text_to_speech.set_service_url('{url}')
with open('hello_world.wav', 'wb') as audio_file:
audio_file.write(
text_to_speech.synthesize(
'Hello world',
voice='en-US_AllisonVoice',
accept='audio/wav'
).get_result().content)
此代码将输入为文本的内容保存到名为 Hello World 的 mp3 文件中。我基本上是在尝试将其集成到一个将语音直接播放到 IDE 中的系统中。如果有人知道VLC以外的任何替代方法,请告诉我。
如果您密切注意错误消息,您会发现该错误实际上是由 vlc 代码引发的。这意味着 TTS 语音的输出不是 vlc 所期望的。
您需要分解代码并首先验证从 TTS 获得的输出。如果是音频,那么您可以计算出 vlc 代码的期望。我怀疑它不是 TTS 输出的格式。
更新的答案
TTS 的输出是音频内容的数据流,在 Python 中这将是一个字节数组。看起来 VLC 正在寻找一个字符串。如果VLC正在寻找音频数据,则这是没有意义的。但是,如果它正在寻找一个字符串,那么该字符串可能是文件目标。所以我认为您需要写入文件,并将文件目标提供给 VLC。
恕我直言,根据您提出的问题和您拼凑的代码,您的编码技能无法应对挑战,您最好花几周时间浏览一些 Python 编码教程。您可能会发现对训练时间的投资得到了回报,而无需您在这里为非常基本的编码问题而苦苦挣扎。