3

我有一个包含几个 ' notes'、' chords' 和 ' rest' 对象的列表,并试图将它们写入一个 midi 文件。我正在尝试以下代码

midi_stream = stream.Stream(output_notes)
midi_stream.write('midi', fp='test_output.mid')

在阅读创建的 midi 文件时,我发现 midi 文件中没有rest附加“”对象。

output_notes 变量的内容是:

 <music21.note.Rest rest> <music21.chord.Chord A1 E2>
 <music21.chord.Chord A1 E2> <music21.chord.Chord A1 E2>
 <music21.note.Rest rest> <music21.chord.Chord A1 E2>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.chord.Chord A1 E2> <music21.chord.Chord A1 E2>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.note.Note A> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.note.Note A> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.note.Rest rest> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.chord.Chord A4 C#5 F5>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.chord.Chord A4 C#5 F5> <music21.note.Note B>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.chord.Chord A4 C#5 F5> <music21.note.Rest rest>
 <music21.chord.Chord A4 C#5 F5> <music21.note.Rest rest>
 <music21.chord.Chord A4 C#5 F5> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.chord.Chord G4 B4 D5>
 <music21.chord.Chord F#4 B4 D5> <music21.chord.Chord F#4 B4 D5>
 <music21.chord.Chord F#4 B4 D5> <music21.chord.Chord F#4 B4 D5>
 <music21.note.Note C#> <music21.note.Rest rest> <music21.note.Rest rest>
 <music21.chord.Chord F#4 B4 D5> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.chord.Chord E3 A3>
 <music21.note.Rest rest> <music21.note.Note C> <music21.note.Rest rest>
 <music21.note.Rest rest> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.chord.Chord C3 G3> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Rest rest> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G>]

创建的midi文件中的内容是:

[<music21.chord.Chord A1 E2> <music21.chord.Chord A1 E2>
 <music21.chord.Chord A1 E2> <music21.chord.Chord A1 E2>
 <music21.chord.Chord A1 E2> <music21.note.Note A> <music21.note.Note G>
 <music21.note.Note G> <music21.chord.Chord A4 C#5 F5>
 <music21.note.Note B> <music21.chord.Chord A4 C#5 F5>
 <music21.chord.Chord A4 C#5 F5> <music21.note.Note G>
 <music21.chord.Chord B4 D5> <music21.note.Note F#>
 <music21.chord.Chord B4 D5> <music21.note.Note F#>
 <music21.chord.Chord B4 D5> <music21.note.Note C#>
 <music21.chord.Chord F#4 B4 D5> <music21.chord.Chord E3 A3>
 <music21.note.Note C> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.chord.Chord C3 G3> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.chord.Chord C3 G3>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.chord.Chord C3 G3> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.chord.Chord C3 G3> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G> <music21.note.Note G> <music21.note.Note G>
 <music21.note.Note G>]
4

1 回答 1

4

您所做的是获取一个music21流,将其转换为 MIDI,然后将其转换回一个music21流,您会惊讶于往返不会为您提供与原始输入相同的输出。

但是,如果您要将 Excel 电子表格转换为 a 再转换.csv回来,我想您不会感到如此惊讶。

您所做的假设是music21和 MIDI 是两个等效的符号。他们不是。music21面向分数分析。它知道音符、休止符、小节、调号和谱号(以及更多)。

另一方面,MIDI 是面向合成器的播放指令集。想想你会在一些合成器程序中看到的钢琴卷曲符号,例如这个: 钢琴卷谱.

黑色水平条纹表示正在播放的音符。但其余的在哪里?没有,因为在整个乐曲中无声的音符和小节中被四分音符/四分音符长度的无声打断的音符之间没有区别。这就是为什么我在评论中说 MIDI 实际上没有任何休止符。休止符只是为了向演奏者展示在小节中哪些地方不能演奏音符。但是 MIDI 对小节一无所知(如果您在 MIDI 文件中看到小节,它们本质上是注释),因此它也不需要休止符。当music21从 MIDI 导入时,它会在输入方面做到最好,但是从没有音符的情况下猜测休息应该去哪里是非常棘手的,如果music21没有做得像你想要的那样好,你也不必感到惊讶。

MIDI 是一种非常不丰富的音乐表达媒介,因为它用对目标乐器的直接原始控制代替了对人类有意义的符号。如果您只需将 2(或 1,取决于上下文)添加到消息中的注释编号,则不需要双尖号。这就是为什么从music21MIDI 转换回来有点像将电子表格写成 a.csv然后再读回来。很多信息会丢失。

实际上不存在独立于应用程序的乐谱标准,当然也不是 MIDI。MusicXML 试图做到这一点,但它并没有涵盖所有内容,如果您使用它在musci21Sibelius 和 Dorico 之间进行转换,您会发现。事实上,Dorico 会忽略 MusicXML 中的一些空格符号,因为它认为它自己可以做得更好。

MIDI 文件中缺少休止符的真正测试是播放 MIDI 文件,而不是将其转换为其他符号并将其视为 MIDI 文件中内容的代理。你能听到文件中没有休止符吗?播放的输出声音是否与原始声音不同(忽略非音符属性,如乐器、音色、速度等)?

于 2019-05-14T09:20:19.830 回答