定义环形缓冲区和一些用于准备输入音频样本的实用函数。
它会保留一个环形缓冲区来存放 输入音频数据。客户端可以通过 `load` 方法馈送输入音频数据,并访问 通过 `getTensorBuffer` 方法汇总音频样本。
请注意,此类只能处理浮点型(在 AudioFormat.ENCODING_PCM_16BIT
中)或 Shorts 短视频(在 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 | |
float[] |
getBuffer()
返回一个浮点数组,其中包含
AudioFormat.ENCODING_PCM_FLOAT 中所有可用的音频样本,即 |
整数 | |
AudioData.AudioDataFormat | |
无效 | |
无效 |
load(float[] src, int offsetInFloat, int sizeInFloat)
将输入音频样本
src 存储在环形缓冲区中。 |
无效 |
load(short[] src, int offsetInShort, int sizeInShort) 加载
将输入音频样本
src 转换为 ENCODING_PCM_FLOAT,然后将其存储在环中
缓冲区。 |
整数 |
load(音频录制录制)
以非阻塞方式从
AudioRecord 加载最新数据。 |
无效 |
load(float[] src)
将输入音频样本
src 存储在环形缓冲区中。 |
继承的方法
公共方法
<ph type="x-smartling-placeholder"></ph> 公开 静态 AudioData 创建 (AudioData.AudioDataFormat 格式, int sampleCounts)
创建一个具有大小为 sampleCounts
* format.getNumOfChannels()
的环形缓冲区的 AudioRecord
实例。
参数
格式 | 加载到此类中的预期 AudioData.AudioDataFormat 音频数据。 |
---|---|
sampleCounts | 样本数量。 |
<ph type="x-smartling-placeholder"></ph> 公开 静态 AudioData 创建 (AudioFormat 格式,int sampleCounts)
创建一个具有大小为 sampleCounts
的环形缓冲区的 AudioData
实例 *
format.getChannelCount()
。
参数
格式 | TFLite 模型所需的 AudioFormat 。它定义了
声道数量和采样率 |
---|---|
sampleCounts | 要馈送到模型的样本数量。 |
<ph type="x-smartling-placeholder"></ph> 公开 float[] getBuffer ()
返回一个浮点数组,其中包含 AudioFormat.ENCODING_PCM_FLOAT
中所有可用的音频样本,即值在 [-1, 1] 的范围内。
<ph type="x-smartling-placeholder"></ph> 公开 整数 getBufferLength ()
<ph type="x-smartling-placeholder"></ph> 公开 无效 加载 (短 [] src)
将输入音频样本 src
转换为 ENCODING_PCM_FLOAT,然后将其存储在环中
缓冲区。
参数
src | AudioFormat.ENCODING_PCM_16BIT 中的输入音频样本。对于
多通道输入,则数组是交错的。
|
---|
<ph type="x-smartling-placeholder"></ph> 公开 无效 加载 (float[] src, int offsetInFloat, int sizeInFloat)
将输入音频样本 src
存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_FLOAT 中的输入音频样本。对于
多通道输入,则数组是交错的。 |
---|---|
offsetInFloat | src 数组中的起始位置 |
sizeInFloat | 要复制的浮点值的数量 |
抛出
IllegalArgumentException | 因为音频格式不兼容或输入大小不正确 |
---|
<ph type="x-smartling-placeholder"></ph> 公开 无效 加载 (short[] src, int offsetInShort, int sizeInShort)
将输入音频样本 src
转换为 ENCODING_PCM_FLOAT,然后将其存储在环中
缓冲区。
参数
src | AudioFormat.ENCODING_PCM_16BIT 中的输入音频样本。对于
多通道输入,则数组是交错的。 |
---|---|
offsetInShort | src 数组中的起始位置 |
sizeInShort | 要复制的短值的数量 |
抛出
IllegalArgumentException | 如果无法复制源数组,则会发生此错误 |
---|
<ph type="x-smartling-placeholder"></ph> 公开 整数 加载 (AudioRecord 记录)
以非阻塞方式从 AudioRecord
加载最新数据。仅限
支持 ENCODING_PCM_16BIT 和 ENCODING_PCM_FLOAT。
参数
记录 | AudioRecord 的实例 |
---|
返回
- 捕获的音频值数量(大小为
channelCount * sampleCount
)。如果 AudioRecord 中没有新数据或发生错误,则此方法会返回 0。
抛出
IllegalArgumentException | 针对不受支持的音频编码格式 |
---|---|
IllegalStateException | 如果从 AudioRecord 读取失败 |
<ph type="x-smartling-placeholder"></ph> 公开 无效 加载 (float[] src)
将输入音频样本 src
存储在环形缓冲区中。
参数
src | AudioFormat.ENCODING_PCM_FLOAT 中的输入音频样本。对于
多通道输入,则数组是交错的。
|
---|