Мне это удалось. мне удалось выполнить частотную часть, однако мне не удалось заставить работать длительность каждой ноты.
Код: Выделить всё
import mido
import sqlite3
def midi_to_frequency(midi_note):
return 440 * (2 ** ((midi_note - 69) / 12))
midi_file = "Queen.mid"
con = sqlite3.connect('SciFair.db')
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS frequencies
(id INTEGER PRIMARY KEY, frequency)''')
mid = mido.MidiFile(midi_file)
for msg in mid:
if msg.type == 'note_on':
frequency = midi_to_frequency(msg.note)
cur.execute("INSERT INTO frequencies (frequency) VALUES (?)", (frequency,))
print(frequency)
con.commit()
con.close()
Код: Выделить всё
msg.time
Кроме того, насколько я понимаю Mido, он использует тики, а не секунды или какие-либо другие обычные показатели. Как мне преобразовать эти тики в секунды?
Есть предложения, как это сделать?
Подробнее здесь: https://stackoverflow.com/questions/781 ... using-mido