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

Postingan populer dari blog ini

Gotong Royong

Galatia 4 : 15-16