Define un búfer de anillo y algunas funciones de utilidad para preparar las muestras de audio de entrada.
Mantiene un Ring Buffer para conservar los datos de audio de entrada. Los clientes podían ingresar datos de audio de entrada a través de métodos `load` y acceder a las muestras de audio agregadas a través del método `getTensorBuffer`.
Ten en cuenta que esta clase solo puede manejar audio de entrada en float (en AudioFormat.ENCODING_PCM_16BIT
) o Short (en AudioFormat.ENCODING_PCM_FLOAT
). Convierte y almacena internamente todas las muestras de audio en la codificación PCM Float.
Uso típico en Kotlin
val tensor = TensorAudio.create(format, modelInputLength) tensor.load(newData) interpreter.run(tensor.getTensorBuffer(), outputBuffer);
Otro ejemplo de uso con AudioRecord
val tensor = TensorAudio.create(format, modelInputLength) Timer().scheduleAtFixedRate(delay, period) { tensor.load(audioRecord) interpreter.run(tensor.getTensorBuffer(), outputBuffer) }
Categorías anidadas
clase | TensorAudio.TensorAudioFormat | Incluye algunas constantes que describen el formato de las muestras de audio entrantes, es decir, la cantidad de canales y la tasa de muestreo. |
Métodos públicos
TensorAudio estático |
create(formato AudioFormat, int sampleCounts)
Crea una instancia de
TensorAudio con un búfer de anillo cuyo tamaño es sampleCounts * format.getChannelCount() . |
TensorAudio estático |
create(formato TensorAudio.TensorAudioFormat, el formato int sampleCounts)
Crea una instancia
AudioRecord con un búfer de anillo cuyo tamaño es sampleCounts * format.getChannels() . |
TensorAudio.TensorAudioFormat | |
TensorBuffer |
getTensorBuffer()
Muestra un
TensorBuffer flotante que contiene todas las muestras de audio disponibles en AudioFormat.ENCODING_PCM_FLOAT , es decir. |
void |
load(short[] src)
Convierte las muestras de audio de entrada
src en ENCODING_PCM_FLOAT y, luego, las almacena en el búfer de anillo. |
void |
load(float[] src, int offsetInFloat, int sizeInFloat)
Almacena las muestras de audio de entrada
src en el búfer de anillo. |
void |
load(short[] src, int offsetInShort, int sizeInShort)
Convierte las muestras de audio de entrada
src en ENCODING_PCM_FLOAT y, luego, las almacena en el búfer de anillo. |
int |
load(registro de AudioRecord)
Carga los datos más recientes de
AudioRecord sin bloqueos. |
void |
load(float[] src)
Almacena las muestras de audio de entrada
src en el búfer de anillo. |
Métodos heredados
Métodos públicos
estático público TensorAudio create (formato AudioFormat, int sampleCounts)
Crea una instancia de TensorAudio
con un búfer de anillo cuyo tamaño es sampleCounts
* format.getChannelCount()
.
Parámetros
formato | la AudioFormat que requiere el modelo de TFLite. Este define la cantidad de canales y la tasa de muestreo. |
---|---|
sampleCounts | el número de muestras que se ingresan al modelo |
estático público TensorAudio create (formato TensorAudio.TensorAudioFormat, un formato int sampleCounts)
Crea una instancia AudioRecord
con un búfer de anillo cuyo tamaño es sampleCounts
* format.getChannels()
.
Parámetros
formato | los TensorAudio.TensorAudioFormat esperados de datos de audio cargados en esta clase |
---|---|
sampleCounts | el número de muestras que se ingresan al modelo |
público TensorBuffer getTensorBuffer ()
Muestra un TensorBuffer
flotante que contiene todas las muestras de audio disponibles en AudioFormat.ENCODING_PCM_FLOAT
, es decir, los valores están en el rango de [-1, 1].
public void load (short[] src)
Convierte las muestras de audio de entrada src
en ENCODING_PCM_FLOAT y, luego, las almacena en el búfer de anillo.
Parámetros
src | muestras de audio de entrada en AudioFormat.ENCODING_PCM_16BIT . Para las entradas multicanal, el array está intercalado.
|
---|
public void load (float[] src, int offsetInFloat, int sizeInFloat)
Almacena las muestras de audio de entrada src
en el búfer de anillo.
Parámetros
src | muestras de audio de entrada en AudioFormat.ENCODING_PCM_FLOAT . Para las entradas multicanal, el array está intercalado. |
---|---|
offsetInFloat | posición inicial en el array src |
sizeInFloat | el número de valores flotantes que se copiarán |
Arroja
IllegalArgumentException | cuando el formato de audio no es compatible o el tamaño de entrada es incorrecto |
---|
public void load (short[] src, int offsetInShort, int sizeInShort)
Convierte las muestras de audio de entrada src
en ENCODING_PCM_FLOAT y, luego, las almacena en el búfer de anillo.
Parámetros
src | muestras de audio de entrada en AudioFormat.ENCODING_PCM_16BIT . Para las entradas multicanal, el array está intercalado. |
---|---|
offsetInShort | posición inicial en el array src |
sizeInShort | la cantidad de valores cortos que se copiarán |
Arroja
IllegalArgumentException | si el array fuente no se puede copiar |
---|
public int load (Registro de AudioRecord)
Carga los datos más recientes de AudioRecord
sin bloqueos. Solo
se admite ENCODING_PCM_16BIT y ENCODING_PCM_FLOAT.
Parámetros
grabar | una instancia de AudioRecord |
---|
Devuelve
- la cantidad de valores de audio capturados cuyo tamaño es
channelCount * sampleCount
. Si no había datos nuevos en AudioRecord o se produjo un error, este método mostrará 0.
Arroja
IllegalArgumentException | para un formato de codificación de audio no compatible |
---|---|
IllegalStateException | si falla la lectura de AudioRecord |
public void load (float[] src)
Almacena las muestras de audio de entrada src
en el búfer de anillo.
Parámetros
src | muestras de audio de entrada en AudioFormat.ENCODING_PCM_FLOAT . Para las entradas multicanal, el array está intercalado.
|
---|