【问题标题】:Music21: Get all Notes per Instrument from a MIDI FileMusic21:从 MIDI 文件中获取每个乐器的所有音符
【发布时间】:2017-03-06 14:54:55
【问题描述】:

我正在按照here 的指示解析一个 MIDI 文件。我的代码如下所示:

from music21 import converter,instrument # or import *
file = converter.parse('sample.mid')
components = []
for element in file.recurse():
    components.append(element)

components 列表现在包含如下数据:

<music21.stream.Score 0x7f50314ca390>,
<music21.stream.Part 0x7f50314caf10>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.tempo.MetronomeMark allegro moderato Quarter=130.0>,
<music21.meter.TimeSignature 4/4>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Rest rest>,
.
.
.
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord D4 F#3>,
<music21.chord.Chord D4 F#3>,
<music21.chord.Chord D4 F#3>,
.
.
.
<music21.stream.Part 0x7f50309b99d0>,
<music21.instrument.Instrument Electric Guitar>,
<music21.instrument.Instrument Electric Guitar>,
<music21.meter.TimeSignature 4/4>,
<music21.note.Rest rest>,
<music21.note.Note E>,
<music21.note.Note F#>,
<music21.note.Note G>,
<music21.note.Note A>,
<music21.note.Note G>,
<music21.note.Note E>,
<music21.note.Rest rest>,

我的目标是根据每种乐器分离音符,这在&lt;music21.instrument.Instrument Electric Guitar&gt; 之类的标签中列出。我如何做到这一点?

【问题讨论】:

    标签: python midi music21


    【解决方案1】:

    我想你会想要instrument.partitionByInstrument() 函数,它会根据乐器将你的流分成不同的部分。

    【讨论】:

    • 非常感谢您的回复。对此,我真的非常感激。但是我在执行以下操作时遇到错误:instruments = instrument.partitionByInstrument(file) StreamException: the object (, id()=140306780864464) is already found in this Stream (, id()=140306889172688)
    • 我请求对此提出任何建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多