(^p^)ブログ

いろいろなことがかかれていきます 編入関連の質問はTwitter,@mast15yamachiにて

(^p^)のーと:2/2 music21を使って楽譜を分析する

28日チャレンジ2日目は楽譜の分析について書きます。

 

 

1日目にちらっと出したmusic21

music21 Documentation — music21 Documentation

 

を使って楽譜のMIDIデータをいじり楽曲分析します。

 

このライブラリは、Python音楽学をするためのもので、

音楽構造の抽出、変換、編集などができ、それを可視化することで

各種の音楽の分析を行うのに役に立つものです。

 

入力できるフォーマットはMIDIMusicXMLなどの音楽データで、

WAVやMP3などの音響データを扱うことはできません。

 

折角なので、このライブラリを使いつつ

皆さんにもなじみ深い曲をいろいろ分析してみたいと思います。

 

なお今回、題材とする曲は、Musescoreのサイト内でダウンロードできるものから用いました。

 

musescore.com

 

 

Music21をつかおう

・楽譜の読み込み

 

まずは、モジュールに同封されているコーパスから楽譜を読み込みます。

コーパス中の適当な曲を読みだしてみます。

import music21 as m21

#コーパスの利用
piece = m21.corpus.parse("mozart/k545/movement1_exposition.xml")

# 楽譜表示(musescoreやFinaleなどがインストールされていないと動かない、)
piece.show()

f:id:yamatch:20180202015657p:plain

このようにバックエンドとなっている楽譜表示ソフトで楽譜を可視化できます。

 

例として、モーツァルトピアノソナタ16番を読み込んでみました。

さて、この曲に関するいろんな情報をだしてみましょう。

 

・調を調べる

piece.analyze("key")

 <music21.key.Key of C major>

ハ長調のようですね

 

・ピアノロール形式で表示

piece.plot('pianoroll')

f:id:yamatch:20180202022233p:plain

 

こんなかんじでだいたいどんな感じの曲かを俯瞰できます

 

・音高の統計情報

piece.plot('histogram')

f:id:yamatch:20180202022617p:plain

どの音が多いのか楽譜から調べることができます。

 

 

また、ひとつのパートを取り出して分析することもできます。

pieceはそれぞれのパートの演奏情報をリストにしてまとめたオブジェクトだと思ってください。

左手パートの情報を調べてみます。

・左手パート、音のピッチクラス(ドレミの音名が同じものをまとめて集計したもの、高いドも低いドも同じとみなす)の統計情報

piece[2].plot('histogram','pitchclass')

f:id:yamatch:20180202023422p:plain

ファ#が一個だけあるのみで、ほかはほとんどハ長調の音である。

ファ#があるのはどこかさがしてみる。

for m in piece[2].getElementsByClass('Measure'):
    for p in m.pitches:
        if p.name == 'F#':

            print(m.measureNumber)

 12

12小節目のようですね。

表示しましょう。

piece[2][12].show() 

 

f:id:yamatch:20180202220442p:plain

と、こんな感じで取り出しもできます。

 

こんな感じでmusic21を使えばいろいろな音楽分析ができてしまいます。

 

 

いろんなJPOPの楽譜を分析しよう

 

ここで実践、普段聞いている曲の良さの秘密に迫ろう、ということでmusic21を使ってJPOPの楽譜を解析していきます。

 

・JPOPのよさの秘訣は「ヨナ抜き音階」「ニロ抜き音階」

他の国のポピュラーソングにはない傾向として、JPOPは「ヨナ抜き音階」「ニロ抜き音階」と呼ばれる音階で構成されている曲が数多く見られます。

 

ヨナ抜き音階とは、ハ長調(ドレミファソラシド)のうち、「ヨ」4番目のファ、「ナ」7番目のシを抜いた音階です。

ニロ抜き音階はヨナ抜き音階の短調バージョンで、イ短調(ラシドレミファソラ)の「ニ」2番目のシ、「ロ」6番目のファをぬいた短音階です。

 

7音使って作るメロディよりも、ノスタルジックさを出しやすい音階です。

 

実際見てみましょう。

・千本桜

サビが特に顕著でした。

サビの1フレーズ目は38~45小節目なのでそこのメロディパートを抜き出すと、

piece = m21.converter.parse("#千本桜のファイルの場所")

sabi_piece = piece[0].measures(38,45)
sabi_piece.plot("histogram","pitchclass")

f:id:yamatch:20180202225047p:plain

E,B♭の音のみ頻度が少なくなっているのが見てわかると思います。

 

キーを調べると、

print(sabi_piece.analyze("key"))

d minor 

ニ短調(レミファソラシ♭ドレ)の2番目と6番目にあたるこの2音の頻度が明らかに低い、ニロ抜き短音階だ!

 

という感じです。

 

 

中途半端になりましたが、時間オーバーになりそうなので今日はここまで