定义环形缓冲区和一些实用函数,用于准备输入音频样本。
它维护一个环形缓冲区来存放输入音频数据。客户端可以通过“load”方法馈送输入音频数据,并通过“getTensorBuffer”方法访问汇总的音频样本。
请注意,此类只能处理 Float(在 AudioFormat.ENCODING_PCM_16BIT
中)或 Short(AudioFormat.ENCODING_PCM_FLOAT
中)的输入音频。它会在内部转换并存储所有音频样本(采用 PCM 浮点编码)。
Kotlin 的典型用法
val audioData = AudioData.create(format, modelInputLength) audioData.load(newData)
AudioRecord
的另一个用法示例
val audioData = AudioData.create(format, modelInputLength) Timer().scheduleAtFixedRate(delay, period) { audioData.load(audioRecord) }
嵌套类
类别 | AudioData.AudioDataFormat | 对几个用于描述传入音频样本格式(即声道数量和采样率)的常量进行封装。 |
公共方法
静态 AudioData |
create(AudioData.AudioDataFormat 格式,int sampleCounts)
|
静态 AudioData | |
浮点数 [] |
getBuffer()
返回一个浮点数组,其中包含
AudioFormat.ENCODING_PCM_FLOAT 中所有可用的音频样本,即 |
整型 | |
AudioData.AudioDataFormat | |
void |
load(short[] src)
将输入音频样本
src 转换为 ENCODING_PCM_FLOAT,然后将其存储在环形缓冲区中。 |
void |
load(float[] src, int offsetInFloat, int sizeInFloat)
将输入音频样本
src 存储在环形缓冲区中。 |
void |
load(short[] src, int offsetInShort, int sizeInShort)
将输入音频样本
src 转换为 ENCODING_PCM_FLOAT,然后将其存储在环形缓冲区中。 |
整型 |
load(AudioRecord 记录)
以非阻塞方式从
AudioRecord 加载最新数据。 |
void |
load(float[] src)
将输入音频样本
src 存储在环形缓冲区中。 |
继承的方法
公共方法
public static AudioData create (AudioData.AudioDataFormat 格式, int sampleCounts)
创建一个具有环形缓冲区的 AudioRecord
实例,其大小为 sampleCounts
* format.getNumOfChannels()
。
参数
格式 | 预期是 AudioData.AudioDataFormat 的音频数据加载到此类中。 |
---|---|
sampleCounts | 样本数量。 |
public static AudioData create (AudioFormat format, int sampleCounts)
创建一个具有环形缓冲区的 AudioData
实例,其大小为 sampleCounts
* format.getChannelCount()
。
参数
格式 | TFLite 模型所需的 AudioFormat 。它定义了声道数量和采样率。 |
---|---|
sampleCounts | 要馈送给模型的样本数 |
public float[] getBuffer ()
返回一个浮点数数组,其中包含 AudioFormat.ENCODING_PCM_FLOAT
中的所有可用音频样本,即值在 [-1, 1] 的范围内。
public int getBufferLength ()
public void load (short[] src)
将输入音频样本 src
转换为 ENCODING_PCM_FLOAT,然后将其存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_16BIT 中的输入音频样本。对于多声道输入,该数组是交错的。
|
---|
public void load (float[] src, int offsetInFloat, int sizeInFloat)
将输入音频样本 src
存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_FLOAT 中的输入音频样本。对于多声道输入,数组为交错。 |
---|---|
offsetInFloat | src 数组中的起始位置 |
sizeInFloat | 要复制的浮点值的数量 |
抛出
IllegalArgumentException | 不兼容的音频格式或输入大小不正确的问题 |
---|
public void load (short[] src, int offsetInShort, int sizeInShort)
将输入音频样本 src
转换为 ENCODING_PCM_FLOAT,然后将其存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_16BIT 中的输入音频样本。对于多声道输入,数组为交错。 |
---|---|
offsetInShort | src 数组中的起始位置 |
sizeInShort | 要复制的短值数量 |
抛出
IllegalArgumentException | 如果无法复制源数组, |
---|
public int load (AudioRecord 录制)
以非阻塞方式从 AudioRecord
加载最新数据。仅支持 ENCODING_PCM_16BIT 和 ENCODING_PCM_FLOAT。
参数
录制 | AudioRecord 的实例 |
---|
返回
- 大小为
channelCount * sampleCount
的捕获音频值的数量。如果 AudioRecord 中没有新数据或出现错误,此方法将返回 0。
抛出
IllegalArgumentException | 对于不受支持的音频编码格式 |
---|---|
IllegalStateException | 如果从 AudioRecord 读取数据失败 |
public void load (float[] src)
将输入音频样本 src
存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_FLOAT 中的输入音频样本。对于多声道输入,该数组是交错的。
|
---|