TensorAudio

公用類別 TensorAudio

定義環形緩衝區和一些公用程式函式,用於準備輸入音訊範例。

並維護響鈴緩衝區,以保存輸入音訊資料。用戶端可以透過「load」方法提供輸入音訊資料,並透過「getTensorBuffer」方法存取匯總的音訊樣本。

請注意,此類別只能處理 Float (AudioFormat.ENCODING_PCM_16BIT) 或 Shorts (AudioFormat.ENCODING_PCM_FLOAT) 中的輸入音訊。本類別可在內部轉換並儲存所有音訊樣本,並以 PCM Float 編碼形式儲存。

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
create(TensorAudio.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,然後儲存在環形緩衝區。
int
load(AudioRecord 記錄)
以非阻塞的方式從 AudioRecord 載入最新資料。
void
load(float[] src)
將輸入音訊樣本 src 儲存在環形緩衝區中。

繼承的方法

公用方法

公開 靜態 TensorAudio create (AudioFormat 格式、int sampleCounts)

建立具有環形緩衝區的 TensorAudio 執行個體,大小為 sampleCounts * format.getChannelCount()

參數
format TFLite 模型所需的 AudioFormat。並定義聲道數和取樣率。
sampleCounts 要提供給模型的樣本數

公開 靜態 TensorAudio create (TensorAudio.TensorAudioFormat 格式、int sampleCounts)

建立具有環形緩衝區的 AudioRecord 執行個體,其大小為 sampleCounts * format.getChannels()

參數
format 載入此類別的音訊資料預期 TensorAudio.TensorAudioFormat
sampleCounts 要提供給模型的樣本數

public TensorAudio.TensorAudioFormat getFormat ()

公開 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 中的輸入音訊樣本。多管道輸入的陣列會交錯。