Unë jam duke bërë një program që duhet të jetë në gjendje të nxjerrë notat, pjesët dhe akordet nga një skedar midi i caktuar dhe të shkruaj lartësinë përkatëse (në numrat e tonit midi - ato shkojnë nga 0-127) e notave dhe akordeve në një skedar csv për përdorim të mëvonshëm.
Për këtë projekt, unë jam duke përdorur Python Library "Music21".
from music21 import *
import pandas as pd
#SETUP
path = r"Pirates_TheCarib_midi\1225766-Pirates_of_The_Caribbean_Medley.mid"
#create a function for taking parsing and extracting the notes
def extract_notes(path):
stm = converter.parse(path)
treble = stm[0] #access the first part (if there is only one part)
bass = stm[1]
#note extraction
notes_treble = []
notes_bass = []
for thisNote in treble.getElementsByClass("Note"):
indiv_note = [thisNote.name, thisNote.pitch.midi, thisNote.offset]
notes_treble.append(indiv_note) # print's the note and the note's
offset
for thisNote in bass.getElementsByClass("Note"):
indiv_note = [thisNote.name, thisNote.pitch.midi, thisNote.offset]
notes_bass.append(indiv_note) #add the notes to the bass
return notes_treble, notes_bass
#write to csv
def to_csv(notes_array):
df = pd.DataFrame(notes_array, index=None, columns=None)
df.to_csv("attempt1_v1.csv")
#using the functions
notes_array = extract_notes(path)
#to_csv(notes_array)
#DEBUGGING
stm = converter.parse(path)
print(stm.parts)
Këtu është lidhja me rezultatin që po përdor si test. https://musescore.com/user/1699036/scores/1225766
Kur ekzekutoj funksionin extract_notes, ai kthen dy vargje boshe dhe rreshtin:
print(stm.parts)
ajo kthehet
<music21.stream.iterator.StreamIterator for Score:0x1b25dead550 @:0>
Unë jam i hutuar se pse e bën këtë. Pjesa duhet të ketë dy pjesë, treshe dhe bas. Si mund ta marr çdo notë, akord dhe pushim në një grup në mënyrë që ta vendos në një skedar csv?