`
wanghailiang333
  • 浏览: 199049 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

心血来潮后的一个语音软件

 
阅读更多

直接上视频

 

http://v.youku.com/v_show/id_XNDA4ODU5NzMy.html

 

 

Android源码

package com.eyet.demo.voice;

import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.ArrayList;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class RecognizerIntent_TestActivity extends Activity {
	private static final int TIMEOUT = 3000; // Resend timeout (milliseconds)
	private static final int MAXTRIES = 5; // Maximum retransmissions
	private static final String REPLY = "OK";
	private static final String SERVERIP = "192.168.0.133";
	private static final int SERVERPORT = 3693;

	private static final int VOICE_RECOGNITION_REQUEST_CODE = 1;

	private String cmd;
	private ImageView image_but;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		image_but = (ImageView) this.findViewById(R.id.image_but);

		image_but.setOnClickListener(new myRecognizerIntentListener());

	}

	public void ProtocolHandler() {
		if (cmd != null && cmd.length() != 0) {
			try {
				DatagramSocket socket = new DatagramSocket();
				socket.setSoTimeout(TIMEOUT);
				byte[] bytesToSend = cmd.getBytes();

				DatagramPacket sendPacket = new DatagramPacket(bytesToSend,
						bytesToSend.length, InetAddress.getByName(SERVERIP),
						SERVERPORT);
				int len = REPLY.getBytes().length;
				DatagramPacket receivePacket = new DatagramPacket(
						new byte[len], len);
				int tries = 0; // Packets may be lost, so we have to keep trying
				boolean receivedResponse = false;
				do {
					socket.send(sendPacket); // Send the echo string
					try {
						socket.receive(receivePacket);

						if (!receivePacket.getAddress().equals(
								InetAddress.getByName(SERVERIP))) {// Check
																	// source
							throw new IOException(
									"Received packet from an unknown source");
						}
						receivedResponse = true;
					} catch (InterruptedIOException e) { // We did not get
															// anything
						tries += 1;
						Log.e("Recevice Error", e.getMessage());
					}
				} while ((!receivedResponse) && (tries < MAXTRIES));

				if (receivedResponse) {
					Toast.makeText(RecognizerIntent_TestActivity.this,
							new String(receivePacket.getData()),
							Toast.LENGTH_LONG).show();
				} else {
					Toast.makeText(RecognizerIntent_TestActivity.this,
							"No response -- giving up.", Toast.LENGTH_LONG)
							.show();
				}

			} catch (IOException e) {
				Log.e("Socket Error", e.getMessage());
			}
		}
	}



	public class myRecognizerIntentListener implements OnClickListener {
		public void onClick(View v) {

			try {
				Intent intent = new Intent(
						RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // 语言模式和自由形式的语音识别
				intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
						RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // 提示语言开始
				intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始语音"); //
				
				startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
				
				
			} catch (ActivityNotFoundException e) {
				Toast.makeText(RecognizerIntent_TestActivity.this, "找不到语音设备",
						Toast.LENGTH_LONG).show();
			}

			
		}
	}
	
	/**
	 * @param voice 语音字符串
	 * @return  协议命令 | null 没有匹配
	 */
	public String getCmd(String voice){
		
		if(voice == null)
			return null;
		
		String open = "打开";
		String close = "关闭";
		String result = null;
		
		if(voice.indexOf(open) != -1){
			
			if(voice.indexOf("浏览器") != -1){
				result = "open_firefox";
			}else if(voice.indexOf("百度") != -1){
				result = "open_baidu";
			}else if(voice.indexOf("记事本") != -1){
				result = "open_notepad";
			}else if(voice.toLowerCase().indexOf("qq") != -1){
				result = "open_qq";
			}else if(voice.toLowerCase().indexOf("wps") != -1){
				result = "open_wps";
			}else if(voice.toLowerCase().indexOf("e") != -1){
				result = "open_e";
			}
			
			
		}else if(voice.indexOf(close) != -1){
			if(voice.indexOf("浏览器") != -1){
				result = "close_firefox";
			}else if(voice.indexOf("记事本") != -1){
				result = "close_notepad";
			}else if(voice.toLowerCase().indexOf("wps") != -1){
				result = "close_wps";
			}else if(voice.indexOf("电脑") != -1){
				result = "close_computer";
			}
			
		}
		
		return result;
	}

	// 语音结束时的回调函数
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == VOICE_RECOGNITION_REQUEST_CODE
				&& resultCode == RESULT_OK) {
			// 取得语音的字符
			ArrayList<String> results = data
					.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

			String str = "";
			for (int i = 0; i < results.size(); i++) {
				str += results.get(i);
				cmd = getCmd(results.get(i));
				if(cmd != null){
					break;
				}
			}
			//Toast.makeText(this, cmd+"::==::" + str, Toast.LENGTH_LONG).show();
			
			if(cmd != null){
				ProtocolHandler();
			}
			
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}
 

服务器端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.HashMap;
import java.util.Map;


public class RunCmd {

	private static final int BUFMAX = 255; // Maximum size of echo datagram
	private static Map<String , Runnable> cmdThreadPool;
	
	public static void main(String[] args) {
		
		
		RunCmd rc = new RunCmd();
		rc.serverRun();

	}
	
	
	public RunCmd() {
		cmdThreadPool = new HashMap<String , Runnable>();
		cmdThreadPool.put("open_firefox", new cmdRunnable("C:\\Program Files\\Mozilla Firefox\\firefox.exe"));
		cmdThreadPool.put("open_baidu", new cmdRunnable("C:\\Program Files\\Mozilla Firefox\\firefox.exe http://www.baidu.com"));
		cmdThreadPool.put("close_firefox", new cmdRunnable("taskkill /im firefox.exe"));
		cmdThreadPool.put("open_notepad", new cmdRunnable("notepad"));
		cmdThreadPool.put("close_notepad", new cmdRunnable("taskkill /im notepad.exe"));
		cmdThreadPool.put("open_qq", new cmdRunnable("C:\\Program Files\\Tencent\\QQ\\Bin\\QQProtect\\Bin\\QQProtect.exe"));
		cmdThreadPool.put("open_wps", new cmdRunnable("C:\\Program Files\\Kingsoft\\WPS Office Personal\\office6\\wps.exe /w"));
		cmdThreadPool.put("close_wps", new cmdRunnable("taskkill /im wps.exe"));
		cmdThreadPool.put("open_e", new cmdRunnable("explorer e:"));
		cmdThreadPool.put("close_computer", new cmdRunnable("shutdown /s /t 0"));
	}


	public void serverRun(){
		try {
			DatagramSocket socket = new DatagramSocket(3693);
			DatagramPacket packet = new DatagramPacket(new byte[BUFMAX], BUFMAX);
			
			
		    while (true) { // Run forever, receiving and echoing datagrams
		    	socket.receive(packet); // Receive packet from client
		    	
		    	String cmd = new String(packet.getData(),packet.getOffset() , packet.getLength());
		    	
		    	System.out.println(cmd);
		    	
		    	byte[] replayMsg;
		    	if(handlerCmd(cmd)){
		    		replayMsg = new String("OK").getBytes();
		    		
		    	}else{
		    		replayMsg = new String("NO").getBytes();
		    		
		    	}
		    	DatagramPacket replayPacket = new DatagramPacket(replayMsg,replayMsg.length,
		    			packet.getAddress() , packet.getPort());
		        socket.send(replayPacket); // Send the same packet back to client
		    	
		        packet.setLength(BUFMAX); // Reset length to avoid shrinking buffer
		    }
		} catch (IOException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	    
	    
	}
	
	
	public boolean handlerCmd(String cmd){
		Runnable cmdRun = cmdThreadPool.get(cmd.trim());
		
		if(cmdRun != null){
			new Thread(cmdRun).start();
			return true;
		}else{
			return false;
		}
		
	}
	
	public class cmdRunnable implements Runnable{
		private String cmd;
		public cmdRunnable(String cmd){
			this.cmd = cmd;
		}
		
		public void run(){
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	
	
	/*
	
	public class OpenFireFox implements Runnable{
		public void run(){
			String open_cmd = "C:\\Program Files\\Mozilla Firefox\\firefox.exe";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class OpenBaiDu implements Runnable{
		public void run(){
			String open_cmd = "C:\\Program Files\\Mozilla Firefox\\firefox.exe http://www.baidu.com";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class CloseFireFox implements Runnable{
		public void run(){
			String close_cmd= "taskkill /im firefox.exe";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(close_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public class OpenNotepad implements Runnable{
		public void run(){
			String open_cmd = "notepad";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class CloseNotepad implements Runnable{
		public void run(){
			String close_cmd= "taskkill /im notepad.exe";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(close_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class OpenQQ implements Runnable{
		public void run(){
			String open_cmd = "C:\\Program Files\\Tencent\\QQ\\Bin\\QQProtect\\Bin\\QQProtect.exe";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class OpenWPS implements Runnable{
		public void run(){
			String open_cmd = "C:\\Program Files\\Kingsoft\\WPS Office Personal\\office6\\wps.exe /w";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class CloseWPS implements Runnable{
		public void run(){
			String close_cmd= "taskkill /im wps.exe";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(close_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class OpenE implements Runnable{
		public void run(){
			String open_cmd = "explorer e:";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public class CloseComputer implements Runnable{
		public void run(){
			String open_cmd = "shutdown /s /t 0";
			try {
				Runtime run = Runtime.getRuntime();
				run.exec(open_cmd);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}*/

}
 

 

分享到:
评论

相关推荐

    斐讯_N1_盒子玩法很多,心血来潮,收集一下斐讯_N1_盒子_ROM_固件及遥控器。_N1-Rom.zip

    斐讯_N1_盒子玩法很多,心血来潮,收集一下斐讯_N1_盒子_ROM_固件及遥控器。_N1-Rom

    Android后端服务器的搭建方法

    一直做Android前端,今天突然心血来潮想搭建一个后台玩玩。平时都是需要什么样的接口直接出个接口文档扔给后台的兄弟,自己从来不操心他们内部的实现问题。今天怀着好奇的心理去搭建了一个JAVA编译环境下的后台...

    TTS之三合一语音小工具 Beta1.1

    rar包内还有一个word,是对alpha版本的说明。这个版本已经是beta版。有时间我们会更新的。谢谢大家! 软件功能介绍及使用简介: 1.这是一款语音小工具,基于微软操作系统自带的语音库。 2.可以朗读您订阅的RSS...

    simple-mybatis:出于心血来潮,阅读了MyBatis的源码,理解了一些东西,实现一个简单版本的MyBatis框架

    在IT行业中,MyBatis是一个广泛使用的持久层框架,它为Java开发者提供了强大的SQL映射功能,使得数据库操作变得简洁而高效。标题提到的"simple-mybatis"项目,显然是一个作者基于对MyBatis源码的理解,尝试简化并...

    Android代码-安卓个人小工具集合

    这个是以前学习完安卓之后,心血来潮做的一个软件,用了一些gitHub上的开源UI还有一些别人的开源软件功能进行参考整合,纯粹就是一个玩玩而已的软件,可以作为学习参考吧,当时用的是eclipse开发,所以整合还是比较...

    潮哥:手把手教你如何从一无所有到财务自由

    同样,在创业初期,创业者应该具备足够的耐心,等待最合适的商机出现,而不是盲目追求每一个看似有利可图的机会。 ##### 第二章:第一个圈圈——量大且可重复消费 量大且可重复消费的产品或服务能够提供稳定的收入...

    软件工程思想 林博士

    这一转变标志着软件工程作为一个学科领域的正式确立。 - **现实意义**:即便是在今天,软件工程仍然面临着诸如需求变更频繁、技术更新快速等问题。因此,《软件工程思想》对于现代软件开发者而言仍然具有重要的参考...

    tcltutor学习教程软件

    不过关于tcl的资料多而杂,一时心血来潮,想到写一篇文章,以例子为中心,系统讲解tcl语法,让技术人员花最少的时间对tcl有个全面而系统的了解,工作上使用时可以速查或参考代码。于是有了本文。 1.2 运行环境 多数...

    DELPHI垃圾清除

    我讨厌DELPHI每次编译后带来的那种unit1.~pas文件,所以心血来潮,浪费了一个钟头的时间写了这个东东,不过只是一个很简单的清除工具,默认清除的文件是那种波浪线的,如果你想扩展,可以在wdsConfig.ini文件中增加...

    VC6.0开发的天狼星英文字典

    在CSDN上花4分下了一个3万6千多单词的ACCESS2000数据库,利用VC6.0进行MFC开发,主要功能有设置显示提示词汇的数量和结果的显示个数,可自动匹配中英文搜索。对于字库中没有的单词可以自己先添加入生词表中,再决定...

    软件工程专业毕业论文~基于高校教务管理系统的软件生命周期设计.pdf

    基于本人所开发的高校教务管理系统所撰写的软件生命周期设计论文,从软件计划阶段、需求分析阶段、软件设计阶段、...本论文花费了本人大量的精力与心血,如果你是一名软件工程相关专业的毕业生,则将会对你有莫大帮助!

    有声电子书阅读软件

    软件名称:薛家小哥爱读书第一版 发布时间:2012年2月2日 详细说明:一款使用Interop....一方面是为了学习使用Interop.SpeechLib第三方插件,另一方面也是为了给大姐推荐一个C#处理声音程序的开发一丁点的小启发。

    Java软件工程开发的思想

    该书不仅是一本技术指南,更是一部充满个人感悟与经验分享的心血之作,旨在引领读者理解软件工程的核心思想,以及如何将其应用到实际的软件开发过程中。 ### 软件工程的重要性 软件工程作为一种工程学科,其目标是...

    基于qt开发的一款聊天气泡框

    一直想开发一款聊天应用,但是苦于聊天气泡框的实现,拖了好几年,最近心血来潮,觉得再次研究一番,又是从qt+webivew实现,到网上案例走了一遍,感觉都不理想,于是想着自己重头实现以一下,花了两天,终于做出来了...

    软件设计师软件可以在线进行测试

    最后,对于“本人08年通过软考的心血”,这可能意味着作者在过去十年间积累了丰富的软件设计和测试经验,这些实战经验是宝贵的财富,可以指导后来者少走弯路,更快地适应在线测试的环境。 总的来说,软件设计师利用...

    数独游戏1.0(带Delphi源码)

    最近迷上数独了,下载好几个软件,要么不好用,要么不免费,心血来潮,就自己做了一个,见笑了。 帮助: 1、游戏内置400多关,难易不同,暂时没有自动生成题目的功能 2、左键点击方格中的小数字完成填写,右键...

    录像软件源代码 VC++ 实现 编译 可用 可以抓图

    编码后的视频帧会被写入到一个文件中,可能的格式有AVI、MP4等,这需要对文件格式规范有深入的理解。 "可以抓图"表明这款录像软件还具备截图功能,这在许多场合是非常实用的。截图功能的实现可能通过截取视频流的某...

    自己编的复杂二维地质建模软件

    由于在研究中,经常要建立各种模型,但目前相对比较好用的就是discovery带的一个建模软件,但该建模软件也存在很多问题,比如:边界控制难,模型不可相穿过,而且在断层位置不好控制等很多难题,导致在画模型时,...

    IE多彩滚动条

    一时心血来潮,自已做了一个可以“可视化”地设计彩色滚动条的小东东。 现在完成了,不敢独享,公之于众,望对大家有所帮助。 功能: 滚动条各点颜色选择。 支持现在方案选择。 实时预览功能(要装IE5.5) ...

Global site tag (gtag.js) - Google Analytics