3 पॉइंट द्वारा GN⁺ 2024-08-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 प्राप्त करने होंगे
    • server directory में .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 को client directory में चलाएँ
    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 है और score 5390686.00 है
    • search time 856.386557ms के रूप में दिखता है
    • final prediction भी Voilà by André Rieu के रूप में दिखती है

डेटाबेस चयन

  • डिफ़ॉल्ट डेटाबेस SQLite है
  • MongoDB इस्तेमाल करने के लिए MongoDB इंस्टॉल करें और connection environment variables सेट करें
    • DB_TYPE: MongoDB इस्तेमाल करने के लिए "mongo" पर सेट करें
    • DB_USER: MongoDB username
    • DB_PASS: MongoDB password
    • DB_NAME: इस्तेमाल किया जाने वाला MongoDB database name
    • DB_HOST: MongoDB server hostname या IP address
    • DB_PORT: MongoDB server port number
  • डेटाबेस connection URI environment variables से बनाया जाता है
  • अगर DB_USER या DB_PASS नहीं है, तो डिफ़ॉल्ट रूप से mongodb://localhost:27017 से कनेक्ट किया जाता है

संदर्भ सामग्री और लाइसेंस

1 टिप्पणियां

 
GN⁺ 2024-08-02
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 को electronically manipulate करना तुलनात्मक रूप से आसान है
      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

    • Shazam ने algorithm समझाने वाले paper “An Industrial-Strength Audio Search Algorithm”(https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf) में कोई स्पष्ट publication date नहीं है, लेकिन https://www.researchgate.net/publication/220723446_An_Industrial_Strength_Audio_Search_Algorithm देखने पर यह 2003 का paper लगता है
      वह patent अमेरिका में 2004-10-21 को file किया गया था। मैं legal expert नहीं हूं, लेकिन अमेरिका में यह उस patent के खिलाफ आधार बन सकता है
    • मुझे याद है कि करीब 10 साल पहले HN पर Shazam ने algorithm disclosure पर कानूनी धमकी दी थी, जिसके बाद कोई popular post या source हटा दिया गया था
      शायद original post में मौजूद Google Drive PDF capture वही material था
    • मूल बात यह है कि audio signal के Fast Fourier Transform से एक simple fingerprint बनाया जाता है, फिर simple index और simple similarity search की जाती है
      हालांकि इस तरीके के काम करने के लिए धरती के हर संगीत का signature चाहिए ;)
    • तो इसका मतलब है कि अमेरिका के बाहर इसे enforce करना मुश्किल है
    • यानी अभी repository clone कर लेनी चाहिए
  • Shazam co-founder Avery Wang की DAFx17 में दी गई talk अच्छी थी
    इसमें algorithm की theoretical background थोड़ी cover की गई है, और background noise जैसे practical issues भी देखे गए हैं: https://www.youtube.com/watch?v=YVTnj3OIhwI

    • इसे watchlist में जोड़ लिया। जब मैंने यह paper पढ़ा था, वह computing algorithms में पहली बार वाह महसूस करने वाले पलों में से एक था
  • हाल में लगता है Shazam की accuracy गिर गई है, और उल्टा SoundHound बेहतर results दे रहा है
    Shazam में Asian music traditions से जुड़े results बहुत आते हैं, यह अपने आप में अच्छी बात है, लेकिन समस्या यह है कि वे गलत गाने होते हैं। अगर चुने जाने वाले music का दायरा बढ़ाया है, तो algorithm भी improve करना चाहिए, और अभी ऐसा लगता है कि hash table collisions बढ़ गए हैं
    संदर्भ: https://github.com/cgzirim/not-shazam/…

    • SoundHound हमेशा Shazam से बेहतर रहा है। इंसान के गाए हुए गाने या बहुत धीमे tracks भी पकड़ लेता है
    • अगस्त 2021 में मैंने Shazam, SoundHound, और BeatFind की music recognition libraries की तुलना की थी
      निष्कर्ष यह था कि 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 करने में सबसे आसान लगता है

    • मैं सहमत हूं कि project को और polish work की जरूरत है
      setup guide सुधारूंगा, flexibility के लिए file-based DB जोड़ने और npm vulnerabilities fix करने को priority दूंगा। WAV files को सीधे fingerprint करने की functionality भी अच्छा idea है, उसे प्राथमिकता से देखूंगा
      project name के legal risk को भी समझता हूं और इसे बदलने वाला हूं। कोई अच्छा नाम सुझा सकें तो स्वागत है
    • HN पर पोस्ट करने का मकसद ऐसे ही valuable feedback पाना है। अच्छी summary है
  • मैंने repository अभी detail में नहीं देखी है, लेकिन curious हूं कि search के लिए इस्तेमाल होने वाला data कहां से आता है
    क्या यह कोई library load करता है, या कहीं से हासिल की गई कोई large library search करता है?

    • data server से connected fingerprint database से आता है। हर बार song add होने पर ये fingerprints बनाए जाते हैं
  • ऐसा कुछ बनाने की मेरी bucket list में हमेशा इच्छा थी; वाकई शानदार है

    • खुशी है कि इससे inspiration मिला। clone करके इसे और आगे बढ़ा सकते हैं
  • अगर fingerprints को community-based तरीके से share करने का कोई तरीका हो, तो काफी अच्छा होगा

    • अच्छा होगा अगर ऐसा तरीका सिर्फ audio ही नहीं, images और video clips के लिए भी हो
      मेरी याद में BitTorrent distributed hash table इस्तेमाल करता है, लेकिन hash पूरे content पर based होता है, इसलिए खराब attribution वाले derivatives का original source खोजने के लिए यह ज्यादा useful नहीं है
      image original खोजने के लिए Tineye कभी-कभी काम का होता है
    • लगता है MusicBrainz इसे support करता है: https://musicbrainz.org/doc/AcoustID
  • अगर Spotify songs input कर रहे हैं, तो result भी Spotify song के रूप में output करना ज्यादा natural नहीं होगा?

    • असल में वही सही है। लेकिन Spotify direct download allow नहीं करता, इसलिए YouTube पर song ढूंढकर download करना पड़ा
  • Google phones में built-in music recognition feature है, और सुना है कि इस field में वही सबसे अच्छी implementation है
    curious हूं कि किसी को पता है उन्होंने कौन-सा approach इस्तेमाल किया है। अलग से, मुझे हमेशा लगा है कि SoundHound Shazam से बेहतर है

    • याद के हिसाब से, शायद कोई छोटा algorithm या hardware piece था जो केवल music बजने पर wake करता था
      इसलिए phone को हमेशा active रहने की जरूरत नहीं होती, और उसके बाद कोई भी existing detection algorithm इस्तेमाल किया जा सकता था। मुझे वह ultra-low-power stage जादू जैसा लगा था, लेकिन मैंने details कभी नहीं पढ़ीं