AudioData

公用類別 AudioData

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

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

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

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 納入幾個常數,說明傳入的音訊樣本格式,也就是聲道數和取樣率。

公用方法

static AudioData
create(AudioData.AudioDataFormat 格式、int sampleCounts)
建立具有環形緩衝區的 AudioRecord 執行個體,其大小為 sampleCounts * format.getNumOfChannels()
static AudioData
create(AudioFormat 格式、int sampleCounts)
建立具有環形緩衝區的 AudioData 執行個體,大小為 sampleCounts * format.getChannelCount()
浮點值 []
getBuffer()
傳回浮點陣列,容納 AudioFormat.ENCODING_PCM_FLOAT 中的所有可用音訊樣本,即
int
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,然後儲存在環形緩衝區。
int
load(AudioRecord 記錄)
以非阻塞的方式從 AudioRecord 載入最新資料。
void
load(float[] src)
將輸入音訊樣本 src 儲存在環形緩衝區中。

繼承的方法

公用方法

公開靜態資料 AudioData create (AudioData.AudioDataFormat 格式、int sampleCounts)

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

參數
format 載入此類別的音訊資料預期 AudioData.AudioDataFormat
sampleCounts 樣本數。

公用 靜態 AudioData create (AudioFormat 格式、int sampleCounts)

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

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