事实上非常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. Android2.2 API —— ImageView

    注意 请查看本文后期更新完整版: http://www.cnblogs.com/over140/archive/2011/06/08/2075054.html 来源: 农民伯伯: http://www ...

  2. activity学习(1) 生命周期理解

    可以忽略onWindowFocusChanged.onSaveInstanceState.onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到.忽略掉这几个方法 ...

  3. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  4. C#使用字符串分割字符串

    我们都会用字符分割字符串: string[] recvArr = recv.Split(';'); 如果用字符串分割呢?下面: string[] sArray = Regex.Split(recv, ...

  5. 精心挑选的12款优秀 jQuery Ajax 分页插件和教程

    在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的  ...

  6. tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树

    P1716 - 上帝造题的七分钟 From Riatre    Normal (OI)总时限:50s    内存限制:128MB    代码长度限制:64KB 背景 Background 裸体就意味着 ...

  7. 如何为企业选择最理想的Linux服务器系统?

    [2013年10月12日 51CTO外电头条]什么样的Linux服务器最合适您的企业?简言之,它需要为员工带来工作所需的理想支持效果. 相对于成百上千种Linux桌面系统,Linux服务器系统的数量其 ...

  8. 【Java】servlet和servlet 容器

    servlet不是线程安全的,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,所以你的项目中如果只有一个servlet,那么web容器就只会创建一个实例 ...

  9. java桌面项目打包_by icewee_写得太棒了,直接转载了

    前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...

  10. 【转】在VMware中安装OS X Yosemite

    原文网址:http://blog.gaohaobo.com/229.html OS X(前称:Mac OS X)操作系统是由苹果公司(Apple Inc.)为其Mac系列产品开发的.基于Unix的专属 ...