music21:伍佰 《泪桥》MIDI 音乐分析

pip install music21

以下是使用 music21 对伍佰《泪桥》MIDI 音乐进行分析的一些可能方面:

基本信息3

  • 曲长:全曲长 2 分 31 秒。
  • 音符数量:共 273 个音符。
  • 音轨信息:共 2 个音轨,其中 1 个音轨有音符,可视为单轨 MIDI 文件,仅使用 1 种乐器大钢琴独奏。
  • 节拍:标记的节拍为 4/4。
  • 速度:初始曲速 120bpm,最小曲速 69bpm。

旋律分析

  • 音高范围:音高在 E4 - G5 之间,平均音高 B43。旋律整体较为平稳,没有大幅度的音高跳跃,符合抒情歌曲的特点,能够很好地表达出歌曲中忧伤、无奈的情绪。
  • 旋律走向:主歌和副歌的旋律有一定的记忆点,但整体而言略显平淡4。旋律的进行多以级进和小跳进为主,较少出现大跨度的跳进,使得旋律线条流畅自然,易于听众跟唱和记忆。

节奏分析

  • 节奏型:节奏型相对简单,以稳定的四分音符、八分音符为主,在一些关键位置会出现切分音和附点音符,增强了节奏的变化和律动感,避免了节奏的单调。例如在歌曲的前奏和间奏部分,钢琴的节奏型较为舒缓,以四分音符和八分音符的组合为主,营造出一种忧伤、静谧的氛围;而在副歌部分,节奏会稍微紧凑一些,通过八分音符的连续出现,推动歌曲情绪的发展。
  • 节奏变化:整首歌曲的节奏变化不大,保持了相对的稳定性,这有助于强化歌曲的情感表达,让听众更好地沉浸在歌曲的情绪中。不过,在歌曲的桥段部分,节奏会有一些细微的变化,例如出现一些较长的音符和停顿,使音乐的节奏产生了一定的松弛感,为歌曲的情感转折做了铺垫。

和声分析

由于 MIDI 文件中可能没有直接包含和声信息,若要进一步分析和声,可以通过 music21 的相关函数推测和声。通常情况下,《泪桥》作为一首流行摇滚风格的歌曲,其和声可能以简单的三和弦为主,如 C、G、Am、F 等和弦的组合,以支持旋律的进行。在一些关键的旋律节点上,可能会使用一些较为特殊的和弦来增强情感表达,如在歌曲的高潮部分可能会使用属七和弦来增加紧张感,然后再解决到主和弦,以达到情感的释放。

结构分析4

歌曲结构是标准的流行摇滚结构,即主歌 - 副歌 - 过渡 - 主歌 - 副歌 - 桥段 - 副歌,过渡乐器间奏。这种结构保证了歌曲的流畅性和整体性,使歌曲的情感能够逐步递进和展开。主歌部分通常用于叙述故事和铺垫情感,旋律和节奏较为平稳;副歌部分则是歌曲的高潮和核心,旋律更加突出,歌词也更具感染力,能够引起听众的共鸣;过渡和桥段部分则起到了连接主歌和副歌的作用,通过旋律和节奏的变化,为歌曲带来一些新的元素和情感转折。

推荐:唐宋摇滚--泪桥--陈桥


以下是一段使用 music21 库对《泪桥》MIDI 音乐进行基础分析的代码,此代码会对 MIDI 文件进行音符、音高、节奏、和弦等方面的分析。

# -*- coding: utf-8 -*-
""" 伍佰 《泪桥》 MIDI 音乐分析 """
from music21 import converter, chord, note
import collections

def analyze_midi(file_path):
    # 解析 MIDI 文件
    score = converter.parse(file_path)

    # 音符和音高分析
    note_names = []
    for element in score.flat.notes:
        if isinstance(element, note.Note):
            note_names.append(element.nameWithOctave)
        elif isinstance(element, chord.Chord):
            for n in element.notes:
                note_names.append(n.nameWithOctave)

    note_counter = collections.Counter(note_names)
    print("音符和音高分析:")
    print("每个音高的出现次数:", note_counter)

    # 节奏分析 - 节拍信息
    time_signatures = score.getTimeSignatures()
    print("\n节奏分析 - 节拍信息:")
    for ts in time_signatures:
        print(f"节拍: {ts.ratioString} 在第 {ts.measureNumber} 小节")

    # 过滤掉 Unpitched 对象
    pitched_elements = score.flat.getElementsByClass(['Note', 'Chord'])
    pitched_stream = pitched_elements.stream()

    # 和弦分析
    chord_sequence = []
    chordified_score = pitched_stream.chordify()
    for element in chordified_score.recurse().getElementsByClass('Chord'):
        chord_sequence.append(element.pitchedCommonName)

    chord_counter = collections.Counter(chord_sequence)
    print("\n和弦分析:")
    print("每个和弦的出现次数:", chord_counter)

    # 乐器分析
    instruments = []
    parts = score.getElementsByClass('Part')
    for part in parts:
        instrument = part.getInstrument()
        if instrument:
            instruments.append(instrument.instrumentName)

    instrument_counter = collections.Counter(instruments)
    print("\n乐器分析:")
    print("每个乐器的出现次数:", instrument_counter)


if __name__ == "__main__":
    #file_path = 'tear_bridge.mid'
    file_path = '伍佰/泪桥.mid'
    analyze_midi(file_path)

代码说明:

  1. 音符和音高分析:通过遍历 MIDI 文件中的所有音符和和弦,提取每个音符的音高名称,然后使用 collections.Counter 统计每个音高的出现次数。
  2. 节奏分析:使用 getTimeSignatures 方法获取 MIDI 文件中的节拍信息,并打印出每个节拍出现的小节位置。
  3. 和弦分析:将 MIDI 文件进行和弦化处理,遍历其中的和弦元素,提取每个和弦的名称,同样使用 collections.Counter 统计每个和弦的出现次数。
  4. 乐器分析:遍历 MIDI 文件中的每个部分,获取其中的乐器信息,统计每个乐器的出现次数。

注意事项:

你需要将代码中的 'tear_bridge.mid' 替换为实际的《泪桥》MIDI 文件的路径。同时,确保已经安装了 music21 库,可以使用 pip install music21 进行安装。

你可能感兴趣的:(文学,python,伍佰,泪桥,music,midi)