您的位置:首页 > 移动开发 > Android开发

Android中文API(122) —— AudioRecord

2013-07-29 21:54 405 查看


前言

  本章内容是android.media.AudioRecord,版本为Android3.1r1,翻译来自"chenwei",这位朋友在没有加入翻译组情况下匿名投稿,这里整理后代为发布!欢迎大家一起参与AndroidAPI的翻译,联系我over140@gmail.com。

声明
  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com/
    Android中文翻译组:http://goo.gl/6vJQl

结构
继承关系
publicclassAudioRecordextendsObject

  java.lang.Object
android.media.AudioRecord

类概述
  AudioRecord类在Java应用程序中管理音频资源,用来记录从平台音频输入设备产生的数据。通过AudioRecord对象来完成"pulling"(读取)数据。应用通过以下几个方法负责立即从AudioRecord对象读取:read(byte[],
int,int),,%20int,%20int%29]read(short[],int,int)或read(ByteBuffer,
int).无论使用哪种音频格式,使用AudioRecord是最方便的。
  在创建AudioRecord对象时,AudioRecord会初始化,并和音频缓冲区连接,用来缓冲新的音频数据。根据构造时指定的缓冲区大小,来决定AudioRecord能够记录多长的数据。从硬件设备读取的数据,应小于整个记录缓冲区。

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

常量
    publicstaticfinalintERROR
  表示操作失败。
常量值:-1(0xffffffff)

  publicstaticfinalintERROR_BAD_VALUE
  表示使用了一个不合理的值导致的失败。
  常量值:-2(0xfffffffe)

  publicstaticfinalintERROR_INVALID_OPERATION
  表示不恰当的方法导致的失败。
  常量值:-3(0xfffffffd)

  publicstaticfinalintRECORDSTATE_RECORDING
  指示AudioRecord录制状态为“正在录制”。
  常量值:3(0x00000003)

  publicstaticfinalintRECORDSTATE_STOPPED
  指示AudioRecord录制状态为“不在录制”。
  常量值:1(0x00000001)

  publicstaticfinalintSTATE_INITIALIZED
  指示AudioRecord准备就绪。
  常量值:1(0x00000001)

  publicstaticfinalintSTATE_UNINITIALIZED
  指示AudioRecord状态没有初始化成功。
  常量值:0(0x00000000)

  publicstaticfinalintSUCCESS
  表示操作成功。
  常量值:0(0x00000000)

构造函数
  publicAudioRecord(intaudioSource,intsampleRateInHz,intchannelConfig,intaudioFormat,intbufferSizeInBytes)
  类构造函数。
参数
audioSource录制源。请见MediaRecorder.AudioSource录制源定义。
sampleRateInHz默认采样率,单位Hz。44100Hz是当前唯一能保证在所有设备上工作的采样率,在一些设备上还有22050,16000或11025。
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

公共方法
    publicintgetAudioFormat()
    返回设置的音频数据格式。请见ENCODING_PCM_16BIT和ENCODING_PCM_8BIT。

    publicintgetAudioSource()
    返回音频录制源。
      参见
MediaRecorder.AudioSource


    
publicintgetChannelConfiguration()

    返回设置的频道设置。请见
CHANNEL_IN_MONO
CHANNEL_IN_STEREO


    publicintgetChannelCount()
    返回设置的频道数目。

    publicstaticintgetMinBufferSize(intsampleRateInHz,intchannelConfig,intaudioFormat)
    返回成功创建AudioRecord对象所需要的最小缓冲区大小。注意:这个大小并不保证在负荷下的流畅录制,应根据预期的频率来选择更高的值,AudioRecord实例在推送新数据时使用此值。
      参数
sampleRateInHz默认采样率,单位Hz。
channelConfig描述音频通道设置。
请见
CHANNEL_IN_MONO
CHANNEL_IN_STEREO

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

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

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

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

    publicintgetRecordingState()
    返回AudioRecord实例的录制状态。
      参见
RECORDSTATE_STOPPED

  
RECORDSTATE_RECORDING


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

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

  
STATE_UNINITIALIZED


    publicintread(short[]audioData,intoffsetInShorts,intsizeInShorts)
    从音频硬件录制缓冲区读取数据。
  参数
audioData写入的音频录制数据。
offsetInShorts目标数组audioData的起始偏移量。
sizeInShorts请求读取的数据大小。
      返回值
  返回short型数据,表示读取到的数据,如果对象属性没有初始化,则返回
ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回
ERROR_BAD_VALUE
。返回数值不会超过sizeInShorts。

    publicintread(byte[]audioData,intoffsetInBytes,intsizeInBytes)
    从音频硬件录制缓冲区读取数据。
参数
audioData写入的音频录制数据。
offsetInBytesaudioData的起始偏移值,单位byte。
sizeInBytes读取的最大字节数。
返回值
  读入缓冲区的总byte数,如果对象属性没有初始化,则返回
ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回
ERROR_BAD_VALUE
。读取的总byte数不会超过sizeInBytes。

    publicintread(ByteBufferaudioBuffer,intsizeInBytes)
    从音频硬件录制缓冲区读取数据,直接复制到指定缓冲区。如果audioBuffer不是直接的缓冲区,此方法总是返回0。
参数
audioBuffer存储写入音频录制数据的缓冲区。
sizeInBytes请求的最大字节数。
返回值
  读入缓冲区的总byte数,如果对象属性没有初始化,则返回
ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回
ERROR_BAD_VALUE
。读取的总byte数不会超过sizeInBytes。

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

    publicintsetNotificationMarkerPosition(intmarkerInFrames)
    如果设置了
setRecordPositionUpdateListener(OnRecordPositionUpdateListener)
setRecordPositionUpdateListener(OnRecordPositionUpdateListener,
Handler)
,则通知监听者设置位置标记。
参数
markerInFrames在框架中快速标记位置。
返回值
返回错误或成功代码,请见
SUCCESS
ERROR_BAD_VALUE
ERROR_INVALID_OPERATION


    publicintsetPositionNotificationPeriod(intperiodInFrames)
    如果设置了
setRecordPositionUpdateListener(OnRecordPositionUpdateListener)
setRecordPositionUpdateListener(OnRecordPositionUpdateListener,
Handler)
,则通知监听者设置时间标记。
参数
markerInFrames在框架中快速更新时间标记。
返回值
返回错误或成功代码,请见
SUCCESS
ERROR_INVALID_OPERATION。


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

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

    publicvoidstartRecording()
    AudioRecord实例开始进行录制。
异常
IllegalStateException

受保护方法
  protectedvoidfinalize()
    通知VM回收此对象内存。此方法只能用在运行的应用程序没有任何线程再使用此对象,来告诉垃圾回收器回收此对象。
  此方法用于释放系统资源,由垃圾回收器清除此对象。默认没有实现,由VM来决定,但子类根据需要可重写finalize()。在执行期间,调用此方法可能会立即抛出未定义异常,但是可以忽略。
  注意:VM保证对象可以一次或多次调用finalize(),但并不保证finalize()会马上执行。例如,对象B的finalize()可能延迟执行,等待对象A的finalize()延迟回收A的内存。为了安全起见,请看ReferenceQueue,它提供了更多地控制VM的垃圾回收。

补充
文章精选
Android提高第十篇之AudioRecord实现"助听器"
Android入门(9)AudioRecord和AudioTrack类的使用
Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序

AudioRecord.OnRecordPositionUpdateListener
译者署名:chenwei
版本:Android3.1r1

结构
继承关系
publicstaticinterfaceAudioRecord.OnRecordPositionUpdateListener

android.media.AudioRecord.OnRecordPositionUpdateListener

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

公共方法
publicabstractvoidonMarkerReached(AudioRecordrecorder)
回调监听器,通知监听器已经到达之前设置的标记位置。

publicabstractvoidonPeriodicNotification(AudioRecordrecorder)
按照一定的周期,通知监听器,指定的记录已经就绪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: