语音说话

本人有点懒,没有什么注释,一个主页面,第三方的包自己去科大讯飞下载
主页
package com.example.zn;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.Adler32;

import com.example.zn.WodrBean.WsBean;
import com.google.gson.Gson;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private String yuyan = "xiaoyan";
	String daihao[] = { "xiaoyan", "xiaoyu", "catherine", "vixr", "vixk",
			"vixqa", "vinn", "Mariane", "Allabent", "Gabriela", "Abha",
			"XiaoYun" };
	private SpeakListenUtils utils;
	private ListView lv;
	// 存放 说和听的消息
	private List<MessageBean> allMessage = new ArrayList<MessageBean>();
	private MyAdapter adapter;

	private class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return allMessage.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return allMessage.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder viewHolder = null;
			// 判断是否有缓存
			if (convertView == null) {
				// 没有缓存
				convertView = View.inflate(getApplicationContext(),
						R.layout.list_item, null);
				viewHolder = new ViewHolder();
				viewHolder.tv_answer = (TextView) convertView
						.findViewById(R.id.tv_answer);
				viewHolder.tv_asker = (TextView) convertView
						.findViewById(R.id.tv_asker);
				viewHolder.iv_answer = (ImageView) convertView
						.findViewById(R.id.iv_answer);
				viewHolder.ll_answer = (LinearLayout) convertView
						.findViewById(R.id.ll_answer);
				convertView.setTag(viewHolder);
			} else {
				// 有缓存
				viewHolder = (ViewHolder) convertView.getTag();
			}
			// 设置数据
			MessageBean messageBean = allMessage.get(position);
			// 获取当前的消息
			if (messageBean.type == MessageBean.ASKER) {
				// 问
				// 设置view的显示
				viewHolder.tv_asker.setVisibility(View.VISIBLE);
				// 答的组件隐藏
				viewHolder.tv_answer.setVisibility(View.GONE);
				viewHolder.iv_answer.setVisibility(View.GONE);
				viewHolder.ll_answer.setVisibility(View.GONE);
				// 设置信息的显示
				viewHolder.tv_asker.setText(messageBean.message);
				String trim = viewHolder.tv_asker.getText().toString().trim();
				utils.speak(trim, yuyan);
			} else {
				// 答

				// 设置view的隐藏
				viewHolder.tv_asker.setVisibility(View.GONE);
				// 答的组件显示
				viewHolder.ll_answer.setVisibility(View.VISIBLE);
				viewHolder.tv_answer.setVisibility(View.VISIBLE);
				viewHolder.tv_answer.setText(messageBean.message);
				String trim = viewHolder.tv_answer.getText().toString().trim();
				utils.speak(trim, yuyan);
				// 看看是否有图片
				if (messageBean.picid == -1) {
					viewHolder.iv_answer.setVisibility(View.GONE);

				} else {
					viewHolder.iv_answer.setVisibility(View.VISIBLE);
					viewHolder.iv_answer.setImageResource(messageBean.picid);
				}

			}
			return convertView;
		}

		private class ViewHolder {
			TextView tv_asker;
			ImageView iv_answer;
			TextView tv_answer;
			LinearLayout ll_answer;
		}
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_LEFT_ICON);
		// 听和说的工具类
		utils = new SpeakListenUtils(this);
		init();

	}

	public void tvyy(View v) {
		final AlertDialog.Builder alert = new AlertDialog.Builder(
				MainActivity.this);
		final AlertDialog dialog = alert.create();
		View view = View.inflate(getApplicationContext(), R.layout.yuyan_item,
				null);
		ListView listView = (ListView) view.findViewById(R.id.lv_yy);
		dialog.setView(view);
		MyYYAdapter adapter = new MyYYAdapter(MainActivity.this);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				yuyan = daihao[position];
				dialog.dismiss();
				
			}
		});
		Button button=(Button) view.findViewById(R.id.button_fanhui);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dialog.dismiss();
				
			}
		});
		dialog.show();// 在按键响应事件中显示此对话框

	}

	private void init() {
		setContentView(R.layout.activity_main);
		// 显示说和听的信息
		lv = (ListView) findViewById(R.id.lv);
		adapter = new MyAdapter();
		lv.setAdapter(adapter);
	}

	public void listen(View view) {
		utils.listen(new RecognizerDialogListener() {

			@Override
			public void onResult(RecognizerResult arg0, boolean arg1) {
				// 把说的话转成json文字
				System.out.println(arg0.getResultString() + "---");
				// gson解析结果
				Gson gson = new Gson();
				WodrBean wodrBean = gson.fromJson(arg0.getResultString(),
						WodrBean.class);
				// 打每个汉子拼成一句话
				StringBuilder builder = new StringBuilder();
				for (WsBean ws : wodrBean.getWs()) {
					builder.append(ws.getCw().get(0).getW());
				}
				// 判断是不是标点符号
				if (builder.length() <= 1) {
					return;
				}
				// 根据消息的内容动态回复消息
				MessageBean msg = new MessageBean();
				// 把说的话消息封装
				msg.message = builder + "";
				msg.type = MessageBean.ASKER;
				// 把说的信息放到容器
				allMessage.add(msg);
				// 智能回答
				MessageBean answer = answer(builder + "");
				// 把说的信息放到容器
				allMessage.add(answer);
				// 更新界面
				adapter.notifyDataSetChanged();
			}

			@Override
			public void onError(SpeechError arg0) {
				// TODO Auto-generated method stub
			}
		});
	}

	/**
	 * 说的话
	 * 
	 * @param word
	 *            智能说的话
	 * @return
	 */
	public MessageBean answer(String word) {

		MessageBean msg = new MessageBean();
		msg.type = MessageBean.ANSWER;

		if (word.contains("美女")) {
			// 获取文字
			msg.message = AnswerMseeage.getMVDesc();
			// 获取图片
			msg.picid = AnswerMseeage.getMVPics();
		} else if (word.contains("帅")) {
			msg.message = AnswerMseeage.getShuai();
		}
		return msg;

	}
}

布局文件主页面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<TextView 
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:text="更换语言"
    android:textSize="20sp"
    android:textColor="#f00"
    android:background="@drawable/m5"
    android:gravity="center"
    android:onClick="tvyy"
    />
    
    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:cacheColorHint="#00000000"
        android:dividerHeight="0dp" >
    </ListView>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        android:background="@drawable/m3" >

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:background="@drawable/bt_selector"
            android:gravity="center_horizontal"
            android:onClick="listen"
package com.example.zn;

import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.content.Context;
import android.os.Bundle;
import android.text.NoCopySpan.Concrete;
import android.util.Log;

public class SpeakListenUtils {

	private Context context;

	public SpeakListenUtils(Context context) {
		this.context = context;
		SpeechUtility
				.createUtility(context, SpeechConstant.APPID + "=582bd091");
	}

	/**
	 * 把说的话转成文字
	 * 监听回调结果,创建次监听器处理json文件
	 */
	public void listen(RecognizerDialogListener listener) {
		InitListener mInitListener = new InitListener() {

			@Override
			public void onInit(int arg0) {
				// TODO Auto-generated method stub

			}
		};
		// 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener
		RecognizerDialog iatDialog = new RecognizerDialog(context,
				mInitListener);
		// 2.设置听写参数,同上节
		// 3.设置回调接口
		iatDialog.setListener(listener);
		// 4.开始听写
		iatDialog.show();
	}

	/**
	 * 把文字转成语音
	 * text 输入的文字
	 * name 输入的语言
	 */
	public void speak(String text,String name) {
		SpeechSynthesizer mTts = SpeechSynthesizer
				.createSynthesizer(context, null);
		// 设置发音人
		mTts.setParameter(SpeechConstant.VOICE_NAME, name);
		// 设置语速
		mTts.setParameter(SpeechConstant.SPEED, "60");
		// 设置音量
		mTts.setParameter(SpeechConstant.VOLUME, "80");
		// 设置云端
		mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
		mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "/sdcard/iflytek.pcm");
		mTts.startSpeaking(text,new SynthesizerListener() {
			
			@Override
			public void onSpeakResumed() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onSpeakProgress(int arg0, int arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onSpeakPaused() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onSpeakBegin() {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onCompleted(SpeechError arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
				// TODO Auto-generated method stub
				
			}
		});
	}
}
布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- 说的消息 -->

    <TextView
        android:id="@+id/tv_asker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:background="#777888"
        android:gravity="center"
        android:visibility="gone" />

    <LinearLayout
        android:id="@+id/ll_answer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#555577"
        android:orientation="vertical"
        android:visibility="gone" >

        <!-- 答 -->

        <TextView
            android:id="@+id/tv_answer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:visibility="gone" />

        <ImageView
            android:id="@+id/iv_answer"
            android:layout_width="match_parent"
            android:scaleType="fitStart"
            android:layout_height="wrap_content"
            android:visibility="gone" />
    </LinearLayout>

</LinearLayout>


//bean 类,两个bean类

package com.example.zn;
/**
 * 描述说和听的消息
 * @author Administrator
 *
 */
public class MessageBean {
public  int type;
public String message;
public int picid=-1;
public static  final int ASKER=1;//记录标记 说
public static  final int ANSWER=2;//记录标记 答

}

package com.example.zn;
//解析json类
import java.util.List;

/**
 * Created by Administrator on 2016/11/16.
 */

public class WodrBean {

    /**
     * sn : 1
     * ls : false
     * bg : 0
     * ed : 0
     * ws : [{"bg":0,"cw":[{"sc":0,"w":"怎么"}]},{"bg":0,"cw":[{"sc":0,"w":"了"}]}]
     */

    private int sn;
    private boolean ls;
    private int bg;
    private int ed;
    /**
     * bg : 0
     * cw : [{"sc":0,"w":"怎么"}]
     */

    private List<WsBean> ws;

    public int getSn() {
        return sn;
    }

    public void setSn(int sn) {
        this.sn = sn;
    }

    public boolean isLs() {
        return ls;
    }

    public void setLs(boolean ls) {
        this.ls = ls;
    }

    public int getBg() {
        return bg;
    }

    public void setBg(int bg) {
        this.bg = bg;
    }

    public int getEd() {
        return ed;
    }

    public void setEd(int ed) {
        this.ed = ed;
    }

    public List<WsBean> getWs() {
        return ws;
    }

    public void setWs(List<WsBean> ws) {
        this.ws = ws;
    }

    public static class WsBean {
        private int bg;
        /**
         * sc : 0.0
         * w : 怎么
         */

        private List<CwBean> cw;

        public int getBg() {
            return bg;
        }

        public void setBg(int bg) {
            this.bg = bg;
        }

        public List<CwBean> getCw() {
            return cw;
        }

        public void setCw(List<CwBean> cw) {
            this.cw = cw;
        }

        public static class CwBean {
            private double sc;
            private String w;

            public double getSc() {
                return sc;
            }

            public void setSc(double sc) {
                this.sc = sc;
            }

            public String getW() {
                return w;
            }

            public void setW(String w) {
                this.w = w;
            }
        }
    }
}

数据类自己放的一些数据,也可以改为请求,看自己的想法

package com.example.zn;

/**
 * 智能回答的消息
 * 
 * @author Administrator
 * 
 */
public class AnswerMseeage {
	public static final String shuai[] = { "---最帅", "---最酷", "--没谁啦", "你说呢!嗯哼" };
	public static final String mv[] = { "这个适合你", "这个咋么样", "这个还不错", "这个最靓的" };
	public static final int mvPics[] = { R.drawable.m1, R.drawable.m2,
			R.drawable.m3, R.drawable.m4, R.drawable.m5 };

	public static String getShuai() {
		int index = (int) (Math.random() * shuai.length);
		return shuai[index];
	}

	public static String getMVDesc() {
		int index = (int) (Math.random() * mv.length);
		return mv[index];
	}

	public static int getMVPics() {
		int index = (int) (Math.random() * mvPics.length);
		return mvPics[index];
	}
}
//adapter 你们懂得
package com.example.zn;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyYYAdapter extends BaseAdapter {

	String name[] = { "小燕,青年女声普通话", "小宇,中英文普通话", "凯瑟琳,青年女声英文", "小蓉,青年女声汉语四川话",
			"小坤,青年男声汉语河南话", "小强,青年男声汉语湖南话", "楠楠,童年女声汉语普通话", "Mariane,法语",
			"Allabent,俄语", "Gabriela,西班牙语", "Abha,印地语", "XiaoYun,越南语" };
	Context context;

	public MyYYAdapter(Context context) {
		super();
		this.context = context;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return name.length;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return name[position];
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = View.inflate(context, R.layout.yy_item, null);
		}
		TextView textView = (TextView) convertView.findViewById(R.id.tv_yuyin);
		textView.setText(name[position]);
		return convertView;
	}

}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lv_yy"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:dividerHeight="2dp" >
    </ListView>

    <Button
        android:id="@+id/button_fanhui"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f336"
        android:text="返回" />

</LinearLayout>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值