symfonion's blog

A simple and structured music macro language

一年ぶりにリリース

symfonion-0.9.1

更新点は以下のとおり。

  1. インストールが簡単になりました。パスの通ったディレクトリに.zipファイルの内容(symfonion とsymfonion-VERSION-executable.jar)を置くだけ
  2. パラメタを指定せずに起動した場合、GUIが利用可能ならファイル選択ダイアログを開いてそこで処理するファイルを決められるようにした。
  3. 外部ファイルをincludeする機能を追加。
  4. 前回(一年前・・)のポストで予告していた音符の簡略記法を追加
  5. その他内部構造の改善

そろそろ曲をつくろう。

シンタックスシュガー

シンタックスシュガー(糖衣構文)というのは、もともとは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は設計されたと言っても過言ではない。かも知れない。

あるCPUメーカーのサウンドロゴ。

インテル(TM)、入ってる♪

今では音響商標というものが登録できるそうで、EUでは以下の楽譜がインテルの商標として登録されているそうだ。(欧州共同体商標登録第4610986号)

f:id:dakusui:20050923155628j:plain

さて、これのacousticのパートをsymfonionで表現してみよう。ファイル名はintel.jsとでもつけて欲しい。

{
    "$settings":{  },
    "$parts":{ "piano":{"$channel":0, "$volume":120 }  },
    "$patterns":{
        "acoustic":{
            "$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"}
            ],
            "$velocitybase":120
        }
    },
    "$sequence":[
        {
            "$beats":"8/4",
            "$patterns":{
                "piano":["acoustic"]
            }
        }
    ]
}

演奏は例によって以下の感じ。

$ symfonion intel.js

今回少しだけ気をつけて欲しいのは、$sequenceの下にある$beatsの部分。値が8/4となっている。

$sequenceは、配列内の要素を順々に演奏していくためのキーワードだが、各要素の長さがそれぞれ何拍子分演奏されるかは$beatsで指定されるのだ。ここには8/4と書かれているので、四分音符が8個分演奏されることになる。4/4とかって書いてしまうと、演奏されるべき楽譜が2小節分(=四分音符が8個分)あるので、途中で切れてしまうのだ。

Installing symfonion on MacOSX

Symfonion is a JSON based language to create music works. It takes a JSON file as input and outputs a midi file or plays it on the fly.

Today, I installed it on my Macbook Air and would like to share the steps.

1. Install Java

Download Java from here And follow the steps described here if you don't have it yet.

2. Install symfonion binary

Download symfonion binary from here Place it under /opt/local/bin.

$ sudo mv symfonion-0.8.10.jar /opt/local/bin/

3. Create a shell to run symfonion

Create a file named /opt/local/bin/symfonion.

#!/bin/bash

java -jar /opt/local/bin/symfonion-0.8.10.jar $@

And change the permission to 755.

$ sudo chmod 755 /opt/local/bin/symfonion

4. Done!

If you have installed symfonion successfully, you will see the output below when you type symfonion from a shell.

nikephoros:Music hiroshi$ symfonion 
usage: SYNTAX
 -c,--compile <arg>   compile the specified file to a standard midi file.
 -h,--help            print the command line usage.
 -I <arg>             specify midi in port.
 -l,--list            list the available midi devices.
 -o <arg>             specify a file to which a compiled standard midi
                      file is output.
 -O <arg>             specify midi out port.
 -p,--play <arg>      play the specifiled file.
 -r,--route           run a midi patch bay.
 -V,--version         print the version information.
nikephoros:Music hiroshi$ 

デデーン!

去年の暮れの「笑ってはいけない」には涙がでるほど笑い転げたのだが、最近、こんなものを見つけた。

f:id:dakusui:20140220012521j:plain

さて、せっかく作曲用の言語symfonionなんてものを作っているのだから、このサウンドロゴ?をそれで再現してみようと思った。

ちなみに、symfonionのインストール手順は、Linux系のOSを使っているならREADME.mdを見れば分かると思う。 .debファイルも作っておいたので、Ubuntuなどdebian系のOSを使っている人なら簡単だと思う。FedoraとかWindowsを使っているひとは、ちょっとだけ面倒だけど、自分でshellかbatを作ってほしい。ごめんなさい。 MacOSXならば英語だがここに。日本語版が欲しい人がいたら言って欲しい。

インストールが終わったら以下の内容のファイルをdede-n.jsというファイル名で作って見よう。

{
    "$settings":{  },
    "$parts":{ "piano":{"$channel":0, "$volume":120 }  },
    "$patterns":{
        "right":{
            "$body":[
                     {"$notes":"FGbAC>F>", "$length":"8"},
                     {"$notes":"EFG#B#E>", "$length":"1"}
            ],
            "$velocitybase":120
        },
        "left":{
            "$body":[
                     {"$notes":"Gb<<Gb<<<", "$length":"8"},
                     {"$notes":"F<<F<<<",   "$length":"1"}
            ],
            "$velocitybase":120
        }
    },
    "$sequence":[
        {
            "$beats":"4/4",
            "$patterns":{
                "piano":["right", "left"]
            }
        }
    ]
}

さて、このファイルをsymfonionを使って演奏してみよう。

nikephoros:Music hiroshi$ symfonion dede-n.js 
Now compiling...
bar:<0> 
    part:<piano>[.....|.....|][..|..|]
Compilation finished.


Start playing on null(1392828003193)
Finished playing.
nikephoros:Music hiroshi$ 

デデーン。

ちなみに、-cオプションを付けると、演奏する代わりに.midiファイル(スタンダードMIDIファイル)を作る。出力先のファイル名は-oで指定できるが、省略するとa.midiファイルに出力される。

つまり、こうすると

$ symfonion -c dede-n.js -o dede-n.midi

dede-n.midiファイルに、デデーン。が出力される。ダブルクリックとかして試してほしい。

上のファイルから作られた.midiこちら。さらにそれをmp3にしたファイルはこちら