Define um buffer de anel e algumas funções utilitárias para preparar as amostras de áudio de entrada.
Ele mantém um Ring Buffer para armazenar os dados de áudio de entrada. Os clientes podem alimentar os dados de áudio de entrada com métodos "load" e acessar as amostras de áudio agregadas pelo método "getTensorBuffer".
Observe que essa classe só pode processar áudio de entrada em Float (em AudioFormat.ENCODING_PCM_16BIT
) ou Short (em AudioFormat.ENCODING_PCM_FLOAT
). Internamente, ela converte e armazena todas as amostras de áudio na codificação PCM Float.
Uso típico no Kotlin
val tensor = TensorAudio.create(format, modelInputLength) tensor.load(newData) interpreter.run(tensor.getTensorBuffer(), outputBuffer);
Outro exemplo de uso com AudioRecord
val tensor = TensorAudio.create(format, modelInputLength) Timer().scheduleAtFixedRate(delay, period) { tensor.load(audioRecord) interpreter.run(tensor.getTensorBuffer(), outputBuffer) }
Classes aninhadas
classe | TensorAudio.TensorAudioFormat | Une algumas constantes que descrevem o formato das amostras de áudio recebidas, ou seja, o número de canais e a taxa de amostragem. |
Métodos públicos
estático TensorAudio |
create(formato do AudioFormat, int sampleCounts)
Cria uma instância
TensorAudio com um buffer de anel com tamanho de sampleCounts *
format.getChannelCount() . |
estático TensorAudio |
create(formato TensorAudio.TensorAudioFormat, int sampleCounts)
Cria uma instância
AudioRecord com um buffer de anel com tamanho sampleCounts * format.getChannels() . |
TensorAudio.TensorAudioFormat | |
TensorBuffer |
getTensorBuffer()
Retorna um
TensorBuffer flutuante que contém todas as amostras de áudio disponíveis em AudioFormat.ENCODING_PCM_FLOAT , ou seja, |
void |
load(curto[] src)
Converte as amostras de áudio de entrada
src em ENCODING_PCM_FLOAT e as armazena no buffer de
anel. |
void |
load(float[] src, int offsetInFloat, int sizeInFloat)
Armazena as amostras de áudio de entrada
src no buffer de anel. |
void |
load(short[] src, int offsetInShort, int sizeInShort)
Converte as amostras de áudio de entrada
src em ENCODING_PCM_FLOAT e as armazena no buffer de
anel. |
int |
load(gravação de AudioRecord)
Carrega os dados mais recentes da
AudioRecord sem bloqueio. |
void |
load(float[] src)
Armazena as amostras de áudio de entrada
src no buffer de anel. |
Métodos herdados
Métodos públicos
estático público TensorAudio criar (formato AudioFormat, int sampleCounts)
Cria uma instância TensorAudio
com um buffer de anel com tamanho de sampleCounts
*
format.getChannelCount()
.
Parâmetros
formato | o AudioFormat exigido pelo modelo do TFLite. Ele define o número de canais e a taxa de amostragem. |
---|---|
sampleCounts | o número de amostras a serem alimentadas no modelo |
público estático TensorAudio criar (formato TensorAudio.TensorAudioFormat, int sampleCounts)
Cria uma instância AudioRecord
com um buffer de anel com tamanho sampleCounts
* format.getChannels()
.
Parâmetros
formato | a TensorAudio.TensorAudioFormat esperada de dados de áudio carregados nessa classe. |
---|---|
sampleCounts | o número de amostras a serem alimentadas no modelo |
público TensorBuffer getTensorBuffer ()
Retorna um valor flutuante TensorBuffer
que contém todas as amostras de áudio disponíveis em AudioFormat.ENCODING_PCM_FLOAT
, ou seja, os valores estão no intervalo de [-1, 1].
public void load (short[] src)
Converte as amostras de áudio de entrada src
em ENCODING_PCM_FLOAT e as armazena no buffer de
anel.
Parâmetros
src | amostras de áudio de entrada em AudioFormat.ENCODING_PCM_16BIT . Para entrada multicanal, a matriz é intercalada.
|
---|
public void load (float[] src, int offsetInFloat, int sizeInFloat)
Armazena as amostras de áudio de entrada src
no buffer de anel.
Parâmetros
src | amostras de áudio de entrada em AudioFormat.ENCODING_PCM_FLOAT . Para entrada multicanal, a matriz é intercalada. |
---|---|
offsetInFloat | posição inicial na matriz src |
sizeInFloat | o número de valores flutuantes a serem copiados |
Gera
IllegalArgumentException | devido a formato de áudio incompatível ou tamanho de entrada incorreto |
---|
public void load (short[] src, int offsetInShort, int sizeInShort)
Converte as amostras de áudio de entrada src
em ENCODING_PCM_FLOAT e as armazena no buffer de
anel.
Parâmetros
src | amostras de áudio de entrada em AudioFormat.ENCODING_PCM_16BIT . Para entrada multicanal, a matriz é intercalada. |
---|---|
offsetInShort | posição inicial na matriz src |
sizeInShort | o número de valores curtos a serem copiados |
Gera
IllegalArgumentException | se a matriz de origem não puder ser copiada |
---|
public int load (registro AudioRecord)
Carrega os dados mais recentes da AudioRecord
sem bloqueio. Compatível apenas com ENCODING_PCM_16BIT e ENCODING_PCM_FLOAT.
Parâmetros
registro | uma instância de AudioRecord |
---|
Retorna
- número de valores de áudio capturados com tamanho
channelCount * sampleCount
. Se não houver novos dados no AudioRecord ou se ocorrer um erro, esse método retornará 0.
Gera
IllegalArgumentException | para formato de codificação de áudio incompatível |
---|---|
IllegalStateException | se a leitura do AudioRecord falhar |
public void load (float[] src)
Armazena as amostras de áudio de entrada src
no buffer de anel.
Parâmetros
src | amostras de áudio de entrada em AudioFormat.ENCODING_PCM_FLOAT . Para entrada multicanal, a matriz é intercalada.
|
---|