讯飞语音之语音合成

因为一个项目的需要,开始接触这个,我本身能力很有限,简单的语音合成就花了我很长时间,现在跟大家分享一下代码

第一步:

首先去讯飞语音官网注册账号,创建应用,选择你需要的服务,下载相应的SDK。

第二部:导入jar包和so文件

论坛上大多代码是eclipse的,比较简单,这里介绍一下Android Studio的导入方法:

1、首先,将左侧的显示改成project视图

2、将下载的讯飞语音包内 libs文件夹下,Msc.jar和armeabi分别按图导入相应的位置

        

Android Studio导入后的样子

第三步:添加权限

在AndroidManifest中添加如下权限(有的好像用不到,个别我也不是很懂)

<!--连接网络权限,用于执行云端语音能力 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!--读取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!--获取当前wifi状态 -->
    <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"/>
    <!--读取联系人权限,上传联系人需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!-- 读写SD卡权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

第四步:Layout 文件

只想做一个简单的例子,这里只写一个按钮,点击时手机读出预先设定好的文字

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.examlpe.google.speakdemo2.MainActivity">

    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

第五步:MainActivity

package com.examlpe.google.speakdemo2;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;


public class MainActivity extends Activity implements View.OnClickListener {


    Button speak;
    private static final String APPID = "58aad20c";
    private SpeechSynthesizer speechSynthesizer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        speak = (Button) findViewById(R.id.bt);
        speak.setOnClickListener(this);
        //创建语音配置对象,appid= 后面的字符串在讯飞语音我的应用中找,每个应用有特定的appid
        SpeechUtility.createUtility(MainActivity.this,"appid=********");
        //1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListener  ,可写为null
        speechSynthesizer = SpeechSynthesizer.createSynthesizer(MainActivity.this, null);
        //语音合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类
        speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
        speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");//设置语速
        speechSynthesizer.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100

    }


    //本地合成时用到
    /*private InitListener myInitListener = new InitListener() {
        @Override
        public void onInit(int code) {
            Log.d("mySynthesiezer:", "InitListener init() code = " + code);
        }
    };*/


    //合成监听器
    private SynthesizerListener mListener = new SynthesizerListener(){

        @Override
        public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, "合成bpro", Toast.LENGTH_LONG).show();

        }

        @Override
        public void onCompleted(SpeechError error) {
            // TODO Auto-generated method stub
            if(error!=null)
            {
                Log.d("mySynthesiezer complete code:", error.getErrorCode()+"");
            }
            else
            {
                Log.d("mySynthesiezer complete code:", "0");
            }
            Toast.makeText(MainActivity.this, "合成完成", Toast.LENGTH_LONG).show();

        }

        @Override
        public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSpeakBegin() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSpeakPaused() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSpeakProgress(int arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSpeakResumed() {
            // TODO Auto-generated method stub

        }

    };

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.bt){

            //开始合成
            speechSynthesizer.startSpeaking("this", mListener);
            Log.d("mySynthesiezer start code:", "start");
            Toast.makeText(MainActivity.this, "dianji", Toast.LENGTH_LONG).show();



        }
    }

}

appid查找方法:






到此,一个简单的例子就完成了,运行截图就一个按钮,没什么可看的,就不放了,之后会打包源码送上,有问题欢迎交流





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值