Cljs-Karaoke-Client
Seorang pemain karaoke web yang diimplementasikan dalam clojurescript
Demo
Rolling Stones - seluruh sekarang
Keterangan
Usaha saya membuat pemain karaoke yang layak. Selama bertahun -tahun saya telah mencoba mendapatkan solusi karaoke perangkat lunak yang baik dengan sedikit keberhasilan, alternatif utama di luar sana adalah permainan seperti Ultrastar, Fret on Fire, dll atau menyusun daftar putar video karaoke YouTube.
Kedua alternatif menawarkan katalog lagu yang luas yang dapat Anda akses secara bebas di seluruh internet tetapi dengan beberapa kelemahan:
- Lagu -lagu tersedia online untuk game seperti Ultrastar lebih sering daripada tidak menggunakan lagu lagu asli dengan vokal yang menurut saya semacam membunuh "Karaoke Experience"
- Sinkronisasi lirik sangat bervariasi (beberapa hanya membuat seluruh ayat sekaligus sementara yang lain menyinkronkan lirik pada tingkat suku kata) saat menggunakan video karaoke YouTube.
Kesulitan utama adalah mendapatkan lirik dengan informasi sinkronisasi, saya menemukan banyak file MIDI di web, tampaknya digunakan untuk mesin karaoke. File -file ini, berisi lirik yang disinkronkan sampai ke tingkat suku kata. Karena benar -benar tidak ada standar tentang cara menyimpan lirik pada file MIDI untuk mesin karaoke, banyak yang memiliki perbedaan halus dalam cara mereka disimpan sehingga ketika mem -parsing file -file ini saya membuat banyak asumsi kotor dan mengekstraksi lirik untuk file yang terpisah bersama dengan data waktu. Kebanyakan baik -baik saja, tetapi banyak yang sedikit off dengan variabel offset
Midi Parser berada pada proyek terpisah: CLJ-Karaoke.
Kesulitan lain adalah mendapatkan lagu audio lagu, karena liriknya disinkronkan ke trek audio MIDI, hal yang paling baik untuk dilakukan adalah menggunakannya. Awalnya saya bermaksud menggunakan file MIDI secara langsung untuk trek audio tetapi ketika memutar audio, kualitasnya sangat bergantung pada font suara yang telah Anda instal dan menyiapkan Env yang baik untuk hasil yang layak bukanlah tugas yang sepele. Juga jika saya ingin memutar file -file ini di klien web, dengan mempertimbangkan semua ini hanya membuat hal -hal lebih rumit. Jadi saya menetap dengan mengekstraksi lirik ke file yang terpisah dan membuat file midis ke mp3 menggunakan takut -takut yang cukup mengagumkan dan saya dapat bereksperimen dengan koleksi font suara yang berbeda.
Fitur
- Banyak lagu
- Gambar latar belakang untuk lagu secara dinamis diambil dari web setelah pencarian Google selama Lagu Load (jika tidak ada yang di -cache)
- Setiap pengguna menyimpan latar belakang lokal mereka dan secara berkala mendorong URL -nya ke Mongo DB, Google Custom Search memiliki batas harian jadi saya mencoba meminimalkan penggunaannya.
- Data Inisialisasi (offset lirik, gambar BG) meningkat selama build dengan mengkonsolidasikan data dari pengguna
- Kemampuan untuk menyinkronkan lirik dengan offset di milidetik (baik dari panel kontrol atau dengan menambahkan string kueri ke URL)
- Daftar putar otomatis yang dibangun dari lagu -lagu yang sebelumnya disinkronkan sebelumnya
- Ekspor Informasi Sinkronisasi Lagu Lokal sehingga dapat digabungkan ke data sinkronisasi sisi server
- Input Audio Eksperimental untuk Desktop Firefox dan Chrome dengan Live Echo/Reverb Sound FX (gunakan mikrofon eksternal untuk hasil terbaik)
- Perekaman webcam eksperimental dan ekspor video ke file webm. Saluran audio dalam video yang diekspor adalah hasil dari pencampuran input mikrofon dengan efek dan lagu lagu.
- Kendali jarak jauh. Jalankan aplikasi di layar lebar dan kontrol pemutaran dari instance aplikasi yang berbeda (misalnya, dari perangkat seluler Anda!)
- Bangun halaman lagu pra-render dengan tag SEO sehingga Anda dapat berbagi tautan di jejaring sosial sebagai kartu yang terlihat cantik dengan nama lagu dan gambar jika tersedia.
- Lirik Editor untuk Menyinkronkan Lagu Baru dengan Lirik.
- Pilih file audio
- Tambahkan teks, pisahkan menjadi suku kata (atau hanya potongan acak)
- Mainkan trek Anda dan ketuk tombol "Sinkronisasi" untuk setiap bagian
- Jika Anda ingin lebih akurasi, Anda dapat memperlambat trek mengurangi tingkat pemutaran
Bekerja
- Ukuran font dinamis, ukuran font yang sudah dioptimalkan untuk judul lagu tetapi saya mencari cara untuk meningkatkan tampilan lirik juga.
- Cara untuk menangkap offset lirik khusus dari semua pengguna, mengintegrasikan ini sebagai default dalam rilis berikutnya
- Hal yang sama dengan latar belakang lagu, saat ini pencarian kustom Google digunakan untuk menemukan gambar yang terkait dengan judul lagu, ada kuota untuk layanan ini dan cukup rendah, semakin sedikit kita perlu mencari semakin baik.
Berjalan secara lokal
Prasyarat:
$ npm i -g shadow-cljs
$ npm install
$ shadow-cljs watch app
Jika Anda ingin mengkompilasi pembuatan rilis, Anda dapat menjalankan yang berikut:
$ shadow-cljs release app
Bangunan akan berlokasi di Direktori /public .
Binding kunci
- "ESC": Hentikan pemutaran
- "LR": Muat lagu
- "Alt-O": Aktifkan Opton dalam Mode Playback
- "Alt-H": Aktifkan mode panel kontrol
- "Left": Audio Seek Backwards
- Audio "Benar" mencari maju
- "Meta-Shift-L": Mode Loop (sekarang bekerja saat ini)
- "Alt-Shift-P": Mainkan
- "Shift-Right": Lagu Berikutnya di Daftar Putar
- "TT": bakar!
- "H": Tampilkan Cheatsheet
Pekerjaan di masa depan
- Gambar Raspberry Pi
- Lirik Editor Sinkronisasi