首页 > 代码库 > cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)
cocos2dx实现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 = http://www.mamicode.com/jmi.env->NewStringUTF(GBKToUTF8(data));>
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 { // 语音+安装助手类 @Override public 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 voiceVolume public 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() { @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) { } }; //显示广告 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个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。