TensorAudio

公共类 TensorAudio

定义环形缓冲区和一些实用函数,用于准备输入音频样本。

它维护一个环形缓冲区来存放输入音频数据。客户端可以通过“load”方法馈送输入音频数据,并通过“getTensorBuffer”方法访问汇总的音频样本。

请注意,此类只能处理 Float(在 AudioFormat.ENCODING_PCM_16BIT 中)或 Short(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 实例,其大小为 sampleCounts * format.getChannelCount()
静态 TensorAudio
createTensorAudio.TensorAudioFormat 格式, int sampleCounts)
创建一个具有环形缓冲区的 AudioRecord 实例,其大小为 sampleCounts * format.getChannels()
TensorAudio.TensorAudioFormat
TensorBuffer
getTensorBuffer()
返回一个浮点数 TensorBuffer,其中包含 AudioFormat.ENCODING_PCM_FLOAT 中的所有可用音频样本,即
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 TensorAudio create (AudioFormat format, int sampleCounts)

创建一个具有环形缓冲区的 TensorAudio 实例,其大小为 sampleCounts * format.getChannelCount()

参数
格式 TFLite 模型所需的 AudioFormat。它定义了声道数量和采样率。
sampleCounts 要馈送给模型的样本数

public static TensorAudio create (TensorAudio.TensorAudioFormat 格式, int sampleCounts)

创建一个具有环形缓冲区的 AudioRecord 实例,其大小为 sampleCounts * format.getChannels()

参数
格式 预期是 TensorAudio.TensorAudioFormat 的音频数据加载到此类中。
sampleCounts 要馈送给模型的样本数

public TensorAudio.TensorAudioFormat getFormat ()

public TensorBuffer getTensorBuffer ()

返回一个浮点数 TensorBuffer,其中包含 AudioFormat.ENCODING_PCM_FLOAT 中的所有可用音频样本,即值在 [-1, 1] 的范围内。

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 中的输入音频样本。对于多声道输入,该数组是交错的。