实验要求:

 

实验上交材料:

一个组上交一个文件夹,包含:

实验源码一份

实验视频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);
        }
    }

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐