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

<!-- 文章内容 -->
    <div data-note-content="" class="show-content">
      <div class="show-content-free">
        <h4>一、描述</h4>


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

二、使用教程

一,登陆讯飞开发平台

http://www.xfyun.cn/





android指定语言打包 安卓语音打包软件_android




二、创建一个应用



android指定语言打包 安卓语音打包软件_初始化_02




三、Sdk下载

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



android指定语言打包 安卓语音打包软件_初始化_03


Paste_Image.png


四、配置讯飞语音到AndroidStudio

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



android指定语言打包 安卓语音打包软件_android_04


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




android指定语言打包 安卓语音打包软件_android指定语言打包_05


需要复制的文件




android指定语言打包 安卓语音打包软件_ide_06


存放位置,jniLibs



android指定语言打包 安卓语音打包软件_讯飞语音_07


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");
    }
}

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

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

package com.example.junwen.myapplication;

package com.example.junwen.myapplication;
import android.content.Context;
import android.os.Bundle;
importimport com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import• 
 */
public class AudioUtils{
private static
private
public AudioUtils(){
 }
/**• 描述:单例
• 作者:卜俊文
• 
 */
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{
 Log.d(“mySynthesiezer:”, "InitListener init() code = " + code);
 }
 };/**
• 描述:初始化语音配置
• 作者:卜俊文
• 
 */
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”);}
/**
• 描述:根据传入的文本转换音频并播放
• 作者:卜俊文
• 
 */
public void speakText(String content){
int code = mySynthesizer.startSpeaking(content, new SynthesizerListener() {
@Override
public void onSpeakBegin(){
}

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onBufferProgress</span><span >(<span >int</span> i, <span >int</span> i1, <span >int</span> i2, String s)</span> </span>{

 }

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onSpeakPaused</span><span >()</span> </span>{

 }

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onSpeakResumed</span><span >()</span> </span>{

 }

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onSpeakProgress</span><span >(<span >int</span> i, <span >int</span> i1, <span >int</span> i2)</span> </span>{

 }

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onCompleted</span><span >(SpeechError speechError)</span> </span>{

 }

 <span >@Override</span>
 <span ><span >public</span> <span >void</span> <span >onEvent</span><span >(<span >int</span> i, <span >int</span> i1, <span >int</span> i2, Bundle bundle)</span> </span>{

 }

});
}
}

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

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

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



android指定语言打包 安卓语音打包软件_ide_08


三、注意事项

如果有遇到空指针的问题,请检查一下你的初始化是否在Applicaiton中,Application类是否已经在清单文件注册了,没有初始化是会空指针的。

四、总结

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