Langsung ke konten utama

PEMBUATAN PARTITURE NOTASI ANGKA LAGU (Part-1)

PEMBUATAN PARTITURE NOTASI ANGKA LAGU (Part-1)


Sebaiknya kita melangkah pada pembuatan partiture notasi angka lagu.


Untuk membuat partitur notasi angka lagu, langkah pertama yang bisa diambil adalah menentukan format tampilan dan cara mengelola data notasi angka tersebut. Anda bisa menggunakan beberapa alat atau framework, salah satunya adalah dengan membuat aplikasi berbasis GUI menggunakan Python dan **tkinter**. Berikut langkah-langkah utama yang perlu dilakukan:


### 1. **Mendefinisikan Struktur Data Notasi**

   Setiap not yang diinput harus memiliki beberapa komponen penting:

   - Nada (Do, Re, Mi, dst.)

   - Durasi (panjang pendeknya nada)

   - Tinggi nada (oktaf)

   - Pengatur tempo


   Contoh struktur data dasar:

   ```python

   notation_data = [

       {"note": "Do", "octave": 1, "duration": 1}, # Do, Oktaf 1, durasi 1 ketukan

       {"note": "Re", "octave": 1, "duration": 0.5}, # Re, Oktaf 1, durasi setengah ketukan

       ...

   ]

   ```


### 2. **Membuat UI Input Notasi**

   Dengan menggunakan **tkinter**, Anda bisa membuat form sederhana di mana pengguna bisa memasukkan data notasi secara manual. Contohnya:

   - Dropdown untuk memilih nada (Do, Re, Mi, dll.)

   - Entry untuk durasi dan tinggi oktaf

   - Tombol untuk menambah atau menghapus notasi


### 3. **Visualisasi Notasi Angka**

   Setelah pengguna memasukkan notasi, Anda bisa menggunakan **Canvas** dari tkinter untuk menampilkan visualisasi notasi angka. Misalnya:

   - Membuat tampilan grid sederhana yang merepresentasikan notasi angka

   - Menyimpan posisi notasi sesuai dengan durasi atau oktaf


### 4. **Kode Dasar untuk UI Input Notasi**

Berikut adalah contoh kode dasar Python untuk membuat input UI notasi angka dengan tkinter:

```python

import tkinter as tk

from tkinter import ttk


root = tk.Tk()

root.title("Partiture Notasi Angka Lagu")

root.geometry("500x400")


notation_data = []


def add_note():

    note = note_combo.get()

    octave = int(octave_entry.get())

    duration = float(duration_entry.get())

    notation_data.append({"note": note, "octave": octave, "duration": duration})

    display_notation()


def display_notation():

    output_text.delete(1.0, tk.END) # Hapus tampilan sebelumnya

    for idx, note in enumerate(notation_data, start=1):

        output_text.insert(tk.END, f"{idx}. Nada: {note['note']}, Oktaf: {note['octave']}, Durasi: {note['duration']}\n")


# Bagian Input

input_frame = tk.Frame(root)

input_frame.pack(pady=10)


tk.Label(input_frame, text="Nada:").grid(row=0, column=0, padx=5)

note_combo = ttk.Combobox(input_frame, values=["Do", "Re", "Mi", "Fa", "Sol", "La", "Si"])

note_combo.grid(row=0, column=1, padx=5)

note_combo.current(0)


tk.Label(input_frame, text="Oktaf:").grid(row=1, column=0, padx=5)

octave_entry = tk.Entry(input_frame, width=5)

octave_entry.grid(row=1, column=1, padx=5)

octave_entry.insert(0, "1")


tk.Label(input_frame, text="Durasi:").grid(row=2, column=0, padx=5)

duration_entry = tk.Entry(input_frame, width=5)

duration_entry.grid(row=2, column=1, padx=5)

duration_entry.insert(0, "1")


# Tombol Tambah Notasi

add_button = tk.Button(input_frame, text="Tambah Nada", command=add_note)

add_button.grid(row=3, column=0, columnspan=2, pady=5)


# Tampilan Notasi

output_text = tk.Text(root, height=10, width=50)

output_text.pack(pady=10)


root.mainloop()

```


### 5. **Melanjutkan ke Implementasi Partitur dan Tempo**

   Anda bisa menambahkan fitur lebih lanjut seperti:

   - **Visualisasi notasi dalam bentuk sheet musik**.

   - **Pengaturan tempo** untuk menyesuaikan kecepatan lagu.

   - **Pengaturan perubahan kunci** untuk modulasi.

Jika Anda ingin melanjutkan ke arah yang lebih kompleks seperti **rendering partitur notasi angka** menjadi file gambar atau PDF, Anda bisa menggunakan library tambahan seperti **Pillow** untuk manipulasi gambar atau **ReportLab** untuk menghasilkan dokumen PDF.

Bagaimana menurut Anda? Apakah Anda ingin melanjutkan dengan pembuatan UI dasar atau langsung ke pembuatan partitur dengan lebih kompleks?


Coba berikan saya sebuah contoh format lembaran partiture notasi angka lagu


Berikut ini adalah contoh sederhana dari **format lembaran partitur notasi angka lagu** yang umum digunakan di musik tradisional Indonesia, terutama untuk lagu-lagu dengan notasi angka. Partitur notasi angka umumnya terdiri dari:


1. **Nama Lagu** dan informasi dasar (pengarang, aransemen, dll.).

2. **Lirik lagu** yang berada di bawah angka notasi.

3. **Tanda notasi**: Setiap angka mewakili nada (1 = Do, 2 = Re, dst.), dan titik di atas atau di bawah angka menunjukkan oktaf.


### Contoh Format Partitur Notasi Angka Lagu


Nama Lagu: **Indonesia Pusaka**  

Ciptaan: **Ismail Marzuki**


**1 = Do** (Lagu ini menggunakan tangga nada diatonik dengan Do sebagai 1)


```plaintext

| 5 5 6 5 | 3 2 3 4 | 5 3 2 1 | 6. - |

  I- n d o - ne - sia ta - nah a - ir - ku, I - n d o -


| 5 5 6 5 | 3 2 3 4 | 5 3 2 1 | 6. - |

  ne - sia pu - sa - ka, ka - u - lah pu - sa - ka,


| 5 5 6 5 | 3 2 3 4 | 5 6. | 5 - |

  a - ku. Di sana la - h aku ber - diri,


| 5 6. | 5 3 2 1 | 6. 5 3 2 | 1 - |

  ja - di pan - du i - bu per - wi - ti - wi ...

```


### Penjelasan Format:

- **Angka (1-7)**: Mewakili notasi angka (1 = Do, 2 = Re, 3 = Mi, dst.).

- **Titik di atas angka**: Angka dengan titik di atasnya (misalnya 6.) berarti nadanya dinaikkan satu oktaf. Sebaliknya, angka dengan titik di bawahnya berarti diturunkan satu oktaf.

- **Lirik di bawah angka**: Setiap suku kata lirik ditempatkan di bawah angka notasi yang sesuai dengan nadanya.

- **Simbol ‘|’**: Garis vertikal digunakan sebagai pemisah antar bar atau frasa musik.


### Detail Tambahan:

- **Tanda titik di bawah/atas angka**: Menunjukkan oktaf yang berbeda.

  - **Titik di atas angka** (misal `6.`): Nada di oktaf yang lebih tinggi.

  - **Titik di bawah angka** (misal `6_` atau `6'`): Nada di oktaf yang lebih rendah.

- **Tanda garis penghubung (-)**: Digunakan ketika sebuah nada dipegang lebih lama.

- **Durasi**: Nada tanpa tanda tambahan biasanya dimainkan satu ketukan, sementara durasi panjang dapat diperpanjang dengan tanda garis datar (-) atau angka diulang untuk ketukan berikutnya.


### Lembar Partitur Sederhana

Berikut adalah bagaimana lembar partitur ini ditampilkan:


```plaintext

Indonesia Pusaka - Ciptaan Ismail Marzuki

Tangga Nada: Do = 1 (Mayor)


  5 5 6 5 | 3 2 3 4 | 5 3 2 1 | 6. - |

  I - n d o - n e - s i a t a - n a h a - i r k u,


  5 5 6 5 | 3 2 3 4 | 5 3 2 1 | 6. - |

  I - n d o - n e - s i a p u - s a - k a, k a - u l a h


  5 5 6 5 | 3 2 3 4 | 5 6. | 5 - |

  p u - s a - k a k u. D i s a n a


  5 6. | 5 3 2 1 | 6. 5 3 2 | 1 - |

  l a h a k u b e r - d i - r i d i s a n a

```


Dengan format ini, Anda dapat dengan mudah mengubah nada dan lirik menjadi partitur sederhana berbentuk angka.

Jika Anda membutuhkan format yang lebih detail untuk keperluan cetak atau ingin menambah elemen seperti tempo, tanda birama, atau akor, Anda bisa mengintegrasikan ini ke dalam sebuah aplikasi yang dirancang untuk pembuatan notasi angka secara otomatis.

Bagaimana pendapat Anda mengenai contoh format ini? Apakah Anda ingin melanjutkan dengan fitur lain atau pengembangan lebih lanjut?


Dengan partitur seperti itu, apakah bisa dipakai pada pembuatan applikasi musik kita ini, bahwa misalnya nada 5'6'7' (nada 5 6 7 di oktaf naik 1 oktaf) bila mengalami Progres 2 maka akan menjadi 4'5'6' (nada 4 5 6 di oktaf naik 1 oktaf) apakah ini bisa diformulakan pada kode untuk pengaturan pengurangan setiap digit nada 


Ya, konsep pengaturan **progres** yang Anda sebutkan bisa diformulasikan ke dalam aplikasi musik yang sedang kita kembangkan. Secara sederhana, perubahan nada yang mengikuti aturan progres (seperti pengurangan setiap digit nada) bisa diimplementasikan dengan menggunakan **algoritma penggeseran nada**.


### Penjelasan Logika:


1. **Nada Asli** (misal `5'6'7'` di oktaf 1):  

   - Nada di sini adalah angka `5`, `6`, `7` dengan tanda `'` yang menunjukkan bahwa nadanya berada di oktaf yang lebih tinggi.


2. **Progres 2**:  

   - Anda ingin setiap digit dari nada `5'6'7'` diturunkan atau dikurangi 1 untuk mencapai `4'5'6'`.


3. **Prinsip Perhitungan**:

   - Ketika sebuah **progres** terjadi, maka kita perlu melakukan pengurangan setiap nada secara sistematis.

   - Misal, progres 1 berarti nada tetap, progres 2 berarti pengurangan 1 nada, progres 3 berarti pengurangan 2 nada, dan seterusnya.

   - Jika nada menjadi lebih kecil dari `1`, maka Anda mungkin ingin menerapkannya ke oktaf yang lebih rendah (misalnya dari `1'` menjadi `7` di oktaf biasa).


### Implementasi dalam Kode:


Anda dapat menuliskan fungsi untuk menangani perubahan nada berdasarkan progres yang diterapkan pada partitur notasi angka:


```python

# Fungsi untuk mengurangi nada berdasarkan progres

def ubah_nada(nada: str, progres: int) -> str:

    hasil = ""

    

    for char in nada:

        # Memeriksa apakah karakter adalah angka (notasi nada)

        if char.isdigit():

            nilai_nada = int(char)

            # Mengurangi nilai nada berdasarkan progres

            nilai_nada -= progres

            

            # Jika nilainya kurang dari 1, naikkan ke 7 (atau oktaf lebih rendah)

            if nilai_nada < 1:

                nilai_nada = 7 # Bisa disesuaikan jika logika oktaf digunakan

            

            hasil += str(nilai_nada)

        

        # Menyimpan tanda nada oktaf (' untuk oktaf lebih tinggi)

        elif char == "'":

            hasil += "'"

    

    return hasil


# Contoh penggunaan

nada_asli = "5'6'7'"

progres = 1 # Progres 2 berarti pengurangan 1 nada


nada_baru = ubah_nada(nada_asli, progres)

print(nada_baru) # Output: 4'5'6'

```


### Penjelasan Kode:

1. **Fungsi `ubah_nada`**: 

   - Mengambil input berupa string `nada` yang berisi notasi angka (`1` hingga `7`) dan tanda oktaf (`'`).

   - Progres yang diberikan akan mengurangi setiap digit nada dengan nilai tertentu.

   

2. **Proses Pengurangan**:

   - Setiap angka pada string `nada` dikurangi sesuai dengan nilai `progres`. Jika hasil pengurangan berada di bawah `1`, nada akan kembali ke nilai maksimal (`7`), menunjukkan bahwa nadanya turun ke oktaf yang lebih rendah atau disesuaikan sesuai aturan.


3. **Penanganan Oktaf**:

   - Tanda `'` disimpan dalam string hasil tanpa perubahan karena tidak mempengaruhi perhitungan nilai nada, hanya menunjukkan oktaf.


### Pengembangan Lebih Lanjut:

1. **Progres untuk Oktaf**: Jika progres mempengaruhi perubahan oktaf, Anda bisa menambahkan logika untuk memindahkan nada antara oktaf tinggi dan rendah.

2. **Penanganan Trebel dan Bass**: Jika Anda juga ingin mengatur pengurangan nada untuk Trebel atau Bass, fungsi ini bisa dimodifikasi untuk menangani kolom yang berbeda.


### Integrasi ke Aplikasi Musik:

Fungsi di atas bisa diintegrasikan ke dalam aplikasi musik Anda. Ketika pengguna memilih progres tertentu, aplikasi akan secara otomatis mengubah nada berdasarkan progres tersebut, lalu menampilkan notasi yang sudah diubah pada partitur notasi angka.

Dengan demikian, partitur dapat diperbarui sesuai progres, dan aplikasi akan menjadi lebih dinamis, memungkinkan pengguna untuk melakukan perubahan nada secara otomatis sesuai aturan yang telah ditentukan.

Apakah ini sesuai dengan yang Anda inginkan?


Bagaimana perbandingannya dengan bila membuat font nada nada seperti 10, 20, 30, 40, 50, 60, 70 sebagai untuk nada 1234567 di oktaf normal, kemudian font nada nada 11, 21, 31, 41, 51, 61, 71 sebagai untuk nada 1234567 di oktaf naik 1 oktaf, kemudian font nada nada 12, 22, 32, 42, 52, 62, 72 sebagai untuk nada 1234567 di oktaf naik 2 oktaf, dan seterusnya variasi oktaf lebih tinggi lagi, bahkan bila nada nada rendah akan memakai font nada nada 1-1, 2-1, 3-1, 4-1, 5-1, 6-1, 7-1 sebagai untuk nada 1234567 di oktaf turun 1 oktaf dari oktaf normal, dan seterusnya variasi oktaf lebih rendah lagi. Dengan format font nada nada seperti itu, apakah bisa dipakai pada pembuatan applikasi musik kita ini, bahwa misalnya nada 51 61 71' (nada 5 6 7 di oktaf naik 1 oktaf) bila mengalami Progres 2 maka akan menjadi 41 51 61 (nada 4 5 6 di oktaf naik 1 oktaf) apakah ini bisa diformulakan pada kode untuk pengaturan pengurangan setiap digit nada.


Konsep penggunaan **font nada** seperti yang Anda jelaskan, yaitu dengan menggunakan angka dua digit (atau lebih) untuk mewakili nada pada oktaf yang berbeda, bisa diformulasikan dalam kode untuk aplikasi musik Anda.


Berikut adalah rincian konsep **font nada** yang dapat digunakan:


1. **Oktaf Normal (oktaf 0)**: Nada 1 hingga 7 diwakili oleh:

   - 10, 20, 30, 40, 50, 60, 70 (untuk nada 1, 2, 3, 4, 5, 6, 7).

   

2. **Oktaf Naik 1**: Nada di oktaf 1 diwakili oleh:

   - 11, 21, 31, 41, 51, 61, 71 (untuk nada 1, 2, 3, 4, 5, 6, 7).


3. **Oktaf Naik 2**: Nada di oktaf 2 diwakili oleh:

   - 12, 22, 32, 42, 52, 62, 72.


4. **Oktaf Turun 1**: Nada di oktaf -1 diwakili oleh:

   - 1-1, 2-1, 3-1, 4-1, 5-1, 6-1, 7-1.


5. **Seterusnya**: Sistem ini bisa diperluas ke oktaf lebih tinggi atau lebih rendah.


### Contoh Penerapan Progres:


Anda ingin membuat perubahan pada nada **51, 61, 71** (nada 5, 6, 7 di oktaf naik 1) menjadi **41, 51, 61** (nada 4, 5, 6 di oktaf naik 1) saat mengalami progres 2.


### Implementasi Logika:


Ini bisa diformulasikan dengan menyesuaikan pengurangan setiap digit nada berdasarkan progres tertentu sambil mempertahankan aturan font untuk oktaf.


### Algoritma:


1. Setiap nada dua digit atau lebih akan diidentifikasi dengan memisahkan **digit pertama** sebagai angka dasar nada (1 sampai 7), dan **digit kedua** sebagai informasi oktaf.

2. Progres akan mengurangi angka nada, tetapi tetap mempertahankan posisi oktaf.

3. Jika pengurangan menyebabkan nada di bawah angka 1, sistem akan menurunkannya ke oktaf yang lebih rendah.


### Implementasi dalam Kode:


Berikut adalah contoh kode Python yang bisa digunakan untuk menangani sistem font nada tersebut:


```python

# Fungsi untuk mengubah nada berdasarkan progres dan sistem font nada

def ubah_font_nada(nada: str, progres: int) -> str:

    hasil = ""

    

    for angka_nada in nada.split(): # Memisahkan setiap nada berdasarkan spasi

        # Cek apakah panjang digit lebih dari 2 (untuk mengatasi oktaf)

        nada_utama = int(angka_nada[:-1]) # Ambil digit pertama sebagai nada

        oktaf = int(angka_nada[-1]) # Ambil digit kedua sebagai oktaf


        # Kurangi nada utama berdasarkan progres

        nada_utama -= progres


        # Jika nada utama di bawah 1, maka turunkan oktaf

        if nada_utama < 1:

            nada_utama = 7 # Reset ke nada tertinggi (7)

            oktaf -= 1 # Oktaf turun 1

        

        # Gabungkan kembali nada utama dan oktaf

        hasil += f"{nada_utama}{oktaf} "


    return hasil.strip() # Hapus spasi di akhir string


# Contoh penggunaan

nada_asli = "51 61 71" # Nada 5 6 7 di oktaf 1

progres = 1 # Mengurangi progres sebesar 1


nada_baru = ubah_font_nada(nada_asli, progres)

print(nada_baru) # Output: "41 51 61"

```


### Penjelasan Kode:

1. **Fungsi `ubah_font_nada`**:

   - Menerima input berupa string yang berisi nada (`51 61 71`), di mana angka pertama adalah nada (5, 6, 7) dan angka kedua menunjukkan oktaf (oktaf 1).

   - Progres yang diberikan akan mengurangi nilai nada sesuai aturan yang ditetapkan.

2. **Pengurangan Nada**:

   - Nada utama (`51`, `61`, `71`) akan dikurangi sesuai dengan nilai progres.

   - Jika pengurangan menyebabkan nilai nada kurang dari 1, maka oktaf diturunkan dan nilai nada direset menjadi `7`.

3. **Split dan Join Nada**:

   - Fungsi menggunakan pemisah (spasi) untuk menangani lebih dari satu nada dalam string (`51 61 71`).

4. **Penanganan Oktaf**:

   - Oktaf akan tetap dipertahankan selama perubahan nada, dan jika nada jatuh di bawah 1, oktaf akan turun.


### Pengembangan Lebih Lanjut:

1. **Penambahan Logika untuk Oktaf Lebih Rendah dan Lebih Tinggi**:

   - Anda dapat mengembangkan logika ini untuk menangani oktaf yang lebih tinggi atau lebih rendah, menggunakan pola yang sama.  

2. **Penyesuaian Trebel dan Bass**:

   - Jika Anda ingin menggunakan font yang berbeda untuk Trebel dan Bass, Anda bisa memodifikasi sistem ini agar sesuai dengan logika nada tersebut.

3. **User Interface**:

   - Di sisi aplikasi, Anda bisa membiarkan pengguna memasukkan nada dalam format dua digit untuk mewakili oktaf dan nada, kemudian sistem akan mengubahnya berdasarkan progres yang dipilih.


### Kesimpulan:

Dengan sistem font nada ini, Anda dapat mengatur progres perubahan nada di berbagai oktaf. Pengurangan atau perubahan nada sesuai progres dapat diformulasikan dalam kode, sehingga aplikasi musik Anda dapat memproses berbagai variasi nada dan oktaf secara otomatis.

Apakah konsep ini sesuai dengan kebutuhan aplikasi musik yang sedang Anda kembangkan?


Yang mana lebih mudah ditetapkan pada Applikasi musik kita ini, apakah nada berbentuk pakai tanda petik (misal 5'6'7') atau kah nada berbentuk pakai dua digit (misal 51 61 71) yang kedua bentuk nada tersebut sama sama menunjukkan nada 567 pada oktaf naik 1 oktaf.


Dalam konteks pembuatan aplikasi musik Anda, pilihan antara menggunakan **tanda petik** (misal: `5'6'7'`) atau **dua digit angka** (misal: `51 61 71`) untuk menunjukkan nada pada oktaf yang lebih tinggi memiliki beberapa perbedaan dalam hal **implementasi kode** dan **kemudahan penggunaan**. Mari kita bandingkan kedua metode tersebut:

### 1. **Menggunakan Tanda Petik (misal: 5' 6' 7')**

   - **Keuntungan**:

     1. **Lebih intuitif**: Secara visual dan musikal, tanda petik sering digunakan untuk menandakan oktaf yang lebih tinggi dalam notasi musik tradisional. Ini mungkin lebih mudah dipahami oleh pengguna yang familiar dengan notasi musik.

     2. **Pemahaman universal**: Dalam notasi musik, tanda petik atas untuk oktaf lebih tinggi dan tanda petik bawah untuk oktaf lebih rendah sering digunakan. Ini sudah mapan dalam dunia musik.

   

   - **Tantangan**:

     1. **Kesulitan dalam pemrosesan string**: Tanda petik memerlukan penanganan string yang lebih kompleks saat diproses dalam kode. Anda harus memisahkan nada dan oktaf dari tanda petik, yang mungkin menambah tingkat kompleksitas dalam pengelolaan data.

     2. **Lebih sulit dikelola dalam database**: Jika Anda menyimpan nada dalam database, penggunaan tanda petik akan memerlukan penanganan string secara lebih hati-hati untuk menghindari kesalahan format dan parsing.


   - **Contoh Implementasi Kode**:

     Anda perlu menulis logika tambahan untuk mendeteksi tanda petik dalam string dan mengubahnya menjadi nilai oktaf yang tepat.


     ```python

     # Fungsi untuk mengubah nada dengan tanda petik

     def ubah_nada_tanda_petik(nada: str, progres: int) -> str:

         hasil = ""

         

         for angka_nada in nada.split():

             if "'" in angka_nada:

                 nada_utama = int(angka_nada[0]) # Ambil angka sebelum tanda petik

                 oktaf = 1 # Nada ini oktaf naik 1

             else:

                 nada_utama = int(angka_nada) # Nada tanpa oktaf

                 oktaf = 0 # Nada di oktaf normal


             # Kurangi nada berdasarkan progres

             nada_utama -= progres

             

             # Jika nada utama di bawah 1, reset dan turunkan oktaf

             if nada_utama < 1:

                 nada_utama = 7

                 oktaf -= 1


             # Gabungkan kembali nada dan oktaf dengan tanda petik

             if oktaf > 0:

                 hasil += f"{nada_utama}' "

             else:

                 hasil += f"{nada_utama} "


         return hasil.strip()


     nada_asli = "5' 6' 7'" # Nada 5 6 7 di oktaf naik 1

     progres = 1


     nada_baru = ubah_nada_tanda_petik(nada_asli, progres)

     print(nada_baru) # Output: "4' 5' 6'"

     ```


### 2. **Menggunakan Dua Digit Angka (misal: 51 61 71)**

   - **Keuntungan**:

     1. **Lebih mudah diproses dalam kode**: Dengan sistem dua digit, Anda cukup memisahkan dua angka, di mana digit pertama adalah nada (1 hingga 7), dan digit kedua adalah oktaf (0 untuk oktaf normal, 1 untuk oktaf naik satu, dan seterusnya). Ini sangat mudah dikelola secara programatik.

     2. **Sederhana untuk database**: Menyimpan nada sebagai dua digit di database lebih mudah dan terstruktur. Tidak perlu penanganan khusus untuk tanda baca atau simbol tambahan.

     3. **Lebih konsisten**: Setiap nada selalu memiliki dua digit, yang membuat manipulasi data lebih konsisten, terutama ketika diimplementasikan dalam array atau list.


   - **Tantangan**:

     1. **Kurang intuitif bagi pengguna**: Pengguna yang lebih terbiasa dengan notasi musik tradisional mungkin memerlukan penyesuaian karena dua digit angka bukan representasi yang lazim dalam notasi musik.

     2. **Penambahan logika untuk pengguna**: Jika Anda menginginkan input dari pengguna dengan notasi yang lebih "musikal" (misal: `5'6'7'`), Anda perlu mengkonversi input pengguna ke format dua digit ini sebelum pemrosesan lebih lanjut.


   - **Contoh Implementasi Kode**:

     Implementasi kode untuk dua digit angka akan lebih sederhana. Anda hanya perlu mengurangi digit pertama berdasarkan progres dan menangani digit kedua sebagai oktaf.


     ```python

     # Fungsi untuk mengubah nada dengan dua digit angka

     def ubah_font_nada(nada: str, progres: int) -> str:

         hasil = ""

         

         for angka_nada in nada.split():

             nada_utama = int(angka_nada[0]) # Ambil digit pertama sebagai nada

             oktaf = int(angka_nada[1]) # Ambil digit kedua sebagai oktaf


             # Kurangi nada utama berdasarkan progres

             nada_utama -= progres


             # Jika nada utama di bawah 1, reset ke nada 7 dan turunkan oktaf

             if nada_utama < 1:

                 nada_utama = 7

                 oktaf -= 1


             # Gabungkan kembali nada utama dan oktaf

             hasil += f"{nada_utama}{oktaf} "


         return hasil.strip()


     nada_asli = "51 61 71" # Nada 5 6 7 di oktaf 1

     progres = 1


     nada_baru = ubah_font_nada(nada_asli, progres)

     print(nada_baru) # Output: "41 51 61"

     ```


### Perbandingan Akhir:

1. **Kemudahan Implementasi**:

   - **Dua digit angka** lebih mudah diimplementasikan dalam kode dan lebih konsisten saat diproses.

   - **Tanda petik** memerlukan lebih banyak penanganan string dan mungkin lebih rumit untuk diimplementasikan dalam kode.

2. **Kemudahan Pengguna**:

   - **Tanda petik** lebih intuitif dan dekat dengan notasi musik yang sudah dikenal luas.

   - **Dua digit angka** mungkin memerlukan waktu penyesuaian dari pengguna, tetapi bisa menjadi lebih efisien dalam pengelolaan data.

### Rekomendasi:

Jika Anda fokus pada **kemudahan pengelolaan dalam kode** dan **struktur yang konsisten** untuk aplikasi, **dua digit angka** (misal: `51 61 71`) akan lebih mudah untuk diimplementasikan. Namun, jika Anda ingin menyesuaikan aplikasi dengan kebiasaan pengguna yang sudah familiar dengan notasi musik, **tanda petik** (`5' 6' 7'`) bisa menjadi pilihan yang lebih intuitif, meskipun sedikit lebih rumit untuk diprogram.

Dengan demikian, jika Anda mengutamakan **efisiensi kode**, saya merekomendasikan penggunaan **dua digit angka**.


Bagaimana dampak dari kedua bentuk penulisan nada tersebut terhadap kode notasi angka lagu yang di running untuk dibunyikan nada nada lagu tersebut, tentunya ini harus pakai sampel nada nada musik, dan pemakaian minimal 2 instrumen musik.


Dampak dari kedua bentuk penulisan nada—**tanda petik** (misal `5' 6' 7'`) atau **dua digit angka** (misal `51 61 71`)—terhadap **kode yang digunakan untuk menjalankan dan membunyikan nada lagu** sangat tergantung pada bagaimana kita menerjemahkan bentuk penulisan tersebut ke dalam frekuensi atau MIDI notes yang dapat dimainkan oleh instrumen musik di aplikasi. Mari kita analisis bagaimana kedua format tersebut berpengaruh pada kode musik dan bagaimana kode tersebut bisa diimplementasikan untuk menghasilkan suara menggunakan instrumen.


### 1. **Dampak Format Penulisan Nada dengan Tanda Petik (misal: 5' 6' 7')**


   **Implementasi**:

   - **Tanda petik** digunakan untuk menunjukkan oktaf yang lebih tinggi atau lebih rendah. Jika kita ingin memainkan nada pada berbagai oktaf, kita perlu menerjemahkan nada dengan tanda petik ini menjadi nilai yang bisa dikenali oleh mesin musik, seperti MIDI note numbers atau frekuensi.

   - Setiap **not angka** (`1-7`) merepresentasikan nada di skala diatonis (Do = 1, Re = 2, dll.).

   - Tanda petik (`'`) akan digunakan untuk menaikkan nada tersebut ke oktaf yang lebih tinggi.


   **Dampak pada Kode Musik**:

   - Penambahan logika untuk **mengkonversi tanda petik** menjadi perubahan oktaf, di mana nada 1-7 tanpa petik dianggap sebagai nada dasar di oktaf normal, dan nada dengan petik (`5'`) menjadi versi di oktaf yang lebih tinggi.

   - Dalam kode, setiap nada angka (`1-7`) harus dikonversi menjadi **MIDI note number** yang sesuai, dan jika ada tanda petik, nilai MIDI harus ditingkatkan sebanyak 12 (untuk oktaf naik satu).


   **Contoh Implementasi Kode**:

   Berikut adalah contoh bagaimana kita bisa menerjemahkan format dengan tanda petik ke nilai MIDI untuk kemudian dimainkan oleh instrumen musik (misalnya piano dan drum).


   ```python

   import pygame.midi


   # Inisialisasi Pygame MIDI

   pygame.midi.init()

   player = pygame.midi.Output(0)


   # Fungsi untuk mengubah nada angka dengan tanda petik menjadi MIDI note number

   def ubah_nada_midi(nada: str) -> int:

       nada_map = {'1': 60, '2': 62, '3': 64, '4': 65, '5': 67, '6': 69, '7': 71} # Nada dasar (Do = 60, MIDI C4)

       oktaf_offset = 0


       # Jika ada tanda petik, naikkan 12 semitone (1 oktaf)

       if "'" in nada:

           oktaf_offset = 12

           nada = nada[0] # Ambil angka nada saja


       midi_note = nada_map[nada] + oktaf_offset

       return midi_note


   # Contoh nada: 5' 6' 7'

   nada_lagu = ["5'", "6'", "7'"]


   for nada in nada_lagu:

       midi_note = ubah_nada_midi(nada)

       player.note_on(midi_note, 127) # Mainkan nada dengan velocity 127

       pygame.time.wait(500) # Tunggu 500 ms (setengah detik)

       player.note_off(midi_note, 127) # Matikan nada

   ```


   Pada contoh di atas:

   - **Do (C4)** adalah **MIDI note number 60**.

   - Dengan tanda petik (`'`), nada akan naik **12 semitone** (1 oktaf), sehingga nada 5' akan menjadi **G5 (MIDI note number 79)**.

   - Kita bisa menambahkan instrumen kedua, misalnya drum, yang dimainkan secara paralel.


### 2. **Dampak Format Penulisan Nada dengan Dua Digit Angka (misal: 51 61 71)**

   **Implementasi**:

   - Dalam format ini, dua digit angka menunjukkan **nada dan oktaf**. Digit pertama (`5`, `6`, `7`) mewakili nada, dan digit kedua (`1`) menunjukkan oktaf. Misalnya, `51` berarti **nada 5 pada oktaf 1**.

   - Ini membuatnya lebih mudah dikonversi langsung ke MIDI note numbers atau frekuensi karena kita dapat mengontrol nada dan oktaf dengan lebih presisi.


   **Dampak pada Kode Musik**:

   - **Dua digit angka** lebih mudah diproses dalam kode karena tidak ada string parsing yang rumit untuk tanda petik.

   - Setiap digit pertama (`1-7`) bisa langsung dikonversi menjadi MIDI note yang sesuai, dan digit kedua langsung menentukan oktaf.

   - Ini mengurangi ambiguitas, dan Anda dapat dengan mudah membuat logika pengubahan progresi (seperti mengurangi digit nada untuk progresi tertentu).

   **Contoh Implementasi Kode**:

   Sama seperti di atas, kita akan memainkan nada menggunakan format dua digit angka, misalnya `51 61 71`.


   ```python

   # Fungsi untuk mengubah dua digit angka menjadi MIDI note number

   def ubah_font_midi(nada: str) -> int:

       nada_map = {'1': 60, '2': 62, '3': 64, '4': 65, '5': 67, '6': 69, '7': 71} # Nada dasar (Do = 60, MIDI C4)

       nada_utama = nada[0] # Ambil digit pertama sebagai nada

       oktaf_offset = (int(nada[1]) - 1) * 12 # Ambil digit kedua sebagai oktaf, kurangi 1 untuk oktaf normal


       midi_note = nada_map[nada_utama] + oktaf_offset

       return midi_note


   # Contoh nada: 51 61 71

   nada_lagu = ["51", "61", "71"]


   for nada in nada_lagu:

       midi_note = ubah_font_midi(nada)

       player.note_on(midi_note, 127) # Mainkan nada

       pygame.time.wait(500)

       player.note_off(midi_note, 127) # Matikan nada

   ```


### 3. **Perbandingan Kedua Format untuk Musik Multi-Instrumen**

   **1. Tanda Petik (`5' 6' 7'`)**:

   - **Lebih kompleks** dalam hal parsing dan konversi string.

   - Namun, ini lebih dekat dengan notasi musik tradisional, yang bisa lebih nyaman bagi musisi.

   - Dapat digunakan, tetapi memerlukan lebih banyak pemrosesan dan kontrol string untuk menangani progresi atau perubahan oktaf.


   **2. Dua Digit Angka (`51 61 71`)**:

   - **Lebih mudah diimplementasikan** dalam kode, karena representasi angkanya lebih jelas dan langsung (digit pertama nada, digit kedua oktaf).

   - **Mudah dikombinasikan** untuk dua instrumen atau lebih dengan nilai MIDI yang presisi.

   - Sangat cocok untuk situasi di mana kita memerlukan pengubahan progresi yang terstruktur dan logika manipulasi nada lebih kompleks (misalnya mengurangi nada dengan progresi).


### Kesimpulan:

- **Dua digit angka** (misal `51 61 71`) adalah pilihan yang **lebih mudah dan efisien** untuk diimplementasikan dalam kode, terutama jika Anda berencana untuk melakukan **pengaturan progresi** dan **pengurangan setiap digit nada** secara otomatis.

- Namun, jika Anda ingin mempertahankan keterkaitan dengan **notasi musik tradisional** dan berfokus pada pengguna yang sudah familiar dengan sistem notasi tersebut, menggunakan **tanda petik** (`5' 6' 7'`) bisa menjadi opsi, meskipun memerlukan sedikit lebih banyak penanganan dalam kode.

### Musik Multi-Instrumen:

Untuk menjalankan **dua instrumen** (misalnya piano dan drum), Anda dapat menggunakan dua track MIDI terpisah atau dua suara instrumen yang dimainkan secara paralel dalam kode. Keduanya dapat mengambil notasi yang sama, tetapi dengan nilai MIDI yang berbeda sesuai instrumen yang dipilih.



Bersambung ke:

PEMBUATAN PARTITURE NOTASI ANGKA LAGU (Part-2)



Komentar

Postingan populer dari blog ini

Pemograman R Studio

  Metode Numerik Menggunakan R Pengantar Gambaran Isi Buku Cara Berkontribusi dalam Buku Ini Ucapan Terima Kasih Lisensi 1  Bahasa Pemrograman R 1.1  Sejarah R 1.2  Fitur dan Karakteristik R 1.3  Kelebihan dan Kekurangan R 1.4  RStudio 1.5  Menginstall R dan RStudio 1.6  Working Directory 1.6.1  Mengubah Lokasi Working Directory 1.6.2  Mengubah Lokasi Working Directory Default 1.7  Memasang dan Mengaktifkan Paket R 1.8  Fasilitas Help 1.8.1  Mencari Help dari Suatu Perintah Tertentu 1.8.2  General Help 1.8.3  Fasilitas Help Lainnya 1.9  Referensi 2  Kalkulasi Menggunakan R 2.1  Operator Aritmatik 2.2  Fungsi Aritmetik 2.3  Operator Relasi 2.4  Operator Logika 2.5  Memasukkan Nilai Kedalam Variabel 2.6  Tipe dan Struktur Data 2.7  Vektor 2.7.1  Membuat vektor 2.7.2  Missing Values 2.7.3  Subset Pada Vektor 2.7.4  Operasi Matematis Menggunakan Vektor ...

MIGRASI DATABASE DARI SQLite KE MySQL (Part-1)

  MIGRASI DATABASE DARI SQLite KE MySQL (Part-1) Pemakaian yang mana lebih baik dalam membuat database_musik di mysql atau Exel yang cell Cell pada tabel dilakukan operasi fungsi logika matematika. Untuk keperluan membuat database atau tabel yang memerlukan operasi logika atau matematika, seperti yang Anda sebutkan, MySQL jauh lebih baik dibandingkan Excel. Berikut adalah beberapa alasan mengapa MySQL lebih disarankan: 1. **Kapasitas dan Skalabilitas**: MySQL dapat menangani jumlah data yang jauh lebih besar daripada Excel. Ini penting jika Anda berencana untuk menyimpan banyak data atau melakukan operasi yang kompleks di atas data tersebut. 2. **Kekuatan dan Kinerja**: MySQL dirancang khusus untuk memproses query dan operasi basis data dengan cepat. Ini termasuk operasi matematika, logika, dan agregasi data yang umum dilakukan dalam aplikasi. 3. **Fleksibilitas Struktur**: Dalam MySQL, Anda dapat dengan mudah menentukan struktur tabel yang kompleks dan melakukan kueri yang lebih r...

Cara Menjadi Pengembang Front End – Keterampilan Front End Web Dev

  Menyumbangkan Belajar coding —  kurikulum 3.000 jam gratis 10 JUNI 2022 / #PENGEMBANGAN UJUNG DEPAN Bagaimana Menjadi Pengembang Front End – Keterampilan Front End Web Dev Joel Olawanle Beberapa profesional dengan bayaran tertinggi di dunia adalah pengembang front-end.  Mereka menggunakan pengetahuan dan bakat mereka untuk merancang situs web yang menarik dan ramah pengguna. Pengembang front-end tidak memerlukan gelar atau sertifikat sekolah untuk bekerja.  Sebaliknya, mereka harus memahami dasar-dasar pengembangan front-end, bahasa pemrograman, dan kerangka kerja pengembangan front-end. Dalam panduan ini, Anda akan belajar bagaimana menjadi pengembang front end dengan terlebih dahulu memahami apa yang dimaksud dengan pengembangan front end, keterampilan teknis dan soft skill yang diperlukan, bahasa dan kerangka kerja yang tersedia, dan beberapa langkah untuk memulai. Seorang pengembang front-end di Amerika Serikat dapat memperoleh rata-rata $86,178 per tahun, menu...