Android之讯飞语音-文字转语音

2017-01-14 10:05:35来源:http://www.jianshu.com/p/8fd3bcc33104作者:卜俊文人点击

一、描述


在平时开发中,也许有的模块需要用到语音功能,特别是需要动态播放语音的,这时就需要把文字转换成语音进行播放了,当然如果只是固定的几个静态语音需要播放,可以直接用软件把文字转成语音生成MP3,之后在项目中直接播放音频即可,这里推荐朗读女。


二、使用教程
一,登陆讯飞开发平台

http://www.xfyun.cn/




二、创建一个应用



三、Sdk下载

选择好你需要的功能,有的免费的,这里就以在线语音合成作为示例。



Paste_Image.png
四、配置讯飞语音到AndroidStudio


(一)打开压缩包的内容,里面有个Lib,我们现在先进入lib




(二)复制arm64-v8a,armeanbi,armeabi-v7a存放到jniLibs目录中,把Msc.jar和Sunflower.jar存放到libs目录中。



需要复制的文件

存放位置,jniLibs


Paste_Image.png

(三)添加需要的权限


    <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

五、讯飞语音使用说明


(一)初始化讯飞语音,可以在Application类中执行,把“appid=”后面替换上你在讯飞上创建的应用对应的Appid。


public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
SpeechUtility.createUtility(getApplicationContext(), "appid=YOU_APPID");
}
}

(二)语音工具类,调用speakText(要播放的语音文本)方法即可播放语音,如还需要配置一些其他属性,可自行添加。


package com.example.junwen.myapplication;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;
/**
* 描述:语音播放工具类
* 作者:卜俊文
* 创建:2016/8/19 09:07
* 邮箱:344176791@qq.com
*/
public class AudioUtils {
private static AudioUtils audioUtils;
private SpeechSynthesizer mySynthesizer;
public AudioUtils() {
}
/**
* 描述:单例
* 作者:卜俊文
* 邮箱:344176791@qq.com
* 创建时间: 2016/8/19 14:38
*/
public static AudioUtils getInstance() {
if (audioUtils == null) {
synchronized (AudioUtils.class) {
if (audioUtils == null) {
audioUtils = new AudioUtils();
}
}
}
return audioUtils;
}
private InitListener myInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d("mySynthesiezer:", "InitListener init() code = " + code);
}
};

/**
* 描述:初始化语音配置
* 作者:卜俊文
* 邮箱:344176791@qq.com
* 创建时间: 2016/8/19 14:38
*/
public void init(Context context) {
//处理语音合成关键类
mySynthesizer = SpeechSynthesizer.createSynthesizer(context, myInitListener);
//设置发音人
mySynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
//设置音调
mySynthesizer.setParameter(SpeechConstant.PITCH, "50");
//设置音量
mySynthesizer.setParameter(SpeechConstant.VOLUME, "50");
}
/**
* 描述:根据传入的文本转换音频并播放
* 作者:卜俊文
* 邮箱:344176791@qq.com
* 创建时间: 2016/8/19 14:39
*/
public void speakText(String content) {
int code = mySynthesizer.startSpeaking(content, new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakResumed() {
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
}
@Override
public void onCompleted(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
});
}
}

(三)在MainActivity中直接调用方法播放语音,init方法也可以放在Aplication中初始化,自行封装。


  public void Speak(View view) {
AudioUtils.getInstance().init(MainActivity.this); //初始化语音对象
AudioUtils.getInstance().speakText("你好"); //播放语音
}

六、示例Demo


讯飞语音源代码




三、总结


这里总结了讯飞语音的使用说明,方便以后需要的时候,方便的查看。




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台