`
liming1022
  • 浏览: 8523 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

讯飞语音识别

 
阅读更多

和QQ微信语音聊天的功能差不多,模仿一个微信聊天页面,可以进行语音通话,然后根据说的话进行不同的回复,例如你说的话里带美女,两个字,就会回复你一张美女的照片,你说的话里带唐诗,就可以回复你一首唐诗,并且可以语音说出来。

附下如下代码,需要导入安徽科大讯飞的语音识别的jar包,并且做一些初始化。

1.mainActivity的代码,实现了语音识别,语音说话等

package com.example;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.Scroller;

import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechConfig.RATE;
import com.iflytek.speech.SpeechError;
import com.iflytek.speech.SynthesizerPlayer;
import com.iflytek.speech.SynthesizerPlayerListener;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;

/**
 * 语音识别的小demo,可以根据说的话发送不同的东西
 * @author liming
 *
 */
public class MainActivity extends Activity implements RecognizerDialogListener, OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.main);
		initView();
		initClass();
	}

	private void initClass() {
		view = new UpdateView(this,scrolllayout);
	}

	private void initView() {
		//initPlayer();
		Button voice_start = (Button) findViewById(R.id.voice_start);
		voice_start.setOnClickListener(this);
		scrolllayout = (ScrollView) findViewById(R.id.scolllayout);
		
	}

	public void initPlayer(String result) {
		SynthesizerPlayer player  = SynthesizerPlayer.createSynthesizerPlayer(this, "appid=5212ef0a");
		player.playText(result , null, new SynthesizerPlayerListener() {
			
			@Override
			public void onPlayResumed() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onPlayPercent(int arg0, int arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onPlayPaused() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onPlayBegin() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onEnd(SpeechError arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onBufferPercent(int arg0, int arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
		});
		player.setSampleRate(RATE.rate16k);
		player.setVolume(100);
		player.setBackgroundSound(null);
		player.setSpeed(50);
		player.setVoiceName("vixr");
	}

//	public void click(View view) {
//	
//	}
	public void initDialog(){
		RecognizerDialog dialog = new RecognizerDialog(this, "appid=5212ef0a");
		dialog.setListener(this);
		// 设置采样率
		dialog.setSampleRate(RATE.rate16k);
		dialog.show();
	}
	

	private StringBuffer sb = new StringBuffer();
	private ScrollView scrolllayout;
	private UpdateView view;

	@Override
	public void onEnd(SpeechError error) {
		if(error == null){
			System.out.println(sb.toString());
			view.update(sb.toString());
			MyAsyncTask task = new MyAsyncTask(sb.toString(),this,scrolllayout,view);
			
		}
		sb.setLength(0);
	}

	@Override
	public void onResults(ArrayList<RecognizerResult> results, boolean arg1) {
		if (results != null) {
			for (RecognizerResult result : results) {
				sb.append(result.text);
			}
		}
	}

	@Override
	public void onClick(View v) {
		initDialog();
		
	}

}

 2.这个是进行更新View的类负责把说的话更新到view上去.

package com.example;

import java.util.Random;

import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class UpdateView {

	private MainActivity mainActivity;
	private ScrollView scrolllayout;
	private String result;
	private LinearLayout base_layout;

	public UpdateView(MainActivity mainActivity, ScrollView scrolllayout) {
		this.mainActivity = mainActivity;
		this.scrolllayout = scrolllayout;
		base_layout = (LinearLayout) scrolllayout
				.findViewById(R.id.base_layout);
	}

	public void update(String result) {

		this.result = result;

		View view = View.inflate(mainActivity, R.layout.list_say_me_item, null);
		TextView message = (TextView) view
				.findViewById(R.id.messagedetail_row_text);
		message.setText(result);
		TextView date = (TextView) view
				.findViewById(R.id.messagedetail_row_date);
		date.setText(CommonUtil.getStringDate());
		base_layout.addView(view);
		mainActivity.initPlayer(result);

		scrolllayout.post(new Runnable() {

			@Override
			public void run() {
				scrolllayout.fullScroll(ScrollView.FOCUS_DOWN);
			}
		});

	}

	public void updateMM(Answer result, String texts) {
		View view = View.inflate(mainActivity, R.layout.list_say_she_mm_item,
				null);
		ImageView image = (ImageView) view.findViewById(R.id.image_mm);
		if (result != null) {
			image.setImageResource(result.getMm());
		}
		TextView text = (TextView) view
				.findViewById(R.id.messagedetail_row_text);
		text.setText(texts);
		base_layout.addView(view);
		mainActivity.initPlayer(texts);
		scrolllayout.post(new Runnable() {

			@Override
			public void run() {
				scrolllayout.fullScroll(ScrollView.FOCUS_DOWN);
			}
		});

	}

}

 3.这是异步加载数据的类,放在子线程中执行。

package com.example;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.os.AsyncTask;
import android.widget.ScrollView;

public class MyAsyncTask {

	private String result;
	private MainActivity mainActivity;
	private ScrollView scrolllayout;
	private UpdateView updateView;
	public MyAsyncTask(String result,MainActivity mainActivity,ScrollView scrolllayout,UpdateView updateView) {
		this.result = result;
		this.mainActivity = mainActivity;
		this.scrolllayout = scrolllayout;
		this.updateView = updateView;
		new QueryAsyncTask().execute(result);
	}
	
	private class QueryAsyncTask extends AsyncTask<String, Void, Answer>{

		@Override
		protected Answer doInBackground(String... params) {
			String str = params[0]; 
			Answer answer = getMMPic(str);
			return answer;
		}

		@Override
		protected void onPostExecute(Answer result) {
			super.onPostExecute(result);
			if(result != null){ 
				if(Answer.MM_TYPE == result.getType()){
					String[] texts = mainActivity.getResources().getStringArray(R.array.mm);
					Random rand = new Random();
					int index = rand.nextInt(texts.length);
					updateView.updateMM(result,texts[index]);
				}else if(Answer.POETREY_TYPE == result.getType()){
					String[] texts = mainActivity.getResources().getStringArray(R.array.tang_poetry);
					Random rand = new Random();
					int index = rand.nextInt(texts.length);
					updateView.updateMM(result,texts[index]);
				}
			}
		}
		
		

		
	}

	public Answer getMMPic(String str) {
		if(str.contains("美女") || str.contains("妹子")){
			int mm = initPic();
			Answer answer = new Answer();
			answer.setMm(mm);
			answer.setType(Answer.MM_TYPE);
			return answer;
		}else if(str.contains("唐诗")){
			Answer answer = new Answer();
			answer.setType(Answer.POETREY_TYPE);
			return answer;
		}
		return null;
	}

	private int initPic() {
		List<Integer> list = new ArrayList<Integer>();
		list.add(R.drawable.mm0);
		list.add(R.drawable.mm1);
		list.add(R.drawable.mm2);
		list.add(R.drawable.mm13);
		list.add(R.drawable.mm12);
		list.add(R.drawable.mm15);
		list.add(R.drawable.mm16);
		Random rand = new Random();
		
		return list.get(rand.nextInt(list.size()));
	}

}

 4,算是一个javaBean,将获得到的数据封装到这个Bean中

package com.example;

public class Answer {

	public static final int MM_TYPE = 1;
	public static final int POETREY_TYPE = 2;
	private int mm;
	private int type;
	public int getMm() {
		return mm;
	}
	public void setMm(int mm) {
		this.mm = mm;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	
	
}

 

0
0
分享到:
评论

相关推荐

    C#讯飞语音识别代码.rar_C# 讯飞_C++语音转文字_c 语音识别_讯飞_语音识别C#

    《C#实现讯飞语音识别技术详解》 在IT领域,语音识别技术是人工智能的一个重要分支,它使得计算机能够理解并处理人类的自然语言。本文将深入探讨如何使用C#编程语言结合讯飞的API来实现语音转文字的功能,同时也会...

    讯飞语音识别+唤醒DemoS.zip

    《讯飞语音识别+唤醒DemoS.zip:Unity与AI语音技术的深度整合》 在当前的数字时代,人工智能(AI)技术已经深入到各个领域,其中语音识别与唤醒功能是智能设备的重要组成部分。讯飞作为中国领先的AI企业,其语音...

    unity + 讯飞语音识别插件 webgl版本

    unity + 讯飞语音识别插件 webgl版本

    C#讯飞语音识别源码

    【C#讯飞语音识别源码】是一种基于科大讯飞语音识别技术的C#编程实践,用于将语音转换为文字。科大讯飞作为中国领先的语音技术提供商,提供了丰富的SDK(Software Development Kit)供开发者使用,其中包括了C#版本...

    基于讯飞语音识别Demo

    【基于讯飞语音识别Demo】是一个使用科大讯飞(iFlytek)语音识别技术的示例项目。科大讯飞是中国领先的语音技术提供商,其语音识别服务在多个领域广泛应用,包括智能硬件、智能家居、教育、医疗等。本Demo旨在帮助...

    Unity 接入讯飞语音识别包(Android)

    在Unity游戏开发中,接入第三方服务,如讯飞语音识别,可以极大地提升用户体验,特别是对于移动平台的游戏。本文将详细讲解如何在Unity中整合讯飞的语音识别功能,并且着重于Android平台的实现。 首先,我们需要...

    freeswitch对接讯飞语音识别模块

    首先,我们要理解Freeswitch对接讯飞语音识别模块的核心概念。Freeswitch中的模块,如mod_xfasr,是实现特定功能的插件。在这种情况下,mod_xfasr就是用来连接到讯飞的API,将接收到的音频流转化为文字。对接过程...

    安卓讯飞语音识别

    【安卓讯飞语音识别】是基于科大讯飞提供的官方SDK实现的一项技术,它使得Android应用能够集成语音识别功能,用户只需点击按钮即可通过语音输入,应用将识别并转化为文字显示在EditText中。这一功能不仅支持普通话,...

    C#讯飞语音识别库

    在本主题中,我们关注的是"C#讯飞语音识别库",这是一个利用科大讯飞提供的API实现语音转文字功能的库。科大讯飞是中国领先的语音技术提供商,其语音识别技术在业界具有很高的知名度。 首先,我们要理解“对应平台...

    极简单的讯飞语音识别Demo

    《极简单的讯飞语音识别Demo》 在当前的数字化时代,语音识别技术已经广泛应用到我们的生活中,例如智能助手、自动驾驶汽车、智能家居等。讯飞作为国内知名的语音技术提供商,其语音识别服务备受开发者青睐。本Demo...

    讯飞语音识别集成实例

    【讯飞语音识别集成实例】 讯飞语音识别技术是由科大讯飞公司提供的一种先进的语音处理服务,它在中文语音识别领域拥有极高的准确率和广泛的应用。讯飞的语音听写SDK(Software Development Kit)是开发者用于实现...

    Unity+讯飞语音识别

    在Unity游戏开发中,集成第三方服务,如讯飞语音识别,可以极大地提升用户体验,特别是对于交互性强、沉浸式游戏来说。讯飞作为国内知名的语音技术提供商,其语音识别引擎具有高准确度和低延迟的特点,适合实时的...

    讯飞语音识别最简demo

    【讯飞语音识别最简demo】是一个专门为安卓平台设计的示例程序,它演示了如何集成科大讯飞的语音识别技术。这个简单的demo旨在帮助开发者快速理解和应用语音识别功能,为自己的应用添加语音交互的能力。以下是关于...

    讯飞语音识别到串口发出指令

    在本文中,我们将深入探讨如何将讯飞语音识别技术整合到Android应用中,并通过串口向舵机控制板发送指令,以实现机器人动作的控制。首先,我们需要了解讯飞语音识别服务及其API。 讯飞是一家中国领先的AI技术公司,...

    unity通过WebAPI连接Websocket实现讯飞语音识别与合成

    unity写的讯飞语音识别合成与评测功能,走的是webapi,连接讯飞WebSocket服务器没有接入任何sdk,也没有多余插件,开发工具unity2019.3.6 ,真正实现了跨平台,不用在每个平台重新接入sdk这么麻烦了!

    实现集成讯飞平台的语音识别功能

    通过以上步骤,你可以实现一个基本的讯飞语音识别功能。在`Speech1Demo`这个示例项目中,很可能包含了完整的代码实现,包括UI界面和与讯飞SDK的交互逻辑,你可以参考该项目进行学习和扩展。在实际开发中,你可能还...

    [Windows] 讯飞语音识别提取版

    讯飞语音功能介绍: 就论国内的语音识别来说,由科大讯飞推出的安卓版讯飞输入法可谓是首屈一指的,其的语音库、识别度都高达90%以上(前提是说话要清楚) 科大讯飞之前推出过windowspc端的讯飞输入法(语音词库及...

    C#WINFROM讯飞语音识别源码

    源码描述: 一、菜单功能 1、实现C# 调用科大讯飞语音识别和语音合成API 2、实现基本的语音识别和语音播报 二、注意事项 1、开发环境为Visual Studio 2012,无数据库,使用.net 4.0开发。

Global site tag (gtag.js) - Google Analytics