定义环形缓冲区和一些用于准备输入音频样本的实用函数。
它会保留一个环形缓冲区来存放 输入音频数据。客户端可以通过 `load` 方法馈送输入音频数据,并访问 通过 `getTensorBuffer` 方法汇总音频样本。
请注意,此类只能处理浮点型(在 AudioFormat.ENCODING_PCM_16BIT 中)或 Shorts 短视频(在 AudioFormat.ENCODING_PCM_FLOAT 中)形式的输入音频。在内部,它会转换并存储所有音频
PCM 浮点编码中的样本。
Kotlin 中的典型用法
val tensor = TensorAudio.create(format, modelInputLength) tensor.load(newData) interpreter.run(tensor.getTensorBuffer(), outputBuffer);
AudioRecord 的其他用法示例
val tensor = TensorAudio.create(format, modelInputLength)
Timer().scheduleAtFixedRate(delay, period) {
tensor.load(audioRecord)
interpreter.run(tensor.getTensorBuffer(), outputBuffer)
}
嵌套类
| 类别 | TensorAudio.TensorAudioFormat | 封装一些描述传入音频样本格式的常量,即 频道和采样率。 | |
公共方法
| 静态 TensorAudio |
create(AudioFormat 格式,int sampleCounts)
|
| 静态 TensorAudio |
create(TensorAudio.TensorAudioFormat 格式,intsampleCounts)
|
| TensorAudio.TensorAudioFormat | |
| TensorBuffer |
getTensorBuffer()
返回一个浮点
TensorBuffer,其中包含 AudioFormat.ENCODING_PCM_FLOAT 中所有可用的音频样本,即 |
| 无效 | |
| 无效 |
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> 公开 静态 TensorAudio 创建 (AudioFormat 格式,int sampleCounts)
创建一个具有大小为 sampleCounts 的环形缓冲区的 TensorAudio 实例 *
format.getChannelCount()。
参数
| 格式 | TFLite 模型所需的 AudioFormat。它定义了
声道数量和采样率 |
|---|---|
| sampleCounts | 要馈送到模型的样本数量。 |
<ph type="x-smartling-placeholder"></ph> 公开 静态 TensorAudio 创建 (TensorAudio.TensorAudioFormat 格式, int sampleCounts)
创建一个具有大小为 sampleCounts * format.getChannels() 的环形缓冲区的 AudioRecord 实例。
参数
| 格式 | 加载到此类中的预期 TensorAudio.TensorAudioFormat 音频数据。 |
|---|---|
| sampleCounts | 要馈送到模型的样本数量。 |
<ph type="x-smartling-placeholder"></ph> 公开 TensorBuffer getTensorBuffer ()
返回一个浮点 TensorBuffer,其中包含 AudioFormat.ENCODING_PCM_FLOAT 中所有可用的音频样本,即值在 [-1, 1] 的范围内。
<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 中的输入音频样本。对于
多通道输入,则数组是交错的。
|
|---|