Android中文API(122) —— AudioRecord

简介:

 

结构

继承关系

public class AudioRecord extends Object

 

  java.lang.Object

android.media.AudioRecord

 

类概述

  AudioRecord类在Java应用程序中管理音频资源,用来记录从平台音频输入设备产生的数据。 通过AudioRecord对象来完成"pulling"(读取)数据。 应用通过以下几个方法负责立即从AudioRecord对象读取: read(byte[], int, int) read(short[], int, int)read(ByteBuffer, int)无论使用哪种音频格式,使用AudioRecord是最方便的。

  在创建AudioRecord对象时,AudioRecord会初始化,并和音频缓冲区连接,用来缓冲新的音频数据。 根据构造时指定的缓冲区大小,来决定AudioRecord能够记录多长的数据。 从硬件设备读取的数据,应小于整个记录缓冲区。

 

内部类

    interface          AudioRecord.OnRecordPositionUpdateListener

  接口定义为:当AudioRecord 收到一个由setNotificationMarkerPosition(int)设置的通知标志,或由 setPositionNotificationPeriod(int)设置的周期更新记录的进度状态时,回调此接口。

 

常量

    public static final int ERROR

  表示操作失败。

                   常量值: -1 (0xffffffff)

 

  public static final int ERROR_BAD_VALUE

  表示使用了一个不合理的值导致的失败。

        常量值: -2 (0xfffffffe)

 

  public static final int ERROR_INVALID_OPERATION

  表示不恰当的方法导致的失败。

        常量值: -3 (0xfffffffd)

 

  public static final int RECORDSTATE_RECORDING

  指示AudioRecord录制状态为“正在录制”。

        常量值: 3 (0x00000003)

 

  public static final int RECORDSTATE_STOPPED

  指示AudioRecord录制状态为“不在录制”。

        常量值: 1 (0x00000001)

 

  public static final int STATE_INITIALIZED

  指示AudioRecord准备就绪。

        常量值: 1 (0x00000001)

 

  public static final int STATE_UNINITIALIZED

  指示AudioRecord状态没有初始化成功。

        常量值: 0 (0x00000000)

 

  public static final int SUCCESS

  表示操作成功。

        常量值: 0 (0x00000000)

 

构造函数

  public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)

  类构造函数。

         参数

                   audioSource     录制源。 请见MediaRecorder.AudioSource录制源定义。

sampleRateInHz      默认采样率,单位Hz 44100Hz是当前唯一能保证在所有设备上工作的采样率,在一些设备上还有22050, 1600011025

channelConfig          描述音频通道设置。 请见CHANNEL_IN_MONO  CHANNEL_IN_STEREO CHANNEL_IN_MONO保证能在所有设备上工作。

audioFormat             音频数据保证支持此格式。 请见ENCODING_PCM_16BIT ENCODING_PCM_8BIT

bufferSizeInBytes    在录制过程中,音频数据写入缓冲区的总数(字节)。 从缓冲区读取的新音频数据总会小于此值。 getMinBufferSize(int, int, int)返回AudioRecord 实例创建成功后的最小缓冲区。 设置的值比getMinBufferSize()还小则会导致初始化失败。

                   异常

                            IllegalArgumentException

 

公共方法

    public int getAudioFormat ()

    返回设置的音频数据格式。 请见ENCODING_PCM_16BIT ENCODING_PCM_8BIT

 

    public int getAudioSource ()

    返回音频录制源。

      参见

                            MediaRecorder.AudioSource

 

    public int getChannelConfiguration ()

    返回设置的频道设置。 请见CHANNEL_IN_MONOCHANNEL_IN_STEREO

 

    public int getChannelCount ()

    返回设置的频道数目。

 

    public static int getMinBufferSize (int sampleRateInHz, int channelConfig, int audioFormat)

    返回成功创建AudioRecord对象所需要的最小缓冲区大小。 注意:这个大小并不保证在负荷下的流畅录制,应根据预期的频率来选择更高的值,AudioRecord实例在推送新数据时使用此值。

      参数

                            sampleRateInHz      默认采样率,单位Hz

                            channelConfig           描述音频通道设置。

请见CHANNEL_IN_MONOCHANNEL_IN_STEREO

                            audioFormat             音频数据保证支持此格式。参见ENCODING_PCM_16BIT

      返回值

  如果硬件不支持录制参数,或输入了一个无效的参数,则返回ERROR_BAD_VALUE,如果硬件查询到输出属性没有实现,或最小缓冲区用byte表示,则返回ERROR

      参见

                            更多信息请见有效的设置参数

 

    public int getNotificationMarkerPosition ()

    返回通知,标记框架中的位置。

 

    public int getPositionNotificationPeriod ()

    返回通知,更新框架中的时间位置。

 

    public int getRecordingState ()

    返回AudioRecord实例的录制状态。

      参见

                       RECORDSTATE_STOPPED

             RECORDSTATE_RECORDING

 

    public int getSampleRate ()

    返回设置的音频数据样本采样率,单位Hz

 

    public int getState ()

    返回AudioRecord实例的状态。 这点非常有用,用在AudioRecord 实例创建成功后,检查初始化属性。 它能肯定请求到了合适的硬件资源。

      参见

                   STATE_INITIALIZED

             STATE_UNINITIALIZED

 

    public int read (short[] audioData, int offsetInShorts, int sizeInShorts)

    从音频硬件录制缓冲区读取数据。

             参数

                            audioData        写入的音频录制数据。

                            offsetInShorts           目标数组 audioData 的起始偏移量。

                            sizeInShorts              请求读取的数据大小。

      返回值

  返回short型数据,表示读取到的数据,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE 返回数值不会超过sizeInShorts

 

    public int read (byte[] audioData, int offsetInBytes, int sizeInBytes)

    从音频硬件录制缓冲区读取数据。

                   参数

                            audioData        写入的音频录制数据。

                            offsetInBytes            audioData的起始偏移值,单位byte

                            sizeInBytes                读取的最大字节数。

                   返回值

  读入缓冲区的总byte数,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE 读取的总byte数不会超过sizeInBytes

 

    public int read (ByteBuffer audioBuffer, int sizeInBytes)

    从音频硬件录制缓冲区读取数据,直接复制到指定缓冲区。 如果audioBuffer不是直接的缓冲区,此方法总是返回0

                   参数

                            audioBuffer               存储写入音频录制数据的缓冲区。

                            sizeInBytes                请求的最大字节数。

                   返回值

  读入缓冲区的总byte数,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE 读取的总byte数不会超过sizeInBytes

 

    public void release ()

    释放本地AudioRecord资源。 对象不能经常使用此方法,而且在调用release()后,必须设置引用为null

 

    public int setNotificationMarkerPosition (int markerInFrames)

    如果设置了setRecordPositionUpdateListener(OnRecordPositionUpdateListener)setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler),则通知监听者设置位置标记。

                   参数

                            markerInFrames      在框架中快速标记位置。

                   返回值

                            返回错误或成功代码,请见SUCCESSERROR_BAD_VALUEERROR_INVALID_OPERATION

 

    public int setPositionNotificationPeriod (int periodInFrames)

    如果设置了setRecordPositionUpdateListener(OnRecordPositionUpdateListener)setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler),则通知监听者设置时间标记。

                   参数

                            markerInFrames      在框架中快速更新时间标记。

                   返回值

                            返回错误或成功代码,请见SUCCESSERROR_INVALID_OPERATION

 

   public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener, Handler handler)

  当之前设置的标志已经成立,或者周期录制位置更新时,设置处理监听者。 使用此方法来将Handler 和别的线程联系起来,来接收AudioRecord 事件,比创建AudioTrack 实例更好一些。

  参数

              handler    用来接收事件通知消息。

 

   public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener)

    当之前设置的标志已经成立,或者周期录制位置更新时,设置处理监听者。

 

    public void startRecording ()

    AudioRecord实例开始进行录制。

                   异常

                            IllegalStateException

 

受保护方法

  protected void finalize ()

    通知VM回收此对象内存。 此方法只能用在运行的应用程序没有任何线程再使用此对象,来告诉垃圾回收器回收此对象。

  此方法用于释放系统资源,由垃圾回收器清除此对象。 默认没有实现,由VM来决定,但子类根据需要可重写finalize() 在执行期间,调用此方法可能会立即抛出未定义异常,但是可以忽略。

  注意:VM保证对象可以一次或多次调用finalize(),但并不保证finalize()会马上执行。 例如,对象Bfinalize()可能延迟执行,等待对象Afinalize()延迟回收A的内存。 为了安全起见,请看ReferenceQueue,它提供了更多地控制VM的垃圾回收。



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582334,如需转载请自行联系原作者

相关文章
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
249 0
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
|
数据采集 Java Android开发
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(二)
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(二)
236 0
|
Android开发 内存技术
Android音视频之AudioRecord录音(一)
Android音视频之AudioRecord录音(一)在音视频开发中,录音当然是必不可少的。首先我们要学会单独的录音功能,当然这里说的录音是指用AudioRecord来录音,读取录音原始数据,读到的就是所谓的PCM数据。
1499 0
|
Android开发 缓存
Android MediaRecorder与AudioRecord音频录制
MediaRecorderAudioRecord MediaRecorder 需要的权限 /** * 开始录音 */ class startRecordListener implements OnClickList...
1417 0
|
XML Android开发 数据格式
Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能
Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能 音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下Android他提供的录音类,实际上他有两个,一个是MediaRecorder,还有一个就是我们今天要用到的AudioRecord,那他们有什么区别呢? 一.区别 MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器。
1951 0
|
6天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。