Android录音

使用MediaRecoder实现简单的声音录制

  1. 首先需要添加两个权限

  2. 实例化MediaRecoder对象

    mRecorder = new MediaRecorder();
    // 设置声音源,参数表示声音来自麦克风
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    // 设置所录制的声音文件格式
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    // 设置录音输出文件位置
    mRecorder.setOutputFile(mFilePath);
    // 设置录音编码格式
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    // 设置录制的音频通道数,在prepare方法前调用
    mRecorder.setAudioChannels(1);
    // 在设置完录音配置后,调用进入准备状态
    mRecorder.prepare();
    // 开始录制,并肩编码后的数据输出到所设置的输出文件中
    mRecorder.start();
    // 停止录制,在start后调用,如果需要再次调用start之前,重新配置MediaRecoder对象
    mRecorder.stop();
    // 释放所有资源
    mRecorder.release();
    

MediaRecoder状态图
与MediaPlayer类非常相似MediaRecorder也有它自己的状态图。下面是关于MediaRecorder的各个状态的介绍:

Initial:初始状态,当使用new()方法创建一个MediaRecorder对象或者调用了reset()方法时,该MediaRecorder对象处于Initial状态。在设定视频源或者音频源之后将转换为Initialized状态。另外,在除Released状态外的其它状态通过调用reset()方法都可以使MediaRecorder进入该状态。

Initialized:已初始化状态,可以通过在Initial状态调用setAudioSource()或setVideoSource()方法进入该状态。在这个状态可以通过setOutputFormat()方法设置输出格式,此时MediaRecorder转换为DataSourceConfigured状态。另外,通过reset()方法进入Initial状态。

DataSourceConfigured:数据源配置状态,这期间可以设定编码方式、输出文件、屏幕旋转、预览显示等等。可以在Initialized状态通过setOutputFormat()方法进入该状态。另外,可以通过reset()方法回到Initial状态,或者通过prepare()方法到达Prepared状态。

Prepared:就绪状态,在DataSourceConfigured状态通过prepare()方法进入该状态。在这个状态可以通过start()进入录制状态。另外,可以通过reset()方法回到Initialized状态。

Recording:录制状态,可以在Prepared状态通过调用start()方法进入该状态。另外,它可以通过stop()方法或reset()方法回到Initial状态。

Released:释放状态(官方文档给出的词叫做Idle state 空闲状态),可以通过在Initial状态调用release()方法来进入这个状态,这时将会释放所有和MediaRecorder对象绑定的资源。

Error:错误状态,当错误发生的时候进入这个状态,它可以通过reset()方法进入Initial状态。

提示:与MediaPlayer相似使用MediaRecorder录音录像时需要严格遵守状态图说明中的函数调用先后顺序,在不同的状态调用不同的函数,否则会出现异常。

MediaRecoder类方法:

getAudioSourceMax()

获取音频源的最大值。

int


getMaxAmplitude()

获取在前一次调用此方法之后录音中出现的最大振幅。

void


prepare()

准备录制。

void


release()

释放资源。

void


reset()

将MediaRecorder设为空闲状态,即Initial状态。

void


setAudioChannels(int numChannels)

设置录制的音频通道数。

void


setAudioEncoder(int audio_encoder)

设置所录制的声音的编码格式。

void


setAudioEncodingBitRate(int bitRate)

设置所录制的声音的编码位率。

void


setAudioSamplingRate(int samplingRate)

设置所录制的声音的采样率。

void


setAudioSource(int audio_source)

设置声音来源,一般传入 MediaRecorder. AudioSource.MIC参数指定录制来自麦克风的声音。

void


setCamera(Camera c)

设置一个摄像头用于录制。

void


setCaptureRate(double fps)

设置视频帧捕获率。

void


setLocation(float latitude, float longitude)

设置并存储在输出文件中的地理数据(经度和纬度)。

void


setMaxDuration(int max_duration_ms)

设置录制会话的最长持续时间(以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)

设置使用哪个SurfaceView来显示视频预览。

void


setProfile(CamcorderProfile profile)

指定CamcorderProfile对象。

void


setVideoEncoder(int video_encoder)

设置所录制视频的编码格式。

void


setVideoEncodingBitRate(int bitRate)

设置所录制视频的编码位率。

void


setVideoFrameRate(int rate)

设置录制视频的捕获帧速率。

void


setVideoSize(int width, int height)

设置要拍摄的宽度和视频的高度。

void


setVideoSource(int video_source)

设置用于录制的视频来源。

void


start()

开始录制。

void


stop()

停止录制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值