KONVERSI FREKWENSI NADA 8ISTEM 8 TET (12 NADA PER OKTAF) KE 8ISTEM 12 TET (20 NADA PER OKTAF DALAM PEMBUATAN KEYBOARD DIGITAL
KONVERSI FREKWENSI NADA 8ISTEM 8 TET (12 NADA PER OKTAF) KE 8ISTEM 12 TET (20 NADA PER OKTAF DALAM PEMBUATAN KEYBOARD DIGITAL 1 OKTAF
Sementara waktu karena belum tersedia ukuran baku atau standarisasi internasional akan frekwensi nada nada sistem 12 TET (20 nada per oktaf) maka sebagai contoh bisa dilakukan konversi frekwensi nada dari sistem 8 TET (12 nafa per oktaf) ke sistem 12 TET, (20 nada pet oktaf ) dengan asumsj frekwensi nada belum benar, berikut ini:
- Nada G#4 = 415,30 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada A4 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar A4 = 416,49 Hz
- Nada A4 = 440,00 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada A#4 di sistem 12 TET (20 nada per oktaf), Ftekwensi yang benar A#4 = 440,00 Hz
- Nada A#4 = 466,16 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada B4 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar B4 = 464,86 Hz
- Nada B4 = 493,88 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada B#4 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar B#4 = 491,08 Hz
- Nada C5 = 524,25 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada C4 di sistem 12 TET (20 nada per oktaf). . Ftekwensi yang benar C4 = 518,80 Hz
- Nada C#5 = 554,37 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada C#4 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar C#4 = 548,108 Hz
- Nada D5 = 587,33 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada D4 di sistem 12 TET (20 nada per oktaf). . Ftekwensi yang benar D4 = 579,084 Hz
- Nada D#5 = 622,25 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada E5 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar E5 = 611,776 Hz
- Nada E5 = 659,25 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada E#5 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar E#5 = 646,316 Hz
- Nada F5 = 698,46 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada F5 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar F5 = 682,792 Hz
- Nada F#5 = 739,99 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada F#5 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar F#5 = 72138 Hz
- Nada G5 = 784,00 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada G5 di sistem 12 TET (20 nada per oktaf). Ftekwensi yang benar G5 = 762,124 Hz
- Nada G#5 = 830,61 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada G#5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar G#5 = 805,156 Hz
- Nada A5 = 880,00 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada H5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar H5 = 850,608 Hz
- Nada A#5 = 932,33 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada di H#5 sistem 12 TET (20 nada per oktaf). Frekwensi yang benar H#5 = 898,612 Hz
- Nada B5 = 987,77 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada I5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar I5 = 949,388 Hz
- Nada C6 = 1046,50 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada J5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar J5 = 1002,98 Hz
- Nada C#6 = 1108,73 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada J#5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar J#5 = 1059,608 Hz
- Nada D6 = 1174,66 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada K5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar K5 = 1119,448 Hz
- Nada D#6 = 1244,51 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada K#5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar K#5 = 1182,676 Hz
- Nada E6 = 1318,51 Hz sistem 8 TET (12 nada per oktaf) dipakai sebagai nada A5 di sistem 12 TET (20 nada per oktaf). Frekwensi yang benar A5 = 1249,468 Hz
Kita hanya bisa mendapatkan pengkonversian frekwensi nada hanya dalam 1 oktaf sistem 12 TET (20 nada per oktaf) yang didapat dari sumber 2 oktaf lebih nada sistem 8 TET (12 nada per oktaf).
Berikut ini kode pemograman dalam pembuatan keyboard digital sistem 12 TET (20 nada per oktaf):
impor tkinter sebagai tk
dari tkinter impor Menu, filedialog, simpledialog, kotak pesan, Bingkai, Label, Entri, Tombol
import pygame #Tambahkan pustaka pygame
dari tkinter impor Radiobutton, IntVar
# Inisialisasi pygame mixer dengan buffer untuk mengurangi latensi
pygame.mixer.init(buffer=512)
# Tentukan BPM dan durasi ketuk
Denyut jantung (bpm) = 168
beat_duration = (84 / BPM) # 120 BPM berarti 1 ketuk = 0,5 detik
# Fungsi untuk memutar nada tunggal
def play_sound(catatan):
jalur_file = f"/penyimpanan/ditiru/0/proyekku/Keyboard_12TET/sampel_nada_1/piano_12_{note}.wav"
suara = pygame.mixer.Sound(jalur_file)
pygame.mixer.Channel(0).play(suara)
pygame.time.delay(int(beat_duration * 1000)) #Menghentikan sementara untuk durasi ketuk
pygame.mixer.Channel(0).berhenti()
# Fungsi fade out selama `durasi` milidetik
def fade_out(durasi):
mulai_volume = pygame.mixer.musik.dapatkan_volume()
fade_steps = 20 # Jumlah penurunan volume
fade_delay = durasi // fade_steps # Waktu per langkah
# Mulai timer untuk fade-out pada detik 0,51
root.after(510, lambda: fade_out(190)) # Mulai fade out selama 2 detik pada 0,51 detik
# Lakukan pengurangan volume secara bertahap
untuk i dalam rentang(fade_steps):
# Menghitung volume baru pada setiap langkah
volume_baru = suara.get_volume() * (1 - i / fade_steps)
root.after(i * fade_delay, lambda vol=volume_baru, snd=suara: snd.set_volume(vol))
# Pastikan volume menjadi 0 pada akhir fade-out
root.after(durasi, lambda: suara.set_volume(0))
# Fungsi untuk memainkan akord triad
def play_chord(catatan):
chord_dict = {
"C4": ["C4", "E#4", "G4"],
"D4": ["D4", "F#4", "H4"],
"E4": ["E4", "G4", "H#4"],
"F4": ["F4", "H4", "J4"],
"G4": ["G4", "I4", "K4"],
"H4": ["H4", "J#4", "A4"],
"I4": ["I4", "K#4", "B4"],
"J4": ["J4", "A4", "B#4"],
"C#4": ["D4", "F4", "H4"],
"D#4": ["E4", "F#4", "H#4"],
"E#4": ["F4", "G#4", "J4"],
"F#4": ["G4", "H#4", "K4"],
"G#4": ["H4", "J4", "A4"],
"H#4": ["I4", "K4", "B4"]
}
jika catatan dalam chord_dict:
catatan = chord_dict[catatan]
untuk i, chord_note di enumerate(notes):
jalur_file = f"/penyimpanan/ditiru/0/proyekku/Keyboard_12TET/sampel_nada/piano_12_{nada_chord}.wav"
suara = pygame.mixer.Sound(jalur_file)
pygame.mixer.Channel(i).play(sound) # Memainkan tiap nada pada channel terpisah
pygame.time.delay(int(durasi_ketukan * 1000))
untuk i dalam rentang(len(catatan)):
pygame.mixer.Saluran(i).berhenti()
# Fungsi untuk memutar nada tunggal atau akord berdasarkan pilihan mode
def play_note_or_chord(catatan):
if play_mode.get() == 1: # Jika mode Nada Tunggal dipilih
play_sound(catatan)
else: # Jika mode Akord dipilih
play_chord(nada)
# Inisialisasi UI
akar = tk.Tk()
akar.geometri("685x1385")
akar.judul("Papan ketik")
# Variabel untuk menyimpan mode pilihan
play_mode = IntVar(value=1) # Default ke Nada Tunggal
# Tombol radio untuk memilih mode
mode_bingkai = tk.Frame(akar)
frame_mode.paket(pady=10)
Radiobutton(frame_mode, text="Nada Tunggal", variable=play_mode, value=1).pack(side="left")
Radiobutton(frame_mode, text="Akord", variabel=play_mode, nilai=2).pack(side="kiri")
# Tombol untuk menjalankan fungsi-fungsi nada normal
tuts_putih_frame = tk.Frame(root)
tuts_putih_frame.pack(pady=100)
E4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("E4"), bg="white", fg="purple")
E4_button.grid(row=1, column=2, padx=0, sticky="w")
F4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("F4"), bg="white", fg="purple")
F4_button.grid(row=1, column=3, padx=0, sticky="w")
E_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("E#4"), bg="black", fg="purple")
E_kres_4_button.place(x=168, y=0)
G4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("G4"), bg="white", fg="purple")
G4_button.grid(row=1, column=4, padx=0, sticky="w")
F_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("F#4"), bg="black", fg="purple")
F_kres_4_button.place(x=237, y=0)
H4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("H4"), bg="white", fg="purple")
H4_button.grid(row=1, column=5, padx=0, sticky="w")
G_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("G#4"), bg="black", fg="purple")
G_kres_4_button.place(x=306, y=0)
I4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("I4"), bg="white", fg="purple")
I4_button.grid(row=1, column=6, padx=0, sticky="w")
J4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("J4"), bg="white", fg="purple")
J4_button.grid(row=1, column=7, padx=0, sticky="w")
H_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("H#4"), bg="black", fg="purple")
H_kres_4_button.place(x=375, y=0)
K4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("K4"), bg="white", fg="purple")
K4_button.grid(row=1, column=8, padx=0, sticky="w")
J_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("J#4"), bg="black", fg="purple")
J_kres_4_button.place(x=509, y=0)
A4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("A4"), bg="white", fg="purple")
A4_button.grid(row=1, column=9, padx=0, sticky="w")
K_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("K#4"), bg="black", fg="purple")
K_kres_4_button.place(x=577, y=0)
B4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("B4"), bg="white", fg="purple")
B4_button.grid(row=1, column=10, padx=0, sticky="w")
A_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("A#4"), bg="black", fg="purple")
A_kres_4_button.place(x=645, y=0)
C4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("C4"), bg="white", fg="purple")
C4_button.grid(row=1, column=11, padx=0, sticky="w")
B_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("B#4"), bg="black", fg="purple")
B_kres_4_button.place(x=713, y=0)
D4_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("D4"), bg="white", fg="purple")
D4_button.grid(row=1, column=12, padx=0, sticky="w")
C_kres_4_button = tk.Button(tuts_putih_frame, text="", height="3", command=lambda: play_note_or_chord("C#4"), bg="black", fg="purple")
C_kres_4_button.place(x=781, y=0)
E5_button = tk.Button(tuts_putih_frame, text="", height="6", command=lambda: play_note_or_chord("E5"), bg="white", fg="purple")
E5_button.grid(row=1, column=13, padx=0, sticky="w")
root.mainloop()


Comments
Post a Comment