事实上非常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. swift官方文档中的switch中case let x where x.hasSuffix("pepper")是什么意思?

    在官方文档中,看到这句.但不明白什么意思. let vegetable = "red pepper" switch vegetable { case "celery&qu ...

  2. 【C语言】printf函数详解

    C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...

  3. 2015_WEB页面前端工程师_远程测题_东方蜘蛛_1

    请使用HTML+CSS实现如下效果: 1. 使用CSS Sprites,实现如图1效果,素材图片为: icons.png: 2. 使用脚本语言验证邮箱.密码的必填以及邮箱的合法性: 若验证失败,则出现 ...

  4. Coursera《machine learning》--(14)数据降维

    本笔记为Coursera在线课程<Machine Learning>中的数据降维章节的笔记. 十四.降维 (Dimensionality Reduction) 14.1 动机一:数据压缩 ...

  5. 全连接的BP神经网络

    <全连接的BP神经网络> 本文主要描述全连接的BP神经网络的前向传播和误差反向传播,所有的符号都用Ng的Machine learning的习惯.下图给出了某个全连接的神经网络图. 1前向传 ...

  6. Uva_11361 Investigating Div-Sum Property

    题目链接 题意: 在[A,B]区间内找出满足条件的数有多少个. 条件:这个数本身 能够整除K, 且各位数字之和能够整除K. 思路: 数据范围过大2^31 2^31 = 2147483648 ~ 2*1 ...

  7. PI数据库的使用-PI System Management Tools

    1.PI连接管理器 2.标记搜索 3.当前值

  8. C/C++中的内存对齐 C/C++中的内存对齐

    一.什么是内存对齐.为什么需要内存对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址 ...

  9. angularjs编码实践

    AngularJS 是制作 SPA(单页面应用程序)和其它动态Web应用最广泛使用的框架之一.我认为程序员在使用AngularJS编码时有一个大的列表点应该记住,它会以这样或那样的方式帮助到你.下面是 ...

  10. iframe详细用法

    <iframe>是框架的一种形式,也比较常用到. 例子1.<iframe width=420 height=330 frameborder=0 scrolling=auto src= ...