BokkaKumiai: 音楽のコード進行解析とギタータブ譜出力

tag perl music chord chord progress

はじめに

Merry Christmas (EVE)!! dukkiedukkieです。 みなさん、意識は高まっていますか?私はぼちぼちです。寒いので(^^ゞ
パッヘルベルのカノンが街でしとやかに奏でられるシーズン到来ですね。

今日は最近作り始めている拙作のモジュール
https://github.com/dukkie/BokkaKumiai/blob/master/lib/BokkaKumiai.pm
BokkaKumiai について書かせて下さいm(_ _)m。

パッヘルベルのカノンと同じコード進行の曲

私は「音楽の和声進行(コード進行、ChordProgression)」の解析を幼いころより趣味としておりまして、2005年ごろに「牧歌組合」というblogでCM音楽などなどのコード解析やギタータブフレーズ化を書いていたこともあります。
http://ameblo.jp/dukkiedukkie/

唐突ですが、「音楽には二種類しかない。アーメン終止か?お辞儀終止か?」みたいな話があります。こういった帰結の暴力性はさておき、実際音楽においては「なんだか、あの曲に似ているよな。。。」みたいなデジャブ感を音楽を聴いた際に体感された方は多いことだと思います。
まあ、そういう場合、プログラマにとってのデザインパターンと同様に、「音楽コード進行のデザインパターン」みたいなのが暗黙のうちに、あるいは明示的に(ブルースとか、ジャズのツーファイブとかはそういう和声進行のデザインパターンと解釈できます)使われていているから、というのが原因でアルことが多いと思います。

ハッペルベルのカノンやバッハのG線上のアリアのパターンについては、過去の私の拙文
http://ameblo.jp/dukkiedukkie/entry-10001850613.html
http://ameblo.jp/dukkiedukkie/entry-10002373892.html
などをご笑覧いただければ嬉しいです。

アドリブって?

私も下手くそな楽器弾きで、ギターもたまに弾いたりするのですが、上手い人やプロでセッションで食べれる人というのは、初見や初聴ですぐに適切な演奏を行えたりするものです。そういう人は真性の天才であるか、あるいは、「音楽のデザインパターンを学習により確実に身につけている」人だと思います。まあ、後者のほうが実際は多いのだと思います。ギリシャ哲学やオクターブの発見を持ち出さずとも、音楽というのは科学的なもので、ミュージシャンというのはエンジニアにも近い存在だと私は思います。

キーと拍子、ビートとコード進行パターンからプレイを決める!

それをプログラムにしてみたら。。。と書き始めたのがBokkaKumiaiです。

    #Pachelbel's Canon's Guitar Tab in C.
    use BokkaKumiai;
    my $cp = BokkaKumiai->new(
        'key' => 'C',
        'time' => '4/4',
        'beat' => 4,
        'pattern' => 'pachelbel',  #- 'Pachelbel's Canon'
        'bars_by_one_row' => 2,
    );
    $cp->mk_chord_progress;
    $cp->print_chord_progress;
    $cp->guitar_tab;	

のようにキーはC(ハ長調)、4/4拍子でパッヘルベルのカノンのコード進行パターンを呼び出すと、

Time: 4/4
Beat: 4
Key : C
| C G/B   | Am Em/G | F C/E   | F/D G7  |

   C       G/B       Am      Em/G    
   +   +   +   +     +   +   +   +   
e:-0---0---3---3---|-0---0---0---0---|
B:-1---1---0---0---|-1---1---0---0---|
G:-0---0---0---0---|-2---2---0---0---|
D:-2---2---0---0---|-2---2---2---2---|
A:-3---3---2---2---|-0---0---2---2---|
E:-X---X---3---3---|-0---0---0---0---|
   F       C/E       F/D     G7      
   +   +   +   +     +   +   +   +   
e:-1---1---0---0---|-1---1---1---1---|
B:-1---1---1---1---|-1---1---0---0---|
G:-2---2---0---0---|-2---2---0---0---|
D:-3---3---2---2---|-3---3---0---0---|
A:-3---3---3---3---|-3---3---2---2---|
E:-1---1---X---X---|-1---1---3---3---|

と、ギターコード例が表示されます。キーをGにすると、

    #Pachelbel's Canon's Guitar Tab in G.
    use BokkaKumiai;
    my $cp = BokkaKumiai->new(
        'key' => 'G',
        'time' => '4/4',
        'beat' => 4,
        'pattern' => 'pachelbel',  #- 'Pachelbel's Canon'
        'bars_by_one_row' => 2,
    );
    $cp->mk_chord_progress;
    $cp->print_chord_progress;
    $cp->guitar_tab;	

。。。

Time: 4/4
Beat: 4
Key : G
| G D/F#  | Em Bm/D | C G/B   | C/A D7  |

   G       D/F#      Em      Bm/D    
   +   +   +   +     +   +   +   +   
e:-3---3---2---2---|-0---0---2---2---|
B:-0---0---3---3---|-0---0---3---3---|
G:-0---0---2---2---|-0---0---4---4---|
D:-0---0---0---0---|-2---2---4---4---|
A:-2---2---0---0---|-2---2---2---2---|
E:-3---3---X---X---|-0---0---2---2---|
   C       G/B       C/A     D7      
   +   +   +   +     +   +   +   +   
e:-0---0---3---3---|-0---0---2---2---|
B:-1---1---0---0---|-1---1---1---1---|
G:-0---0---0---0---|-0---0---2---2---|
D:-2---2---0---0---|-2---2---0---0---|
A:-3---3---2---2---|-3---3---0---0---|
E:-X---X---3---3---|-X---X---X---X---|

と出力されます。

Jackson 5 "I want You Back"の場合

キーはAb, ビートはFunkらしく16ビートでBokkaKumiaiを呼び出します!

use BokkaKumiai;
my $cp = BokkaKumiai->new(
        'key' => 'Ab',
        'time' => '8/8',
        'beat' => 16,
        'pattern' => 'iwantyouback',
        'bars_by_one_row' => 2,
);
$cp->mk_chord_progress;
$cp->print_chord_progress;

マイケル・ジャクソンのクリスマスソングが聴きたいですね〜

Time: 8/8
Beat: 16
Key : Ab
| Ab      | C#      | Fm Ab/C C#M7 Ab| Bbm7 Eb7 Ab Ab|

   Ab                                C#                              
   +   -   +   -   +   -   +   -     +   -   +   -   +   -   +   -   
e:-4-4-4---4-4---4-4-4-4---4-4---4-|-4-4-4---4-4---4-4-4-4---4-4---4-|
B:-4-4-4---4-4---4-4-4-4---4-4---4-|-6-6-6---6-6---6-6-6-6---6-6---6-|
G:-5-5-5---5-5---5-5-5-5---5-5---5-|-6-6-6---6-6---6-6-6-6---6-6---6-|
D:---------------------------------|---------------------------------|
A:---------------------------------|---------------------------------|
E:---------------------------------|---------------------------------|
   Fm      Ab/C    C#M7    Ab        Bbm7    Eb7     Ab      Ab      
   +   -   +   -   +   -   +   -     +   -   +   -   +   -   +   -   
e:-1-1-1---4-4-4---4-4-4---4-4-4---|-1-1-1---6-6-6---4-4-4---4-4-4---|
B:-1-1-1---4-4-4---6-6-6---4-4-4---|-2-2-2---8-8-8---4-4-4---4-4-4---|
G:-1-1-1---5-5-5---5-5-5---5-5-5---|-1-1-1---6-6-6---5-5-5---5-5-5---|
D:---------------------------------|---------------------------------|
A:---------------------------------|---------------------------------|
E:---------------------------------|---------------------------------|

てな感じで、多少ファンク・ギター・カッティングっぽくカットパターンが計算されます。

これからのBokkaKumiai

ただのカッティングじゃなくて「--arpeggiate」オプションでアルペジオパターンにするとか、ベースタブ譜、ドラム譜のサンプル出力メソッドを作るとか、「--like_keithrichards」でキース・リチャーズっぽいフレーズにするとか(笑)、コード進行の組み合わせで、「空耳ケーキ」http://ameblo.jp/dukkiedukkie/entry-10002280358.htmlみたいな曲を解析あるいは自動作曲できるようにするとか。。。
果てしない夢がありますので、よろしくお願いいたします!!!