标签: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
#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
}
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的哦
cocos2dx实现android的对讯飞语音的合成(语言朗读的实现),布布扣,bubuko.com
cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)
标签:cocos2d android平台 android开发 应用 跨平台
原文地址:http://blog.csdn.net/helem_2013/article/details/37695261