Android 录音和播放

原文地址:Android 录音和播放

今天主要讲解一下使用MediaRecorder 实现录音,主要是参照Android官网介绍来说明。

  今天讲的并不能实现一边录音一边播放,下一篇文章我再说如何解决这问题。下面是我们今天要讲解的Mediarecorder的状态机图。摘录自Android官网。

(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:322599434)

1、使用Mediarecorder 录音

  MediaRecorder类用来进行媒体采样,包括音频和视频。也就是用来记录音频和视频方法的类,记录的数据一般都是写入到文件里面。因此我们可以通过这个类实现录音和录视频的功能。下面介绍MediaRecorder用来录音的简单方法:

 
  1. //Edited by mythou
    //泡泡糖 - 博客园
 
  1. MediaRecorder recorder = new MediaRecorder();
  2. recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  3. recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  4. recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  5. recorder.setOutputFile(PATH_NAME);
  6. recorder.prepare();
  7. recorder.start(); // 开始录音
  8. ...
  9. recorder.stop();
  10. recorder.reset(); // You can reuse the object by going back to setAudioSource() step
  11. recorder.release(); // Now the object cannot be reused

上面是使用MediaRecorder录音的简单流程代码,基本上你使用的代码,就能实现录音的功能。

2、MediaRecorder 相关的类

 
 
  1. //Edited by mythou
    //泡泡糖 - 博客园
 
  1. //定义音频编码
  2. class MediaRecorder.AudioEncoder
  3. //定义声音资源
  4. class MediaRecorder.AudioSource
  5. //回调接口,当录音出现错误的时候调用
  6. interface MediaRecorder.OnErrorListener
  7. //回调接口,当录音出现错误的时候调用
  8. interface MediaRecorder.OnInfoListener
  9. //定义输出格式
  10. class MediaRecorder.OutputFormat
  11. //定义视频编码
  12. class MediaRecorder.VideoEncoder
  13. //定义视频source
  14. class MediaRecorder.VideoSource

3、MediaRecorder常用方法

 
 
  1. //Edited by mythou
    //泡泡糖 - 博客园
 
  1. //获取音频信号源的最高值。
  2. final static int getAudioSourceMax()
  3. //最后调用这个方法采样的时候返回最大振幅的绝对值
  4. int getMaxAmplitude()
  5. //准备recorder 开始捕获和编码数据
  6. void prepare()
  7. //发布与此MediaRecorder对象关联的资源
  8. void release()
  9. //重新启动mediarecorder到空闲状态
  10. void reset()
  11. //设置录制的音频通道数。
  12. void setAudioChannels(int numChannels)
  13. //设置audio的编码格式
  14. void setAudioEncoder(int audio_encoder)
  15. //设置录制的音频编码比特率
  16. void setAudioEncodingBitRate(int bitRate)
  17. //设置录制的音频采样率。
  18. void setAudioSamplingRate(int samplingRate)
  19. //设置用于录制的音源。
  20. void setAudioSource(int audio_source)
  21. //辅助时间的推移视频文件的路径传递。
  22. void setAuxiliaryOutputFile(String path)
  23. void setAuxiliaryOutputFile(FileDescriptor fd)
  24. //在文件描述符传递的辅助时间的推移视频
  25. //设置一个recording的摄像头
  26. void setCamera(Camera c)
  27. //设置视频帧的捕获率
  28. void setCaptureRate(double fps)
  29. //设置记录会话的最大持续时间(毫秒)
  30. void setMaxDuration(int max_duration_ms)
  31. //设置记录会话的最大大小(以字节为单位)
  32. void setMaxFileSize(long max_filesize_bytes)
  33. //注册一个回调被调用发生错误时,同时录制
  34. void setOnErrorListener(MediaRecorder.OnErrorListener l)
  35. //注册要同时记录一个信息事件发生时调用的回调。
  36. void setOnInfoListener(MediaRecorder.OnInfoListener listener)
  37. //设置输出的视频播放的方向提示
  38. void setOrientationHint(int degrees)
  39. //传递要写入的文件的文件描述符
  40. void setOutputFile(FileDescriptor fd)
  41. //设置输出文件的路径
  42. void setOutputFile(String path)
  43. //设置在录制过程中产生的输出文件的格式
  44. void setOutputFormat(int output_format)
  45. //表面设置显示记录媒体(视频)的预览
  46. void setPreviewDisplay(Surface sv)
  47. //从一个记录CamcorderProfile对象的使用设置
  48. void setProfile(CamcorderProfile profile)
  49. //设置视频编码器,用于录制
  50. void setVideoEncoder(int video_encoder)
  51. //设置录制的视频编码比特率
  52. void setVideoEncodingBitRate(int bitRate)
  53. //设置要捕获的视频帧速率
  54. void setVideoFrameRate(int rate)
  55. //设置要捕获的视频的宽度和高度
  56. void setVideoSize(int width, int height)
  57. //开始捕捉和编码数据到setOutputFile(指定的文件)
  58. void setVideoSource(int video_source)
  59. //开始录音
  60. void start()
  61. //停止recording
  62. void stop()

4、播放录音

 
  1. //Edited by mythou
    //泡泡糖 - 博客园
 
  1. mPlayer = new MediaPlayer();
  2. mPlayer.setDataSource(mSampleFile.getAbsolutePath());
  3. mPlayer.setOnCompletionListener(this);
  4. mPlayer.setOnErrorListener(this);
  5. mPlayer.prepare();
  6. mPlayer.start();
  7. //.......
  8. mPlayer.stop();
  9. mPlayer.release();
  10. mPlayer = null;

上面是一段简单播放录音的过程,结合上面录音代码,就可以实现录音和回放。

  MediaRecorder的使用方法很简单,最后给出Android源码里面的录音程序,方便有需要的朋友下载看看。下一篇文章再讲解如何实现一边录音一边播放功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值