录音器开发实例
来源:互联网 发布:c语言无限循环 编辑:程序博客网 时间:2024/04/28 08:10
录音器实例
本节通过一个简单的录音程序演示一下MediaRecorder的用法。运行项目chapter7_4,如图7-7所示。录音器包含录制、停止和播放3个按钮,并在按钮的下方提供了一个计时器,记录录音的时间。
图7-7 录音器运行界面当用户点击"录音"按钮后,创建一个MediaRecorder对象并配置数据源的数据,这里数据源来自麦克风,存储文件格式是3gpp,后缀名为.3ga,音频内容编码是AMR NB。每次录音,系统都是临时指定一个输出路径。RecorderActivity代码如下所示,由于录音与多媒体播放的API相似,请参考源代码注释,这里不再一一讲解。
- package com.ophone.chapter7_4;
- import java.io.IOException;
- import android.app.Activity;
- import android.media.MediaPlayer;
- import android.media.MediaRecorder;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.View;
- import android.widget.ImageButton;
- import android.widget.TextView;
- public class RecorderActivity extends Activity {
- public static final int UPDATE = 0;
- private ImageButton play;
- private ImageButton stop;
- private ImageButton record;
- private TextView time;
- private MediaRecorder recorder;
- private MediaPlayer player;
- private String path = "";
- private int duration = 0;
- private int state = 0;
- private static final int IDLE = 0;
- private static final int RECORDING = 1;
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- if (state == RECORDING) {
- super.handleMessage(msg);
- duration++;
- time.setText(timeToString());
- //循环更新录音器的界面
- handler.sendMessageDelayed(handler.
obtainMessage(UPDATE), 1000);- }
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //初始化"播放"按钮
- play = (ImageButton) findViewById(R.id.play);
- play.setOnClickListener(new View.OnClickListener() {
- public void onClick(View arg0) {
- play();
- }
- });
- //初始化"停止"按钮
- stop = (ImageButton) findViewById(R.id.stop);
- stop.setOnClickListener(new View.OnClickListener() {
- public void onClick(View arg0) {
- stop();
- }
- });
- //初始化"录音"按钮
- record = (ImageButton) findViewById(R.id.record);
- record.setOnClickListener(new View.OnClickListener() {
- public void onClick(View arg0) {
- record();
- }
- });
- time = (TextView) findViewById(R.id.time);
- }
- //播放刚刚录制的音频文件
- private void play() {
- if ("".equals(path) || state == RECORDING)
- return;
- if (player == null)
- player = new MediaPlayer();
- else
- player.reset();
- try {
- player.setDataSource(path);
- player.prepare();
- player.start();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void record() {
- try {
- if (recorder == null)
- recorder = new MediaRecorder();
- //设置输入为麦克风
- recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- //设置输出的格式为3gp文件
- recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- //音频的编码采用AMR
- recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- //临时的文件存储路径
- path = "/sdcard/" + System.currentTimeMillis() + ".3ga";
- recorder.setOutputFile(path);
- recorder.prepare();
- recorder.start();
- state = RECORDING;
- handler.sendEmptyMessage(UPDATE);
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void stop() {
- // 停止录音,释放recorder对象
- if (recorder != null) {
- recorder.stop();
- recorder.release();
- }
- recorder = null;
- handler.removeMessages(UPDATE);
- state = IDLE;
- duration = 0;
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- //Activity销毁后,释放播放器和录音器资源
- if (recorder != null) {
- recorder.release();
- recorder = null;
- }
- if (player != null) {
- player.release();
- player = null;
- }
- }
- private String timeToString() {
- if (duration >= 60) {
- int min = duration / 60;
- String m = min > 9 ? min + "" : "0" + min;
- int sec = duration % 60;
- String s = sec > 9 ? sec + "" : "0" + sec;
- return m + ":" + s;
- } else {
- return "00:" + (duration > 9 ? duration + "" : "0" + duration);
- }
- }
- }
本文转载自:http://book.51cto.com/art/200912/173826.htm,转载请注明出处
0 0
- 录音器开发实例
- android开发录音和播放录音
- WM录音开发(OpenNETCF)
- android录音开发
- iOS录音功能开发
- MP3 录音开发
- 使用websocket实现录音实例
- ios开发 录音内部过程
- windows phone开发学习--录音
- windows phone开发学习--录音
- OCiOS开发:录音与音效
- Android开发:仿微信 录音声波
- 实例编程iPhone 录音和播放
- html5 record 录音实例 使用websocket
- node+express搭建record.js录音实例
- android开发录音和播放录音的例子
- android开发录音和播放录音的例子
- Android应用开发-----------来电录音(去电录音)
- 高并发环境下的连接器性能优化
- 每个Java开发者都应该知道的5个JDK工具
- Leetcode:Restore IP Addresses
- 算法 最近对问题完整代码分析
- MagicalRecord入门教程
- 录音器开发实例
- Windows XP的Tiff文件格式支持
- Java多线程(1)--创建和线程信息获取
- Git 终端使用手册
- WCF不支持多维数组
- 2014-11-21 java web 学习笔记
- 使用proguard对Android Library中代码进行混淆
- Velocity魔法堂系列一:入门示例
- CI 中index.php去掉的方法 (可用可不用) wamp环境下