写在前面:
语音合成可将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。适用于手机APP、儿童故事机、智能机器人等多种应用场景。
整合
这里我们使用百度云的人工智能语音合成API,个人用户拥有一定的免费额度,基本已经够用了,在线语音合成支持丰富的SDK,基本上流行的语言都可以轻松接入。这里使用世界上最流行的语言Java。
pom.xml引入:
com.baidu.aipjava-sdk4.12.0
application.properties引入:
# ===================================# 百度人工智能,申请百度云账号并创建应用# ===================================bai-du.appId = **********bai-du.apiKey = **********bai-du.accessKeySecret = **********
BaiDuProperties.java 配置实体:
@Data@ConfigurationProperties(prefix = "bai-du")public class BaiDuProperties { private String appId; private String apiKey; private String accessKeySecret;}
撸一个工具类:
/** * 百度智能AI */@Component@Configuration@EnableConfigurationProperties({BaiDuProperties.class})public class BaiDuUtils { private BaiDuProperties baiDu; public BaiDuUtils(BaiDuProperties baiDu) { this.baiDu = baiDu; } private AipSpeech instance; @Value("${file.path}") private String filePath; @PostConstruct public void init() { try { FileUtil.mkdir(filePath+SystemConstant.SF_FILE_SEPARATOR+"voice"); instance = new AipSpeech(baiDu.getAppId(), baiDu.getApiKey(), baiDu.getAccessKeySecret()); // 可选:设置网络连接参数 instance.setConnectionTimeoutInMillis(2000); instance.setSocketTimeoutInMillis(60000); } catch (Exception e) { e.printStackTrace(); } } /** * 语音合成 * 本地测试可能会出现https认证的问题 调用一下 ignoreSsl 方法即可 * @param text 合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节 */ public String text2Voice(String text,Boolean per) { SslUtils.ignoreSsl(); HashMap options = new HashMap<>(); if(per){ options.put("per", "3"); }else{ options.put("per", "4"); } TtsResponse res = instance.synthesis(text, "zh", 1, options); byte[] data = res.getData(); if (data != null) { try { String file = "voice"+SystemConstant.SF_FILE_SEPARATOR+UUID.randomUUID()+".mp3"; Util.writeBytesToFileSystem(data, filePath + SystemConstant.SF_FILE_SEPARATOR + file); return file; } catch (IOException e) { e.printStackTrace(); } } return null; }}
注意
- 请注意文本长度必须小于1024字节
- 本地测试可能会出现https认证的问题 调用一下 ignoreSsl 方法即可