Python SDK

本文介绍如何使用阿里云智能语音服务提供的Python SDK,包括SDK的安装方法及SDK代码示例。

前提条件

下载安装

  1. 下载Python SDK。

Github获取Python SDK,或直接下载streamInputTts-github-python

  1. 安装SDK依赖。

进入SDK根目录使用如下命令安装SDK依赖:

python -m pip install -r requirements.txt
  1. 安装SDK。

依赖安装完成后使用如下命令安装SDK:

python -m pip install .
  1. 安装完成后通过以下代码导入SDK。

# -*- coding: utf-8 -*-
import nls
重要

上述命令均需要在SDK根目录中执行。

关键接口

startStreamInputTts:与服务端进行websocket建连操作,并完成回调、参数设置等操作

  • """
    发起长文本合成任务,同步接收服务端确认
    
    Parameters:
    -----------
    text: str
        utf-8 text, support ssml
    voice: str
        voice for text-to-speech, default is xiaoyun
    aformat: str
        audio binary format, support: 'pcm', 'wav', 'mp3', default is 'pcm'
    sample_rate: int
        audio sample rate, default is 24000, support:8000, 11025, 16000, 22050,
        24000, 32000, 44100, 48000
    volume: int
        audio volume, from 0~100, default is 50
    speech_rate: int
        speech rate from -500~500, default is 0
    pitch_rate: int
        pitch for voice from -500~500, default is 0
    ex: dict
        dict which will merge into 'payload' field in request
    """
    def startTts(
        self,
        text,
        voice="longxiaochun",
        aformat="pcm",
        sample_rate=24000,
        volume=50,
        speech_rate=0,
        pitch_rate=0,
        ex:dict=None,
    )
  • waitForComplete:以阻塞的方式等待语音合成结束,并与服务端断开websocket连接

    """
    等待语音合成结束
    """
    def waitForComplete(self)

    回调函数说明

    Python回调函数在创建对象时作为参数配置,说明见下表:

    参数

    参数说明

    on_data

    当存在合成数据后的回调参数。回调参数包含以下两个:

    • 对应start方法中aformat的二进制音频数据

    • 用户自定义参数

    其中,用户自定义参数为下方callback_args字段中返回的参数内容。

    on_sentence_begin

    收到SentenceBegin事件时回调。回调参数包含以下两个

    • JSON形式的字符串

    • 用户自定义参数

    其中,用户自定义参数为下方callback_args字段中返回的参数内容。

    on_sentence_synthesis

    时间戳预留接口。CosyVoice目前不支持时间戳功能,不需处理。

    on_sentence_end

    时间戳预留接口,CosyVoice目前不支持时间戳功能,不需处理。

    on_complete

    时间戳预留接口,CosyVoice目前不支持时间戳功能,不需处理。

    on_error

    SDK或云端出现错误时的回调参数。回调参数包含以下两个:

    • JSON形式的字符串

    • 用户自定义参数

    其中,用户自定义参数为下方callback_args字段中返回的参数内容。

    on_close

    当和云端连接断开时的回调参数。回调参数为用户自定义参数,即用户自定义参数为下方callback_args字段中返回的参数内容。

调用示例

以下Python代码示例使用了带有SSML文本输入请求语音合成,使用扬声器进行音频播放并保存。

重要

代码运行前需要替换 your-appkey 以及 your-token

# coding=utf-8
#
# Installation instructions for pyaudio:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   or
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import nls
import time

# 设置打开日志输出
nls.enableTrace(False)

# 将音频保存进文件
SAVE_TO_FILE = True
# 将音频通过播放器实时播放,需要具有声卡。在服务器上运行请将此开关关闭
PLAY_REALTIME_RESULT = True
if PLAY_REALTIME_RESULT:
    import pyaudio

if __name__ == "__main__":
    if SAVE_TO_FILE:
        file = open("output.wav", "wb")
    if PLAY_REALTIME_RESULT:
        player = pyaudio.PyAudio()
        stream = player.open(
            format=pyaudio.paInt16, channels=1, rate=24000, output=True
        )

    # 创建SDK实例
    # 配置回调函数
    def test_on_data(data, *args):
        if SAVE_TO_FILE:
            file.write(data)
        if PLAY_REALTIME_RESULT:
            stream.write(data)

    def test_on_message(message, *args):
        print("on message=>{}".format(message))

    def test_on_close(*args):
        print("on_close: args=>{}".format(args))

    def test_on_error(message, *args):
        print("on_error message=>{} args=>{}".format(message, args))

    sdk = nls.NlsStreamInputTtsSynthesizer(
        # 由于目前阶段大模型音色只在北京地区服务可用,因此需要调整url到北京
        url="wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1",
        token="your-token",
        appkey="your-appkey",
        on_data=test_on_data,
        on_sentence_begin=test_on_message,
        on_sentence_synthesis=test_on_message,
        on_sentence_end=test_on_message,
        on_completed=test_on_message,
        on_error=test_on_error,
        on_close=test_on_close,
        callback_args=[],
    )

    # 发送文本消息
    sdk.startTts(
        text='''<speak bgm="http://nls.alicdn.com/bgm/2.wav">今天天气怎么样</speak>''',
        voice="longxiaochun_v2",       # 语音合成说话人
        aformat="wav",              # 合成音频格式
        sample_rate=24000,          # 合成音频采样率
        volume=50,                  # 合成音频的音量
        speech_rate=0,              # 合成音频语速
        pitch_rate=0,               # 合成音频的音调
    )
    sdk.waitForComplete()
    print('finished, task_id: {}'.format(sdk.get_last_task_id()))
    if SAVE_TO_FILE:
        file.close()
    if PLAY_REALTIME_RESULT:
        stream.stop_stream()
        stream.close()
        player.terminate()

常见SDK错误码

更多错误码详情参见错误码查询