zoukankan      html  css  js  c++  java
  • Android 录音和播放

      今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来。所以了解了一些有关录音和播放的知识。接到这个任务的第一反应就是看看Android源码里面的录音Demo,因此今天针对Android的录音demo程序讲解一些录音和播放相关知识。

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

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

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

    1、使用Mediarecorder 录音

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

    //Edited by mythou
    //http://www.cnblogs.com/mythou/
     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();   // 开始录音
    
     ...
     recorder.stop();
     recorder.reset();   // You can reuse the object by going back to setAudioSource() step
     recorder.release(); // Now the object cannot be reused

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

    2、MediaRecorder 相关的类

    
    
    //Edited by mythou
    //http://www.cnblogs.com/mythou/
    //定义音频编码
    class MediaRecorder.AudioEncoder
    
    //定义声音资源
    class MediaRecorder.AudioSource
    
    //回调接口,当录音出现错误的时候调用
    interface  MediaRecorder.OnErrorListener
    
    //回调接口,当录音出现错误的时候调用
    interface MediaRecorder.OnInfoListener
    
    //定义输出格式
    class MediaRecorder.OutputFormat
     
    //定义视频编码
    class MediaRecorder.VideoEncoder
    
    //定义视频source
    class MediaRecorder.VideoSource

    3、MediaRecorder常用方法

    
    
    //Edited by mythou
    //http://www.cnblogs.com/mythou/
    //获取音频信号源的最高值。
    final static int getAudioSourceMax()
    
     //最后调用这个方法采样的时候返回最大振幅的绝对值
    int getMaxAmplitude()
    
    //准备recorder 开始捕获和编码数据
    void prepare()
    
    //发布与此MediaRecorder对象关联的资源
    void release()
    
    //重新启动mediarecorder到空闲状态
    void reset()
    
    //设置录制的音频通道数。
    void setAudioChannels(int numChannels)
    
    //设置audio的编码格式
    void setAudioEncoder(int audio_encoder)
    
    //设置录制的音频编码比特率
    void setAudioEncodingBitRate(int bitRate)
     
    //设置录制的音频采样率。
    void setAudioSamplingRate(int samplingRate)
    
    //设置用于录制的音源。
    void setAudioSource(int audio_source)
    
    //辅助时间的推移视频文件的路径传递。
    void setAuxiliaryOutputFile(String path)
    
    void setAuxiliaryOutputFile(FileDescriptor fd)
    //在文件描述符传递的辅助时间的推移视频
     
    //设置一个recording的摄像头
    void setCamera(Camera c)
    
    //设置视频帧的捕获率
    void setCaptureRate(double fps)
    
    //设置记录会话的最大持续时间(毫秒)
    void setMaxDuration(int max_duration_ms)
    
    //设置记录会话的最大大小(以字节为单位)
    void setMaxFileSize(long max_filesize_bytes)
    
    //注册一个回调被调用发生错误时,同时录制
    void setOnErrorListener(MediaRecorder.OnErrorListener l)
    
    //注册要同时记录一个信息事件发生时调用的回调。
    void setOnInfoListener(MediaRecorder.OnInfoListener listener)
     
    //设置输出的视频播放的方向提示
    void setOrientationHint(int degrees)
    
    //传递要写入的文件的文件描述符
    void setOutputFile(FileDescriptor fd)
    
    //设置输出文件的路径
    void setOutputFile(String path)
    
    //设置在录制过程中产生的输出文件的格式
    void setOutputFormat(int output_format)
    
    //表面设置显示记录媒体(视频)的预览
    void setPreviewDisplay(Surface sv)
    
    //从一个记录CamcorderProfile对象的使用设置
    void setProfile(CamcorderProfile profile)
    
    //设置视频编码器,用于录制
    void setVideoEncoder(int video_encoder)
    
    //设置录制的视频编码比特率
    void setVideoEncodingBitRate(int bitRate)
     
    //设置要捕获的视频帧速率
    void setVideoFrameRate(int rate)
    
    //设置要捕获的视频的宽度和高度
    void setVideoSize(int width, int height)
    
    //开始捕捉和编码数据到setOutputFile(指定的文件)
    void setVideoSource(int video_source)
    
    //开始录音
    void start()
    
    //停止recording
    void stop()

    4、播放录音

    //Edited by mythou
    //http://www.cnblogs.com/mythou/
    mPlayer = new MediaPlayer();
    mPlayer.setDataSource(mSampleFile.getAbsolutePath());
    mPlayer.setOnCompletionListener(this);
    mPlayer.setOnErrorListener(this);
    mPlayer.prepare();
    mPlayer.start();
    
    //.......
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null;

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

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

    Android录音程序下载:SoundRecorder8-6.rar

    Edited by mythou

    原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3242000.html 

  • 相关阅读:
    【转】【Salesfoece】Salesforce 应用生命周期管理
    【Apex】【Salesfoece】Salesforce 的 package.xml 文件
    【转】【Salesfoece】Apex计划作业框架的实现--用于实现数据的定时自动处理。
    【转】【Salesfoece】Apex 的 Trigger 类简介
    【转】【Salesforce】提高 Visualforce 页面加载效率的小知识
    「这是啥」关于三维偏序
    Javaweb中PO BO VO DTO POJO DAO DO概念理解
    Python多进程、多线程及各自的适用场景
    基于LDA主题模型和SVM的文本分类
    理解accuracy/precision_score、micro/macro
  • 原文地址:https://www.cnblogs.com/mythou/p/3242000.html
Copyright © 2011-2022 走看看