全部产品
阿里云办公

Java SDK 2.0

更新时间:2018-11-15 10:48:16

版本提示

本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务

下载安装

可从maven 服务器下载最新版本SDK:

  1. <dependency>
  2. <groupId>com.alibaba.nls</groupId>
  3. <artifactId>nls-sdk-tts</artifactId>
  4. <version>2.0.3</version>
  5. </dependency>

使用方式参见下面代码示例。Demo 源码下载链接

关键接口

  • NlsClient:语音处理client,相当于所有语音相关处理类的factory,全局创建一个实例即可。线程安全。
  • SpeechSynthesizer:语音合成处理类,设置请求参数,发送请求。非线程安全。
  • SpeechSynthesizerListener:语音合成监听类,监听返回结果。非线程安全。有如下两个抽象方法需要实现:
    1. /**
    2. * 接收语音合成二进制数据
    3. */
    4. abstract public void onMessage(ByteBuffer message);
    5. /**
    6. * 语音合成结束事件通知
    7. *
    8. * @param response
    9. */
    10. abstract public void onComplete(SpeechSynthesizerResponse response);

更多介绍参见API文档链接: Java API接口说明

SDK 调用注意事项

  1. NlsClient对象创建一次可以重复使用,每次创建消耗性能。NlsClient使用了netty的框架,创建时比较消耗时间和资源,但创建之后可以重复利用。建议调用程序将NlsClient的创建和关闭与程序本身的生命周期结合。
  2. SpeechSynthesizer对象不能重复使用,一个语音合成任务对应一个SpeechSynthesizer对象。例如有N个文本需要语音合成,则要进行N次语音合成任务,创建N个SpeechSynthesizer对象。
  3. 实现的SpeechSynthesizerListener对象和SpeechSynthesizer对象是一一对应的,不能将一个SpeechSynthesizerListener对象设置到多个SpeechSynthesizer对象中,否则不能区分是哪个语音合成任务。

代码示例

  1. import com.alibaba.nls.client.protocol.NlsClient;
  2. import com.alibaba.nls.client.protocol.OutputFormatEnum;
  3. import com.alibaba.nls.client.protocol.SampleRateEnum;
  4. import com.alibaba.nls.client.protocol.tts.SpeechSynthesizer;
  5. import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerListener;
  6. import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerResponse;
  7. import java.io.File;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.nio.ByteBuffer;
  11. /**
  12. * SpeechSynthesizerDemo class
  13. *
  14. * 语音合成(TTS)Demo
  15. */
  16. public class SpeechSynthesizerDemo {
  17. private String appKey;
  18. private String accessToken;
  19. NlsClient client;
  20. public SpeechSynthesizerDemo(String appKey, String token) {
  21. this.appKey = appKey;
  22. this.accessToken = token;
  23. // Step0 创建NlsClient实例,应用全局创建一个即可,默认服务地址为阿里云线上服务地址
  24. client = new NlsClient(accessToken);
  25. }
  26. private static SpeechSynthesizerListener getSynthesizerListener() {
  27. SpeechSynthesizerListener listener = null;
  28. try {
  29. listener = new SpeechSynthesizerListener() {
  30. File f = new File("tts_test.wav");
  31. FileOutputStream fout = new FileOutputStream(f);
  32. // 语音合成结束
  33. @Override
  34. public void onComplete(SpeechSynthesizerResponse response) {
  35. // 事件名称 SynthesisCompleted
  36. System.out.println("name: " + response.getName() +
  37. // 状态码 20000000 表示识别成功
  38. ", status: " + response.getStatus() +
  39. // 语音合成文件路径
  40. ", output file :"+ f.getAbsolutePath()
  41. );
  42. }
  43. // 语音合成的语音二进制数据
  44. @Override
  45. public void onMessage(ByteBuffer message) {
  46. try {
  47. byte[] bytesArray = new byte[message.remaining()];
  48. message.get(bytesArray, 0, bytesArray.length);
  49. System.out.println("write array:" + bytesArray.length);
  50. fout.write(bytesArray);
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. };
  56. } catch (Exception e) {
  57. e.printStackTrace();
  58. }
  59. return listener;
  60. }
  61. public void process() {
  62. SpeechSynthesizer synthesizer = null;
  63. try {
  64. // Step1 创建实例,建立连接
  65. synthesizer = new SpeechSynthesizer(client, getSynthesizerListener());
  66. synthesizer.setAppKey(appKey);
  67. // 设置返回音频的编码格式
  68. synthesizer.setFormat(OutputFormatEnum.WAV);
  69. // 设置返回音频的采样率
  70. synthesizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
  71. // 设置用于语音合成的文本
  72. synthesizer.setText("1949年10月,中华人民共和国成立");
  73. // Step2 此方法将以上参数设置序列化为json发送给服务端,并等待服务端确认
  74. synthesizer.start();
  75. // Step3 等待语音合成结束
  76. synthesizer.waitForComplete();
  77. } catch (Exception e) {
  78. System.err.println(e.getMessage());
  79. } finally {
  80. // Step4 关闭连接
  81. if (null != synthesizer) {
  82. synthesizer.close();
  83. }
  84. }
  85. }
  86. public void shutdown() {
  87. client.shutdown();
  88. }
  89. public static void main(String[] args) {
  90. if (args.length < 2) {
  91. System.err.println("SpeechSynthesizerDemo need params: <app-key> <token>");
  92. System.exit(-1);
  93. }
  94. String appKey = args[0];
  95. String token = args[1];
  96. SpeechSynthesizerDemo demo = new SpeechSynthesizerDemo(appKey, token);
  97. demo.process();
  98. demo.shutdown();
  99. }
  100. }