def get_notes(): # """ # 从music_midi目录中的所有MIDI文件里读取note,chord # Note样例:B4,chord样例[C3,E4,G5],多个note的集合,统称“note” # """ notes = [] for midi_file in glob.glob("MID/*.mid"): # 读取MID文件夹中所有的mid文件,file表示每一个文件 stream = converter.parse(midi_file) # midi文件的读取,解析,输出stream的流类型 # 获取所有的乐器部分,开始测试的都是单轨的 parts = instrument.partitionByInstrument(stream) if parts: # 如果有乐器部分,取第一个乐器部分 notes_to_parse = parts.parts[0].recurse() # 递归 else: notes_to_parse = stream.flat.notes # 纯音符组成 for element in notes_to_parse: # notes本身不是字符串类型 # 如果是note类型,取它的音高(pitch) if isinstance(element, note.Note): # 格式例如:E6 notes.append(str(element.pitch)) elif isinstance(element, chord.Chord): # 转换后格式:45.21.78(midi_number) notes.append('.'.join(str(n) for n in element.normalOrder)) # 获取D盘根目录的绝对路径 root_path = os.path.abspath("D:/pythonProject") # 拼接要创建的文件夹路径 data_path = os.path.join(root_path, "data04") # 创建文件夹 if not os.path.exists(data_path): os.mkdir(data_path) # 将数据写入data01/notes with open(os.path.join(data_path, "notes"), 'wb') as filepath: pickle.dump(notes, filepath) return notes # 返回提取出来的notes列表
时间: 2024-02-14 22:11:16 浏览: 115
Chord-Finder::musical_keyboard::musical_note:客户端Web应用程序通过键盘UI查找和弦
这是一个Python函数,用于从MIDI文件中提取音符和和弦,并将它们保存到一个列表中。该函数首先使用glob.glob()函数获取指定目录下的所有MIDI文件路径,然后使用music21库中的converter.parse()函数解析这些MIDI文件。接着,该函数使用instrument.partitionByInstrument()函数将乐器部分分离出来,然后从每个乐器部分中提取音符和和弦,并将它们保存到一个名为notes的列表中。最后,该函数使用pickle.dump()函数将notes列表保存到一个名为"notes"的二进制文件中,并返回notes列表。
阅读全文