69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
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") |