10 pontos por xguru 2025-04-04 | Ainda não há comentários. | Compartilhar no WhatsApp
  • 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.

Ainda não há comentários.