3 poin oleh GN⁺ 2024-08-02 | 1 komentar | Bagikan ke WhatsApp
  • SeekTune adalah proyek yang mengimplementasikan algoritme pengenalan lagu Shazam, serta mengintegrasikan API Spotify dan YouTube agar dapat mencari dan mengunduh lagu
  • Untuk menjalankannya dibutuhkan Golang, FFmpeg, NPM, dan YT-DLP, dan server serta klien dapat dijalankan dengan Docker Compose atau di lingkungan native
  • Integrasi Spotify dilakukan dengan mengatur Client ID dan Client Secret dari aplikasi developer di server/.env, sementara aplikasi akan otomatis mengambil dan menyimpan cache access token yang diperlukan
  • Basis data default adalah SQLite, dan jika DB_TYPE=mongo ditentukan melalui environment variable maka MongoDB dapat digunakan; bila tidak ada nama pengguna atau kata sandi, koneksi dilakukan ke mongodb://localhost:27017
  • CLI mendukung pengunduhan tautan Spotify, penyimpanan audio lokal, pencocokan file rekaman, serta penghapusan fingerprint dan lagu; item tersimpan tanpa YouTube ID tidak akan ditampilkan sebagai hasil pencocokan di frontend

Ikhtisar proyek

  • SeekTune adalah aplikasi yang mengimplementasikan algoritme pengenalan lagu Shazam
  • Implementasinya didasarkan pada materi di bagian resource pada README
  • API Spotify dan YouTube diintegrasikan untuk mencari dan mengunduh lagu
  • Tautan demo dan proses pembuatannya disediakan

Instalasi dan cara menjalankan

  • Alat yang diperlukan adalah Golang, FFmpeg, NPM, dan YT-DLP

  • Perintah untuk meng-clone repositori adalah sebagai berikut

    git clone https://github.com/cgzirim/seek-tune.git
    cd seek-tune
    
  • Pengaturan API Spotify

    • Anda perlu membuat aplikasi Spotify dan mendapatkan Client ID serta Client Secret
    • Buat file .env di direktori server lalu atur nilai berikut
    SPOTIFY_CLIENT_ID=your-client-id
    SPOTIFY_CLIENT_SECRET=your-client-secret
    
    • Aplikasi akan otomatis mengambil dan menyimpan cache access token yang diperlukan
  • Menjalankan dengan Docker

    • Docker dan Docker Compose diperlukan
    • Build dan menjalankannya dilakukan dengan perintah berikut
    docker-compose up --build
    
    • Setelah dijalankan, aplikasi dapat diakses di http://localhost:8080
    • Untuk menghentikannya gunakan perintah berikut
    docker-compose down
    
  • Menjalankan secara native

    • Instal dependensi backend
    cd server
    go get ./...
    
    • Instal dependensi klien
    cd client
    npm install
    

Cara penggunaan CLI

  • Aplikasi klien dijalankan dari direktori client
    npm start
    
  • Backend dijalankan di terminal terpisah
    cd server
    go run *.go serve [-proto <http|https> (default: http)] [-port <port number> (default: 5000)]
    
  • Anda dapat mengunduh lagu dengan tautan Spotify
    go run *.go download <https://open.spotify.com/.../...>;
    
    • Tautan yang disalin dari aplikasi mobile Spotify tidak berfungsi
    • Anda dapat menggunakan tautan yang disalin dari aplikasi desktop atau web
  • File lagu lokal atau direktori dapat disimpan ke basis data, dan semua format audio didukung
    go run *.go save [-f|--force] <path_to_song_file_or_dir_of_songs>
    
    • -f atau --force akan menyimpan lagu meski YouTube ID tidak ditemukan
    • Tanpa YouTube ID, frontend tidak akan menampilkan hasil pencocokan
  • Anda dapat mencari kecocokan untuk lagu atau file rekaman
    go run *.go find <path-to-wav-file>
    
  • Mendukung penghapusan fingerprint dan lagu
    go run *.go erase
    go run *.go erase db
    go run *.go erase all
    
    • Default-nya hanya basis data yang dihapus
    • erase all menghapus basis data beserta file lagu
  • Jika *.go tidak berfungsi, Anda dapat menggunakan ./...

Contoh output

  • Contoh unduhan mengambil informasi track Spotify, lalu mengunduh track dan menyimpan 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
    
  • Contoh pencocokan menampilkan 20 hasil teratas dan prediksi akhir untuk Voilà - André Rieu.wav
    • Hasil teratas adalah Voilà by André Rieu dengan skor 5390686.00
    • Waktu pencarian ditampilkan sebagai 856.386557ms
    • Prediksi akhirnya juga ditampilkan sebagai Voilà by André Rieu

Pilihan basis data

  • Basis data default adalah SQLite
  • Untuk menggunakan MongoDB, instal MongoDB lalu atur environment variable koneksinya
    • DB_TYPE: setel ke "mongo" untuk menggunakan MongoDB
    • DB_USER: nama pengguna MongoDB
    • DB_PASS: kata sandi MongoDB
    • DB_NAME: nama basis data MongoDB yang akan digunakan
    • DB_HOST: hostname atau alamat IP server MongoDB
    • DB_PORT: nomor port server MongoDB
  • URI koneksi basis data dibentuk dari environment variable
  • Jika DB_USER atau DB_PASS tidak ada, secara default koneksi dilakukan ke mongodb://localhost:27017

Referensi dan lisensi

1 komentar

 
GN⁺ 2024-08-02
Komentar Hacker News
  • Sebagian teknologi Shazam berasal dari CCRMA di kampus Stanford, tempat yang istimewa dan juga sangat terkait dengan sejarah awal komputer
    Menarik bahwa begitu banyak penerapan awal teknologi komputer justru berkaitan dengan audio. Contohnya berlanjut dari kotak musik John Bardeen, alat bantu dengar yang menjadi aplikasi komersial pertama transistor, osilator audio yang dibuat di garasi HP di Palo Alto, iPod yang berlanjut menjadi iPhone, internet yang dibangun di atas kabel tembaga yang dahulu membawa saluran telepon analog, hingga Bell Labs
    Mungkin hipotesis bahwa manusia lebih dulu belajar menangani rentang kHz lalu beralih ke rentang MHz/GHz juga terdengar cukup menarik

    • Mungkin karena audio relatif lebih mudah dimanipulasi secara elektronik
      Sinyal audio cukup mudah diubah menjadi sinyal listrik, sedangkan grafis jauh lebih rumit bahkan mulai dari menampilkannya di layar. Speaker yang mengubah sinyal listrik menjadi gelombang suara juga, jika dilihat dari struktur intinya, adalah perangkat yang sangat sederhana
      Selain itu, karena audio memberi kesan yang kuat pada manusia, saya pun kemungkinan akan memilih audio jika ingin menunjukkan kemampuan elektronika atau komputer
    • Ini terasa seperti penafsiran yang terlalu dipaksakan
  • Jika ini benar-benar reproduksi Shazam yang sesungguhnya, setidaknya hingga Maret 2025 mungkin masih berada di bawah paten Apple: https://patents.google.com/patent/US7627477

    • Makalah Shazam yang menjelaskan algoritmenya, “An Industrial-Strength Audio Search Algorithm”(https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf), tidak memiliki tanggal publikasi yang jelas, tetapi dari https://www.researchgate.net/publication/220723446_An_Industrial_Strength_Audio_Search_Algorithm tampaknya itu adalah makalah tahun 2003
      Paten tersebut diajukan di AS pada 2004-10-21. Saya bukan ahli hukum, tetapi di AS ini tampaknya bisa menjadi dasar yang merugikan paten tersebut
    • Saya ingat sekitar 10 tahun lalu di HN pernah ada posting atau source yang diturunkan karena Shazam mengancam secara hukum atas publikasi algoritmenya
      Mungkin tangkapan PDF Google Drive yang ada di artikel asli adalah materi itu
    • Intinya adalah membuat sidik jari sederhana dari fast Fourier transform sinyal audio, lalu memakai pengindeksan sederhana dan pencarian kemiripan yang sederhana
      Hanya saja, agar cara ini bekerja, Anda memerlukan tanda tangan untuk seluruh musik di planet ini ;)
    • Jadi maksudnya ini akan sulit ditegakkan di luar AS
    • Jadi maksudmu sekarang saatnya meng-clone repositori itu
  • Presentasi salah satu pendiri Shazam, Avery Wang, di DAFx17 cukup bagus
    Ia sedikit membahas latar belakang teoretis algoritmenya, dan juga melihat masalah nyata seperti kebisingan latar: https://www.youtube.com/watch?v=YVTnj3OIhwI

    • Saya tambahkan ini ke daftar tonton. Saat membaca makalah ini, itu adalah salah satu momen pertama saya benar-benar merasa wow terhadap algoritme komputasi
  • Belakangan akurasi Shazam terasa menurun, dan justru SoundHound memberi hasil yang lebih baik
    Di Shazam, cukup banyak hasil yang berasal dari tradisi musik Asia, yang sebenarnya bagus, tetapi masalahnya lagu yang dikembalikan itu salah. Jika cakupan musik yang dicocokkan diperluas, algoritmenya mungkin juga perlu ditingkatkan, dan sekarang rasanya tabrakan hash table lebih sering terjadi
    Referensi: https://github.com/cgzirim/not-shazam/…

    • SoundHound memang selalu lebih baik daripada Shazam. Ia bisa mengenali orang yang sedang menyanyikan lagu atau lagu yang sangat pelan
    • Pada Agustus 2021 saya pernah membandingkan library pengenal musik milik Shazam, SoundHound, dan BeatFind
      Kesimpulannya, BeatFind dan Shazam mengetahui lagu paling banyak, tetapi keduanya juga saling melengkapi, dan setiap layanan setidaknya punya satu lagu yang hanya bisa dikenali olehnya sendiri
      Pengujian itu mencampurkan lagu dari berbagai genre dan tingkat kepopuleran, tetapi akan lebih baik jika jumlah sampelnya lebih besar. Saya juga tidak menguji kebisingan seperti suara orang berbicara atau musik teredam yang terdengar dari balik dinding
      Lucunya, “Night Driver” muncul dengan keterangan “1 Shazams”, jadi mungkin saya orang pertama yang men-Shazam lagu itu, dan “THEY'RE TAKING THE HOBBITS TO ISENGARD!”—ke mana hobbit dibawa semua orang tahu, tetapi tak satu pun layanan bisa mengenalinya
  • Proyeknya terlihat enak untuk dipakai dan dimodifikasi, tetapi menurut saya pribadi masih agak terlalu dini untuk dipublikasikan
    Panduan cara menjalankannya tampak kurang akurat, dan meskipun MongoDB diperlukan, penjelasan tentang cara koneksi dan penggunaannya tidak ada. Kalau memungkinkan, sebaiknya DB dibuat bisa diganti dan menyediakan opsi yang bebannya lebih ringan seperti sqlite
    Jika MongoDB tidak bisa digantikan, sebaiknya sediakan Dockerfile dan docker compose agar mudah dijalankan dan diuji. Di npm install pada klien muncul 8 kerentanan kritis; mungkin itu sebenarnya bukan masalah, tetapi tetap membuat orang ragu untuk melanjutkan pengujian
    Bahkan kalau tidak terlalu memikirkan paten atau hak cipta, sebaiknya namanya diganti. GitHub sendiri berada di AS, jadi kalau ada DMCA masuk, proyeknya bisa diturunkan
    Terakhir, akan bagus juga kalau ada fitur untuk menambahkan lagu dari file WAV. Tidak semua audio yang ingin diuji ada di Spotify atau YouTube
    Bukan bermaksud menjatuhkan, tetapi kalau penyelesaian kecil seperti ini kurang rapi, orang jadi mudah mengabaikan atau menilai rendah proyeknya. Kalau sempat, saya mungkin akan kirim PR, dan karena saya ingin bereksperimen dengan pencocokan audio di luar ranah musik, proyek ini terlihat paling mudah untuk dimodifikasi

    • Saya setuju bahwa proyek ini masih perlu pekerjaan finishing lebih lanjut
      Saya akan memperbaiki panduan konfigurasi, memprioritaskan opsi penambahan DB berbasis file demi fleksibilitas, serta menangani kerentanan npm. Fitur untuk langsung membuat fingerprint dari file WAV juga ide yang bagus, jadi akan saya prioritaskan
      Saya juga paham risiko hukum dari nama proyek ini dan berencana menggantinya. Kalau ada usulan nama yang bagus, saya ingin mendengarnya
    • Memang untuk menerima masukan berharga seperti ini saya mempostingnya di HN. Ringkasannya bagus
  • Saya belum melihat repositorinya secara mendalam, tetapi saya penasaran datanya berasal dari mana untuk pencarian
    Apakah memuat pustaka sendiri, atau mencari di pustaka besar yang didapat dari tempat lain?

    • Datanya berasal dari database fingerprint yang terhubung ke server. Fingerprint seperti ini dibuat setiap kali lagu ditambahkan
  • Saya punya bucket list untuk suatu hari membuat hal seperti ini, keren sekali

    • Senang bisa memberi inspirasi. Silakan clone dan kembangkan lebih jauh
  • Kalau ada cara untuk berbagi fingerprint secara berbasis komunitas, sepertinya akan cukup bagus

    • Akan bagus kalau pendekatan seperti itu juga ada untuk audio, gambar, dan klip video
      Kalau saya ingat benar, BitTorrent memakai distributed hash table, tetapi hash-nya berdasarkan keseluruhan konten, jadi kurang berguna untuk mencari karya asli dari turunan yang atribusi sumbernya berantakan
      Untuk mencari sumber asli gambar, Tineye kadang lumayan berguna
    • Sepertinya MusicBrainz mendukung ini: https://musicbrainz.org/doc/AcoustID
  • Kalau memasukkan lagu Spotify, bukankah lebih alami kalau hasilnya juga dikeluarkan sebagai lagu Spotify?

    • Sebenarnya memang begitu. Hanya saja Spotify tidak mengizinkan unduhan langsung, jadi saya harus mencari lagunya di YouTube dan mengunduhnya
  • Ponsel Google punya fitur pengenal musik bawaan, dan saya pernah dengar implementasinya yang terbaik di bidang ini
    Saya penasaran apakah ada yang tahu pendekatan apa yang dipakai. Terpisah dari itu, saya selalu merasa SoundHound lebih baik daripada Shazam

    • Kalau tidak salah ingat, sepertinya ada algoritme kecil atau semacam komponen perangkat keras yang hanya membangunkannya saat musik sedang diputar
      Jadi ponselnya tidak perlu selalu aktif, dan setelah itu kemungkinan bisa memakai algoritme deteksi yang sudah ada. Bagi saya tahap berdaya ultra-rendah itu terasa seperti sihir, tetapi saya belum pernah membaca detailnya