Android 记录的(MediaRecorder)而播放(MediaPlayer)
经MediaRecorder和MediaPlayer实现声音记录和回放,代码比较简单,直接附着到代码。
xml文档面对只有四个button不贴。
UI
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ3lzbmcwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" align="middle" width="400" height="800">
代码:
VoiceActivity.class
package com.zy.ione; import com.zy.media.UPlayer;
import com.zy.media.URecorder; import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast; public class VoiceActivity extends Activity { private String path = null;
private URecorder recorder;
private UPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_voice); path = Environment.getExternalStorageDirectory().getAbsolutePath();
path += "/ione.pcm"; recorder = new URecorder(path);
player = new UPlayer(path); //開始录音
findViewById(R.id.ione_record_start_btn).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "start record", Toast.LENGTH_SHORT).show(); recorder.start();
}
}); //停止录音
findViewById(R.id.ione_record_stop_btn).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
Toast.makeText(VoiceActivity.this, "stop record", Toast.LENGTH_SHORT).show();
recorder.stop();
}
}); //開始播放
findViewById(R.id.ione_play_start_btn).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) { Toast.makeText(VoiceActivity.this, "start play", Toast.LENGTH_SHORT).show();
player.start();
}
}); //停止播放
findViewById(R.id.ione_play_stop_btn).setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
Toast.makeText(VoiceActivity.this, "stop play", Toast.LENGTH_SHORT).show();
player.stop();
}
});
} }
操作接口
package com.zy.media;
public interface IVoiceManager {
public boolean start();
public boolean stop();
}
录音
package com.zy.media; import java.io.IOException; import android.media.MediaRecorder;
import android.util.Log; public class URecorder implements IVoiceManager{ private final String TAG = URecorder.class.getName();
private String path;
private MediaRecorder mRecorder;
public URecorder(String path){
this.path = path;
mRecorder = new MediaRecorder();
} /*
* 開始录音
* @return boolean
*/
@Override
public boolean start() {
//设置音源为Micphone
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置封装格式
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(path);
//设置编码格式
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(TAG, "prepare() failed");
}
//录音
mRecorder.start();
return false;
} /*
* 停止录音
* @return boolean
*/
@Override
public boolean stop() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
return false;
} }
播放
package com.zy.media; import android.media.MediaPlayer;
import android.util.Log; public class UPlayer implements IVoiceManager { private final String TAG = UPlayer.class.getName();
private String path; private MediaPlayer mPlayer;
public UPlayer(String path){
this.path = path;
mPlayer = new MediaPlayer();
} @Override
public boolean start() {
try {
//设置要播放的文件
mPlayer.setDataSource(path);
mPlayer.prepare();
//播放
mPlayer.start();
}catch(Exception e){
Log.e(TAG, "prepare() failed");
} return false;
} @Override
public boolean stop() {
mPlayer.stop();
mPlayer.release();
mPlayer = null;
return false;
} }
版权声明:本文博主原创文章。博客,未经同意,不得转载。
Android 记录的(MediaRecorder)而播放(MediaPlayer)的更多相关文章
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
1:videoview循环播放视频 1>xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res ...
- 【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set
一错误描述 二错误解决 解决方法一 解决方法二 一.错误描述 刚用MediaPlayer播放Music的时候,看到Log打印台总是会打印一条错误日志,MediaPlayer: Should have ...
- Android MediaRecorder录制播放音频
1.请求录制音频权限 <user-permission android:name="android.permission.RECORD_AUDIO"/> RECORD_ ...
- Android音频录制MediaRecorder之简易的录音软件实现代码(转)
原文:http://www.jb51.net/article/46182.htm Android音频录制MediaRecorder之简易的录音软件实现代码 这篇文章主要介绍了Android音频录制Me ...
- Android应用开发--MP3音乐播放器代码实现(一)
需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1. 从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2. 迭代List集合,把每一个Mp3 ...
- android学习日记11--音频播放类
一.android 音频播放类 MediaPlayer和SoundPool都可以用来播放音频.区别是MediaPlayer占用资源高,延迟时间高,播放长音乐的,并且不能同时播放多个音乐,而SoundP ...
- Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置
Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置 2013年8月14日Android记录 很多应用都会有用户设置,用户的一些偏好可以由用户来决定 ...
- Android App调用MediaRecorder实现录音功能的实例【转】
本文转载自:http://www.jb51.net/article/82281.htm 这篇文章主要介绍了Android App调用MediaRecorder实现录音功能的实例,MediaRecord ...
- android 通过帧动画方式播放Gif动画
注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...
- Android记录11-控制ExpandableListView展开和关闭
Android记录11-控制ExpandableListView展开和关闭 2013年12月5日 工作记录 我们在使用ExpandableListView可能会遇到各种问题,比如说只展开一个组,关闭其 ...
随机推荐
- bat(批处理文件)初步 第一篇 基本符号
近期我使用的一款软件中须要大量的环境变量设置,而我又不想讲这些变量都加入到系统的环境变量中,一方面是由于有一些同名的库文件的版本号却不一样,都 写在系统环境中会相互干扰:还有一方面则是大部分的路径仅仅 ...
- HTML DOM nodeName nodeValue
在javascript在,我们得title在标签和文本,它们通常要求这样做 var obj =document.getElementsById("id1"); obj.nodeNa ...
- 为大型数据文件每行只能产生id
为大型数据文件每行只能产生id 4个主要思路: 1 单线程处理 2 普通多线程 3 hive 4 Hadoop 搜到一些參考资料 <Hadoop实战>的笔记-2.Hadoop输入与输出 h ...
- IOS经典的书籍推荐
基础 objective-c基础教程 iphone 开发秘籍 进阶篇 iOS 6编程实战 Objective-C 高级编程:iOS与OS X多线程和内存管理 Effective Objective-C ...
- OGG "Loading data from file to Replicat"table静态数据同步配置过程
OGG "Loading data from file to Replicat"table静态数据同步配置过程 一个.mgr过程 GGSCI (lei1) 3> view p ...
- 实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比較分析
译自 Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差点儿相 ...
- tomcat-jQ-springMVC-bootstrap
基于tomcat-jQ-springMVC-bootstrap的公司产品管理WEB应用 管理员登录后台以后才能操作 ,权限管理只有一个管理员, 系统的主要作用是查看所有的 “公司列表”, 并查看该公司 ...
- android_线
说明:android螺纹. android无非就是一个线程Main Thread和Worker Thread.(除了主线程Main Thread是Worker Thread) Main Thread ...
- MFC属性页对话框
属性页对话框 分类 分页和引导 类 CPropertyPage-父亲CDialog类别,所谓的属性页或网页对话框. CPropertySheet-父类是CWnd,称为属性表单. 一个完整的属性页对话框 ...
- 怪异php 语法, 求解!
查找php馍用来推断是否串串返回值和方法 strpos很奇怪. 请看下面的语句: echo "A1: ".(strpos("csd","c" ...