cocos2dx實現android的對訊飛語音的合成(語言朗讀的實現)

來源:互聯網
上載者:User

標籤:cocos2d   android平台   android開發   應用   跨平台   

其實很簡單,不過有些細節需要注意。


關於訊飛語音在android上的應用,大家需要自己去下載SDK,然後按照訊飛語音提供的api在自己的android的Demo上運行成功,那東西也相當的簡單。


然後,大家也需要把自己的cocos2dx項目在android 上部署起來,這些網上資料很多,也不一一解釋,後續我也會做出對應的總結。這裡不多說。


OK,廢話不多說,直接上代碼


思路就是,通過cocos2dx的JNIhelper類實現C++對Java的調用,然後實現語音功能


廢話不多說:

直接上代碼:這裡我在項目中直接把對語音的調用用了一個voice類



Voice.h

#ifndef _VOICE_H__#define _VOICE_H__#include "cocos2d.h"USING_NS_CC;/*** 添加聲音*/void onVoice(const char * data);#endif 

Voice.cpp

#include "Voice.h"#include "cocos2d.h"#include "IconvString.h"#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include "jni.h"#include "platform/android/jni/JniHelper.h"#endif USING_NS_CC;void onVoice(const char *data){#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)JniMethodInfo jmi;//java的類名const char * jniClass = "org/cocos2dx/cpp/AppActivity";//擷取java部分的方法,詳細參數請參考JniMethodInfo類的源碼,參數分別為,類對象,java類,java類的方法,方法的參數和傳回值,V表示void類型傳回值(即無傳回值,括弧裡面的表示參數,參數是一個字串【詳見JNI簽名規範】)bool isHave = JniHelper::getStaticMethodInfo(jmi,jniClass,"onVoiceStart","(Ljava/lang/String;)V");if (isHave){//轉換字串以及格式jstring jdata = jmi.env->NewStringUTF(GBKToUTF8(data));//調用java的方法,前面2個參數是固定的,後面的參數是在java的方法中的參數jmi.env->CallStaticVoidMethod(jmi.classID, jmi.methodID, jdata);}#endif }

Java 端的代碼如下(附帶百度廣告的實現代碼)

package org.cocos2dx.cpp;import org.cocos2dx.lib.Cocos2dxActivity;import android.app.ActionBar.LayoutParams;import android.os.Bundle;import android.util.Log;import android.widget.RelativeLayout;import com.baidu.mobads.AdView;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 AppActivity extends Cocos2dxActivity {// 語音+安裝助手類@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SpeechUtility.createUtility(AppActivity.this, "appid=53bb48d3");showAds();}/** * C++ 調用方法,實現語音播報 * @param value 要播報的內容 * @param person 聲音的角色,建議用小女孩 vinn * @param voiceSpeed 聲音的語速,建議45 * @param voicePitch 音調 ,建議 55 * @param voiceVolume 音量 建議 100 *///String value,String person,String voiceSpeed,String voicePitch,String voiceVolumepublic static void onVoiceStart(final String value)throws Exception{SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(AppActivity.getContext(), null);mTts.setParameter(SpeechConstant.VOICE_NAME,"vinn");//設定語速mTts.setParameter(SpeechConstant.SPEED,"45");//設定音調mTts.setParameter(SpeechConstant.PITCH,"55");//設定音量mTts.setParameter(SpeechConstant.VOLUME,"100");//設定播放器音頻流類型mTts.setParameter(SpeechConstant.STREAM_TYPE, "2");mTts.startSpeaking(value, mTtsListener);}private static SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {}@Overridepublic void onSpeakPaused() {}@Overridepublic void onSpeakResumed() {}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos,String info) {}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {}@Overridepublic void onCompleted(SpeechError error) {}};//顯示廣告private void showAds(){  //相對定位布局 RelativeLayout layout = new RelativeLayout(this);  //給廣告地區的寬高屬性定義     addContentView(layout,new LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT));       //把廣告層添加到當前介面上     AdView adView = new AdView(this);      //大小     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);     //位置     layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);     //添加進項目中進行顯示     layout.addView(adView,layoutParams ); }}

調用語言的代碼:

onVoice(“你是我的小蘋果”);

在外部使用別忘了引入標頭檔哦

#include "Voice/Voice.h"

這樣就可以實現了,百度廣告部分,大家有興趣去研究下,也是需要sdk的哦


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.