- SeekTune은 Shazam의 노래 인식 알고리듬을 구현한 프로젝트로, Spotify와 YouTube API를 통합해 노래를 찾고 다운로드할 수 있게 함
- 실행에는 Golang, FFmpeg, NPM, YT-DLP가 필요하며, Docker Compose 또는 네이티브 환경에서 서버와 클라이언트를 구동할 수 있음
- Spotify 연동은 개발자 앱의 Client ID와 Client Secret을
server/.env에 설정하는 방식이며, 앱이 필요한 액세스 토큰을 자동으로 가져오고 캐시함 - 기본 데이터베이스는 SQLite이고, 환경 변수로
DB_TYPE=mongo를 지정하면 MongoDB를 사용할 수 있으며 사용자·비밀번호가 없으면mongodb://localhost:27017로 연결함 - CLI는 Spotify 링크 다운로드, 로컬 오디오 저장, 녹음 파일 매칭, 지문과 노래 삭제를 지원하며, YouTube ID가 없는 저장 항목은 프런트엔드에서 매칭 결과로 표시되지 않음
프로젝트 개요
- SeekTune은 Shazam의 노래 인식 알고리듬을 구현한 애플리케이션임
- 구현은 README의 리소스 섹션에 있는 자료들을 바탕으로 함
- Spotify와 YouTube API를 통합해 노래를 찾고 다운로드할 수 있음
- 데모와 제작 과정 링크가 제공됨
설치와 실행 방식
-
필요한 도구는 Golang, FFmpeg, NPM, YT-DLP임
-
저장소 복제 명령은 다음과 같음
git clone https://github.com/cgzirim/seek-tune.git cd seek-tune -
Spotify API 설정
- Spotify 앱을 만들고 Client ID와 Client Secret을 얻어야 함
server디렉터리에.env파일을 만들고 다음 값을 설정함
SPOTIFY_CLIENT_ID=your-client-id SPOTIFY_CLIENT_SECRET=your-client-secret- 앱은 필요한 액세스 토큰을 자동으로 가져오고 캐시함
-
Docker 실행
- Docker와 Docker Compose가 필요함
- 빌드와 실행은 다음 명령으로 수행함
docker-compose up --build- 실행 후 앱은
http://localhost:8080에서 접근함 - 중지는 다음 명령을 사용함
docker-compose down -
네이티브 실행
- 백엔드 의존성 설치
cd server go get ./...- 클라이언트 의존성 설치
cd client npm install
CLI 사용법
- 클라이언트 앱은
client디렉터리에서 실행함npm start - 백엔드는 별도 터미널에서 실행함
cd server go run *.go serve [-proto <http|https> (default: http)] [-port <port number> (default: 5000)] - Spotify 링크로 노래를 다운로드할 수 있음
go run *.go download <https://open.spotify.com/.../...>- Spotify 모바일 앱에서 복사한 링크는 동작하지 않음
- 데스크톱 또는 웹 앱에서 복사한 링크를 사용할 수 있음
- 로컬 노래 파일이나 디렉터리를 데이터베이스에 저장할 수 있으며, 모든 오디오 형식을 지원함
go run *.go save [-f|--force] <path_to_song_file_or_dir_of_songs>-f또는--force는 YouTube ID를 찾지 못해도 노래를 저장함- YouTube ID가 없으면 프런트엔드가 매칭을 표시하지 않음
- 노래나 녹음 파일의 매칭을 찾을 수 있음
go run *.go find <path-to-wav-file> - 지문과 노래 삭제를 지원함
go run *.go erase go run *.go erase db go run *.go erase all- 기본값은 데이터베이스만 삭제함
erase all은 데이터베이스와 노래 파일을 함께 삭제함
*.go가 동작하지 않으면./...를 사용할 수 있음
예시 출력
- 다운로드 예시는 Spotify 트랙 정보를 가져온 뒤 트랙을 다운로드하고 지문을 저장함
$ go run *.go download https://open.spotify.com/track/4pqwGuGu34g8KtfN8LDGZm/… Getting track info... Now, downloading track... Fingerprints saved in MongoDB successfully 'Voilà' by 'André Rieu' was downloaded Total tracks downloaded: 1 - 매칭 예시는
Voilà - André Rieu.wav에 대해 상위 20개 매칭과 최종 예측을 출력함- 최상위 결과는
Voilà by André Rieu이며 점수는5390686.00임 - 검색 시간은
856.386557ms로 표시됨 - 최종 예측도
Voilà by André Rieu로 표시됨
- 최상위 결과는
데이터베이스 선택
- 기본 데이터베이스는 SQLite임
- MongoDB를 사용하려면 MongoDB를 설치하고 연결 환경 변수를 설정함
DB_TYPE: MongoDB 사용을 위해"mongo"로 설정DB_USER: MongoDB 사용자 이름DB_PASS: MongoDB 비밀번호DB_NAME: 사용할 MongoDB 데이터베이스 이름DB_HOST: MongoDB 서버 호스트명 또는 IP 주소DB_PORT: MongoDB 서버 포트 번호
- 데이터베이스 연결 URI는 환경 변수로 구성됨
DB_USER또는DB_PASS가 없으면 기본적으로mongodb://localhost:27017에 연결함
참고 자료와 라이선스
- How does Shazam work - Coding Geek: 메인 리소스
- Song recognition using audio fingerprinting
- How does Shazam work - Toptal
- Creating Shazam in Java
- 프로젝트는 MIT License로 배포됨