ギターのタブ譜を perl で簡単に出力するモジュールを作ってみた - にぽたん研究所

October 24, 2008

このエントリーをはてなブックマークに追加
一個前のエントリで、はてなダイアリーウクレレ記法をけっこう使ってるだなんだって話をしましたが、私はどちらかというとウクレレとか全然弾かなくて、ギターばっかり弾いてたりするので、なんか Music::Image::Chord という、それっぽいモジュールがあったので使ってみたら、何だか色々と残念な結果だったなんてつぶやきました。

で、やっぱ、ギターのタブ譜を出力するのは大変だなーって思ってたら、コメント欄でようちゃんから
むしろ、GD::Tab::Ukuleleを改造する方向でどうでしょう?
と提案してもらったので、その方向で検討してみました。


まず、ギターの場合、ウクレレと違って弦が 6 本なので、2 本追加して、フレットの長さを変えました。

それにともない、画像のサイズはウクレレのものより大きくしました。

ギターには、ミュート弦という概念があって「この弦は音を鳴らさないんだよー」なんていう場合に、弦の左はじのほうに、×マークがついてたりします。なので、その×マークを入れるスペースを左はじに確保しました。

ギターの場合、ローコードやバレーコードなど、ポジションによって押さえかたが異なるのですが、そんなことイチイチ言ってたらアレなので、アコースティックギター派の人向けにローコードを主に出力するようにしました。
もちろん、GD::Tab::Uklele 同様に、違うポジションでおさえたほうが指運がスムーズな場合は、chord() メソッドではなく、generate() メソッドを使って、より良いポジションが利用できます。

ちなみに、GD::Tab::Uklele の generate() メソッドを使う時、
$uk->generate('D7',[0,2,0,2])->png;
このようにすると

$uk->generate('D7', [0,2,0,2])->png

こんな感じになりますが、これって、[0,2,0,2] (1 弦から 4 弦) というよりは[2,0,2,0] (4 弦から 1 弦) の表現のほうがわかりやすいというか普通な気がします。
少なくともギターやってる人間は 6 弦から 1 弦に向かってフレット番号を入れるほうがシックリくるので、generate() メソッドを拡張して、こんな風に出来るようにしました。
$gtr->generate('G', '355433')->png;
こんな風に、無名配列ではなく、文字列で渡せるようにしました。
実際にこれを動かすと、

$gtr->generate('G', '355433')->png

こんな風になります。

ウクレレに比べて、弦が多いので、コードの種類はだいぶ増えて複雑なコードも使えるようになっています。
$gtr->chord('A7(#9)')->png;

$gtr->chord('A7(#9)')->png

もちろん、フレットを指定したりして、分数コードとかも出来て、音の幅が一層ひろがります。

$gtr->generate('Bb/A', '5x333x')->png;

$gtr->generate('Bb/A', '5x333x')->png


こんな感じ。


ということで、ほとんどが GD::Tab::Ukulele を改造しただけなのですが、ギター人口はウクレレよりも高いような気がしたので、GD::Tab::Guitar を CPAN にうpっておきました

もしよかったら、はてなで「ギター記法」とか出来ないかなーなんて勝手に期待しつつ、元の GD::Tab::Ukulele モジュールの作者である舘野氏 (リプライチャメント) に敬意を表します。

みなさん、よかったら使ってみてください。

nipotan at 22:08 | Comments(1) | TrackBack(3) | 技術 
このエントリーをはてなブックマークに追加

Trackback URL for this entry

Trackbacks

ギターのタブ譜を perl で簡単に出力するモジュールを作ってみた LDRを読んでいたらnipotanさんが素晴らしすぎるモジュールを作っているのが目に入ったので、その場でLDRの画面を閉じて勢いで作った。GDインスタンスをreturnしないとか微妙に挙動が違うところがありますが、
2. ピアノのコード表を出力するGD::Chord::Piano  [ 技林ブログ ]   October 27, 2008 17:44
nipotanさんの GD::Tab::Guitar に触発され、ピアノのコード表(和音)を出力するPerlモジュール書きました。...
3. ギターのコード譜を生成するプラグイン作った。  [ blog.aklaswad.com ]   December 11, 2008 13:17
こんな狭い世界でbayashiさんのと被ってしまってなんですが、ギターのコード譜...

Comments

1. Posted by よう   October 25, 2008 03:29
5 すごーい
nipotan++

Post a comment

Name:
URL:
  Remember info?: Rate: Face    Star