Android -- MediaRecord
MediaRecord
集成了录音、编码、压缩等,支持少量的录音音频格式,大概有.aac .amr .3gp
优点:大部分以及集成,直接调用相关接口即可,代码量小
缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件
WAV格式:录音质量高,但是压缩率小,文件大
AAC格式:相对于mp3,AAC格式的音质更佳,文件更小;有损压缩;一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放
AMR格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音
至于常用的mp3格式,使用MediaRecorder没有该视频格式输出。一些人的做法是使用AudioRecord录音,然后编码成wav格式,再转换成mp3格式
举个栗子
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(PATH_NAME);
recorder.prepare();
recorder.start(); // Recording is now started
//...
recorder.stop();
recorder.reset(); // You can reuse the object by going back to setAudioSource() step
recorder.release(); // Now the object cannot be reused
Demo
public static final String DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "1122" + File.separator;
private Button mStartBtn;
private Button mStopBtn;
private MediaRecorder mMediaRecorder;
private boolean mIsRecoding = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sound);
mStartBtn = (Button) findViewById(R.id.btn_start);
mStartBtn.setOnClickListener(this);
mStopBtn = (Button) findViewById(R.id.btn_stop);
mStopBtn.setOnClickListener(this);
initSound();
}
private void initSound() {
mMediaRecorder = new MediaRecorder();
// 从麦克风源进行录音
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
// 设置输出格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
File dir = new File(DIR);
if (!dir.exists()) {
dir.mkdir();
}
if (!mIsRecoding) {
long time = System.currentTimeMillis();
String fileName = time + ".amr";
File file = new File(DIR + fileName);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
mMediaRecorder.setOutputFile(DIR + fileName);
try {
mMediaRecorder.prepare();
mMediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
mIsRecoding = true;
}
break;
case R.id.btn_stop:
if (mIsRecoding) {
mMediaRecorder.stop();
mMediaRecorder.release();
mIsRecoding = false;
}
break;
}
}
权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
截图
我是天王盖地虎的分割线
作者:我爱物联网
出处:http://yydcdut.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yydcdut.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
Android基础
标签:
Android
, MediaRecord
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2014-08-12 git/github运用
2014-08-12 Java程序员面试中的多线程问题
2014-08-12 设计模式(十一)桥梁模式(结构型)
2014-08-12 Ubuntu14.04搭建LAMP环境