from midiutil import MIDIFile

# Параметры
tempo = 112  # BPM оригинала
volume = 100

# Создаём MIDI файл: 1 трек
midi = MIDIFile(1)
track = 0
channel = 0  # Пианино
time = 0

midi.addTempo(track, time, tempo)

# Функция для добавления нот (note, duration в долях такта, volume)
def add_notes(notes, duration=1, vol=volume):
    global time
    for pitch in notes if isinstance(notes, list) else [notes]:
        midi.addNote(track, channel, pitch, time, duration, vol)
    time += duration

# Простая версия Verse (Куплет) - 4 повторения прогрессии
# Аккорды: Bdim7 (бас Ab), Gm6, F#m7, Bm7
# Мелодия упрощённая, фокус на мотиве A A B B (A4=69, B4=71)

# Один цикл куплета (4 такта)
for _ in range(4):  # x4
    # 1. Bdim7 с басом Ab3 (44)
    add_notes(44, 1)  # бас Ab3
    add_notes([71, 74, 77, 80], 0.5)  # B4 D5 F5 Ab5 (пример voicing)
    add_notes([69, 69, 71, 71], 0.5)  # мотив A A B B в мелодии
    
    # 2. Gm6
    add_notes(43, 1)  # бас G3=43
    add_notes([67, 70, 74, 76], 1)  # G Bb D E
    
    # 3. F#m7
    add_notes(42, 1)  # бас F#3=42
    add_notes([66, 69, 73, 76], 1)  # F# A C# E
    
    # 4. Bm7
    add_notes(47, 1)  # бас B3=47
    add_notes([71, 74, 78, 81], 1)  # B D F# A (выше)

# Chorus (Припев) - упрощённо 4 цикла
# Аккорды: GM7 - F#m7 - Em7 - Dmaj7
for _ in range(4):
    # GM7
    add_notes(55, 1)  # бас G3
    add_notes([71, 74, 78, 81], 1)  # G B D F#
    
    # F#m7
    add_notes(54, 1)  # F#3
    add_notes([69, 73, 76, 78], 1)
    
    # Em7
    add_notes(52, 1)  # E3
    add_notes([64, 67, 71, 74], 1)
    
    # Dmaj7 с развитием мелодии
    add_notes(50, 1)  # D3
    add_notes([69, 71, 73, 74], 0.5)  # A B C# D (развитие мотива)
    add_notes([74], 0.5)  # финал

# Записываем в файл
with open("kimi_no_kioku_simple.mid", "wb") as output_file:
    midi.writeFile(output_file)

print("MIDI файл успешно создан: kimi_no_kioku_simple.mid")