音符の回文と楽譜の表示と演奏のためのJavaScriptライブラリabcjs


ホフスタッター『ゲーデル、エッシャー、バッハ』を読むまで知らなかったことはたくさんありますが、前から読んでも後ろから読んでも同じになる曲「逆行カノン」が、バッハの「音楽の捧げもの」の中にあるということもそのひとつです。対称になるように音符を並べるだけなら誰でもできますが、それが音楽として成立するというのはバッハの天才のなせる技でしょう。

『ゲーデル、エッシャー、バッハ』では、これに対応するエッシャーの作品「蟹のカノン」(図42)と、アキレスと亀の対話「蟹のカノン」、形式システム「TNT」が紹介されています。エッシャーの「蟹のカノン」書籍中ではグレースケールですが、「escher crab」で検索すれば、カラーのものが見つかります。対話とTNTについては書籍を参照してください(一家に一冊です)。

エッシャーの作品や対話の対称性は、注意して見たり聴いたりしなくてもわかります。形式システムの対称性はちょっと難しいです。しかし、音楽の対称性に気づくのは、桁違いに難しいと思います。楽譜を見たり思い浮かべたりせずに、この対称性に気づく人っているのでしょうか。リヒターレオンハルトの演奏でこの曲には親しんでいましたが、楽譜を見るまではまったくわかりませんでした。

CRAB CANON

というわけで、楽譜を見せたいわけですが、市販のものをスキャンして・・・というわけにもいきませんから、自分でどうにかしなければなりません。そこで、abcjsです。このJavaScriptのライブラリを使うと、テキストを楽譜に変換して描画できます。QuickTimeのプラグインが入っていれば、その場で再生もできます。下に実行例を掲載しますが、生成される楽譜はとてもきれいです。

ライブラリのロードと音情報の記述が必要です。

ライブラリのロードはこんな感じです。

<script src="http://abcjs.googlecode.com/files/abcjs_plugin_1.0.5-min.js" type="text/javascript"></script>

音情報はこんな感じで記述します(逆行カノン)。

<pre>
X: 1
T: Musikalisches Opfer (BWV 1079)
T: No. 3 Canones diversi (Realisation)
C: J. S. Bach
K: Eb
V: 1
C4E4|G4A4|=B,4z2G2-|G2^F4=F2-|=F2=E4_E2-|_E2=D2_D2C2|
V: 2
C2E2G2c2|=Bcde fedc|dGdf edc=B|=A=Bce dc=B=A|GAB_d cBAG|FGAB AGFE|
V: 1
=B,2G,2C2F2|E4D4|C4E4|GFGc GEDE|FG=A=B cEFG|ADEF GFED|
V: 2
DEFG FEDA|GFEc =B=AGF|EDEG cGFG|E4C4|D4E4|F2C2G,2=B,2|
V: 1
EFGA BAGF|GABc _dBAG|=A=Bcd ec=B=A|=Bcde fdGd|cdef edc=B|c2G2E2C2:|
V: 2
C2_D2=D2_E2|-_E2=E4=F2|-=F2^F4G2|-G2z2=B,4|A4G4|E4C4:|
</pre>

ページを表示させると、下のような画像が表示されます。『ゲーデル、エッシャー、バッハ』の図44よりも記号が冗長なのは、楽譜を対称にするためです。(画像のリンク先では視聴することもできますが、いつものように、IEはサポートしていません。)

逆行カノン