• Shazam에서 영감을 받은 고속 오디오 인식 및 식별 시스템의 Rust 구현 오픈소스
  • 속도, 효율성, 단순성을 중점으로 설계되어 있으며 CLI를 통해 오디오 파일의 인덱싱 및 검색을 수행 가능

주요 특징 및 장점

  • 고속 인덱싱 및 검색 속도: 수백 개 오디오 파일에 대한 빠른 처리 가능
  • 간단한 CLI 명령어: indexsearch 명령어를 통해 직관적인 사용 방식 제공
  • Rust 기반 고성능 구현: 시스템 자원을 효율적으로 사용
  • Shazam과 유사한 오디오 지문 방식 채택

내부 동작 방식

사전 처리 (Preprocessing)

  • 스테레오를 모노로 변환 (좌/우 채널 평균)
  • 계산량 감소를 위해 다운샘플링: 44.1kHz → 11.025kHz
  • 다운샘플링 전에는 Nyquist 주파수 이상을 제거하기 위한 IIR 로우패스 필터 적용

스펙트로그램 변환

  • Short-Time Fourier Transform(STFT) 사용
    • 1024 샘플의 Hamming 창
    • 50% 오버랩
  • 시간-주파수 도메인으로 변환하여 피크를 추출
    • 각 시간 창을 주파수 대역으로 나누고, 각 대역에서 가장 높은 진폭만 보존
    • 평균 이하의 진폭은 제거하여 특성 피크만 유지

지문 데이터 저장 방식

  • 피크들을 해시로 구성하여 저장
    • 하나의 anchor 피크를 기준으로 주변 피크들과의 상대 위치를 튜플로 저장
    • (anchor freq, peak freq, delta time) 형태로 구성
    • 32비트 또는 64비트 정수로 변환 가능

검색 및 정렬 알고리듬

  • 입력 샘플로부터 지문 생성
  • 데이터베이스에서 후보 지문 조회 후 시간 순서대로 정렬
  • 최장 증가 수열(Longest Increasing Subsequence) 기반의 시간적 연속성 분석
  • 슬라이딩 윈도우를 이용하여 가장 밀집된 매칭 피크 구간 탐색
  • 매칭 점수를 계산하고 높은 점수 순으로 결과 정렬