AudioData

公開課程 AudioData

定義環形緩衝區和一些公用程式函式,用來準備輸入音訊樣本。

會保留鈴聲緩衝區來 輸入音訊資料用戶端可以透過「load」方法提供輸入音訊資料,並存取 透過 `getTensorBuffer` 方法匯總音訊樣本

請注意,此類別只能處理浮動 (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 包含一些常數,用於說明傳入的音訊樣本格式,也就是 管道和取樣率

公用方法

靜態 AudioData
create(AudioData.AudioDataFormat 格式, int sampleCounts)
建立具有環形緩衝區的 AudioRecord 執行個體,大小為 sampleCounts * format.getNumOfChannels()
靜態 AudioData
create(AudioFormat 格式、int sampleCounts)
建立具有環形緩衝區且大小為 sampleCountsAudioData 執行個體 * format.getChannelCount()
float[]
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 中的最新資料。
void
load(float[] src)
將輸入音訊樣本 src 儲存在環形緩衝區中。

繼承的方法

公用方法

公開 靜態 AudioData 建立 (AudioData.AudioDataFormat 格式, int sampleCounts)

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

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

公開 靜態 AudioData 建立 (AudioFormat 格式、 int sampleCounts)

建立具有環形緩衝區且大小為 sampleCountsAudioData 執行個體 * format.getChannelCount()

參數
format TFLite 模型所需的 AudioFormat。會定義 管道數量和取樣率
sampleCounts 提供給模型的樣本數

公開 float[] getBuffer ()

傳回保留 AudioFormat.ENCODING_PCM_FLOAT 中所有可用音訊樣本的浮點陣列,意即值在 [-1, 1] 的範圍內。

公開 攔截 getBufferLength ()

公開 AudioData.AudioDataFormat getFormat ()

公開 void 載入 (短 [] src)

將輸入音訊樣本 src 轉換為 ENCODING_PCM_FLOAT,然後儲存在環形中 緩衝區。

參數
src AudioFormat.ENCODING_PCM_16BIT 中輸入音訊樣本適用對象 多管道輸入,陣列就會交錯。

公開 void 載入 (float[] src、int offsetInFloat、int sizeInFloat)

將輸入音訊樣本 src 儲存在環形緩衝區中。

參數
src AudioFormat.ENCODING_PCM_FLOAT 中輸入音訊樣本適用對象 多管道輸入,陣列就會交錯。
offsetInFloat src 陣列中的起始位置
sizeInFloat 要複製的浮點值數量
擲回
IllegalArgumentException 表示不相容的音訊格式或輸入大小不正確

公開 void 載入 (short[] src、int offsetInShort、int sizeInShort)

將輸入音訊樣本 src 轉換為 ENCODING_PCM_FLOAT,然後儲存在環形中 緩衝區。

參數
src AudioFormat.ENCODING_PCM_16BIT 中輸入音訊樣本適用對象 多管道輸入,陣列就會交錯。
offsetInShort src 陣列中的起始位置
sizeInShort 要複製的短值數量
擲回
IllegalArgumentException 如果無法複製來源陣列

公開 攔截 載入 (錄音)

以非封鎖的方式載入 AudioRecord 中的最新資料。僅限 支援 ENCODING_PCM_16BIT 和 ENCODING_PCM_FLOAT。

參數
record AudioRecord 的執行個體
傳回
  • 擷取的音訊值數量,大小為 channelCount * sampleCount。如果 錄音檔中沒有任何新資料,或是發生錯誤,這個方法會傳回 0。
擲回
IllegalArgumentException 表示不支援的音訊編碼格式
IllegalStateException 如果從 AudioRecord 讀取失敗

公開 void 載入 (浮點值 [] src)

將輸入音訊樣本 src 儲存在環形緩衝區中。

參數
src AudioFormat.ENCODING_PCM_FLOAT 中輸入音訊樣本適用對象 多管道輸入,陣列就會交錯。