摘要

本文介绍了android中AudioRecord的一些基本使用,主要参考官方文档,本文不讲过多理论知识,主要介绍在实际开发中的使用方法。

类概述

  AudioRecord类在Java应用程序中管理音频资源,用来记录从平台音频输入设备产生的数据。 通过AudioRecord对象来完成”pulling”(读取)数据。 应用通过以下几个方法负责立即从AudioRecord对象读取:

     read(byte[], int, int)     read(short[], int, int)     read(ByteBuffer, int).

无论使用哪种音频格式,使用AudioRecord是最方便的。

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

构造函数

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

参数解释

audioSource:
音频源:指的是从哪里采集音频。这里我们当然是从麦克风采集音频,所以此参数的值为MIC
sampleRateInHz:
采样率:音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率。
channelConfig:
声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声
audioFormat:
编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。)
android支持的采样大小16bit 或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit足够了。
bufferSizeInBytes:
采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。

公共方法

public int getAudioFormat ()

返回设置的音频数据格式。

public int getAudioSource ()

返回音频录制源。

public int getChannelConfiguration ()

返回设置的频道设置。

public int getChannelCount ()

返回设置的频道数目。

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

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

参数解释:

    sampleRateInHz      默认采样率,单位Hz。    channelConfig           描述音频通道设置。    audioFormat             音频数据保证支持此格式

返回值:

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

public int getNotificationMarkerPosition ()

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

public int getPositionNotificationPeriod ()

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

public int getRecordingState ()

返回AudioRecord实例的录制状态。

public int getSampleRate ()

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

public int getState ()

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

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      在框架中快速标记位置。

返回值:

返回错误或成功代码,请见SUCCESS、ERROR_BAD_VALUE、ERROR_INVALID_OPERATION。

public int setPositionNotificationPeriod (int periodInFrames)

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

参数解释:

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

返回值

返回错误或成功代码

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

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

参数解释:

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

public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener)

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

public void startRecording ()

AudioRecord实例开始进行录制。

受保护方法

protected void finalize ()

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

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

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

更多相关文章

  1. Android中关于SQLite数据库的一些知识
  2. Android之ListActivity(一):布局与数据绑定
  3. Android-使用AutoCompleteTextView进行动态匹配
  4. 老罗Android开发视频教程_基于JavaSE开发(适合Android初学者菜鸟
  5. OpenAL播放pcm或wav数据流-windows/ios/android(一)
  6. 【android】LayoutInflater.inflate方法的详解及xml根元素的布局
  7. Android的数据存储形式
  8. Android开发:MPAndroidChart的配置和使用
  9. Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET

随机推荐

  1. ViewPager介绍
  2. android RTSP流媒体播放
  3. android 查看apk中资源文件
  4. eclipse转Android studio
  5. iOS and Android Programming with Go
  6. Android颜色值XML文件
  7. android 颜色选择器
  8. Android调用 Webservice报org.ksoap2.ser
  9. NDK With Android Studio
  10. 用RelativeLayout布局可以在imageview中