1、功能介绍
华为云提供了语音同步合成WebSocket接口,可以将文本转化为语音,并实时返回合成的音频数据。本工程将WebSocket接口封装为安卓接口,方便安卓客户端调用(直接将源码中api模块导入工程)。
您将学到什么?
安卓应用如何调用语音同步合成WebSocket接口实现语音同步合成功能。
4、接口参数说明
主要接口参数的详细说明,具体可以参考源码:
Copied!
public interface ISpeaker {
void startSpeaking(String text, ISpeakCallback callback);
void startSpeaking(String text, SpeakOption speakOption, ISpeakCallback callback);
void stopSpeaking();
void pauseSpeaking();
void resumeSpeaking();
SpeakState getSpeakState();
void addOnSpeakStateChangeListener(Speaker.OnSpeakStateChangeListener listener);
void removeOnSpeakStateChangeListener(Speaker.OnSpeakStateChangeListener listener);
}
public interface IConfigurator {
IConfigurator setDebug(boolean isDebug);
IConfigurator setLogPrintingEnabled(boolean isLogPrintingEnabled);
IConfigurator setLogger(ILogger logger);
IConfigurator setRegion(Region region);
IConfigurator setProjectId(String projectId);
IConfigurator setAuthConfig(AuthConfig authConfig);
IConfigurator setVoiceConfig(VoiceConfig config);
}
5、关键代码片段
5.1、初始化配置
Copied!
AuthConfig authConfig = new AuthConfig()
.setUsername(TestData.USER.USERNAME)
.setPassword(TestData.USER.PASSWORD)
.setDomain(TestData.USER.DOMAIN)
.setToken("");
VoiceConfig voiceConfig = new VoiceConfig()
.setSpeed(speed)
.setPitch(pitch)
.setVolume(volume)
.setVoiceAssetId(getVoiceAssetId());
TTSSdk.getConfigurator()
.setDebug(isDebug)
.setLogPrintingEnabled(isLogPrintingEnabled)
.setRegion(Region.SHANGHAI)
.setProjectId(TestData.USER.PROJECT_ID)
.setAuthConfig(authConfig)
.setVoiceConfig(voiceConfig);
5.2、执行语音合成
Copied!
SpeakOption speakOption;
if (SdkConfig.getInstance().isWriteAudioFile()) {
String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + new Date().getTime() + ".wav";
speakOption = new SpeakOption();
speakOption.setSpeakMode(SpeakMode.PLAY_AUDIO_AND_WRITE_FILE);
speakOption.setFilePath(filePath);
} else {
speakOption = new SpeakOption();
}
TTSSdk.getSpeaker().startSpeaking(SdkConfig.getInstance().getArticle(), speakOption, new ISpeakCallback() {
@Override
public void onBegin(String speechGroupId) {
Logger.i(TAG, " onBegin speechGroupId : " + speechGroupId);
}
@Override
public void onSpeaking(byte[] voiceData, String speechGroupId) {
Logger.i(TAG, " onSpeaking speechGroupId : " + speechGroupId + " , voiceData : " + voiceData.length);
}
@Override
public void onFinish(byte[] allVoiceData, String speechGroupId) {
Logger.i(TAG, " onFinish speechGroupId : " + speechGroupId + " , allVoiceData : " + allVoiceData.length);
}
@Override
public void onError(String errorCode, String errorMsg) {
Logger.i(TAG, " onError errorCode : " + errorCode + " , errorMsg : " + errorMsg);
}
});
1、功能介绍
华为云提供了语音同步合成WebSocket接口,可以将文本转化为语音,并实时返回合成的音频数据。本工程将WebSocket接口封装为安卓接口,方便安卓客户端调用(直接将源码中api模块导入工程)。
您将学到什么?
安卓应用如何调用语音同步合成WebSocket接口实现语音同步合成功能。
3、前置条件
4、接口参数说明
主要接口参数的详细说明,具体可以参考源码:
public interface ISpeaker { /** * 开始朗读,发声,不写入本地文件。注意:此接口不支持并行调用,只支持串行调用,必须在上一次调用结束(onFinish或onError通知)后再调用下一次。 * * @param text 朗读的文字 * @param callback 执行朗读的结果通知 */ void startSpeaking(String text, ISpeakCallback callback); /** * 开始朗读,可以自定义朗读选项:是否发声、是否写入本地文件。具体参考SpeakOption枚举。注意:此接口不支持并行调用,只支持串行调用,必须在上一次调用结束(onFinish或onError通知)后再调用下一次。 * * @param text 朗读的文字 * @param speakOption 朗读的选项 * @param callback 执行朗读的结果通知 */ void startSpeaking(String text, SpeakOption speakOption, ISpeakCallback callback); /** * 停止朗读。 */ void stopSpeaking(); /** * 暂停朗读。此时只暂停播放声音,不会停止接收服务端WebSocket的音频数据流。 */ void pauseSpeaking(); /** * 恢复朗读。 */ void resumeSpeaking(); /** * 获取当前朗读状态,具体参考SpeakState枚举。 * * @return 朗读状态 */ SpeakState getSpeakState(); /** * 添加朗读状态监听,当朗读状态发声变更时会会上报。 * * @param listener 朗读状态监听 */ void addOnSpeakStateChangeListener(Speaker.OnSpeakStateChangeListener listener); /** * 移除朗读状态监听。 * * @param listener 朗读状态监听 */ void removeOnSpeakStateChangeListener(Speaker.OnSpeakStateChangeListener listener); } public interface IConfigurator { /** * 设置是否为调试模式,调试模式下会额外打印调试日志(开启日志打印的前提下),并且会关闭CA证书校验。警告:正式产品禁止设置为调试模式。 * * @param isDebug 是否为调试模式 */ IConfigurator setDebug(boolean isDebug); /** * 设置是否开启日志打印。警告:如果是调试模式,会直接打印未脱敏的信息。 * * @param isLogPrintingEnabled 是否开启日志打印 */ IConfigurator setLogPrintingEnabled(boolean isLogPrintingEnabled); /** * 注入日志打印器,如果未注入,则使用默认日志打印器(Android控制台logcat打印)。 * * @param logger 注入的日志打印器 */ IConfigurator setLogger(ILogger logger); /** * 设置站点。 * * @param region 站点 */ IConfigurator setRegion(Region region); /** * 设置项目Id。 * * @param projectId 项目Id */ IConfigurator setProjectId(String projectId); /** * 设置鉴权参数。 * * @param authConfig 鉴权参数。警告:正式产品禁止将鉴权参数编码到端侧代码中,应当通过服务端下发鉴权参数,端侧再使用鉴权参数 */ IConfigurator setAuthConfig(AuthConfig authConfig); /** * 设置语音参数。 * * @param config 语音参数。建议使用默认值 */ IConfigurator setVoiceConfig(VoiceConfig config); }
5、关键代码片段
5.1、初始化配置
AuthConfig authConfig = new AuthConfig() .setUsername(TestData.USER.USERNAME) .setPassword(TestData.USER.PASSWORD) .setDomain(TestData.USER.DOMAIN) .setToken("");// 根据需要填入token VoiceConfig voiceConfig = new VoiceConfig() .setSpeed(speed) .setPitch(pitch) .setVolume(volume) .setVoiceAssetId(getVoiceAssetId()); TTSSdk.getConfigurator() .setDebug(isDebug) .setLogPrintingEnabled(isLogPrintingEnabled) .setRegion(Region.SHANGHAI) .setProjectId(TestData.USER.PROJECT_ID) .setAuthConfig(authConfig) .setVoiceConfig(voiceConfig);
5.2、执行语音合成
SpeakOption speakOption; if (SdkConfig.getInstance().isWriteAudioFile()) {// 将音频写入本地文件 String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + new Date().getTime() + ".wav"; speakOption = new SpeakOption(); speakOption.setSpeakMode(SpeakMode.PLAY_AUDIO_AND_WRITE_FILE); speakOption.setFilePath(filePath); } else { // 仅执行语音合成 speakOption = new SpeakOption(); } TTSSdk.getSpeaker().startSpeaking(SdkConfig.getInstance().getArticle(), speakOption, new ISpeakCallback() { @Override public void onBegin(String speechGroupId) { Logger.i(TAG, " onBegin speechGroupId : " + speechGroupId); } @Override public void onSpeaking(byte[] voiceData, String speechGroupId) { Logger.i(TAG, " onSpeaking speechGroupId : " + speechGroupId + " , voiceData : " + voiceData.length); } @Override public void onFinish(byte[] allVoiceData, String speechGroupId) { Logger.i(TAG, " onFinish speechGroupId : " + speechGroupId + " , allVoiceData : " + allVoiceData.length); } @Override public void onError(String errorCode, String errorMsg) { Logger.i(TAG, " onError errorCode : " + errorCode + " , errorMsg : " + errorMsg); } });
6、参考
本示例的代码工程仅用于简单演示,实际开发过程中应严格遵循开发指南。访问以下链接可以获取详细信息:语音同步合成WebSocket接口