讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」

讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」转自:https://blog.csdn.net/zzjinjiazz/article/details/54862237eclipse这边推荐下载一个ADT_bundle对应自己的系统版本(里面

这个是语音识别的转自:unity接入讯飞语音的识别和合成功能

语音识别:

eclipse这边推荐下载一个ADT_bundle对应自己的系统版本(里面有自带的android sdk),不然自己下载的eclipse可能会没有 android application project 让你创建,我的就是刚开始没有

adt_bundle_win_64下载地址https://pan.baidu.com/s/1sZr7ubk3E86uaeSs312eJw 密码:o6ew

安装eclipse之前应该先安装JDK并配置好环境
JDK下载和配置:https://pan.baidu.com/s/1DmJwfsvM8qzg8WofEcs3-Q
密码:wbii

完了之后就照作者的步骤去写吧

讯飞这个语音是需要联网的

我自己配置所遇到的问题:

UnityPlayer.UnitySendMessage(“Main Camera”, “xxx”, “初始化完成”);
这三个参数,第一个Main Camera为unity中脚本对象所挂在的Gameobject的名 字;第二个参数xxx为你unity脚本所需要接收这个返回参数(也就是eclipse中的voiceResult这个参数)的方法名字,第三个为显示状态

至于打包出来的那个jar这个包的名字可以自己随意写一个

我第一次没成功的主要原因是脚本没有挂载到Main Camera上面,引以为戒

unity测试工程和打包出来的APK链接地址:
https://pan.baidu.com/s/1nBZcKvBVK516L8gzUfJmgA 密码:6l1o

这个是语音合成(文字转语音):

语音识别和语音合成的SDK没必要下两遍,直接使用语音识别的那个SDK就行,就按照之前导进去的那个,然后开始改写你的 MainActivity.java这个脚本就行
我是把语音识别和语音合成写到一块了,可以参照代码,懒人可以直接复制粘贴

package com.zhimin.mysoundshibie;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.iflytek.cloud.InitListener; 
import com.iflytek.cloud.RecognizerListener; 
import com.iflytek.cloud.RecognizerResult; 
import com.iflytek.cloud.SpeechConstant; 
import com.iflytek.cloud.SpeechError; 
import com.iflytek.cloud.SpeechRecognizer; 
import com.iflytek.cloud.SpeechUtility; 
import com.iflytek.cloud.SpeechSynthesizer; 
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.ErrorCode;
import com.unity3d.player.UnityPlayer; 
import com.unity3d.player.UnityPlayerActivity;



public class MainActivity extends UnityPlayerActivity { 
   

    SpeechRecognizer mIat; 
    String voiceResult = "";

    // 语音合成对象
    private SpeechSynthesizer speechSynthesizer;

    // 默认发言人
    private String voicer = "xiaoyan";

    // 引擎类型
    private String mEngineType = SpeechConstant.TYPE_CLOUD;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SpeechUtility.createUtility(this, "appid=xxxxx");   
    }

    //unity中调用进行语音识别
    public void Yuyin_shibie() {

        mIat = SpeechRecognizer.createRecognizer(this, mInitListener);

        mIat.setParameter(SpeechConstant.DOMAIN, "iat");

        mIat.setParameter(SpeechConstant.ACCENT, "mandarin");

        mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");

        mIat.setParameter(SpeechConstant.KEY_SPEECH_TIMEOUT, "4000");

        mIat.setParameter(SpeechConstant.VAD_EOS, "2000");

        mIat.setParameter(SpeechConstant.ASR_PTT, "0");

        mIat.startListening(recognizerListener);
        mIat.setParameter(SpeechConstant.ENGINE_TYPE,"");
        mIat.setParameter(SpeechConstant.ENGINE_MODE,"");

        UnityPlayer.UnitySendMessage("Main Camera", "zhimin", "初始化完成");

        if (voiceResult != null || voiceResult != "") {

            voiceResult = "";

        }

    }

    //unity中调用进行语音合成
    public void kaishi_bofang_yuyin(String str)
    {
        speechSynthesizer = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);
         // 设置参数
        setParam();
        // 开始播放
        int code = speechSynthesizer.startSpeaking(str, mTtsListener);

        if (code != ErrorCode.SUCCESS) {
            showToast("语音合成失败,错误码: " + code);
        } else {
            showToast("语音合成成功啦");
        }
    }

    private RecognizerListener recognizerListener = new RecognizerListener() {

        // 说话音量

        @Override
        public void onVolumeChanged(int arg0, byte[] arg1) {

            // TODO Auto-generated method stub

        }

     // 得到返回的语音结果

        @Override
        public void onResult(RecognizerResult arg0, boolean arg1) {

            // TODO Auto-generated method stub

            voiceResult = voiceResult
                    + JsonParser.parseIatResult(arg0.getResultString());

            if (arg1) {

                UnityPlayer.UnitySendMessage("Main Camera","zhimin",
                        voiceResult);

            }

        }

     // 扩展接口

        @Override
        public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {

            // TODO Auto-generated method stub

        }

        // 发生错误回调

        @Override
        public void onError(SpeechError arg0) {

            // TODO Auto-generated method stub

            UnityPlayer.UnitySendMessage("Main Camera", "zhimin", "发生错误啦");

        }

        // 结束录音

        @Override
        public void onEndOfSpeech() {

            // TODO Auto-generated method stub

            UnityPlayer.UnitySendMessage("Main Camera", "zhimin", "结束录音啦");

        }

        // 开始录音

        @Override
        public void onBeginOfSpeech() {

            // TODO Auto-generated method stub

            UnityPlayer.UnitySendMessage("Main Camera", "zhimin", "开始录音啦");

        }
    };

        private InitListener mInitListener = new InitListener() {

            @Override
            public void onInit(int arg0) {

                // TODO Auto-generated method stub

                UnityPlayer.UnitySendMessage("Main Camera", "zhimin",
                        "mInitListener");

                if (arg0 == 0) {

                    Toast.makeText(MainActivity.this, "语音可以用", Toast.LENGTH_SHORT)
                            .show();

                } else {

                    Toast.makeText(MainActivity.this, "语音不可以用", Toast.LENGTH_SHORT)
                            .show();

                }

            }
        };

        // 设置参数
        private void setParam() {
            // 清空参数
            speechSynthesizer.setParameter(SpeechConstant.PARAMS, null);
            // 根据合成引擎设置相应参数
            if (mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {
                speechSynthesizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
                // 设置在线合成发音人
                speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, voicer);
                //设置合成语速
                speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");
                //设置合成音调
                speechSynthesizer.setParameter(SpeechConstant.PITCH, "50");
                //设置合成音量
                speechSynthesizer.setParameter(SpeechConstant.VOLUME, "50");
            } else {
                speechSynthesizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
                // 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。
                speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "");
                /** * TODO 本地合成不设置语速、音调、音量,默认使用语记设置 * 开发者如需自定义参数,请参考在线合成参数设置 */
            }
            //设置播放器音频流类型
            speechSynthesizer.setParameter(SpeechConstant.STREAM_TYPE, "5");
            // 设置播放合成音频打断音乐播放,默认为true
            speechSynthesizer.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");

            // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
            // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
            speechSynthesizer.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
            //speechSynthesizer.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");
        }
        // 播放回调
        private SynthesizerListener mTtsListener = new SynthesizerListener() {
            @Override
            public void onSpeakBegin() {
            }

            @Override
            public void onSpeakPaused() {
            }

            @Override
            public void onSpeakResumed() {
            }

            @Override
            public void onBufferProgress(int percent, int beginPos, int endPos,
                                         String info) {
                // 合成进度
            }

            @Override
            public void onSpeakProgress(int percent, int beginPos, int endPos) {
                // 播放进度
            }

            @Override
            public void onCompleted(SpeechError error) {
                if (error == null) {
                    showToast("播放完成");
                } else if (error != null) {
                    showToast(error.getPlainDescription(true));
                }
            }

            @Override
            public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
                // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
                // 若使用本地能力,会话id为null
                // if (SpeechEvent.EVENT_SESSION_ID == eventType) { 
   
                // String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
                // Log.d(TAG, "session id =" + sid);
                // }
            }
        };

        /** * 初始化监听。 */
        private InitListener mTtsInitListener = new InitListener() {
            @Override
            public void onInit(int code) {
                //Log.d(TAG, "InitListener init() code = " + code);
                if (code != ErrorCode.SUCCESS) {
                    showToast("初始化失败,错误码:" + code);
                } else {
                    // 初始化成功,之后可以调用startSpeaking方法
                    // 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
                    // 正确的做法是将onCreate中的startSpeaking调用移至这里
                    showToast("初始化成功");
                }
            }
        };

        // 传入 meg,弹出一个 Toast 操作
        public void showToast(final String meg)
        {
            Toast.makeText(MainActivity.this, meg, Toast.LENGTH_LONG).show();
        }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」

此处的xxxx为你的讯飞appID

接下来是AndRoidMainfest.xml的改写

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zhimin.mysoundshibie" android:versionCode="1" android:versionName="1.0" >

    <uses-sdk  android:minSdkVersion="19" android:targetSdkVersion="19" />

    <application  android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
        <activity  android:name="com.zhimin.mysoundshibie.MainActivity" android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<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"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
</manifest>

讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」
注意标红的地方要和MainActivity.java里第一行那一致,比MainActivity.java里第一行后面多一个.MainActivity

然后ctrl+s后,点File(在左上角),然后点里面的Export,再点JAVA下面的JARfile,然后next
讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」
点击finish,自己选择你的打包路径

unity里面的格式

讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」
这个haha是我自己的打的jar包,该拖的和该创建的文件夹以及名字不能出错
libs和res自己在java的那个安卓过程拖过来即可

然后我的脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using UnityEngine.UI;

public class NewBehaviourScript1 : MonoBehaviour {

    public Text tx1;
    public Text tx2;

    AndroidJavaClass jc;
    AndroidJavaObject jo;
    void Start () {
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }


    void Update () {

    }

    public void kaishi_yuyin_shibie()
    {
        jo.Call("Yuyin_shibie");
    }

    public void kaishi_bofang_yuyin()
    {
        jo.Set<string>("voicer", "xiaoyu");//改变java中的播放者 (可以百度查询科大讯飞里面的语音人物名称)
        jo.Call("Yuyin_bofang","小猪佩琪身上纹,掌声送给社会人"); //第二个参数为需要播放的语音文字,可以随意定义
    }

    void zhimin(string str)
    {
        tx1.text = str;

    }



}

看不懂的同学不要着急,这里贴上我的安卓工程和unity工程以及打包好的apk包

注意:unity打包APK的PackageName必须和安卓工程中com.zhimin.mysoundshibie一致

安卓工程:https://pan.baidu.com/s/1nSJDieWCKKtFLIxwXwwkLQ 密码:7duu
unity工程: https://pan.baidu.com/s/1-rH83WMzeaCdSnjsY0jDpQ 密码: 4xac
APK包:https://pan.baidu.com/s/1Pzi5lRa4Ia9sm6BZE6SF8w 密码:32mh

今天的文章讯飞语音识别接口_讯飞tts语音引擎9.0「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89297.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注