©
このドキュメントでは、php中国語ネットマニュアルリリース
AudioRecord
版本:Android 3.1 r1
结构
继承关系
public classAudioRecordextendsObject
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能够记录多长的数据。从硬件设备读取的数据,应小于整个记录缓冲区。
内部类
interfaceAudioRecord.OnRecordPositionUpdateListener
接口定义为:当AudioRecord收到一个由setNotificationMarkerPosition(int)设置的通知标志,或由setPositionNotificationPeriod(int)设置的周期更新记录的进度状态时,回调此接口。
常量
public static final intERROR
表示操作失败。
常量值: -1 (0xffffffff)
public static final intERROR_BAD_VALUE
表示使用了一个不合理的值导致的失败。
常量值: -2 (0xfffffffe)
public static final intERROR_INVALID_OPERATION
表示不恰当的方法导致的失败。
常量值: -3 (0xfffffffd)
public static final intRECORDSTATE_RECORDING
指示AudioRecord录制状态为“正在录制”。
常量值: 3 (0x00000003)
public static final intRECORDSTATE_STOPPED
指示AudioRecord录制状态为“不在录制”。
常量值: 1 (0x00000001)
public static final intSTATE_INITIALIZED
指示AudioRecord准备就绪。
常量值: 1 (0x00000001)
public static final intSTATE_UNINITIALIZED
指示AudioRecord状态没有初始化成功。
常量值: 0 (0x00000000)
public static final intSUCCESS
表示操作成功。
常量值: 0 (0x00000000)
构造函数
publicAudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
类构造函数。
参数
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
公共方法
public intgetAudioFormat()
返回设置的音频数据格式。请见ENCODING_PCM_16BIT和ENCODING_PCM_8BIT。
public intgetAudioSource()
返回音频录制源。
参见
MediaRecorder.AudioSource
public intgetChannelConfiguration()
返回设置的频道设置。请见
CHANNEL_IN_MONO
和CHANNEL_IN_STEREO
。
public intgetChannelCount()
返回设置的频道数目。
public static intgetMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)
返回成功创建AudioRecord对象所需要的最小缓冲区大小。注意:这个大小并不保证在负荷下的流畅录制,应根据预期的频率来选择更高的值,AudioRecord实例在推送新数据时使用此值。
参数
sampleRateInHz默认采样率,单位Hz。
channelConfig描述音频通道设置。
请见CHANNEL_IN_MONO
和CHANNEL_IN_STEREO
。
audioFormat音频数据保证支持此格式。参见ENCODING_PCM_16BIT
。
返回值
如果硬件不支持录制参数,或输入了一个无效的参数,则返回ERROR_BAD_VALUE,如果硬件查询到输出属性没有实现,或最小缓冲区用byte表示,则返回ERROR。
参见
更多信息请见有效的设置参数
public intgetNotificationMarkerPosition()
返回通知,标记框架中的位置。
public intgetPositionNotificationPeriod()
返回通知,更新框架中的时间位置。
public intgetRecordingState()
返回AudioRecord实例的录制状态。
参见
RECORDSTATE_STOPPED
RECORDSTATE_RECORDING
public intgetSampleRate()
返回设置的音频数据样本采样率,单位Hz。
public intgetState()
返回AudioRecord实例的状态。这点非常有用,用在AudioRecord实例创建成功后,检查初始化属性。它能肯定请求到了合适的硬件资源。
参见
STATE_INITIALIZED
STATE_UNINITIALIZED
public intread(short[] audioData, int offsetInShorts, int sizeInShorts)
从音频硬件录制缓冲区读取数据。
参数
audioData写入的音频录制数据。
offsetInShorts目标数组audioData的起始偏移量。
sizeInShorts请求读取的数据大小。
返回值
返回short型数据,表示读取到的数据,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE
。返回数值不会超过sizeInShorts。
public intread(byte[] audioData, int offsetInBytes, int sizeInBytes)
从音频硬件录制缓冲区读取数据。
参数
audioData写入的音频录制数据。
offsetInBytesaudioData的起始偏移值,单位byte。
sizeInBytes读取的最大字节数。
返回值
读入缓冲区的总byte数,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE
。读取的总byte数不会超过sizeInBytes。
public intread(ByteBuffer audioBuffer, int sizeInBytes)
从音频硬件录制缓冲区读取数据,直接复制到指定缓冲区。如果audioBuffer不是直接的缓冲区,此方法总是返回0。
参数
audioBuffer存储写入音频录制数据的缓冲区。
sizeInBytes请求的最大字节数。
返回值
读入缓冲区的总byte数,如果对象属性没有初始化,则返回ERROR_INVALID_OPERATION
,如果参数不能解析成有效的数据或索引,则返回ERROR_BAD_VALUE
。读取的总byte数不会超过sizeInBytes。
public voidrelease()
释放本地AudioRecord资源。对象不能经常使用此方法,而且在调用release()后,必须设置引用为null。
public intsetNotificationMarkerPosition(int markerInFrames)
如果设置了setRecordPositionUpdateListener(OnRecordPositionUpdateListener)
或setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler)
,则通知监听者设置位置标记。
参数
markerInFrames在框架中快速标记位置。
返回值
返回错误或成功代码,请见SUCCESS
、ERROR_BAD_VALUE
、ERROR_INVALID_OPERATION
。
public intsetPositionNotificationPeriod(int periodInFrames)
如果设置了setRecordPositionUpdateListener(OnRecordPositionUpdateListener)
或setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler)
,则通知监听者设置时间标记。
参数
markerInFrames在框架中快速更新时间标记。
返回值
返回错误或成功代码,请见SUCCESS
、ERROR_INVALID_OPERATION。
public voidsetRecordPositionUpdateListener(AudioRecord.OnRecordPositionUpdateListener listener, Handler handler)
当之前设置的标志已经成立,或者周期录制位置更新时,设置处理监听者。使用此方法来将Handler和别的线程联系起来,来接收AudioRecord事件,比创建AudioTrack实例更好一些。
参数
handler用来接收事件通知消息。
public voidsetRecordPositionUpdateListener(AudioRecord.OnRecordPositionUpdateListener listener)
当之前设置的标志已经成立,或者周期录制位置更新时,设置处理监听者。
public voidstartRecording()
AudioRecord实例开始进行录制。
异常
IllegalStateException
受保护方法
protected voidfinalize()
通知VM回收此对象内存。此方法只能用在运行的应用程序没有任何线程再使用此对象,来告诉垃圾回收器回收此对象。
此方法用于释放系统资源,由垃圾回收器清除此对象。默认没有实现,由VM来决定,但子类根据需要可重写finalize()。在执行期间,调用此方法可能会立即抛出未定义异常,但是可以忽略。
注意:VM保证对象可以一次或多次调用finalize(),但并不保证finalize()会马上执行。例如,对象B的finalize()可能延迟执行,等待对象A的finalize()延迟回收A的内存。为了安全起见,请看ReferenceQueue,它提供了更多地控制VM的垃圾回收。
补充
文章精选
Android提高第十篇之AudioRecord实现"助听器"
Android入门(9)AudioRecord和AudioTrack类的使用
Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序