实验要求:
实验上交材料:
•一个组上交一个文件夹,包含:
•实验源码一份
•实验视频demo,包括配音解说一份
•每一组交一份实验的总体技术报告,包括系统框架,交互设计,交互技术和实现、交互系统展示、用户评估等几个方面(注意:需要针对系统完成一个完整的可用性评估报告)
•每个人交一份实验工作报告,介绍自己工作内容
实验开始:
首先测试百度的语音识别sdk
1.mainfest-权限,具体应用,服务
2.必要文件加载进来,lib和jniLibs
3.在jar文件右击addtolib...
4.导入模板进行测试。
5.对测试结果进行显示。
6.横屏打印出信息。重新构造textview类,调用toast的setview方法。参考
7.在主界面实现悬浮按钮作为语音输入。
在播放音频方面
mediaplayer显得不太合适,,,这里显示它适合播放什么样的音频。
采用的是SoundPool。。。(百度这个技术的好处)
音频的初始化:
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
sounddata = new HashMap<Integer, Integer>();
sounddata.put(WATRE, sp.load(this, R.raw.water, 1));
sounddata.put(PEOPLE, sp.load(this, R.raw.people, 1));
sounddata.put(BIRD, sp.load(this, R.raw.bird, 1));
sounddata.put(WIND, sp.load(this, R.raw.wind, 1));
sounddata.put(XIQU, sp.load(this, R.raw.xiqu, 1));
sounddata.put(TAOJIAHUANJIA, sp.load(this, R.raw.taojiahuanjia, 1));
sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool sound,int sampleId,int status){
isLoaded=true;
Toast.makeText(Main2Activity.this,
"音效加载完成!",
Toast.LENGTH_SHORT);
}
});
播放音频和停止播放方面也很方便:调用下面这个函数,传入想播放的音频在sounddata里的位置,循环播放次数,以及优先级和播放的声音大小,1是最大。
public void playSound(int sound, int loop,int p,int v) {
AudioManager am = (AudioManager) this
.getSystemService(Context.AUDIO_SERVICE);
float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volumnCurrent = am.getStreamVolume(AudioManager.STREAM_MUSIC);
float volumnRatio = volumnCurrent /(v* audioMaxVolumn);
sp.play(sounddata.get(sound),
volumnRatio,// 左声道音量
volumnRatio,// 右声道音量
p, // 优先级
loop,// 循环播放次数
1);// 回放速度,该值在0.5-2.0之间 1为正常速度
}
关键调用函数:
playSound(WIND,5,1,1);//播放音乐
sp.pause(WIND);//停止播放
在图片拖动方面:
对ImageView进行触碰监听,判断是对图片进行了哪种操作:拖拉拽,放大缩小等,或者进行双击回到图片开始的位置。
图片拖动和音频结合:
按住悬浮按钮进行语音输入,输入后进行判别,如果识别成功则跳转至制定位置,并进行音频播放。
public boolean analyseInputYuYin(){
for(int i=0;i<place.length;i++){
if(place[i].indexOf(final_result)!=-1){
toastuser("已识别为:"+place[i]);
movetoPosiOfPic(i);
return true;
}
}
toastuser("未成功定位");
return false;
}
//通过语音定位到制定位置
public void movetoPosiOfPic(int i){
float target=-(initposiOfSpot(i)*finalScale-center_P_y);
center_P_y-=target;
if(center_P_y>downOfCenter){
center_P_y=downOfCenter;
}
if(center_P_y<upOfCenter){
center_P_y=upOfCenter;
}
Log.e("移动",""+center_P_y);
matrix.postTranslate(0, target);
imgView.setImageMatrix(matrix);
Log.e("移动",""+target);
soundOfJiaowai(false);
soundOfJieDao(false);
soundOfMatou(false);
if(i==0){
//郊外
soundOfJiaowai(true);
}else if(i==1){
//码头
soundOfMatou(true);
}else if(i==2){
//街道
soundOfJieDao(true);
}
}