NotShazam :musical_note:

[NotShazam](https://notshazam.vercel.app/) 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 from the internet. ## Current Limitations While the algorithm works excellently in matching a song with the exact song file, it performs poorly in finding the right match from a song recording. However, this is still a work in progress. Hopefully, I can get it to work. I could use some help though. Additionally, it only supports song files in WAV format. ## Installation ### Prerequisites - Golang: [Install Golang](https://golang.org/dl/) - FFmpeg: [Install FFmpeg](https://ffmpeg.org/download.html) - NPM: To run the client (frontend). ### Steps Clone the repository: ``` git clone https://github.com/cgzirim/song-recognition.git ``` Install dependencies for the backend ``` cd song-recognition go get ./... ``` Install dependencies for the client ``` cd song-recognition/client npm install ``` ## Usage Start the Client App ``` npm start ``` Serve the Backend App ``` go run main.go serve [-proto ] [-port ] ``` Download a Song ``` go run main.go download ``` Find matches for a song/recording ``` go run main.go find ``` ### 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: 856ms Final prediction: Voilà by André Rieu , score: 5390686.00 ``` ## Resources - [How does Shazam work - Coding Geek](https://drive.google.com/file/d/1ahyCTXBAZiuni6RTzHzLoOwwfTRFaU-C/view) (main resource) - [Song recognition using audio fingerprinting](https://hajim.rochester.edu/ece/sites/zduan/teaching/ece472/projects/2019/AudioFingerprinting.pdf) - [How does Shazam work - Toptal](https://www.toptal.com/algorithms/shazam-it-music-processing-fingerprinting-and-recognition) - [Creating Shazam in Java](https://www.royvanrijn.com/blog/2010/06/creating-shazam-in-java/)