- Implementação open source em Rust de um sistema de reconhecimento e identificação de áudio em alta velocidade inspirado no Shazam
- Projetado com foco em velocidade, eficiência e simplicidade, permitindo indexação e busca de arquivos de áudio via CLI
Principais recursos e vantagens
- Alta velocidade de indexação e busca: processamento rápido de centenas de arquivos de áudio
- Comandos CLI simples: uso intuitivo por meio dos comandos
index e search
- Implementação de alto desempenho baseada em Rust: uso eficiente dos recursos do sistema
- Adoção de um método de impressão digital de áudio semelhante ao do Shazam
Como funciona internamente
Pré-processamento (Preprocessing)
- Conversão de estéreo para mono (média dos canais esquerdo/direito)
- Downsampling para reduzir a carga computacional: 44.1kHz → 11.025kHz
- Antes do downsampling, aplicação de um filtro passa-baixa IIR para remover frequências acima da frequência de Nyquist
Conversão para espectrograma
- Uso de Short-Time Fourier Transform (STFT)
- Janela Hamming de 1024 amostras
- 50% de sobreposição
- Conversão para o domínio tempo-frequência para extrair picos
- Cada janela temporal é dividida em bandas de frequência, preservando apenas a maior amplitude em cada banda
- Amplitudes abaixo da média são removidas para manter apenas os picos característicos
Forma de armazenamento dos dados de impressão digital
- Os picos são armazenados na forma de hashes
- Com base em um pico âncora, as posições relativas em relação aos picos ao redor são armazenadas como tuplas
- Estrutura no formato (anchor freq, peak freq, delta time)
- Pode ser convertida em inteiros de 32 bits ou 64 bits
Algoritmo de busca e ordenação
- Geração de impressão digital a partir da amostra de entrada
- Consulta de impressões digitais candidatas no banco de dados e ordenação em ordem temporal
- Análise de continuidade temporal baseada em Longest Increasing Subsequence
- Uso de sliding window para localizar a faixa de picos correspondentes mais densa
- Cálculo da pontuação de correspondência e ordenação dos resultados por maior pontuação
Ainda não há comentários.