将mid文件转化成notes
时间: 2023-11-30 07:03:02 浏览: 36
好的,您想了解如何将MIDI文件转换成音符(notes)吗?一般来说,MIDI文件包含了音符的信息,但是需要进行解析才能得到音符。您可以使用Python的音乐解析库Mido来读取MIDI文件并将其转换为音符。以下是一个简单的示例代码:
```python
import mido
mid = mido.MidiFile('your_song.mid')
notes = []
for msg in mid.play():
if msg.type == 'note_on':
note = msg.note
velocity = msg.velocity
time = msg.time
notes.append((note, velocity, time))
```
这段代码将会把MIDI文件中的音符信息提取出来,存储在名为notes的列表中,每个音符以元组的形式表示,元组的三个元素依次为音符编号、力度和持续时间。您可以根据需要对这些音符进行处理和分析。
相关问题
如何将mid文件转化成notes并存储文件,之后再计算文件中的音符占比
要将MIDI文件转换为notes并存储到文件中,以便后续计算音符占比,可以使用Python中的`pretty_midi`库读取MIDI文件并提取音符信息,然后将音符信息保存到文件中。
以下是一个示例代码,假设要将名为'music.mid'的MIDI文件转换为notes并保存到名为'music.notes'的文件中:
```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))
# 将音符信息保存到文件中
with open('music.notes', 'w') as f:
for note in note_list:
f.write(f'{note[0]},{note[1]},{note[2]}\n')
```
这个代码会使用`pretty_midi`库读取名为'music.mid'的MIDI文件,并提取出其中的音符信息。然后,它将音符信息保存到名为'music.notes'的文件中,每行一个音符,格式为`开始时间,结束时间,音高`。
要计算文件中每个音符的占比,可以读取文件中的所有音符并计算它们的时长,然后将每个音符的时长除以总时长即可得到占比。
以下是一个示例代码,假设要计算名为'music.notes'的文件中每个音符的占比:
```python
# 读取文件中的所有音符
note_list = []
with open('music.notes', '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.notes'的文件中的所有音符,并计算总时长和每个音符的时长。然后,它将每个音符的时长除以总时长,得到每个音符的占比,并输出每个音符的占比。
如何将mid文件转化成note文件,之后再计算note文件中的音符占比
要将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文件中的所有音符,并计算总时长和每个音符的时长。然后,它将每个音符的时长除以总时长,得到每个音符的占比,并输出每个音符的占比。