Android 按住录音 松手停止,根据声音来更换图片 播放短声
来源:互联网 发布:图书信息管理vb表格 编辑:程序博客网 时间:2024/04/30 05:01
还是项目。。。项目中需要。。。这个主要是根据分贝的不同来改变图片。直接上代码。资源等我去公司了 再上传。。
1,给控件设置触摸事件。把录制的文件存在本地指定位置//触摸事件①mRecordVoiceIV.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == ACTION_DOWN) { //文件名 // String strDate = new SimpleDateFormat("yyyy.MM.dd_HH.mm.ss") // .format(new Date()); //这是文件夹路径 String path = FTConfig.FILE_PATH + "/" + mydev.getDevId(); //新建文件流 File dirFirstFolder = new File(path); //判断是否有文件夹 if (!dirFirstFolder.exists()) { FileUtil.createIfNotExist(path); } final String lastPath = path + "/" + "output" + ".mp3"; File file = new File(lastPath); // 创建录音对象 mr = new MediaRecorder(); // 从麦克风源进行录音 mr.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置输出格式 mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // 设置编码格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 设置输出文件 mr.setOutputFile(file.getAbsolutePath()); try { // 创建文件 file.createNewFile(); // 准备录制 mr.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 开始录制 task = new TimerTask() { public void run() { dHandler.sendEmptyMessage(66); } }; timer.schedule(task, 1000, 1000); mr.start(); mVoiceStateTV.setVisibility(View.VISIBLE); mVoiceAnimIV.setVisibility(View.VISIBLE); updateMicStatus(); mVoiceStateTV.setText(R.string.you_can_also_be_recorded_string_3clock_string); prompt_tv.setText(R.string.hint_loose_hand_string); } //松开手之后。 if (event.getAction() == ACTION_UP) { if (mr != null) { try { //下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop(); //报错为:RuntimeException:stop failed mr.setOnErrorListener(null); mr.setOnInfoListener(null); mr.setPreviewDisplay(null); mr.stop(); task.cancel(); } catch (Exception e){ // TODO: handle exception Log.i("Exception", Log.getStackTraceString(e)); } //added by ouyang end mr.release(); mr = null; //影藏 mVoiceStateTV.setVisibility(View.INVISIBLE); mVoiceAnimIV.setVisibility(View.INVISIBLE); mStartVoice.setVisibility(View.VISIBLE); mVoiceAnimIV.setImageDrawable(imgs[0]); prompt_tv.setText("提示:按住后开始录音"); } } return true; }});②录制进行中 做出该有的判断。 private Handler dHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 66) { its--; if (its == 0) { its = 3; task.cancel(); if (mr != null) { try { //下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop(); //报错为:RuntimeException:stop failed mr.setOnErrorListener(null); mr.setOnInfoListener(null); mr.setPreviewDisplay(null); mr.stop(); } catch (Exception e) { // TODO: handle exception Log.i("Exception", Log.getStackTraceString(e)); } //added by ouyang end timer.schedule(task, 5000); 两个参数的schedule 就只是执行一次吧。// 要用三个参数的schedule。 mr.release(); mr = null; //影藏 mVoiceStateTV.setVisibility(View.INVISIBLE); mVoiceAnimIV.setVisibility(View.INVISIBLE); mStartVoice.setVisibility(View.VISIBLE); mVoiceAnimIV.setImageDrawable(imgs[0]); } } else { mVoiceStateTV.setText(R.string.you_can_also_be_recorded_string + its + R.string.clock_string); } } } };2,获取分贝大小,改变图片 ①,放一个图片数组 imgs = new Drawable[]{ getResources().getDrawable(R.drawable.an_1), getResources().getDrawable(R.drawable.an_2), getResources().getDrawable(R.drawable.an_3), getResources().getDrawable(R.drawable.an_4), getResources().getDrawable(R.drawable.an_5),};}通知mHandler 改变图片private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int what = msg.what; //根据mHandler发送what的大小决定话筒的图片是哪一张 //说话声音越大,发送过来what值越大 if (what > 4) { what = 4; } mVoiceAnimIV.setImageDrawable(imgs[what]); }};private void updateMicStatus() { if (mr != null) { int ratio = mr.getMaxAmplitude() / BASE; int db = 0;// 分贝 if (ratio > 1) db = (int) (20 * Math.log10(ratio)); //我对着手机说话声音最大的时候,db达到了35左右, mHandler.postDelayed(mThread, 300); mHandler.sendEmptyMessage(db / 18); }}3,播放mStartVoice.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //读取本地播放的 mp3 String path = FTConfig.FILE_PATH + "/" + mydev.getDevId(); //新建文件流 File dirFirstFolder = new File(path); //判断是否有文件夹 if (!dirFirstFolder.exists()) { FileUtil.createIfNotExist(path); } final String lastPath = path + "/" + "output" + ".mp3"; File mp3File = new File(lastPath); if (mp3File.exists()) { mPlayer.stop(); mPlayer = null; mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(lastPath); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } else { } }});播放//猫mVoiceCatSw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (lightOnCat==false) { mVoiceLongtimeSw.setChecked(false); mVoiceDogSw.setChecked(false); mPlayer.stop();//多个铃声的话,先把其他的关闭 mPlayer = null; mPlayer = MediaPlayer.create(SetVoiceActivity.this, R.raw.cat); mPlayer.start();//在开启 lightOnCat = true; } else { mVoiceLongtimeSw.setChecked(false); mVoiceDogSw.setChecked(false); lightOnCat = false; } }});
这里面需要我提供的 东西尽管说。有啥bug 给我骂出来。不要光骂,不指出。。。这样太不厚道啦
1 0
- Android 按住录音 松手停止,根据声音来更换图片 播放短声
- Android录音播放、停止
- UIButton---按住录音,松开停止
- android wav录音,停止和播放
- 点击图片,背景音乐播放/停止,播放图标/静音图标随之更换
- android 录音和播放录音
- android录音和播放录音
- Android录音和播放录音
- Android 录音和播放录音
- android 录音与播放录音 带根据音频大小动态效果
- 【Alsa】播放声音和录音详细流程
- 播放声音跟录音详细流程
- 用AVAudioRecorder录音,AVAudioPlayer播放声音很小
- Android 录音声音分贝获取
- Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题
- Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题
- Android录音与播放
- Android录音与播放
- Ubuntu+Eclipse+SparkStreaming
- Centos7安装Logstash及基本配置
- muduo库的消息循环机制
- js给KindEditor的textarea框赋值
- HDU 4596 J
- Android 按住录音 松手停止,根据声音来更换图片 播放短声
- 【优秀】前端学习网站
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 面向对象的封装
- 面向对象实验
- 硬币排成线
- 网络编程
- Android Fragment的使用
- MyBatis--查询缓存--内置二级缓存配置