全部产品
云市场
云游戏

Android SDK

更新时间:2020-08-13 17:01:08

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

说明

推荐您使用新版本Android SDK,本版本后续将不再更新。详情请参见Android SDK

前提条件

  • 阅读接口说明,详情请参见接口说明

  • 已获取项目appkey,详情请参见创建项目

  • 已获取智能语音服务访问令牌,详情请参见获取Token

下载安装

  1. 下载SDK和示例代码
  2. 解压ZIP文件,在app/libs目录下获取AAR格式的SDK包。

  3. 使用Android Studio打开此工程。

    语音合成示例代码为SpeechSynthesizerActivity.java文件。

关键接口

  • NlsClient:语音处理客户端,利用该客户端可以进行一句话识别、实时语音识别和语音合成的语音处理任务。该客户端为线程安全,建议全局仅创建一个实例。

  • SpeechSynthesizer:代表一次语音合成请求。

  • SpeechSynthesizerCallback:语音合成回调接口,在获得合成音频数据、发生错误等事件发生时会触发回调。您需要实现此接口,在回调方法中加入自己的处理逻辑。

调用顺序

  1. 创建NlsClient实例。

  2. 定义SpeechSynthesizerCallback实现类,按业务需求处理识别结果或错误情况。

  3. 调用NlsClient.createSynthesizerRequest()方法得到SpeechSynthesizer实例。

  4. 设置SpeechSynthesizer参数。

    包括access Token、appkey、语音文本(text)、发音人(voice)和语速(speechRate)等。

  5. 调用SpeechSynthesizer.start()方法开始与云端服务连接。

  6. 在回调中获得合成的音频数据并播放,或者处理错误。

  7. 调用SpeechSynthesizer.stop()方法结束语音合成。

    说明

    如果需要发起新的请求,请重复步骤3~7。

  8. 调用NlsClient.release()方法释放客户端实例。

Proguard配置

如果代码使用了混淆,请在proguard-rules.pro中配置:

-keep class com.alibaba.idst.util.*{*;}

代码示例

  • 创建识别请求

    // 创建语音合成对象
    speechSynthesizer = client.createSynthesizerRequest(callback);
    speechSynthesizer.setToken("");
    speechSynthesizer.setAppkey("");
    // 设置语音编码,PCM编码可以直接用audioTrack播放,其他编码不行。
    speechSynthesizer.setFormat(SpeechSynthesizer.FORMAT_PCM);
    // 以下选项都会改变最终合成的语音效果。
    // 设置语音数据采样率
    speechSynthesizer.setSampleRate(SpeechSynthesizer.SAMPLE_RATE_16K);
    // 设置人声
    speechSynthesizer.setVoice(SpeechSynthesizer.VOICE_XIAOGANG);
    // 设置语音合成方法
    speechSynthesizer.setMethod(SpeechSynthesizer.METHOD_RUS);
    // 设置语速
    speechSynthesizer.setSpeechRate(100);
    // 设置是否返回语音对应的时间戳信息
    speechSynthesizer.setEnableSubtitle(true);
    // 设置要转为语音的文本
    speechSynthesizer.setText("欢迎使用智能语音!");
    speechSynthesizer.start()
  • 获取合成语音并播放

    // 获取音频数据的回调,在这里将音频写入播放器。
    @Override
    public void OnBinaryReceived(byte[] data, int code)
    {
        Log.d(TAG, "binary received length: " + data.length);
        if (!playing) {
            playing = true;
            audioTrack.play();
        }
        audioTrack.write(data, 0, data.length);
    }
  • 返回语音时间戳信息

    // 调用onMetaInfo,需要设置:SpeechSynthesizer.setEnableSubtitle(true)。
    @Override
    public void onMetaInfo(String message, int code) {
        Log.d(TAG,"onMetaInfo " + message + ": " + String.valueOf(code));
    }