使用他们的 TTS 和 STT 创建一个简单的 IBM 助手.我收到字节和字符串错误.我正在使用VLC播放音频.我该如何



这是代码。其目的是使用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 编码教程。您可能会发现对训练时间的投资得到了回报,而无需您在这里为非常基本的编码问题而苦苦挣扎。

相关内容

  • 没有找到相关文章

最新更新