如何使用 MediaRecorder录制声音?
来源:互联网 发布:时光知味 在线阅读 编辑:程序博客网 时间:2024/05/20 05:57
先对声音录制有个大致的了解,需要设置声音数据的来源、输出编码方式、输出文件路径、输出文件格式等。有一点需要说明的是:输出文件格式就相当于一个容器,具体采用什么编码需要指定编码格式。编码一样可能输出格式不一样,输出格式一样其编码方式可能不一样。
android.media 包包含与媒体子系统交互的类。使用 android.media.MediaRecorder 类进行媒体采样,包括音频和视频。MediaRecorder 作为状态机运行。需要设置不同的参数,比如源设备和格式。设置后,可执行任何时间长度的录制,直到用户停止。
录制音频主要片段如下:
MediaRecorder mrec ;
File audiofile = null;
private static final String TAG="SoundRecordingDemo";
protected void startRecording() throws IOException
{
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
if (mSampleFile == null)
{
File sampleDir = Environment.getExternalStorageDirectory();
try
{
audiofile = File.createTempFile("ibm", ".3gp", sampleDir);
}
catch (IOException e)
{
Log.e(TAG,"sdcard access error");
return;
}
}
mrec.setOutputFile(audiofile.getAbsolutePath());
mrec.prepare();
mrec.start();
}
protected void stopRecording()
{
mrec.stop();
mrec.release();
processaudiofile(audiofile.getAbsolutePath());
}
protected void processAudiofile()
{
ContentValues values = new ContentValues(3);
long current = System.currentTimeMillis();
values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName());
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
ContentResolver contentResolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
}对以上代码解析如下:
1. 在 startRecording 方法中,实例化并初始化 MediaRecorder 的实例。
2. 输入源被设置为麦克风(MIC)。
3. 输出格式被设置为 3GPP(*.3gp 文件),这是移动设备专用的媒体格式。
4. 编码器被设置为 AMR_NB,这是音频格式,采样率为 8 KHz。NB 表示窄频。SDK 文档 解释了不同的数据格式和可用的编码器。
5. 音频文件存储在存储卡而不是内存中。External.getExternalStorageDirectory() 返回存储卡位置的名称,在该目录中将创建一个临时文件名。然后,通过调用 setOutputFile 方法将文件关联到 MediaRecorder 实例。音频数据将存储到该文件中。
6. 调用 prepare 方法完成 MediaRecorder 的初始化。准备开始录制流程时,将调用 start 方法。在调用 stop 方法之前,将对存储卡上的文件进行录制。release 方法将释放分配给 MediaRecorder 实例的资源。
7. 音频采样完成之后, 向设备的媒体库添加该音频。在该代码样例中,processAudiofile 方法将音频添加到媒体库。使用 Intent 通知设备上的媒体应用程序有新内容可用。
8. 最后还需要注意的是,录制声音需要一定的权限,需要向 AndroidManifest.xml 添加权限声明:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
总结说明:
1. Android SDK中对视频开发方面提供了很大的方便,但是在使用的过程中发现,这些类封装的都很高层,很多地方估计也无法满足开发人员的需求,主要体现在缺少文件流操作等底层接口,我们只能通过控制状态来控制文件流,缺少这方面操作增加了Android视频开发的难度,比如说增加其他编码器等。
2. Android T-Mobile G1可以在线看Youtube视频,然而我们在开发中却发现,其无法播放FLV格式的视频,这就有些不明白了?估计在未来应该会支持的,FLV是当前最流行的流媒体格式,如果不支持对用户在Android上直接看这些FLV视频会有很大的影响。
分享Android开发心得,感受Android带给我们的新体验。
- 如何使用 MediaRecorder录制声音?
- Android开发之使用MediaRecorder录制声音
- Android开发之使用MediaRecorder录制声音
- Android开发之使用MediaRecorder录制声音
- 安卓使用MediaRecorder录制音频(声音)
- 使用MediaRecorder录制音频
- 使用MediaRecorder录制音频
- 使用MediaRecorder录制音频
- 使用MediaRecorder录制音频
- 使用MediaRecorder录制音视频
- 使用MediaRecorder进行视频录制
- Android:使用MediaRecorder录制音频
- 多媒体 使用MediaRecorder录制音频
- 关闭MediaRecorder录制状态改变时的声音
- Android MediaRecorder 实现录制无声视频 禁止录入声音
- Android之多媒体--使用MediaRecorder录制音频
- Android开发之使用MediaRecorder录制视频
- 使用MediaRecorder录制视频,并进行播放
- 关于cat >file,cat <file <
- Linux进程管理之CFS调度器分析
- 疯狂的Geek==白痴?
- df
- VB2010动态加载文件的怪问题
- 如何使用 MediaRecorder录制声音?
- 神奇的福昕阅读器
- 多源最短路径Floyd算法邻接矩阵形式C++实现
- Altium Designer6.9建立自己的元件库
- 邮件过滤技术
- 怎样在不写正则的前提下提取网页的标题和内容
- vxworks下的问题定位及调试方法
- 交流QQ群。在csdn的博客开始写文章
- 为了有利于保护安全性,Internet Explorer己限制此网页进行可以访问计算机的脚本或ActiveX控件。请单击这里获取选项