- Implementación open source en Rust de un sistema de reconocimiento e identificación de audio de alta velocidad inspirado en Shazam
- Diseñado con enfoque en velocidad, eficiencia y simplicidad, y permite indexar y buscar archivos de audio mediante una CLI
Características principales y ventajas
- Alta velocidad de indexación y búsqueda: puede procesar rápidamente cientos de archivos de audio
- Comandos CLI simples: ofrece un uso intuitivo mediante los comandos
index y search
- Implementación de alto rendimiento basada en Rust: usa eficientemente los recursos del sistema
- Adopta un método de huella de audio similar al de Shazam
Cómo funciona internamente
Preprocesamiento (Preprocessing)
- Convierte estéreo a mono (promedio de los canales izquierdo/derecho)
- Reduce la frecuencia de muestreo para disminuir la carga de cálculo: 44.1kHz → 11.025kHz
- Antes del downsampling, aplica un filtro IIR pasa-bajas para eliminar frecuencias por encima de la frecuencia de Nyquist
Conversión a espectrograma
- Usa Short-Time Fourier Transform (STFT)
- Ventana Hamming de 1024 muestras
- 50% de solapamiento
- Convierte al dominio tiempo-frecuencia para extraer picos
- Divide cada ventana temporal en bandas de frecuencia y conserva solo la amplitud más alta en cada banda
- Elimina las amplitudes por debajo del promedio para mantener solo los picos característicos
Método de almacenamiento de datos de huella
- Almacena los picos en forma de hashes
- Toma un pico anchor como referencia y guarda la posición relativa respecto de los picos cercanos como tuplas
- Se compone en la forma (anchor freq, peak freq, delta time)
- Puede convertirse a enteros de 32 o 64 bits
Algoritmo de búsqueda y ordenamiento
- Genera una huella a partir de la muestra de entrada
- Consulta las huellas candidatas en la base de datos y las ordena cronológicamente
- Analiza la continuidad temporal con base en la Longest Increasing Subsequence (LIS)
- Usa una ventana deslizante para encontrar el tramo con mayor densidad de picos coincidentes
- Calcula la puntuación de coincidencia y ordena los resultados de mayor a menor puntaje
Aún no hay comentarios.