定義環形緩衝區和一些公用程式函式,用於準備輸入音訊範例。
並維護響鈴緩衝區,以保存輸入音訊資料。用戶端可以透過「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 |
create(TensorAudio.TensorAudioFormat 格式、int sampleCounts)
|
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 | 要提供給模型的樣本數 |
公開 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 中的輸入音訊樣本。多管道輸入的陣列會交錯。 |
---|