SIMULASI CONTOH LAGU MEMAKAI AUDIO GENERATOR DENGAN MUSIK SISTEM 12 TET (20 NADA PER OKTAF)
SIMULASI CONTOH LAGU MEMAKAI AUDIO GENERATOR DENGAN MUSIK SISTEM 12 TET (20 NADA PER OKTAF)
Berikut ini diberikan simulasi contoh lagu dari Kidung Jemaat Nomor 33 (KJ 33) yang berjudul "
Ada perbedaan dalam merangkai nada nada lagu KJ 33 tersebut antara sistem 12 TET (20 nada per oktaf) dengan sistem 8 TET (12 nada per oktaf), berikut ini:
Notasi angka Lagu KJ 33 Menurut musik sistem 8 TET (12 nada per oktaf)
Nada dasar natural Mayor di musik sistem 8 TET (12 Nada per oktaf) adalah C = 1.
Menurut musik sistem 8 TET (12 nada per oktaf) bahwa lagu KJ 33 dimainkan pada nada dasar Mayor Es = 1 dengan tanda birama 3/4. Nada dasar 1 (do) adalah es yaitu nada yang terletak antara nada tuts "re" dan tuts "mi" (tuts hitam), nada es ini dalam notasi angka lagu adalah 2# atau 3b, jika dalam oktaf biasa (oktaf ke-4) maka nada 2# atau 3b memiliki frekwensi sebesar 311,13 Hz.
Notasi angka Lagu KJ 33 Sesuai konversi sistem 12 TET (20 nada per oktaf)
Nada dasar natural Mayor di musik sistem 8 TET (12 Nada per oktaf) adalah E = 1.
Susunan tangga nada lagu dari nada dasar natural Mayor di musik sistem 12 TET (20 Nada per Oktaf) diketahui adalah :
E F G H I J K A B C D E
dengan jarak interval antar nada adalah:
1 1 1 1 1/2 1 1 1 1 1 1/2.
Jika pada lagu KJ 33 menurut musik sistem 8 TET (12 Nada per oktaf) memiliki nada dasar 1 = Es, bila dikonversi ke musik sistem 12 TET (20 Nada per oktaf) maka lagu KJ 33 akan memiliki nada dasar 1= F# atau 1 = Fis. Nada dasar 1 (do) = Fis yaitu nada yang terletak antara nada tuts "re" dan tuts "ma" (tuts hitam) di sistem 12 TET (20 Nada per oktaf). jika dalam oktaf biasa (oktaf ke-4) maka nada 2# atau 3b memiliki frekwensi sebesar 240,46 Hz yang lebih rendah bila dibanding dengan frekwensi nada 2# atau 3b sistem 8 TET (12 nada per oktaf).
Susunan tangga nada dari nada dasar lagu Mayor 1 = F# dan simbol notasi angka lagu ini menurut sistem 12 TET (20 Nada per oktaf) adalah:
F# G G# H H# I J J# K K# A A# B B# C C# D E E# F F# masing masing jarak antar nada adalah 1/2 laras.
Dalam notasi angka dituliskan menjadi:
2# 3 3# 4 4# 5 6 6# 7 7# 8 8# 9 9# 10 10# 11 1 1# 2 2#'.
Sehingga setiap notasi angka pada lagu KJ 33 dikonversikan menjadi seperti berikut ini:
- Pada baris ke-1 di lirik "SuaraMu", pada suku kata "ra" nada 5 di sistem 8 TET (12 Nada per oktaf) dikonversikan menjadi nada 4#.
- Pada baris ke-1 di lirik "memanggil", pada suku kata "gil" nada 4 menjadi 3#. Di lirik "diriku", pada suku kata "ri" nada 5 menjadi 4#. Di lirik "memanggil", pada suku kata "gil" nada 4 menjadi 3#.
- Pada baris ke-1 lanjut baris ke-2 di lirik "supaya", pada suku kata "su" nada 5 menjadi 4#, dan suku kata "pa" nada 1' (1 tinggi) menjadi 7#.
- Pada baris ke-2 di lirik "ku di Golgota", pada suku kata "di" nada 5 menjadi 4#, dan juga suku kata "go" nada 5' menjadi 4#.
- Pada baris ke-3, di lirik "aku", pada suku kata "a" nada 1' (1 tinggi) menjadi 7#. Di lirik "datanglah", pada suku kata "tang" nada 5 menjadi 4#. Di lirik "Tuhan", pada suku kata "Tu" nada 5 menjadi 4#.
- Pada baris ke-4 di lirik "dalam", pada suku kata "da" nada 5 di sistem 8 TET (12 Nada per oktaf) dikonversikan menjadi nada 4#.
Hasil
- Pada sistem 12 TET (20 nada per oktaf), frekwensi nada dasar 1 = F# (240,46 Hz) lebih rendah bila dibanding frekwensi nada dasar 1 = Es (311,13 Hz) pada sistem 8 TET (12 nada per oktaf).
- Meakipun berbeda frekwensi, namun lantunan atau warna.musik dari lagu KJ 33/yang dinyanyikan adalah tetap sama. Ekspresi lebih lembut dilantunkan oleh musik sistem 12 TET (20 nada per oktaf).
- Terdapat sebanyak 11 nada yang dikonvetsikan dari total jumlah nada 50 buah, atau ada sekitar 22 persen konversi nada. Hal ini berarti lagu KJ 33 di sistem 12 TET (20 nada per oktaf) adalah relatif lebih baik dan lebih berkenan bila dinyanyikan di situasi dan kondisi zaman dan teknologi yang sudah, sedang, dan akan berkembang lagi.
Bisakah lagu KJ 33 Berjudul SuaraMu kudengar dibunyikan dengan instrumen piano (amplop ADSR), lagu KJ 33 ada pada gambar di url link berikut: https://musikbarupmd.blogspot.com/2024/11/simulasi-contoh-lagu-memakai-audio.html?m=1. Notasi angka Lagu ada tertulis pada gambar berformat jpg, atau dalam file pdf. Bagaimana agar bisa saya kirimkan dalam bentuk file pdf-nya dapat saya upload.
Untuk mengunggah file PDF Anda di sini, ikuti langkah-langkah berikut:
1. Cari tombol Upload File di antarmuka aplikasi ChatGPT Anda. Biasanya, tombol ini ada di bagian bawah jendela obrolan.
2. Klik tombol tersebut, lalu pilih file PDF dari perangkat Anda.
3. Tunggu hingga file selesai diunggah. Setelah itu, saya akan memproses file tersebut.
Jika Anda tidak melihat tombol tersebut, pastikan aplikasi ChatGPT Anda adalah versi terbaru, atau beri tahu saya agar saya dapat membantu lebih lanjut.
File "Lagu KJ 33 Konversi 12 TET.pdf" telah berhasil diunggah. Silakan berikan instruksi spesifik jika Anda ingin saya menganalisis atau membantu Anda dengan dokumen tersebut.
Coba berikan kode untuk memainkan lagu KJ 33 tersebut dengan instrumen piano (amplop ADSR). Lagu KJ 33 adalah yang telah dikonversi ke musik sistem 12 TET (20 Nada per oktaf)
Berikut adalah contoh kode Python menggunakan pustaka pydub dan numpy untuk membuat dan memainkan lagu KJ 33 berdasarkan konversi ke sistem 12 TET (20 nada per oktaf) dengan simulasi amplop ADSR. Anda perlu mendefinisikan urutan nada dalam lagu tersebut berdasarkan informasi dalam dokumen.
Kode Python
import numpy as np
from pydub import AudioSegment
from pydub.playback import play
import math
# Fungsi untuk membuat gelombang sinus
def generate_sine_wave(frequency, duration, sample_rate=44100, amplitude=0.5):
t = np.linspace(0, duration, int(sample_rate * duration), False)
wave = amplitude * np.sin(2 * np.pi * frequency * t)
return wave
# Fungsi untuk menambahkan amplop ADSR (Attack, Decay, Sustain, Release)
def apply_adsr(wave, sample_rate, attack=0.1, decay=0.1, sustain_level=0.7, release=0.2):
total_samples = len(wave)
attack_samples = int(sample_rate * attack)
decay_samples = int(sample_rate * decay)
release_samples = int(sample_rate * release)
sustain_samples = total_samples - attack_samples - decay_samples - release_samples
# Attack
adsr = np.concatenate([
np.linspace(0, 1, attack_samples),
np.linspace(1, sustain_level, decay_samples),
np.full(sustain_samples, sustain_level),
np.linspace(sustain_level, 0, release_samples)
])
return wave[:len(adsr)] * adsr
# Fungsi untuk membuat nada dengan frekuensi 12 TET (20 nada per oktaf)
def generate_tet_frequencies(base_frequency=440.0, notes_per_octave=20):
tet_ratios = [2 ** (n / notes_per_octave) for n in range(-10, 10)]
return [base_frequency * r for r in tet_ratios]
# Data nada KJ 33 (berikan nada sesuai dokumen Anda)
kj33_notes = [
(440.0, 0.5), # Contoh nada: (frekuensi, durasi)
(466.16, 0.5),
(493.88, 0.5),
# Tambahkan nada sesuai dengan lagu
]
# Konversi setiap nada ke gelombang sinus dengan ADSR
def create_song(notes, sample_rate=44100):
song = np.array([], dtype=np.float32)
for frequency, duration in notes:
wave = generate_sine_wave(frequency, duration, sample_rate)
wave_with_adsr = apply_adsr(wave, sample_rate)
song = np.concatenate([song, wave_with_adsr])
return song
# Main program
if __name__ == "__main__":
# Sesuaikan data nada KJ 33
notes = kj33_notes
song_wave = create_song(notes)
# Normalisasi ke format pydub
audio = (song_wave * (2**15 - 1) / np.max(np.abs(song_wave))).astype(np.int16)
song = AudioSegment(audio.tobytes(), frame_rate=44100, sample_width=2, channels=1)
# Mainkan lagu
play(song)
Penjelasan
1. Frekuensi 12 TET:
Anda dapat menyesuaikan fungsi generate_tet_frequencies untuk mendefinisikan nada 20 langkah per oktaf.
2. Nada dan Durasi:
Masukkan nada dari dokumen ke dalam daftar kj33_notes dalam bentuk pasangan (frekuensi, durasi).
3. ADSR:
Parameter amplop ADSR mengontrol dinamika suara.
Anda perlu mengisi frekuensi nada yang sesuai dengan lagu KJ 33 dari file Anda. Jika Anda membutuhkan bantuan lebih lanjut, beri tahu saya!
Ketika kode dieksekusi, muncul error:
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/pydub/utils.py:184: RuntimeWarning: Couldn't find ffplay or avplay - defaulting to ffplay, but may not work
warn("Couldn't find ffplay or avplay - defaulting to ffplay, but may not work", RuntimeWarning)
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 62, in <module>
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/pydub/playback.py", line 71, in play
_play_with_ffplay(audio_segment)
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/pydub/playback.py", line 16, in _play_with_ffplay
subprocess.call([PLAYER, "-nodisp", "-autoexit", "-hide_banner", f.name])
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/subprocess.py", line 389, in call
with Popen(*popenargs, **kwargs) as p:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/subprocess.py", line 1028, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/subprocess.py", line 1950, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'ffplay'
[Program finished]
Error tersebut menunjukkan bahwa pustaka pydub tidak dapat menemukan aplikasi ffmpeg atau ffplay yang diperlukan untuk memutar audio. Aplikasi Pydroid 3 tidak menyertakan ffmpeg secara bawaan.
Cara Mengatasi Error di Pydroid 3:
1. Install FFMPEG:
- Unduh dan pasang modul ffmpeg pada Pydroid 3 melalui Pydroid 3 Pip:
pip install ffmpeg-python
- Jika tetap gagal, Anda harus secara manual menginstal aplikasi ffmpeg:
Cari file ffmpeg binary untuk Android.
Tambahkan path ke file ffmpeg dalam Pydroid.
2. Gunakan Alternatif untuk Memutar Audio:
Anda mengganti pemutaran dengan pustaka lain, seperti sounddevice atau pygame. Berikut adalah solusi alternatif menggunakan sounddevice:
Kode Alternatif dengan sounddevice
import numpy as np
import sounddevice as sd
# Fungsi untuk membuat gelombang sinus
def generate_sine_wave(frequency, duration, sample_rate=44100, amplitude=0.5):
t = np.linspace(0, duration, int(sample_rate * duration), False)
wave = amplitude * np.sin(2 * np.pi * frequency * t)
return wave
# Fungsi untuk menambahkan amplop ADSR (Attack, Decay, Sustain, Release)
def apply_adsr(wave, sample_rate, attack=0.1, decay=0.1, sustain_level=0.7, release=0.2):
total_samples = len(wave)
attack_samples = int(sample_rate * attack)
decay_samples = int(sample_rate * decay)
release_samples = int(sample_rate * release)
sustain_samples = total_samples - attack_samples - decay_samples - release_samples
# Attack
adsr = np.concatenate([
np.linspace(0, 1, attack_samples),
np.linspace(1, sustain_level, decay_samples),
np.full(sustain_samples, sustain_level),
np.linspace(sustain_level, 0, release_samples)
])
return wave[:len(adsr)] * adsr
# Data nada KJ 33 (masukkan frekuensi dan durasi sesuai dokumen)
kj33_notes = [
(440.0, 0.5), # Contoh nada: (frekuensi, durasi)
(466.16, 0.5),
(493.88, 0.5),
# Tambahkan nada sesuai lagu
]
# Main program
if __name__ == "__main__":
sample_rate = 44100
for frequency, duration in kj33_notes:
wave = generate_sine_wave(frequency, duration, sample_rate)
wave_with_adsr = apply_adsr(wave, sample_rate)
sd.play(wave_with_adsr, samplerate=sample_rate)
sd.wait() # Tunggu hingga audio selesai dimainkan
Penjelasan Alternatif
1. Menggunakan sounddevice:
Modul ini memainkan gelombang audio secara langsung tanpa memerlukan ffmpeg.
Install melalui Pydroid Pip:
pip install sounddevice
2. Definisi Nada:
Pastikan frekuensi dan durasi nada di kj33_notes sesuai dengan dokumen KJ 33.
Keuntungan Solusi Ini
Tidak bergantung pada aplikasi eksternal seperti ffplay.
Mudah diintegrasikan dalam Pydroid 3 dan bekerja langsung di Android.
Silakan coba solusi ini dan beri tahu jika ada kendala lebih lanjut!
Comments
Post a Comment