symfonion's blog

A simple and structured music macro language

シンタックスシュガー

シンタックスシュガー(糖衣構文)というのは、もともとはKnuthが、摂取しすぎると人間が糖分を摂取しすぎた時のごとくに言語仕様が肥大するというダブルミーニングをこめて名付けたものなのだが、それを知る人は少ない。

とかってもっともらしい通俗知識(でまかせ)をWikipediaに書いて独り歩きをし始めたら面白いな。

さて、前回symfonionの記事を書いていて、随分昔に作ったシンタックスシュガーのことを思い出した。

ちなみに、MacOSX用のインストール手順はこちらUbuntuFedoraの場合のインストール手順はこちらを見て欲しい。Windows用の手順も近々用意する。申し訳ないが少々お待ちいただきたい。

前回のポストで、

            "$body":[
                {"$notes":"Db>++",    "$length":"4"},
                {"$notes":"",         "$length":"4"},
                {"$notes":"",         "$length":"8"},
                {"$notes":"BbDb>",    "$length":"8"},
                {"$notes":"DbGb>",    "$length":"8"},
                {"$notes":"GbDb>",    "$length":"8"},
                {"$notes":"DbAb>+",   "$length":"1"}
            ],

とある部分、これがまさに「音符」に当たる部分なのだが、たとえば「高いレフラットの四分音符」を表現するためだけに

                {"$notes":"Db>++",    "$length":"4"},

こんなにたくさんタイプしたくない。 実はこの部分、以下のように省略して書ける。

                "Db>++4",

このテクニックを使うと、上の"$body"はこう書き直せる。

            "$body":[
                "Db>++4", "r8", "r8", "BbDb>8", "DbGb>8", "GbDb>8", 
                "DbAb>+1", 
            ],

だいぶ、すっきりしてきた。 このカンマ(',')で区切られた各文字列は、symfonionではStroke(ストローク)と呼ばれる単位だ。手を一回動かしていっぺんになる音のあつまり、ぐらいの意味だと思って欲しい。

(以下の機能がバージョン、0.9.1で使えるようになりました。)

さて、このストロークをひとつの文字列の中に書くこともできる。 その場合、';'(セミコロン)を使えばいい。

            "$body":[ "Db>++4;r8;r8;BbDb>8;DbGb>8;GbDb>8;DbAb>+1" ],

こうやって、一行にすることができる。 しかし、この配列には一個の要素しか無い。ならば配列である必要もない。 そこで、

            "$body":"Db>++4;r8;r8;BbDb>8;DbGb>8;GbDb>8;DbAb>+1",

このように書き改めることもできる。 この辺の規則については形式的にまとめることもできるのだが、少々複雑なので、別の場所で論じることにしたい。 ともかく、以上をまとめると冒頭に掲げたsymfonionソースは以下のようにも書ける。

{
    "$settings":{  },
    "$parts":{ "piano":{"$channel":0, "$volume":120 }  },
    "$patterns":{
        "acoustic":{
            "$body":"Db>++4;r4;r8;BbDb>8;DbGb>8;GbDb>8;DbAb>+1",
            "$velocitybase":120
        }
    },
    "$sequence":[
        {
            "$beats":"8/4",
            "$patterns":{
                "piano":["acoustic"]
            }
        }
    ]
}

ちなみにこの音符部分、

            "Db>++4;r4;r8;BbDb>8;DbGb>8;GbDb>8;DbAb>+1",

これを見て「懐かしさ」を感じた人のためにsymfonionは設計されたと言っても過言ではない。かも知れない。