Selamat datang di UNYDeveloperNetwork. Sebagai seorang musisi, terkadang ketika mendengar sebuah lagu, kita sangat ingin mengetahui partitur dari musik yang sedang didengar tersebut. Namun, ada kalanya, partitur sebuah musik itu harganya mahal, atau hanya dapat dilihat dan dibaca di lingkup terbatas saja. Lantas, apakah ada cara merekognisi file musik untuk dapat menjadi partitur? Tentu saja, ADA! Dengan bahasa pemrograman Python, segalanya mungkin. Bahkan untuk merekognisi file musik menjadi partitur juga ada librarynya. Tinggal bagaimana cara kita mengompilasi library library itu menjadi sebuah program yang dapat merekognisi file musik menjadi partitur.
Bagaimanakah caranya? Ikuti langkah-langkah mudah berikut ini.
1. PERSIAPKAN SEBUAH FILE MUSIK BERFORMAT WAV
Ya, Saya menyarankan untuk menyiapkan sebuah file berformat .wav. Alasannya? Ya karena .wav adalah interface termudah untuk digunakan program ini untuk merekognisi musik di dalamnya menjadi sebuah partitur. Dalam kasus ini, Saya akan menggunakan file audio dengan nama 125.wav. Berikut informasi detil dari file yang akan Saya gunakan dalam project ini.
File yang Saya gunakan adalah file .wav denga ukuran file sebesar 5.49 MB dan berdurasi 32 detik dengan bitrate 141kbps. File audio yang digunakan ini adalah rekaman asli performance seorang musisi yang direkam dengan menggunakan perekam khusus sehingga audio yang dihasilkan juga bersih dari noise.
2. MEMPERSIAPKAN PROGRAM
Langkah kedua yakni mempersiapkan Program. Dalam hal ini, Saya menggunakan bahasa pemrograman Python untuk membuat program rekognisi file musik menjadi partitur. Versi python yang Saya gunakan adalah versi 3.8.2rc2 dan berjalan di atas sistem operasi Ubuntu 20.04 lts.
3. ALUR PROGRAM
Alur program yang akan kita buat adalah sebagai berikut:
- Mengonversi file wav menjadi midi
- Menggunakan file midi hasil konversi untuk menghasilkan notes
- Mengonversi notes menjadi XML untuk dapat dimuat di aplikasi music sheet reader
4. MULAI MEMPROGRAM!
KONVERSI DARI WAV KE MIDI
Setelah memahami alur program yang akan kita buat, saatnya kita mulai untuk memprogram. Langkah pertama adalah mengonversi file .wav menjadi .mid. Untuk itu, kita memerlukan sebuah library bernama omnizart. Namun, selain itu, kita juga membutuhkan numpy dan juga Cython. Oleh karena itu kita akan menginstall tiga library ini bersamaan.
Untuk menginstalnya, gunakan syntax di bawah ini.
pip install numpy Cython omnizart
Tunggu proses instalasi hingga selesai
Setelah menginstall numpy, Cthon, dan omnizart, kita harus menginstall tiga program lainnya yakni libsndfile-dev fluidsynth ffmpeg. Oleh karena itu ketikkan perintah berikut untuk menginstall ketika program tersebut.
sudo apt install libsndfile-dev fluidsynth ffmpeg
Tunggu proses instalasi hingga selesai
Selesai kita menginstall tiga program tambahan, kita harus mendownload “last checkpoint” model yang akan digunakan oleh omnizart. Untuk itu, ketikkan perintah berikut ini.
omnizart download-checkpoints
Tunggu proses download selesai.
Selesai mendownload checkpoint, saatnya kita mengoversi file .wav yang kita miliki ke midi. Untuk itu ketikkan perintah:
omnizart music transcribe [input_file]
Sebagai contoh, dalam project ini saya menggunakan sebuah file wav dengan nama 125.wav oleh karena itu saya ketikkan perintah:
omnizart music transcribe 125.wav
Berikut adalah tangkapan layar proses konversinya.
Proses konversi dari .wav ke .mid telah selesai dilakukan, sekarang saatnya kita merekognisi file midi tersebut ke dalam bentuk global musicxml.
KONVERSI MIDI KE MUSIC XML
Untuk dapat mengonversi file midi yang sudah kita generate kedalam music xml, kita perlu menginstall satu library lagi yakni music21 dan lxml. Untuk melakukannya, ketikkan perintah berikut ini.
pip install music21 lxml
Tunggu proses instalasi hingga selesai
Selesai menginstall seluruh library, barulah kita dapat menggunakannya untuk membuat program yang berfungsi merekognisi file midi ke bentuk music xml. Buat program dengan nama “musicxml.py” dengan kode berikut ini:
from music21 import converter
import shutil
import sys
def convert_midi_to_sheet(midi_path, output_path):
# Load the MIDI file
midi = converter.parse(midi_path)
# Convert MIDI to sheet music (music notation) and get the path to the generated file
temp_musicxml_path = midi.write('musicxml')
# Move the generated MusicXML file to the desired output path
shutil.move(str(temp_musicxml_path), output_path)
print(f"Sheet music saved to {output_path}")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: python script.py <midi_file_path> <output_sheet_music_path>")
sys.exit(1)
midi_file_path = sys.argv[1]
output_sheet_music_path = sys.argv[2]
convert_midi_to_sheet(midi_file_path, output_sheet_music_path)
Simpan kode di atas dengan nama musicxml.py. Selanjutnya, kita dapat menggunakan program ini untuk merekognisi file midi yang sudah kita buat menjadi musicxml. Untuk melakukannya ketikkan perintah berikut ini
python musicxml.py [input_file_midi] [output_file_xml]
Sebagai contoh, karena saya sudah memiliki file midi dengan nama 125.mid maka saya mengetikkan perintah berikut ini:
python musicxml.py 125.mid 125.xml
Tunggu proses rekognisinya sampai selesai.
Tampak pada tangkapan layar di atas, kita berhasil merekognisi file 125.mid menjadi 125.xml. Langkah terakhir yakni membaca music xml yang sudah kita generate ke numerical music notation (jianpu).
MEMBACA MUSIC XML KE NUMERICAL MUSIC NOTATION (JIANPU)
Untuk dapat membaca music xml ke format numerical musix notation (jianpu) kita memerlukan sebuah program yakni musicxml_to_jianpu. Program ini ditulis dalam bahasa Python dan ada di public repositori Github. Oleh karena itu, kita perlu melakukan clone repo terlebih dahulu sebelum dapat menggunakannya. Untuk melakukan clone repo, kita ketikkan perintah berikut ini.
git clone https://github.com/lzh9102/musicxml_to_jianpu
Tunggu proses clone selesai
Setelah proses clone selesai, kita dapat segera masuk ke dalam direktori musicxml_to_jianpu untuk menjalankan programnya.
Kemudian, kita ketikkan perintah berikut untuk membaca file xml ke bentuk numerical music notation
python converter [input_file_xml]
Karena saya sudah memiliki file 125.xml maka saya ketikkan perintah berikut ini
python converter.py ../125.xml
dan berikut adalah hasilnya.
Menarik bukan? kini kita sudah mampu merekognisi file music yang semula berformat .wav ke dalam numerical music notation (Jianpu). Untuk selanjutnya, Anda dapat berkreasi sesuai dengan kreatifitas Anda.
Bagaimana? apakah sudah paham dengan tutorial ini? Jika Anda masih belum paham, Anda dapat meninggalkan komentar di kolom komentar postingan ini. Bahkan, jika Anda memiliki masalah pemrograman yang lain dan menarik untuk di bahas, Anda juga dapat mengirimkannya melalui kolom komentar postingan ini.
Semoga postingan bermanfaat bagi Anda para pembaca. Apabila ada pertanyaan mengenai postingan ini, Anda dapat meninggalkannya di kolom komentar. Dan, Apabila Anda menemukan artikel ini berguna, Anda dapat membagikannya. Anda juga dapat mencuplik beberapa bagian dari artikel ini, namun jangan lupa untuk sertakan URL nya. Terima kasih.