Files
UltraChat/midi/midi.py
2026-01-07 02:22:34 +05:00

69 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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")