世界初のMML
目次
PDP-1 の Harmony Compiler (1963)
MUSIC-N(1957)
ベル研究所で、マックス・マシューズ(Max Matthews)が IBM 704 を使って作成したプログラムです。
プログラムの名前は MUSIC ですが、後ろに数字を付けられたバージョン違いが多数あるため、まとめて MUSIC-N と呼ばれます。
MUSIC-N では、デジタル・アナログ変換回路を使って、メモリ上に用意した「波形」データをアナログ出力できるような周辺回路を用意し、音を出します。
今でいう PCM 音源なのですが、録音することは考慮されていません。計算で音の波形を作り出すためのプログラムです。
また、作りだされるのは「音」なので、これ自体で音楽演奏を行うことはできません。
ただし、プログラムはライブラリとして作られており、演奏プログラムなどを作ることは可能でした。
この後バージョンアップを繰り返し、IBM-360 や PDP-11 、SIGMA-7 にも移植され、現代でも直系の子孫プログラムが生き残っています。
(今回の話で出てくる PC 以前のプログラムで、直系子孫が生き残っているのは MUSIC のみです)
PCM で、録音によらず音を作り出すプログラムは、すべて MUSIC-N の影響を受けている、と言っても過言ではありません。
あなたの PC も、おそらく PCM 音源しか搭載していないはず。
もし、録音した音を出すだけではなく自由に演奏が可能であれば、それは MUSIC-N の研究成果によるものです。
ところで、音を「自在に」作り出すプログラムなので、音楽演奏にとどまらず「歌う」ことも出来ました。
今でいえば VOCALOID の元祖です。
MUSIC-N を使った「応用プログラム」として、1961年にはじめてコンピューターが歌った曲は…「DAISY」。
(一見古そうに見えるが、古い素材を組み合わせて作られた最近の動画なので、こういう間違いもある)
映画「2001年宇宙の旅」(1968)の中で、壊れかかった HAL9000 が DAISY を歌うシーンがあります。
これはもちろん、MUSIC-N のエピソードを踏まえてのこと。
もっと知りたい
MUSIC-4 のマニュアル(PDF)
MUSIC-4 は、FORTRAN を使って全面的に書きなおされたものでした。
これにより移植がしやすくなり、IBM-360 用 MUSIC-360 や、PDP-11 用 MUSIC-11、SIGMA-7 用 MUSIC-7 などが作られます。
移植は、MIT のバリー・バーコー(Barry Vercoe)によるもの。
そのバリー・バーコーが、C 言語で MUSIC を作り直したもの。
新たに書きなおしたために「MUSIC」を名乗らず「SOUND」となっていますが、基本的には互換品です。
現在でもメンテナンスが続く直系子孫。
どうでもいいけど、Wikipedia 日本語版の Csound の記述デタラメ。
英語版の翻訳だけど、単語の依存関係が無茶苦茶なため、事実との乖離が激しい。(英語版は正しい)
結構好き。MML話に関係ないけど、SF映画ネタ満載で、「デイジー」はもちろんHAL9000の歌から。
TX-0 の MUSIC-X(1958)
MIT の TX-0 で作られたソフトです。
TX-0 が当時としてはあり得ないほど自由に使ってよいコンピューターで、学生たちが「才能の無駄遣い」を楽しんだことは別記事に書いています。
音楽演奏も、そうした無駄な遊びの一つでした。
CSIR が音でメモリ内容を確かめられたように、TX-0 にも音で動作状態を確かめられる機能が付いていました。
レジスタ内容はランプにより表示されていたのですが、このうち一つが並列にスピーカーと接続され、点滅に合わせて音が鳴ったのです。
これは「動作ノイズ」ともいえるものですが、ともかくコンピューターが音を出し、その制御方法もわかっていました。
そこで、教員であり、TX-0の管理者であり、ハッカーたちの兄貴分だったジャック・デニスが「音楽を演奏できるのではないか」と示唆し、学生だったピーター・サムソン(Peter Samson)が見事にやってのけます。
演奏データ形式
音階の指定方法は、オクターブを示す数値と、音名の組です。
A=440Hz は、5オクターブ目にあり、5a と書きます。同じオクターブの c は 5c 。一つ下の音は 4b です。
シャープ(半音上げる)は s 、フラット(半音下げる)は f を後ろに書きます。5cs は、オクターブ 5 の c# です。
音域は、1c ~ 9c まで。8オクターブと1音でした。
休符は r と表現します。(restの意味)
音長は、4分音符なら 4、2分音符なら 2、全音符なら 1 を指定します。
tempo、の意味で t をつけ t4 。これが4分音符の指定です。付点4分音符では、 dot の意味で d を付けて d4 となります。
1音ごとに改行が必要です。テキストで書かれた演奏データは事前にアセンブルされ、実際の演奏時プログラムが読み込むデータはバイナリでした。
「トッカータとフーガ ニ短調」は次のように記述されます。
4a t16
4g t16
4a t8
4a t2
4g t16
4f t16
4e t16
4d t16
4cs t4
4d t2
r t4
もっと知りたい
僕の書いた日記ページです (^^;
世界初、とぶち上げてしまってから、本当に初と言ってよいのか、ミッシングリンクを調べ始めたのが今回の記事を書いたきっかけでした。
演奏データは、プログラム用のアセンブラを通せるように工夫した記述になっています。
詳細は別ページに譲りますが、TX-0 は「ユーザーが命令を自由に作り出せる」機械だったため、アセンブラでも、命令などを自由に定義できました。
それを使って、音階を命令、音長をデータとして記述しています。