- Shazam에서 영감을 받은 고속 오디오 인식 및 식별 시스템의 Rust 구현 오픈소스
- 속도, 효율성, 단순성을 중점으로 설계되어 있으며 CLI를 통해 오디오 파일의 인덱싱 및 검색을 수행 가능
주요 특징 및 장점
-
고속 인덱싱 및 검색 속도: 수백 개 오디오 파일에 대한 빠른 처리 가능
-
간단한 CLI 명령어:
index
와 search
명령어를 통해 직관적인 사용 방식 제공
-
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) 기반의 시간적 연속성 분석
- 슬라이딩 윈도우를 이용하여 가장 밀집된 매칭 피크 구간 탐색
- 매칭 점수를 계산하고 높은 점수 순으로 결과 정렬