AudioRecord是Android系统中一个用于录制音频的类,它可以从audio soruce(例如麦克风)采集音频数据,并且以PCM格式进行编码,同时将数据存储到buffer中。AudioRecord类的功能也非常强大,提供了丰富的属性和方法,可以满足多种录音需求。其中包括:
设置音频参数:AudioRecord可以设置音频源、音频采样率、通道数、音频格式等参数。
读取音频数据:AudioRecord可以通过read()方法读取音频数据,读取的数据格式为PCM格式。
控制音频录制:AudioRecord可以通过startRecording()、stop等方法来控制音频录制状态。
监听音频录制事件:AudioRecord可以设置监听器,获取音频录制状态和错误事件等,例如setRecordPositionUpdateListener()可以监听录制进度的的变化。
AudioTrack由JAVA代码、JNI代码、C++代码组成:
AudioRecord代码位于:
frameworks/base/media/java/android/media/AudioRecord.java
frameworks/base/media/java/android/media/AudioRecordingMonitor.java
frameworks/base/media/java/android/media/AudioRecordingMonitorClient.java
frameworks/base/core/jni/android_media_AudioRecord.cpp
frameworks/base/core/jni/android_media_AudioRecord.h
frameworks/av/media/libaudioclient/AudioRecord.cpp
frameworks/av/media/libaudioclient/AudioRecord.h
AudioRecord的定义:
public class AudioRecord implements AudioRouting, MicrophoneDirection, AudioRecordingMonitor, AudioRecordingMonitorClient {}
class AudioRecord : public AudioSystem::AudioDeviceCallback {}
public interface AudioRecordingMonitor {}
public interface AudioRecordingMonitorClient {}
二、AudioRecordAPI
AudioRecord分为JAVA API和Native API,下面分别介绍它们。
1、AudioRecord Java API
AudioRecord Java API:
-
AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes) :构造函数
-
static int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat):计算最小缓冲区大小,参数同构造函数中三个参数。
-
Builder setAudioSource(int audioSource):设置音频采集来源
-
void startRecording():开始录制
-
int read(byte[] audioData, int offsetInBytes, int sizeInBytes) :从硬件读取音频数据保存到缓冲区
-
int read(ByteBuffer audioBuffer, int sizeInBytes) :从硬件读取音频数据保存到缓冲区
-
int read(short[] audioData, int offsetInShorts, int sizeInShorts) :从硬件读取音频数据保存到缓冲区
-
void stop():停止录制
-
void release():释放资源
-
int getState():获取状态
-
int getRecordingState():获取录制状态
2、AudioRecord Native API
AudioRecord Native API:
-
AudioRecord(audio_source_t inputSource, uint32_t sampleRate, audio_format_t format, audio_channel_mask_t channelMask, const String16& opPackageName):构造函数
-
status_t start(AudioSystem::sync_event_t event, audio_session_t triggerSession):开始录制
-
void stop():停止录制
-
ssize_t read(void* buffer, size_t userSize, bool blocking):读取数据
-
status_t setInputDevice(audio_port_handle_t deviceId) :设置输入设备
-
void releaseBuffer(const Buffer* audioBuffer):释放缓冲区
三、AudioRecord 流程分析
1、CreateRecord流程分析
Android13 CreateRecord流程分析-CSDN博客
2、AudioRecord startRecording流程分析
Android13 AudioRecord startRecording流程分析-CSDN博客
3、AudioRecord read流程分析
待更新