如何将mid文件转化成note文件,之后再计算note文件中的音符占比
时间: 2023-12-01 10:03:50 浏览: 177
要将MIDI文件转换为note文件,您可以使用Python中的第三方库`pretty_midi`来读取MIDI文件并提取音符信息,然后将音符信息保存到note文件中。
以下是一个示例代码,假设要将名为'music.mid'的MIDI文件转换为note文件:
```python
import pretty_midi
# 读取MIDI文件
midi_data = pretty_midi.PrettyMIDI('music.mid')
# 提取音符信息
note_list = []
for instrument in midi_data.instruments:
for note in instrument.notes:
note_list.append((note.start, note.end, note.pitch))
# 将音符信息保存到note文件中
with open('music.note', 'w') as f:
for note in note_list:
f.write(f'{note[0]},{note[1]},{note[2]}\n')
```
这个代码会使用`pretty_midi`库读取名为'music.mid'的MIDI文件,并提取出其中的音符信息。然后,它将音符信息保存到名为'music.note'的note文件中,每行一个音符,格式为`开始时间,结束时间,音高`。
要计算note文件中每个音符的占比,您可以读取note文件中的所有音符并计算它们的时长,然后将每个音符的时长除以总时长即可得到占比。
以下是一个示例代码,假设要计算名为'music.note'的note文件中每个音符的占比:
```python
# 读取note文件中的所有音符
note_list = []
with open('music.note', 'r') as f:
for line in f:
start, end, pitch = [float(x) for x in line.strip().split(',')]
note_list.append((start, end, pitch))
# 计算总时长和每个音符的时长
total_duration = note_list[-1][1] - note_list[0][0]
duration_dict = {}
for note in note_list:
duration = note[1] - note[0]
if note[2] in duration_dict:
duration_dict[note[2]] += duration
else:
duration_dict[note[2]] = duration
# 计算每个音符的占比
for pitch, duration in duration_dict.items():
ratio = duration / total_duration
print(f'音高{pitch}的占比为{ratio:.2%}')
```
这个代码会读取名为'music.note'的note文件中的所有音符,并计算总时长和每个音符的时长。然后,它将每个音符的时长除以总时长,得到每个音符的占比,并输出每个音符的占比。
阅读全文