AudioData

公共类 AudioData

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

它维护一个环形缓冲区来存放输入音频数据。客户端可以通过“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
createAudioData.AudioDataFormat 格式,int sampleCounts)
创建一个具有环形缓冲区的 AudioRecord 实例,其大小为 sampleCounts * format.getNumOfChannels()
静态 AudioData
create(AudioFormat 格式, int sampleCounts)
创建一个具有环形缓冲区的 AudioData 实例,其大小为 sampleCounts * format.getChannelCount()
浮点数 []
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 AudioData.AudioDataFormat getFormat ()

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