NotShazam - Go भाषा में फिर से बनाया गया Shazam एल्गोरिदम
(github.com/cgzirim)- SeekTune Shazam के गाने पहचानने वाले एल्गोरिदम को लागू करने वाला एक प्रोजेक्ट है, जो Spotify और YouTube API को इंटीग्रेट करके गाने खोजने और डाउनलोड करने देता है
- इसे चलाने के लिए Golang, FFmpeg, NPM और YT-DLP की ज़रूरत होती है, और सर्वर व क्लाइंट को Docker Compose या native environment में चलाया जा सकता है
- Spotify इंटीग्रेशन के लिए developer app का Client ID और Client Secret
server/.envमें सेट किया जाता है, और ऐप ज़रूरी access token अपने-आप लाकर cache कर लेता है - डिफ़ॉल्ट डेटाबेस SQLite है, और environment variable
DB_TYPE=mongoसेट करने पर MongoDB इस्तेमाल किया जा सकता है; अगर username और password न हों तो यहmongodb://localhost:27017से कनेक्ट करता है - CLI Spotify लिंक डाउनलोड, local audio सेव करना, रिकॉर्डिंग फ़ाइल मैच करना, और fingerprint व गाने हटाने को सपोर्ट करता है; जिन सेव की गई items के पास YouTube ID नहीं होती, वे frontend में matching result के रूप में नहीं दिखतीं
प्रोजेक्ट अवलोकन
- SeekTune Shazam के गाने पहचानने वाले एल्गोरिदम को लागू करने वाला एक application है
- इसका implementation README के resource section में दिए गए स्रोतों पर आधारित है
- Spotify और YouTube API को इंटीग्रेट करके गाने खोजे और डाउनलोड किए जा सकते हैं
- डेमो और इसे बनाने की प्रक्रिया के लिंक दिए गए हैं
इंस्टॉलेशन और चलाने का तरीका
-
ज़रूरी टूल हैं Golang, FFmpeg, NPM, और YT-DLP
-
repository clone करने के लिए कमांड इस प्रकार है
git clone https://github.com/cgzirim/seek-tune.git cd seek-tune -
Spotify API सेटअप
- आपको एक Spotify app बनाकर Client ID और Client Secret प्राप्त करने होंगे
serverdirectory में.envफ़ाइल बनाकर ये मान सेट करें
SPOTIFY_CLIENT_ID=your-client-id SPOTIFY_CLIENT_SECRET=your-client-secret- ऐप ज़रूरी access token अपने-आप लाकर cache कर लेता है
-
Docker से चलाना
- Docker और Docker Compose की ज़रूरत होती है
- build और run निम्न कमांड से किया जाता है
docker-compose up --build- चलने के बाद app
http://localhost:8080पर उपलब्ध होगा - बंद करने के लिए यह कमांड इस्तेमाल करें
docker-compose down -
Native तरीके से चलाना
- backend dependencies इंस्टॉल करें
cd server go get ./...- client dependencies इंस्टॉल करें
cd client npm install
CLI उपयोग
- client app को
clientdirectory में चलाएँnpm start - backend को अलग terminal में चलाएँ
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 mobile app से कॉपी किए गए लिंक काम नहीं करते
- desktop या web app से कॉपी किए गए लिंक इस्तेमाल किए जा सकते हैं
- local गाना फ़ाइल या directory को डेटाबेस में सेव किया जा सकता है, और सभी audio formats सपोर्ट होते हैं
go run *.go save [-f|--force] <path_to_song_file_or_dir_of_songs>-fया--forceगाना तब भी सेव करता है जब YouTube ID न मिले- अगर YouTube ID नहीं है, तो frontend matching नहीं दिखाता
- गाने या रिकॉर्डिंग फ़ाइल का मैच खोजा जा सकता है
go run *.go find <path-to-wav-file> - fingerprint और गाने हटाने का सपोर्ट है
go run *.go erase go run *.go erase db go run *.go erase all- डिफ़ॉल्ट रूप से सिर्फ डेटाबेस हटाया जाता है
erase allडेटाबेस और गाने की फ़ाइलें दोनों हटा देता है
- अगर
*.goकाम न करे, तो./...इस्तेमाल किया जा सकता है
उदाहरण आउटपुट
- डाउनलोड उदाहरण पहले Spotify track जानकारी लाता है, फिर track डाउनलोड करता है और fingerprint सेव करता है
$ 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 - matching उदाहरण
Voilà - André Rieu.wavके लिए top 20 matches और final prediction दिखाता है- सबसे ऊपर का परिणाम
Voilà by André Rieuहै और score5390686.00है - search time
856.386557msके रूप में दिखता है - final prediction भी
Voilà by André Rieuके रूप में दिखती है
- सबसे ऊपर का परिणाम
डेटाबेस चयन
- डिफ़ॉल्ट डेटाबेस SQLite है
- MongoDB इस्तेमाल करने के लिए MongoDB इंस्टॉल करें और connection environment variables सेट करें
DB_TYPE: MongoDB इस्तेमाल करने के लिए"mongo"पर सेट करेंDB_USER: MongoDB usernameDB_PASS: MongoDB passwordDB_NAME: इस्तेमाल किया जाने वाला MongoDB database nameDB_HOST: MongoDB server hostname या IP addressDB_PORT: MongoDB server port number
- डेटाबेस connection URI environment variables से बनाया जाता है
- अगर
DB_USERयाDB_PASSनहीं है, तो डिफ़ॉल्ट रूप सेmongodb://localhost:27017से कनेक्ट किया जाता है
संदर्भ सामग्री और लाइसेंस
- How does Shazam work - Coding Geek: मुख्य resource
- Song recognition using audio fingerprinting
- How does Shazam work - Toptal
- Creating Shazam in Java
- यह प्रोजेक्ट MIT License के तहत वितरित किया जाता है
1 टिप्पणियां
Hacker News की राय
Shazam तकनीक का एक हिस्सा Stanford कैंपस के CCRMA से आया था, और यह शुरुआती कंप्यूटर इतिहास से भी गहराई से जुड़ी एक खास जगह है
यह दिलचस्प है कि शुरुआती कंप्यूटर तकनीक के applications असामान्य रूप से अक्सर audio से जुड़े रहे हैं। John Bardeen का music box, transistor का पहला commercial application रहा hearing aid, Palo Alto में HP garage में बनाए जा रहे audio oscillators, iPod से आगे बढ़कर iPhone, analog telephone lines ढोने वाली copper wires पर खड़ा Internet, और Bell Labs तक उदाहरण लगातार मिलते जाते हैं
शायद यह hypothesis भी काफी आकर्षक लगती है कि इंसानों ने पहले kHz range को संभालना सीखा और फिर MHz/GHz range की ओर बढ़े
audio signals को electrical signals में बदलना अपेक्षाकृत आसान है, लेकिन graphics में तो उन्हें screen पर दिखाने से ही काम कहीं ज्यादा जटिल हो जाता है। electrical signals को sound waves में बदलने वाला speaker भी, अगर सिर्फ core structure देखें, तो बहुत simple device है
ऊपर से audio लोगों पर मजबूत impression छोड़ता है, इसलिए electronics या computers की ताकत दिखानी होती तो मैं भी audio ही चुनता
अगर यह Shazam की असली reproduction है, तो यह कम-से-कम मार्च 2025 तक Apple patent के तहत हो सकती है: https://patents.google.com/patent/US7627477
वह patent अमेरिका में 2004-10-21 को file किया गया था। मैं legal expert नहीं हूं, लेकिन अमेरिका में यह उस patent के खिलाफ आधार बन सकता है
शायद original post में मौजूद Google Drive PDF capture वही material था
हालांकि इस तरीके के काम करने के लिए धरती के हर संगीत का signature चाहिए ;)
Shazam co-founder Avery Wang की DAFx17 में दी गई talk अच्छी थी
इसमें algorithm की theoretical background थोड़ी cover की गई है, और background noise जैसे practical issues भी देखे गए हैं: https://www.youtube.com/watch?v=YVTnj3OIhwI
हाल में लगता है Shazam की accuracy गिर गई है, और उल्टा SoundHound बेहतर results दे रहा है
Shazam में Asian music traditions से जुड़े results बहुत आते हैं, यह अपने आप में अच्छी बात है, लेकिन समस्या यह है कि वे गलत गाने होते हैं। अगर चुने जाने वाले music का दायरा बढ़ाया है, तो algorithm भी improve करना चाहिए, और अभी ऐसा लगता है कि hash table collisions बढ़ गए हैं
संदर्भ: https://github.com/cgzirim/not-shazam/…
निष्कर्ष यह था कि BeatFind और Shazam सबसे ज्यादा songs जानते थे, लेकिन वे एक-दूसरे को complement भी करते थे, और हर service के पास कम-से-कम एक ऐसा song था जिसे सिर्फ वही पहचान सकी
test में कई genres और popularity levels के songs मिलाए गए थे, लेकिन sample size बड़ा होता तो बेहतर होता। साथ ही, human speech जैसे noise या दीवार के पार से सुनाई देने वाला filtered music test नहीं किया गया था
मजेदार बात यह है कि “Night Driver” के लिए “1 Shazams” दिखा, तो शायद मैं उसे Shazam करने वाला पहला व्यक्ति था, और “THEY'RE TAKING THE HOBBITS TO ISENGARD!” में hobbits को कहां ले जाया जा रहा है यह सबको पता है, लेकिन services में से कोई भी उसे पहचान नहीं सकी
प्रोजेक्ट लिखने और modify करने में अच्छा लगता है, लेकिन निजी तौर पर मुझे लगता है कि इसे public करने के लिए अभी थोड़ा जल्दी है
इसे run करने के instructions inaccurate लगते हैं, और MongoDB की ज़रूरत है लेकिन connection/use की explanation missing है। हो सके तो DB को replaceable बनाना और sqlite जैसा कम बोझ वाला option देना बेहतर होगा
अगर MongoDB को replace नहीं किया जा सकता, तो Dockerfile और docker compose provide करने चाहिए ताकि इसे आसानी से run और test किया जा सके। client के
npm installमें 8 critical vulnerabilities दिखती हैं; भले ही असल में वे issue न हों, फिर भी test जारी रखने में झिझक होती हैpatent या copyright की चिंता न भी करें, तो भी नाम बदलना बेहतर होगा। GitHub खुद अमेरिका में है, इसलिए DMCA आने पर project हटाया जा सकता है
आखिर में, WAV file से song add करने की functionality भी अच्छी होगी। जिन audio को test करना चाहता हूं, वे सब Spotify या YouTube पर नहीं हैं
मेरा मतलब discourage करना नहीं है; बस ऐसे छोटे polish कामों की कमी हो तो लोग project को ignore कर सकते हैं या कम आंक सकते हैं। समय मिला तो PR भेज सकता हूं, और music के अलावा दूसरी domains में audio matching experiment करना चाहता हूं, इसलिए यह project modify करने में सबसे आसान लगता है
setup guide सुधारूंगा, flexibility के लिए file-based DB जोड़ने और
npmvulnerabilities fix करने को priority दूंगा। WAV files को सीधे fingerprint करने की functionality भी अच्छा idea है, उसे प्राथमिकता से देखूंगाproject name के legal risk को भी समझता हूं और इसे बदलने वाला हूं। कोई अच्छा नाम सुझा सकें तो स्वागत है
मैंने repository अभी detail में नहीं देखी है, लेकिन curious हूं कि search के लिए इस्तेमाल होने वाला data कहां से आता है
क्या यह कोई library load करता है, या कहीं से हासिल की गई कोई large library search करता है?
ऐसा कुछ बनाने की मेरी bucket list में हमेशा इच्छा थी; वाकई शानदार है
अगर fingerprints को community-based तरीके से share करने का कोई तरीका हो, तो काफी अच्छा होगा
मेरी याद में BitTorrent distributed hash table इस्तेमाल करता है, लेकिन hash पूरे content पर based होता है, इसलिए खराब attribution वाले derivatives का original source खोजने के लिए यह ज्यादा useful नहीं है
image original खोजने के लिए Tineye कभी-कभी काम का होता है
अगर Spotify songs input कर रहे हैं, तो result भी Spotify song के रूप में output करना ज्यादा natural नहीं होगा?
Google phones में built-in music recognition feature है, और सुना है कि इस field में वही सबसे अच्छी implementation है
curious हूं कि किसी को पता है उन्होंने कौन-सा approach इस्तेमाल किया है। अलग से, मुझे हमेशा लगा है कि SoundHound Shazam से बेहतर है
इसलिए phone को हमेशा active रहने की जरूरत नहीं होती, और उसके बाद कोई भी existing detection algorithm इस्तेमाल किया जा सकता था। मुझे वह ultra-low-power stage जादू जैसा लगा था, लेकिन मैंने details कभी नहीं पढ़ीं