0

我在 python Flask 中有一个 websocket,可以监听 twilio 调用。当通话开始时,我想说“你好”这是代码。

     if data['event'] == "start":
        
        speakBytes = speaker.speak("Hello") // using micrsoft cognitive service to convert the text to bytes
        convertedBytes = ap.lin2ulaw(speakBytes.audio_data,1)
        ws.send(responseString.format(base64.b64encode(convertedBytes), str(data['streamSid'])))

但上述方法不起作用。我检查了微软认知服务语音 sunthesizer 返回 WAV 格式的字节,所以我使用了lin2ulaw表单 pythonaudioop模块。

需要帮忙。提前致谢。

4

3 回答 3

1

如果您使用 Twilio 连接号码,则需要使用TwiML回复呼叫:

from twilio.twiml.voice_response import VoiceResponse
response = VoiceResponse()
response.say('Hello')
return str(response)

请参阅 的文档<Say></Say

如果您想使用.wav您创建的,则需要将其保存在可访问的位置(例如 Amazon S3 存储桶),然后您可以使用 TwiML <Play></Play>

于 2021-03-19T11:09:05.360 回答
1

Twilio 开发人员布道者在这里。

看起来您正在正确创建要发送到Twilio Media Stream的音频,但是我认为您发送的格式不正确。

Twilio Media Streams 期望媒体消息是具有以下属性的 JSON 对象:

  • 事件:值“媒体”
  • streamSid:流的 SID
  • 媒体:具有“有效负载”属性的对象,然后包含 base64 编码的 mulaw/8000 音频

像这样的东西可能会起作用:

message = {  
  "streamSid": data['streamSid'],  
  "event": "media",  
  "media": {
    "payload": base64.b64encode(convertedBytes)
  }
}  
       
# Serializing json   
json_object = json.dumps(message)

ws.send(json_object)
于 2021-04-08T05:00:13.487 回答
0

谢谢大家的回答。解决方案原来是一个小小的改变。

我不得不改变ap.lin2ulaw(speakBytes.audio_data,1)ap.lin2ulaw(speakBytes.audio_data,4),它工作正常。这似乎是微软文本到语音和 twilio 格式的兼容性。

于 2021-04-08T09:41:12.520 回答