It's really simple, but there are some details that need attention.
About the application of the voice on Android, we need to download the SDK on their own, and then according to the API provided by the voice flight speech on their Android demo run successfully, that thing is quite simple.
Then, we also need to put their own COCOS2DX project on the Android deployment, these online materials are many, also do not explain, follow-up I will also make corresponding summary. Not much to say here.
OK, nonsense not much to say, directly on the code
The idea is to implement C + + Java calls through COCOS2DX's Jnihelper class, and then implement speech functions
Not much nonsense said:
Directly on the code: here I used a voice class to call the speech directly in the project
Voice.h
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 class name const char * jniclass = "org/cocos2dx/cpp/ Appactivity ";//To get the Java part of the method, detailed parameters refer to the source code of the Jnimethodinfo class, the parameters are, class object, Java class, Java class method, method parameters and return value, V represents the void type return value (that is, no return value, The representation parameter inside the parentheses, the parameter is a string "See JNI Signature Specification") bool Ishave = Jnihelper::getstaticmethodinfo (Jmi,jniclass, "Onvoicestart", "(ljava/ lang/string;) V "); if (Ishave) {//Convert string and format jstring jdata = Jmi.env->newstringutf (GBKToUTF8 (data));//Method calling Java, The first 2 parameters are fixed, the following parameters are parameters in the Java method Jmi.env->callstaticvoidmethod (Jmi.classid, Jmi.methodid, jdata);} #endif}
Java side of the code is as follows (with Baidu ads implementation code)
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 {//Voice + installation helper Classes @overridepublic void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); Speechutility.createutility (Appactivity.this, "appid=53bb48d3"); ShowAds ();} /** * C + + call method to implement voice broadcast * @param value to broadcast * @param the role of the person voice, suggested with the little girl Vinn * @param voicespeed voice speed, suggested * @param voic Epitch tone, suggested * @param voicevolume volume recommended *///string value,string person,string voicespeed,string voicepitch,string Voicevolumepublic static void Onvoicestart (final String value) throws Exception{speechsynthesizerMTts = Speechsynthesizer.createsynthesizer (Appactivity.getcontext (), null); Mtts.setparameter (Speechconstant.voice _name, "Vinn");//Set Speech speed Mtts.setparameter (speechconstant.speed, "45");//Set Tone Mtts.setparameter (Speechconstant.pitch, "55");//Set Volume Mtts.setparameter (speechconstant.volume, "100");//set player audio stream type 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 e Ndpos) {} @Overridepublic void oncompleted (speecherror error) {}};//show ad private void ShowAds () {//relative positioning layout relativelayout l Ayout = new Relativelayout (this); Define Addcontentview (Layout,new layoutparams (Android.view.ViewGroup.LayoutParams.MATCH_PARE) for the wide-height attribute of the ad area.NT, Android.view.ViewGroup.LayoutParams.MATCH_PARENT)); Add the ad layer to the current interface AdView AdView = new AdView (this); Size Relativelayout.layoutparams layoutparams = new Relativelayout.layoutparams ( Android.view.ViewGroup.LayoutParams.MATCH_PARENT, Android.view.ViewGroup.LayoutParams.WRAP_CONTENT); Position Layoutparams.addrule (relativelayout.align_parent_top); Add into the project to display Layout.addview (adview,layoutparams); }}
Code for the calling language:
Onvoice ("You Are my little Apple");
External use don't forget to introduce a header file.
#include "voice/voice.h"
This can be achieved, Baidu Advertising section, we are interested to study, but also need the SDK OH