Site icon UNYDeveloperNetwork

Merekognisi File Musik ke Numerical Music Notation (Jianpu)

Reading Time: 5 minutes

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:

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.

^_^

Exit mobile version