[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73208":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":18,"lastSyncTime":37,"discoverSource":38},73208,"seek-tune","cgzirim\u002Fseek-tune","cgzirim","An implementation of Shazam's song recognition algorithm.","",null,"Go",5581,615,31,6,0,1,2,3,67.07,"MIT License",false,"main",true,[26,27,28,29,30,31,32,33],"audio-fingerprinting","audio-processing","go","golang","not-shazam","shazam","song","song-recognition-algorithm","2026-06-12 04:01:08","\u003Ch1 align=\"center\">SeekTune :musical_note:\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1I2esH2U4DtXHsNgYbUi4OL-ukV5i_1PI\u002Fview\" target=\"_blank\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe4d01e9c-05cf-4f35-acbc-1e3cd79d1e00\" \n       alt=\"screenshot\" \n       width=\"500\">\n\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Ca href=\"https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1I2esH2U4DtXHsNgYbUi4OL-ukV5i_1PI\u002Fview\" target=\"_blank\">Demo in Video\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=a0CVCcb0RJM\" target=\"_blank\">How it was made (YouTube)\u003C\u002Fa>\u003C\u002Fp>\n\n## Description 🎼\nSeekTune is an implementation of Shazam's song recognition algorithm based on insights from these [resources](#resources--card_file_box). It integrates Spotify and YouTube APIs to find and download songs.\n\n## Installation :desktop_computer:\n### Prerequisites\n- Golang: [Install Golang](https:\u002F\u002Fgolang.org\u002Fdl\u002F)\n- FFmpeg: [Install FFmpeg](https:\u002F\u002Fffmpeg.org\u002Fdownload.html)\n- NPM: [Install Node](https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload)\n- YT-DLP: [Install YT-DLP](https:\u002F\u002Fgithub.com\u002Fyt-dlp\u002Fyt-dlp\u002Fwiki\u002FInstallation)\n\n### Steps\n📦 Clone the repository:\n```\ngit clone https:\u002F\u002Fgithub.com\u002Fcgzirim\u002Fseek-tune.git\ncd seek-tune\n```\n#### 🎧 Spotify API Setup\n\n1. Get credentials: Follow the [official getting started guide](https:\u002F\u002Fdeveloper.spotify.com\u002Fdocumentation\u002Fweb-api\u002Ftutorials\u002Fgetting-started) to create a Spotify app and obtain your **Client ID** and **Client Secret**.\n\n2. Configure: Create a `.env` file in the `server` directory:\n   ```bash\n   SPOTIFY_CLIENT_ID=your-client-id\n   SPOTIFY_CLIENT_SECRET=your-client-secret\n   ```\n\nThe app will automatically fetch and cache access tokens as needed.\n\n\n#### 🐳 Set Up with Docker\nPrerequisites: [Docker](https:\u002F\u002Fdocs.docker.com\u002Fget-docker\u002F) and [Docker Compose](https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002Finstall\u002F)\n1. Build and run the application:\n   ```Bash\n   docker-compose up --build\n   ```\n   Visit the app at http:\u002F\u002Flocalhost:8080\n2. To stop the application:\n   ```Bash\n   docker-compose down\n   ```\n\n#### 💻 Set Up Natively\nInstall dependencies for the backend\n```\ncd server\ngo get .\u002F...\n```\nInstall dependencies for the client\n```\ncd client\nnpm install\n```\n\n## Usage (Native Setup) :bicyclist:\n\n#### ▸ Start the Client App 🏃‍♀️‍➡️ \n```\n# Assuming you're in the client directory:\n\nnpm start\n```\n#### ▸ Start the Backend App 🏃‍♀️ \nIn a separate terminal window:\n```\ncd server\ngo run *.go serve [-proto \u003Chttp|https> (default: http)] [-port \u003Cport number> (default: 5000)]\n```\n#### ▸ Download a Song 📥 \nNote: A link from Spotify's mobile app won't work. You can copy the link from either the desktop or web app.\n```\ngo run *.go download \u003Chttps:\u002F\u002Fopen.spotify.com\u002F...\u002F...>\n```  \n#### ▸ Save local songs to DB (supports all audio formats) 🗃️   \n```\ngo run *.go save [-f|--force] \u003Cpath_to_song_file_or_dir_of_songs>\n```\nThe `-f` or `--force` flag allows saving the song even if a YouTube ID is not found. Note that the frontend will not display matches without a YouTube ID.  \n\nNote: if `*.go` does not work try to use `.\u002F...` instead.\n  \n#### ▸ Find matches for a song\u002Frecording 🔎\n```\ngo run *.go find \u003Cpath-to-wav-file>\n```\n#### ▸ Delete fingerprints and songs 🗑️ \n```\n# Delete only database (default)\ngo run *.go erase\ngo run *.go erase db\n\n# Delete both database and song files\ngo run *.go erase all\n```\n\n## Example :film_projector:  \nDownload a song \n```\n$ go run *.go download https:\u002F\u002Fopen.spotify.com\u002Ftrack\u002F4pqwGuGu34g8KtfN8LDGZm?si=b3180b3d61084018\nGetting track info...\nNow, downloading track...\nFingerprints saved in MongoDB successfully\n'Voilà' by 'André Rieu' was downloaded\nTotal tracks downloaded: 1\n```\n\nFind matches of a song\n```\n$ go run *.go find songs\u002FVoilà\\ -\\ André\\ Rieu.wav\nTop 20 matches:\n        - Voilà by André Rieu, score: 5390686.00\n        - I Am a Child of God by One Voice Children's Choir, score: 2539.00\n        - I Have A Dream by ABBA, score: 2428.00\n        - SOS by ABBA, score: 2327.00\n        - Sweet Dreams (Are Made of This) - Remastered by Eurythmics, score: 2213.00\n        - The Winner Takes It All by ABBA, score: 2094.00\n        - Sleigh Ride by One Voice Children's Choir, score: 2091.00\n        - Believe by Cher, score: 2089.00\n        - Knowing Me, Knowing You by ABBA, score: 1958.00\n        - Gimme! Gimme! Gimme! (A Man After Midnight) by ABBA, score: 1941.00\n        - Take A Chance On Me by ABBA, score: 1932.00\n        - Don't Stop Me Now - Remastered 2011 by Queen, score: 1892.00\n        - I Do, I Do, I Do, I Do, I Do by ABBA, score: 1853.00\n        - Everywhere - 2017 Remaster by Fleetwood Mac, score: 1779.00\n        - You Will Be Found by One Voice Children's Choir, score: 1664.00\n        - J'Imagine by One Voice Children's Choir, score: 1658.00\n        - When You Believe by One Voice Children's Choir, score: 1629.00\n        - When Love Was Born by One Voice Children's Choir, score: 1484.00\n        - Don't Stop Believin' (2022 Remaster) by Journey, score: 1465.00\n        - Lay All Your Love On Me by ABBA, score: 1436.00\n\nSearch took: 856.386557ms\n\nFinal prediction: Voilà by André Rieu , score: 5390686.00\n```\n\n## Database Options 👯‍♀️ \nThis application uses SQLite as the default database, but you can switch to MongoDB if preferred.   \n\n#### Using MongoDB\n1. [Install MongoDB](https:\u002F\u002Fwww.mongodb.com\u002Fdocs\u002Fmanual\u002Finstallation\u002F)\n2. Configure MongoDB Connection:  \n   To connect to your MongoDB instance, set the following environment variables:\n\n   * `DB_TYPE`: Set this to \"mongo\" to indicate using MongoDB.\n   * `DB_USER`: The username for your MongoDB database.\n   * `DB_PASS`: The password for your MongoDB database.\n   * `DB_NAME`: The name of the MongoDB database you want to use.\n   * `DB_HOST`: The hostname or IP address of your MongoDB server.\n   * `DB_PORT`: The port number on which your MongoDB server is listening.\n\n   **Note:** The database connection URI is constructed using the environment variables.  \n   If the `DB_USER` or `DB_PASS` environment variables are not set, it defaults to connecting to `mongodb:\u002F\u002Flocalhost:27017`.\n\n## Resources  :card_file_box:\n- [How does Shazam work - Coding Geek](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1ahyCTXBAZiuni6RTzHzLoOwwfTRFaU-C\u002Fview) (main resource)\n- [Song recognition using audio fingerprinting](https:\u002F\u002Fhajim.rochester.edu\u002Fece\u002Fsites\u002Fzduan\u002Fteaching\u002Fece472\u002Fprojects\u002F2019\u002FAudioFingerprinting.pdf)\n- [How does Shazam work - Toptal](https:\u002F\u002Fwww.toptal.com\u002Falgorithms\u002Fshazam-it-music-processing-fingerprinting-and-recognition)\n- [Creating Shazam in Java](https:\u002F\u002Fwww.royvanrijn.com\u002Fblog\u002F2010\u002F06\u002Fcreating-shazam-in-java\u002F)\n\n\n## Author :black_nib:\n- Chigozirim Igweamaka\n  - Connect with me on [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fichigozirim\u002F).\n  - Check out my other [GitHub](https:\u002F\u002Fgithub.com\u002Fcgzirim) projects.\n  - Follow me on [Twitter](https:\u002F\u002Ftwitter.com\u002Fcgzirim).\n \n## License :lock:\nThis project is licensed under the MIT License - see the [LICENSE](.\u002FLICENSE) file for details.\n","SeekTune 是一个实现 Shazam 歌曲识别算法的项目，能够通过音频指纹技术识别歌曲，并整合了 Spotify 和 YouTube 的 API 以查找和下载音乐。其核心功能包括音频处理、歌曲匹配以及通过 Spotify 或 YouTube 链接下载歌曲。项目使用 Go 语言开发，具有良好的跨平台支持，并且提供了 Docker 容器化部署选项，方便用户快速上手。适用于需要进行音频识别的应用场景，如个人娱乐系统、音乐管理工具等，同时也为开发者提供了一个学习音频处理和 Web API 整合的良好示例。","2026-06-11 03:44:30","high_star"]