事实上非常easy,只是有些细节须要注意。

关于讯飞语音在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 {
// 语音+安装助手类
@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的对讯飞语音的合成(语言朗读的实现)的更多相关文章

  1. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  2. Android讯飞语音云语音听写学习

    讯飞语音云语音听写学习         这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google" ...

  3. android讯飞语音开发常遇到的问题

    场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...

  4. Android自带语音播报+讯飞语音播报封装(直接用)

    一.Android自带的语音播报 1.查看是否支持中文,在测试的设备中打开‘设置’ -->找到 '语言和输入法'-->查看语音选项,是否支持中文,默认仅支持英文. 使用如下: public ...

  5. Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)

    1.账号准备工作 首先要有一个讯飞的账号啦,为后面申请APPID.APPKey等东西做准备.顺带一提:讯飞对不同认证类型用户开 放的SDK的使用次数是有不同的,详情如下图. 账号申请完成后,需要去你自 ...

  6. 基于讯飞语音API应用开发之——离线词典构建

    最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...

  7. UNITY 接讯飞语音过程总结

    11:13 2017/3/141,安装问题:JDK与ECLIPSE位数一定要对应,32位对64位会出现 java was returned ....code 13的弹框错误.版本号可以不一致.2,EC ...

  8. 讯飞语音唤醒SDK集成流程

    唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q48788 ...

  9. iOS: 讯飞语音的使用

    一.介绍: 讯飞语音做的相当不错,容错率达到90%多,如果需要做语音方面的功能,它绝对是一个不错的选择.讯飞语音的功能很多:语音听写.语音识别.语音合成等,但我们最常用的还是语音听写.讯飞语音中包含界 ...

随机推荐

  1. window.frameElement属性

    比如有一个iframe的src是xxx.htm frameElement的作用就是在xxx.htm中获得这个引用它的iframe objet 这样你就可以在xxx.htm改变iframe的大小,或是边 ...

  2. 精通 Oracle+Python,第 8 部分:适合 Oracle DBA 使用的 Python

    传统上,当需要为操作系统编写一些脚本时,人们常常会选用 Bash 或 Perl 脚本工具.这些工具易于使用,因而它们几乎变得无处不在,渗透到了包括 Oracle Database 在内的其他软件中,O ...

  3. coder

    #include <iostream>#include <GL/glut.h>using std::cout;using std::endl;float windowWidth ...

  4. CSS font-family的順序

    2016年09月07日 13時51分 wanglinqiang整理 相信大家都知道基本的用法是這樣: font-family:font1,font2,serif; 系統有font1就先用font1 如 ...

  5. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  6. Remove highlight from document(Aspose Word 删除高亮)

    Thanks for your inquiry. You can do it using DocumentVisitor. Please try using the following code: / ...

  7. QQ游戏百万人同时在线服务器架构实现

    转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...

  8. 两次fopen不同的文件返回相同的FILE* 地址

    最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了.以下代码是对这个bug的概括: auto fp1 = ...

  9. ServiceStack.Redis之IRedisClient

    事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...

  10. 连接池 BoneCPDataSource

    一篇连接池不错的文章 http://blog.csdn.net/vincent_czz/article/details/7646392