昨今、さまざまな作曲ツールが登場していますが、1980年代、限られたコンピューターリソースを活かして作曲ツールと言えばMML(Music Macro Language)でした。音符を文字で入力することで、ピコピコと音楽を奏でることができました。当時からMMLの熱烈なファンがいるため、今でもMMLを使って楽曲制作をするツールがたくさんあります。今回は「サクラ」というツールを使って音楽をプログラミングする方法を紹介します。

  • MMLで書かれた曲を再生しているところ

    MMLで書かれた曲を再生しているところ

初期のパソコン音楽とMMLについて

MML(Music Macro Langauge)は、演奏データをabcなどのテキストで入力する音楽記述言語です。音階のラシドをABCと記述するため、ABC記法(ABC mucis notation)とも呼ばれます。

MMLでは、ドレミファソラシを「cdefgab」と記述し、休符は「r」です。そして音階が上下する際には「gab>c<bag」のように記述します。ボリュームや音長を指定するには、「v8」とか「l4」のように指定します。

ちなみに、1980年代、初期のパソコンには、マイクロソフトのBASICがメモリに書き込まれており、標準のプログラミング言語として広く利用されていました。そして、その多くのBASICの演奏機能として、PLAY文が実装されていました。そして、PLAY文を使うと音楽を演奏できました。

もちろん、当時のPCで再生できる音というのは、初代ファミコンのBGMのような単純な波形(サイン波など)の音色しか発音することしかできませんでした。しかも、同時に再生できる音の数にも制限がありました。しかし、当時の職人達はその制限の中でさまざまな技術を駆使して美しい音楽を奏でていました。そして、90年代になると、さまざまな音色を奏でることのできる、FM音源やPCM音源などが登場し、ゲーム音楽を盛り上げていきます。

なお、コンピューター音楽が広く一般的になり楽器に近づいていくと、MMLに代わって専用の楽曲製作のシーケンサーが登場して普及していきます。しかし、MMLは非常に手軽に音楽を入力できるため、一部のマニアは引き続きMMLを使って楽曲製作を行っていました。

今でも使えるMMLツール - テキスト音楽「サクラ」について

今でもMMLを使うことのできるツールがたくさんあります。MMLは通常のテキストエディタだけで作成可能である上に、電子メールや掲示板などを介して手軽に音楽情報を伝えられるというメリットがあります。そのため、ネット上で簡単なメロディーを伝えるのに、MMLが使われることもあります。

実は、筆者が開発している、テキスト音楽「サクラ」もその一つです。他にも、MuseSPICEなど、いろいろなMMLのツールがあります。

ここでは、筆者の特権で、テキスト音楽「サクラ」を使って、MMLについて紹介します。サクラは2001年オンラインソフト大賞の入賞作品であり、高校の情報の教科書に掲載されたこともあります。ユーザーが投稿できる曲掲示板があり、たくさんのサンプル曲を楽しむこともできます。

テキスト音楽「サクラ」は、こちらからダウンロードできます。現在、エディタ付きのWindows版のほか、コマンドライン版のmacOS、Raspberry Pi版などがあります。オープンソースで開発されているので、その他のOSで動かすことも可能です。

サクラのサイトからZIPファイルをダウンロードし、解凍したら「Sakura.exe」をダブルクリックしましょう。すると、エディタが起動します。sampleフォルダにいくつかのサンプル曲が入っているので、エディタで開いてみてください。画面上部の再生ボタンを押すと再生できます。

  • サクラで音楽を再生しているところ

    サクラで音楽を再生しているところ

ただし、macOSやRasberry Pi版はコマンドライン版であるため、ターミナルを開いて、「csakura (MMLファイル)」のように打ち込むと、MIDIファイルが生成されます。別途TimidityなどMIDIファイルが再生できるプレイヤーを導入すると音楽を再生できます。また、Wineなどの互換レイヤーをインストールすると、サクラのWindows版をMacやLinuxでも実行できます。

MMLでかえるのうたを再生してみよう

原曲の著作権が切れている「かえるのうた」 をMMLで入力して試してみましょう。先ほど、簡単に紹介しましたが、ドレミファソラシが「cdefgab」、休符が「r」、音符の指定が「l」です。四分音符が「l4」、八分音符が「l8」です。また、同じ音を伸ばしたい時には「^」を記述します。

そして、MMLでかえるのうたを記述すると、次のような楽譜になります。基本的なコマンドさえ覚えてしまえば、それほど難しくありません。画面上部の再生ボタンを押すと、かえるのうたが再生されます。

l4 cdef edc^ efga gfe^
crcr crcr l8 ccddeeff l4 edc^
  • かえるのうたを入力して再生しているところ

    かえるのうたを入力して再生しているところ

なお、サクラでは、MMLのcdefgab^rを「ドレミファソラシーッ」と書くことができるようになっています。そのため、次のように記述できます。カタカナで歌うように記述できるのが分かるでしょう。

音符4 ドレミファ ミレドー ミファソラ ソファミー
ドッドッ ドッドッ 音符8ドドレレミミファファ 音符4 ミレドー

MMLでFizzBuzz問題を記述してみよう

なお、多くの音楽家たちが専用の音楽制作ツールに移行する中、一部のコアなMMLユーザーがMMLにこだわっていたのには、いくつかの理由があります。

一つには、テキストデータなので、バージョン管理やフレーズの管理がやりやすかったことがあります。そして、もう一つの理由として、マクロやスクリプト機能を使って、複雑なフレーズを手軽に生成できたという点があります。サクラにも、マクロ機能や、条件分岐や関数定義などのスクリプト機能が備わっています。

さて、本稿の最後に、サクラを使って本連載恒例のFizzBuzz問題を試してみます。ちなみに、FizzBuzz問題とは次のようなプログラムです。

> 1から100までの数を出力するプログラムを書いてください。ただし、3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と表示してください。3と5の倍数の時は「FizzBuzz」と表示してください。

サクラのスクリプトは、MMLの中にIF文やFOR文を直接組み込めるよう工夫しています。そのため、小文字はMML、大文字から始まるのは制御構文や関数と大文字・小文字で役割を分けています。

なお、ただFizzBuzz問題をプログラムするだけなのは面白くないので、FizzBuzzと表示するときに高いド、Fizzのときミ、Buzzのときソ、それ以外のとき低いドを演奏するようにしてみました。

曲名{"FizzBuzz"}
INT I=1
[100
  IF (I%3==0 && I%5==0) { PRINT{FizzBuzz} `c }
  ELSE{ IF (I%3==0) { PRINT{Fizz} e }
  ELSE{ IF (I%5==0) { PRINT{Buzz} g }
  ELSE { PRINT(I) c }}}
  I=I+1
]
  • FizzBuzz問題をMMLで記述したところ

    FizzBuzz問題をMMLで記述したところ

まとめ

以上、今回は、音楽記述言語のMMLについて紹介しました。MMLを使うと手軽に音楽を記述できるのに加えて、スクリプト機能を使って、音楽をプログラミングできるというのが大きな魅力となっています。サクラをはじめ、多くのMMLツールが今も利用できるので、一度試してみると楽しいと思います。

なお、2000年代にサクラを開発した時のエピソードですが、ゲーム音楽作曲家の梅本竜さんが、サクラに注目してくださり、メールで頻繁にやりとりをするようになり、個人的に仲良くなりました。サクラのバージョン2をリリースする際には、梅本さんと中華街近くで合宿をしながらサクラの開発をしました。合宿では、曲制作に必要な新機能を追加したり、一緒にマニュアルやサンプルを作りました。そして、山下公園近くのファミレスで、梅本さんとMMLを使った音楽制作のメリットについて熱く語り合いました。残念ながら梅本さんは2011年に37歳という若さで亡くなってしまったのですが、彼の作った楽曲は、サクラのサンプル(test_01.mml)に今も含まれています。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。