全部产品
云市场

Python SDK 2.0

更新时间:2019-10-12 13:50:41

提示:

下载安装

说明:

  • SDK仅支持Python3,版本要求为3.4及以上,暂不支持Python2。
  • 请确认已安装Python包管理工具setuptools,如果没有安装,请使用以下命令安装:
    1. pip install setuptools
  1. 下载 Python SDK链接
  2. 安装,在SDK目录执行以下命令:
    1. # 打包
    2. python setup.py bdist_egg
    3. # 安装
    4. python setup.py install

注意:以上的pippython命令是对应的Python3。

关键接口

  1. NlsClient:语音处理client,相当于所有语音相关处理类的factory,全局创建一个实例即可。线程安全。
  2. SpeechSynthesizer:语音合成处理类,设置请求参数,发送请求。非线程安全。
    • start方法:建立与服务端的连接。默认参数ping_interval表示自动发送ping命令的间隔,ping_timeout表示等待ping命令响应的pong消息的超时时间,需要满足ping_interval 大于 ping_timeout。
    • wait_completed方法:等待服务端合成完毕或者合成超时。
    • close方法:关闭与服务端的网络链接。
  3. SpeechSynthesizerCallback:回调事件函数集合的类,合成结果、异常等回调的统一入口。
    • on_binary_data_received方法:客户端接收到合成音频数据的回调。
    • on_completed方法:客户端接收到合成结束的回调。
    • on_task_failed方法:客户端接收到异常错误的回调。
    • on_channel_closed方法:客户端接收到断开网络链接成功的回调。

SDK调用注意事项

  1. NlsClient对象创建一次可以重复使用。
  2. SpeechSynthesizer对象不能重复使用,一个合成任务对应一个SpeechSynthesizer对象。例如有N个文本需要合成,则要进行N次语音合成任务,创建N个SpeechSynthesizer对象。
  3. 实现的SpeechSynthesizerCallback对象和SpeechSynthesizer对象是一一对应的,不能将一个实现的SpeechSynthesizerCallback对象设置到多个SpeechSynthesizer对象中,否则不能区分是哪个识别任务。

示例代码

说明1: Demo中使用了SDK内置的默认语音合成服务的外网访问URL,如果您使用上海阿里云ECS并想使用内网访问URL,则在创建NlsClient对象时,设置内网访问的URL:

  1. synthesizer = client.create_synthesizer(callback, "ws://nls-gateway.cn-shanghai-internal.aliyuncs.com/ws/v1")

说明2: Demo中将合成的音频保存在了文件中,如果您需要播放音频且对实时性要求较高,建议使用流式播放,即边接收语音数据边播放,减少延时。

示例:

  1. # -*- coding: utf-8 -*-
  2. import threading
  3. import ali_speech
  4. from ali_speech.callbacks import SpeechSynthesizerCallback
  5. from ali_speech.constant import TTSFormat
  6. from ali_speech.constant import TTSSampleRate
  7. class MyCallback(SpeechSynthesizerCallback):
  8. # 参数name用于指定保存音频的文件
  9. def __init__(self, name):
  10. self._name = name
  11. self._fout = open(name, 'wb')
  12. def on_binary_data_received(self, raw):
  13. print('MyCallback.on_binary_data_received: %s' % len(raw))
  14. self._fout.write(raw)
  15. def on_completed(self, message):
  16. print('MyCallback.OnRecognitionCompleted: %s' % message)
  17. self._fout.close()
  18. def on_task_failed(self, message):
  19. print('MyCallback.OnRecognitionTaskFailed-task_id:%s, status_text:%s' % (
  20. message['header']['task_id'], message['header']['status_text']))
  21. self._fout.close()
  22. def on_channel_closed(self):
  23. print('MyCallback.OnRecognitionChannelClosed')
  24. def process(client, appkey, token, text, audio_name):
  25. callback = MyCallback(audio_name)
  26. synthesizer = client.create_synthesizer(callback)
  27. synthesizer.set_appkey(appkey)
  28. synthesizer.set_token(token)
  29. synthesizer.set_voice('xiaoyun')
  30. synthesizer.set_text(text)
  31. synthesizer.set_format(TTSFormat.WAV)
  32. synthesizer.set_sample_rate(TTSSampleRate.SAMPLE_RATE_16K)
  33. synthesizer.set_volume(50)
  34. synthesizer.set_speech_rate(0)
  35. synthesizer.set_pitch_rate(0)
  36. try:
  37. ret = synthesizer.start()
  38. if ret < 0:
  39. return ret
  40. synthesizer.wait_completed()
  41. except Exception as e:
  42. print(e)
  43. finally:
  44. synthesizer.close()
  45. def process_multithread(client, appkey, token, number):
  46. thread_list = []
  47. for i in range(0, number):
  48. text = "这是线程" + str(i) + "的合成。"
  49. audio_name = "sy_audio_" + str(i) + ".wav"
  50. thread = threading.Thread(target=process, args=(client, appkey, token, text, audio_name))
  51. thread_list.append(thread)
  52. thread.start()
  53. for thread in thread_list:
  54. thread.join()
  55. if __name__ == "__main__":
  56. client = ali_speech.NlsClient()
  57. # 设置输出日志信息的级别:DEBUG、INFO、WARNING、ERROR
  58. client.set_log_level('INFO')
  59. appkey = '您的appkey'
  60. token = '您的token'
  61. text = "今天是周一,天气挺好的。"
  62. audio_name = 'sy_audio.wav'
  63. process(client, appkey, token, text, audio_name)
  64. # 多线程示例
  65. # process_multithread(client, appkey, token, 2)