Lagu pkn 1
# lagu_pkn.py
# Struktur data lagu: urutan bagian, dan untuk tiap bagian daftar bar (chord + lirik)
song = {
"Intro": [
{"chord": "C", "lyric": ""},
{"chord": "G", "lyric": ""},
{"chord": "Am", "lyric": ""},
{"chord": "F", "lyric": ""}
],
"Verse 1": [
{"chord": "C", "lyric": "Kita hidup di tanah air yang satu"},
{"chord": "G", "lyric": "Beraneka ragam budaya menyatu"},
{"chord": "Am", "lyric": "Pancasila jadi dasar dan pedoman"},
{"chord": "F", "lyric": "Menuntun langkah warganya"}
],
"Chorus": [
{"chord": "C", "lyric": "Bhinneka Tunggal Ika, kita satu"},
{"chord": "G", "lyric": "Bersatu padu, bahu membahu"},
{"chord": "Am", "lyric": "Mengisi kemerdekaan dengan jiwa"},
{"chord": "F", "lyric": "Teguh pada NKRI"}
],
"Verse 2": [
{"chord": "C", "lyric": "Hak dan kewajiban saling seimbang"},
{"chord": "G", "lyric": "Menjaga persatuan di setiap langkah"},
{"chord": "Am", "lyric": "Toleransi jadi kunci utama"},
{"chord": "F", "lyric": "Membangun bangsa tercinta"}
],
"Bridge": [
{"chord": "Am", "lyric": "Mari junjung tinggi keadilan"},
{"chord": "Em", "lyric": "Untuk kita semua"},
{"chord": "F", "lyric": "Bersama merawat persatuan"},
{"chord": "C", "lyric": "Agar negara jaya selalu"}
],
"Outro": [
{"chord": "C", "lyric": ""},
{"chord": "G", "lyric": ""},
{"chord": "Am", "lyric": ""},
{"chord": "F", "lyric": ""}
]
}
# Untuk transpose sederhana: daftar nada dalam satu oktaf
NOTES = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
def transpose_chord(chord, half_steps):
"""
Transpose satu chord (misal 'C', 'Am', 'F#') sebanyak half_steps.
Hanya mendukung chord dasar (tanpa tambahan sus, add9, dll).
"""
# pisahkan dasar dan minor
base = chord.rstrip('m') # 'Am' -> 'A'
suffix = 'm' if chord.endswith('m') and base != chord else ''
try:
idx = NOTES.index(base)
except ValueError:
return chord # jika tidak dikenal, kembalikan apa adanya
new_idx = (idx + half_steps) % len(NOTES)
return NOTES[new_idx] + suffix
def print_section(name, bars):
print(f"\n== {name} ==")
for bar in bars:
chord = bar["chord"]
lyric = bar["lyric"]
# jika lirik kosong, tampilkan bar instrumental
if lyric:
print(f"[{chord:3}] {lyric}")
else:
print(f"[{chord:3}] (instrumental)")
def print_song(song_data):
"""Cetak seluruh lagu sesuai urutan."""
for section, bars in song_data.items():
print_section(section, bars)
def transpose_song(song_data, half_steps):
"""Kembalikan lagu baru yang sudah di-transpose."""
new_song = {}
for section, bars in song_data.items():
new_bars = []
for bar in bars:
new_chord = transpose_chord(bar["chord"], half_steps)
new_bars.append({"chord": new_chord, "lyric": bar["lyric"]})
new_song[section] = new_bars
return new_song
if __name__ == "__main__":
print("### Lagu PPKn Kelas 9 SMP (Kunci Asli) ###")
print_song(song)
# Contoh transpose: naik 2 semi-tone (ke kunci D)
print("\n\n### Lagu PPKn Kelas 9 SMP (Transpose +2) ###")
transposed = transpose_song(song, 2)
print_song(transposed)
p>
Komentar
Posting Komentar