python使用music21库解析midi格式音频文件,得到pitch音符后,如何比较判断是哪个音符?
时间: 2024-02-24 08:00:45 浏览: 256
在music21库中,可以使用`pitch.Pitch`类来表示一个音符,该类的构造函数可以接受多种参数,例如midi number,note name等。若已经得到了一个音符对象,可以使用`pitch.Pitch`类提供的`name`属性获取音符名,使用`pitch.Pitch`类提供的`midi`属性获取midi number。因此,可以通过比较midi number或音符名来判断是哪个音符。
以下是一个示例代码,假设我们已经得到了一个音符对象`note`:
```
from music21 import pitch
# 比较midi number
if note.pitch.midi == pitch.Pitch('C4').midi:
print('这是一个C4音符')
# 比较音符名
if note.pitch.name == 'C4':
print('这是一个C4音符')
```
需要注意的是,由于音符有多种表示方法(例如C#可以表示成Db),因此比较时需要注意音符名的表示方法是否一致。
相关问题
python使用music21库解析midi格式音频文件,读取每个Note节点的pitch音符和duration时延。
好的,我了解了你的问题。要使用music21库解析midi格式音频文件,首先需要安装music21库。可以使用以下命令在命令行中安装:
```
pip install music21
```
安装完后,可以使用以下代码读取midi文件中的音符信息:
```python
from music21 import *
# 读取midi文件
midi_file = converter.parse('path/to/midi/file')
# 遍历所有音符
for note in midi_file.flat.notes:
# 获取音符的pitch和duration
pitch = note.pitch
duration = note.duration.quarterLength
print(f"pitch: {pitch}, duration: {duration}")
```
这里的`midi_file.flat.notes`可以获取midi文件中所有的音符节点,然后可以通过`note.pitch`和`note.duration.quarterLength`分别获取音符的pitch和duration。需要注意的是,如果midi文件中存在多个声部(part),则需要使用`midi_file.parts`来获取所有声部,然后分别遍历每个声部中的音符。
python使用music21库解析midi格式文件后,将解析到的pitch音符整体升、降调怎么做?
在music21库中,可以使用transpose()方法来对音符进行升降调。具体来说,可以先解析MIDI文件,然后获取所有的音符对象,并将它们传入transpose()方法中,同时指定升降调的半音数。例如,将所有音符整体升一个半音可以使用以下代码:
```python
from music21 import *
# 解析MIDI文件
midi = converter.parse('example.mid')
# 获取所有的音符对象
notes = midi.flat.notes
# 将所有音符整体升一个半音
notes.transpose(1, inPlace=True)
# 保存修改后的MIDI文件
midi.write('example_transposed.mid')
```
在上面的代码中,transpose()方法的第一个参数指定升降调的半音数,这里是1,表示升一个半音。第二个参数inPlace=True表示在原地修改音符对象,而不是返回一个新的对象。最后,使用write()方法将修改后的MIDI文件保存。
阅读全文