Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

本文介绍了如何在Android中实现百度语音合成,包括离线和在线模式,详细步骤涵盖编辑代码、配置、运行等环节。通过示例代码展示了如何初始化合成器、设置参数、获取鉴权Token以及处理权限请求,最终实现语音合成功能。
摘要由CSDN通过智能技术生成

android:textSize=“12dp” />

<ScrollView

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_above=“@+id/btn”

<TextView

android:id=“@+id/showText”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_margin=“10dp”

android:background=“@android:color/darker_gray”

android:minLines=“3”

android:scrollbars=“vertical” />

下面再来看OnlineActivity的代码

2. 编辑代码

package com.llw.speechsynthesis;

import android.Manifest;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import com.baidu.tts.chainofresponsibility.logger.LoggerProxy;

import com.baidu.tts.client.SpeechSynthesizer;

import com.baidu.tts.client.SpeechSynthesizerListener;

import com.baidu.tts.client.TtsMode;

import com.llw.speechsynthesis.control.InitConfig;

import com.llw.speechsynthesis.listener.UiMessageListener;

import com.llw.speechsynthesis.util.Auth;

import com.llw.speechsynthesis.util.AutoCheck;

import com.llw.speechsynthesis.util.FileUtil;

import com.llw.speechsynthesis.util.IOfflineResourceConst;

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

/**

  • 除了SDK,该类没有任何依赖,可以直接复制进你的项目

  • 默认TEMP_DIR = “/sdcard/baiduTTS”; // 重要!请手动将assets目录下的3个dat 文件复制到该目录

  • 确保 TEXT_FILENAME 和 MODEL_FILENAME 存在

  • Created by fujiayi on 2017/9/14.

*/

public class OnlineActivity extends AppCompatActivity implements IOfflineResourceConst {

/**

  • 要合成的文本,可以自行改动。

*/

private static final String TEXT = “欢迎使用百度语音合成,请在代码中修改合成文本”;

protected String appId;

protected String appKey;

protected String secretKey;

protected String sn; // 纯离线合成SDK授权码;离在线合成SDK没有此参数

//TtsMode.ONLINE 纯在线

private TtsMode ttsMode = TtsMode.ONLINE;

private boolean isOnlineSDK = TtsMode.ONLINE.equals(DEFAULT_SDK_TTS_MODE);

// ================ 纯离线sdk或者选择TtsMode.ONLINE 以下参数无用;

private static final String TEMP_DIR = “/sdcard/baiduTTS”; // 重要!请手动将assets目录下的3个dat 文件复制到该目录

// 请确保该PATH下有这个文件

private static final String TEXT_FILENAME = TEMP_DIR + “/” + TEXT_MODEL;

// 请确保该PATH下有这个文件 ,m15是离线男声

private static final String MODEL_FILENAME = TEMP_DIR + “/” + VOICE_MALE_MODEL;

// ===============初始化参数设置完毕,更多合成参数请至getParams()方法中设置 =================

protected SpeechSynthesizer mSpeechSynthesizer;

// =========== 以下为UI部分 ==================================================

private TextView mShowText;

protected Handler mainHandler;

private String desc; // 说明文件

private static final String TAG = “MiniActivity”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

appId = Auth.getInstance(this).getAppId();

appKey = Auth.getInstance(this).getAppKey();

secretKey = Auth.getInstance(this).getSecretKey();

sn = Auth.getInstance(this).getSn(); // 纯离线合成必须有此参数;离在线合成SDK没有此参数

desc = FileUtil.getResourceText(this, R.raw.mini_activity_description);

setContentView(R.layout.activity_online);

initView();

initPermission();

initTTs();

}

/**

  • 注意此处为了说明流程,故意在UI线程中调用。

  • 实际集成中,该方法一定在新线程中调用,并且该线程不能结束。具体可以参考NonBlockSyntherizer的写法

*/

private void initTTs() {

LoggerProxy.printable(true); // 日志打印在logcat中

boolean isSuccess;

if (!isOnlineSDK) {

// 检查2个离线资源是否可读

isSuccess = checkOfflineResources();

if (!isSuccess) {

return;

} else {

print(“离线资源存在并且可读, 目录:” + TEMP_DIR);

}

}

// 日志更新在UI中,可以换成MessageListener,在logcat中查看日志

SpeechSynthesizerListener listener = new UiMessageListener(mainHandler);

// 1. 获取实例

mSpeechSynthesizer = SpeechSynthesizer.getInstance();

mSpeechSynthesizer.setContext(this);

// 2. 设置listener

mSpeechSynthesizer.setSpeechSynthesizerListener(listener);

// 3. 设置appId,appKey.secretKey

int result = mSpeechSynthesizer.setAppId(appId);

checkResult(result, “setAppId”);

result = mSpeechSynthesizer.setApiKey(appKey, secretKey);

checkResult(result, “setApiKey”);

// 4. 如果是纯离线SDK需要离线功能的话

if (!isOnlineSDK) {

// 文本模型文件路径 (离线引擎使用), 注意TEXT_FILENAME必须存在并且可读

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, TEXT_FILENAME);

// 声学模型文件路径 (离线引擎使用), 注意TEXT_FILENAME必须存在并且可读

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, MODEL_FILENAME);

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);

// 该参数设置为TtsMode.MIX生效。

// MIX_MODE_DEFAULT 默认 ,wifi状态下使用在线,非wifi离线。在线状态下,请求超时6s自动转离线

// MIX_MODE_HIGH_SPEED_SYNTHESIZE_WIFI wifi状态下使用在线,非wifi离线。在线状态下, 请求超时1.2s自动转离线

// MIX_MODE_HIGH_SPEED_NETWORK , 3G 4G wifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线

// MIX_MODE_HIGH_SPEED_SYNTHESIZE, 2G 3G 4G wifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线

}

// 5. 以下setParam 参数选填。不填写则默认值生效

// 设置在线发声音人: 0 普通女声(默认) 1 普通男声 3 情感男声<度逍遥> 4 情感儿童声<度丫丫>

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, “0”);

// 设置合成的音量,0-15 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, “9”);

// 设置合成的语速,0-15 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, “5”);

// 设置合成的语调,0-15 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值