An implementation of Shazam's song recognition algorithm.
Find a file
2024-08-03 10:23:18 +01:00
client Set listen duration to 20 seconds 2024-07-14 15:02:45 +01:00
models Move RecordData struct to models to avoid circular import 2024-07-14 15:04:41 +01:00
scripts update script 2024-06-23 22:44:38 +01:00
shazam Use previous implementation of FindMatches 2024-07-14 15:06:01 +01:00
spotify Refs #7 - Remove invalidated API key. 2024-08-01 21:11:48 +01:00
utils Move record processing to a separate function. 2024-07-14 15:08:20 +01:00
wav ConvertToWAV: Use temporary file to avoid FFmpeg overwrite errors 2024-08-03 10:23:18 +01:00
.gitignore Ignore .vscode dir 2024-07-10 08:11:00 +01:00
appspec.yml Update appspec.yml 2024-05-21 08:31:04 +01:00
cmdHandlers.go Create folders in main 2024-07-14 15:03:29 +01:00
go.mod Update packages 2024-06-23 22:47:24 +01:00
go.sum Update packages 2024-06-23 22:47:24 +01:00
LICENSE Update LICENSE 2024-07-07 02:59:00 +01:00
main.go Create folders in main 2024-07-14 15:03:29 +01:00
README.md Update README.md 2024-07-29 19:47:01 +01:00
socketHandlers.go Move record processing to a separate function. 2024-07-14 15:08:20 +01:00

NotShazam 🎵

screenshot

Demo in Video

Description 🎼

NotShazam is an implementation of Shazam's song recognition algorithm based on insights from these resources. It integrates Spotify and YouTube APIs to find and download songs.

Installation 🖥️

Prerequisites

Steps

Clone the repository:

git clone https://github.com/cgzirim/not-shazam.git

Install dependencies for the backend

cd not-shazam
go get ./...

Install dependencies for the client

cd not-shazam/client
npm install

Usage 🚴

Start the Client App

cd client
npm start

Serve the Backend App

go run main.go serve [-proto <http|https>] [-port <port number>]

Download a Song
Note: A link from Spotify's mobile app won't work. You can copy the link from either the desktop or web app.

go run main.go download <https://open.spotify.com/.../...>

Find matches for a song/recording

go run main.go find <path-to-wav-file>

Delete fingerprints and songs

go run main.go erase

Example 📽️

Download a song

$ go run main.go download https://open.spotify.com/track/4pqwGuGu34g8KtfN8LDGZm?si=b3180b3d61084018
Getting track info...
Now, downloading track...
Fingerprints saved in MongoDB successfully
'Voilà' by 'André Rieu' was downloaded
Total tracks downloaded: 1

Find matches of a song

$ go run main.go find songs/Voilà\ -\ André\ Rieu.wav
Top 20 matches:
        - Voilà by André Rieu, score: 5390686.00
        - I Am a Child of God by One Voice Children's Choir, score: 2539.00
        - I Have A Dream by ABBA, score: 2428.00
        - SOS by ABBA, score: 2327.00
        - Sweet Dreams (Are Made of This) - Remastered by Eurythmics, score: 2213.00
        - The Winner Takes It All by ABBA, score: 2094.00
        - Sleigh Ride by One Voice Children's Choir, score: 2091.00
        - Believe by Cher, score: 2089.00
        - Knowing Me, Knowing You by ABBA, score: 1958.00
        - Gimme! Gimme! Gimme! (A Man After Midnight) by ABBA, score: 1941.00
        - Take A Chance On Me by ABBA, score: 1932.00
        - Don't Stop Me Now - Remastered 2011 by Queen, score: 1892.00
        - I Do, I Do, I Do, I Do, I Do by ABBA, score: 1853.00
        - Everywhere - 2017 Remaster by Fleetwood Mac, score: 1779.00
        - You Will Be Found by One Voice Children's Choir, score: 1664.00
        - J'Imagine by One Voice Children's Choir, score: 1658.00
        - When You Believe by One Voice Children's Choir, score: 1629.00
        - When Love Was Born by One Voice Children's Choir, score: 1484.00
        - Don't Stop Believin' (2022 Remaster) by Journey, score: 1465.00
        - Lay All Your Love On Me by ABBA, score: 1436.00

Search took: 856.386557ms

Final prediction: Voilà by André Rieu , score: 5390686.00

Resources 🗃️

Author ✒️

  • Chigozirim Igweamaka

License 🔒

This project is licensed under the MIT License - see the LICENSE file for details.