cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)

事实上非常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的哦

时间: 2024-10-13 09:09:50

cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)的相关文章

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

讯飞语音云语音听写学习         这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google".但种种原因,国内的"OK,Google"并不能展示出他的全部威力,于是上网搜索国内Android平台的语音助手,个人觉得评价最好的是讯飞的--灵犀语音助手.其实讯飞语音云平台早就注册过了,并下载了相应的SDK,只是没仔细研究.今天突然想好好学习一下,以方便以后集成到自己开发的APP中,

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

大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说最大的问题是标准不统一云云,但在我看来,最大的问题在于两个方面,一个是价格,一个是操作的简便性,技术上的问题并不是阻碍智能家居推广的核心因素. 再来说说最近很火很惹人爱的微软小娜,Cortana.本人作为微软的死忠,作为一名靠.Net混饭的屌丝程序男,自然是有一部撸妹的,并且在小娜推送当天更新了手机

Android 通过调用系统接口使用如 谷歌语音、百度语音、讯飞语音等语音识别对话框的方法

现在app的开发进程会集成一些语音识别功能,而一般开发者是不具备自己开发一套语音识别引擎的,因此大多数情况是选择一个已经成熟的语音识别引擎SDK集成到自己的app中. 通常情况下,这种集成分两种,一种是直接调用SDK为开发者设计好的弹出框,开发者不需要开发识别交互界面:还有一种是开发者只利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先,测试机需要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时可以在系统设置界面的语言与输入处找到相

Android 讯飞语音之语音合成(在线有声朗读)

在线语音合成的使用方法: 首先下载相关的sdk,这个网址里有多种版本,我选择的Android. http://open.voicecloud.cn/index.php/services/voicebase?type=tts&tab_index=1 需要注意的是,最好先创建应用,审核通过后会返回一个APPID号,这个号在开发时会使用. 下载并解压后如图: 其中,doc中是相关文档,libs中是待会儿要导入的语音包,sample中是自带的Demo,大家可以看看. 下面我们通过实例来简单的使用在线语音

讯飞语音 使用步骤(针对androidStudio):语音转文字:

前言:最近做项目用到了讯飞语音,遂搞了一个简单的教程,供大家使用. 讯飞语音  使用步骤:语音转文字:   1,首先去讯飞开放平台( http://www.xfyun.cn/)注册,账号:   2,注册后登录: 3,点击选择我的语音云:   4,点击左侧边栏,创建新的应用: 5,创建好应用后:如图:复制appid: 6,下载sdk:  点击边栏左侧sdk下载中心: 选择我们所需要的功能和平台: 7,点击下载sdk,保存文件,并打开. //-----------------------------

讯飞语音接口注册

1.首先申请账号 http://open.voicecloud.cn/ 一个邮箱就够了,验证邮箱后,会得到一个appid 2.然后登陆账号,到“我的语音云”---创建一个新的应用 填写应用名称iflyreminder,后选择分类,然后描述应用大致要实现的功能,选择平台,这里选择Android. 当然也有IOS WP8 JAVA FLASH WINDOWS LINUX等平台.提交后就建立成功了. 3.在“我的语音云”---我的应用下,选择刚刚创建的iflyreminder,点“立即开通服务”(默认

UNITY 接讯飞语音过程总结

11:13 2017/3/141,安装问题:JDK与ECLIPSE位数一定要对应,32位对64位会出现 java was returned ....code 13的弹框错误.版本号可以不一致.2,ECLIPSE 启动后,需要设置JRE路径,否则代码提示错误.3,智能提示问题:在window -preference -java -editor下设置 .为 .abcdefghijklmnopqrstuvwxyz 17:05 2017/3/17讯飞SDK接入UNITY过程:1,导入unity的类包cl

讯飞语音听写API 未安装组件 错误码21001

在使用讯飞语音听写时,使用云端听写而不是使用本地出现这个未安装组件错误那可能就是so文件没有成功导入.文档中都是ADT环境的配置,在AndroidStudio中jar包等都和ADT差别不大,但是SO文件的导入有些区别. 在AndroidStudio将so文件导入到jniLibs文件夹中就可以了: 导入之后再次运行在其APPID配置成功之后80%就没问题了. 还有一些网上列出来的: 1.有没有使用SpeechUtility.createUtility()设置appid2.有没有将libmsc.so

讯飞语音——唤醒

讯飞语音唤醒 唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q4878802/9023213 步骤 1. 创建应用,开通服务 地址:http://blog.csdn.net/q4878802/article/details/47762169 2. 下载SDK 我们要使用的是讯飞的付费功能,选择唤醒服务,点击下载以后,会提示没有购买.点击"购买服务"