2014年05月28日の日記です


世界初のMML  2014-05-28 12:08:11  コンピュータ 今日は何の日

今日は、世界で最初の MML ドライバが完成した日!(1960)


…というのは、ごめん。ちょっと話盛ってます。

ある程度根拠はあるのだけど、言い切ってよいかどうかちょっとわからない。


でも、「それなりの根拠」の提示も含め、話を始めましょう。


その後調査したところ、どうも「最初」というには問題があるみたい。

確かに現行の MML に類似したものとして最古ではあるけど、現代に繋がっておらず、別の場所で再発明されている。


詳しくは、その後の調査をまとめた世界初のMMLもご覧ください。




最初に書いておけば、MML というのは Music Macro Language の略。

音楽を表現するための言語、ということですね。


音の高さとして「ドレミファソラシ」があるのは多くの方がわかっているとおもいます。

でも、「ド」がどの周波数の音か、というのは変動します。

言い換えると、「ドレミ~」というのは、相対的な音階。



周波数に対して音を決めた「絶対音階」というものがあって、日本語では

「ハニホヘトイロ」となります。


これも、小学校の音楽で習うので、覚えている人が多いと思います。


そして、英語では「C D E F G A B」です。




MML では、一般にこのアルファベットを使って音楽を記述します。


cdefgab


と書けば、ハ長調で「ドレミファソラシ」と鳴らす命令になります。


ちなみに、休符は「r」です。rest (休み)の意味。


cdefedcr

efgagfer


これだと、「カエルのうた」の冒頭になります。



音の長さを指示したい場合、「4分音符」なら、後ろに 4 と書きます。


4分、というのは「4つに分けた」と言う意味ね。

一番長い音を「全音符」として、それをいくつに分けるかで音の長さを示すのです。


4分音符の2倍の長さ、「2分音符」なら、MML では後ろに 2 と書く。


4分音符に点を付けた「付点4分音符」は、4. と書きます。

付点が付くと、本来の音の長さの半分を追加する(1.5倍の長さにする)意味です。


c4.d8e4.c8e4c4e2


これだと、「ドレミの歌」の冒頭。



細かな部分では方言も多いし、これ以上の詳しい説明は避けるけど、これが「MML」です。



1980年代には、パソコンというと「自分でプログラムするもの」で、大抵は MML も使えました。

でも、今のパソコンはプログラムするものではないですし、MML を使うのもいろいろ大変です。


遊んでみたい人は、数年前に一部で流行したTSS Clipboard Playerがおすすめです。

解凍して実行するだけでインストールなしに音楽演奏が楽しめますし、テキストエディタさえあれば、特別なプログラム環境も不要です。


TSSCP を入手したら、こことかここに行って、演奏してみるだけで結構楽しめます。




さて、MML 入門講座ではないので、話を戻しましょう。


コンピューターに音楽を演奏させる、と言う試みは、1951年に遡ります。

ENIAC の公開が 1946年ですから、わずか5年で、ただの「計算機」ではない試みが行われていたことになります。


(もっとも、紀元前500年のピタゴラスの頃から、音楽と数学が近い関係にあることはわかっていました。

 コンピューターで音楽を演奏しよう、というのも、それほど突拍子もない話でもないのです。)


1951年のシステムはCSIR MK1(後に CSIRAC と改名)というコンピューター上で動いていました。


CSIR MK1 は、当時の多くのコンピューターと同じく、水銀遅延管メモリを採用していました。

ただ違うのは…デバッグのために、水銀遅延管の内容(本来は超音波パルス)を、人間の可聴域でもスピーカーから出力する機能が付いていたことです。


こうすることで、メモリの内容が変化するさまを、音として聞くことができます。


…しかし、音が出ればこれを使って遊びたい、と思う人がいるものです。

やがて、「音楽を演奏する」実験的なプログラムが作られました。



この時に演奏された曲の1つが「ボギー大佐」でした。

後に映画「戦場をかける橋」のテーマ曲として編曲され、「クワイ河マーチ」として知られるようになった曲です。

こちらのページの一番下のリンクから、当時の演奏の録音を聴くことができます。

(QuickTime Player が必要です)




CSIR の演奏は、データを音階・音程とも数値として表現し、パンチカードに打ち込んだ数値をメモリ内に読み込んで、プログラムを実行する方式でした。

「演奏」はできるのですが、MML のような言語はありません。



CSIR の次に音楽を演奏した、とされるのは、AT&T ベル研究所で 1957年に開発された、「MUSIC」というプログラム。


このプログラムは、音楽演奏にとどまらずどんな音でも作り出してやろう、という野心的なもので…非常に汎用性が高い反面、音楽演奏に限って言えば、非常に面倒でした。


音を出す時には「周波数」と「秒数」を指定します。

指定方法には独特の表記方法を持ったプログラム言語が使用されますが、いわゆる MML ではありません。



ところで、この時代のコンピューターはまだ非常に高価なものです。

コンピューターを利用するのだって、1分1秒でも「無駄」を生じさせないようにする、と言う時代。


音楽演奏なんていうのんびりしたことができるのは、かなり贅沢な事でした、




僕が知る限り、3番目に音楽演奏を行ったのは TX-0


コンピューター利用には無駄が許されない時代、と書きましたが、TX-0 はおそらく世界初の「無駄が許される」コンピューターでした。


だから、世界最初のテレビゲームなんかも作られました。

そして、当然のように音楽演奏プログラムも作られています。


TX-0 では、CSIR と同じように、動作中に音で動作状況がわかるようになっていたそうです。


ジャック・デニスが「うまくやったら音楽が演奏できるのではないか」と示唆し、ピーター・サムソンがそのハックをやってのけました。


このプログラムのソース(アセンブラで書かれている)は今でも残っています

その冒頭に日付(おそらく完成した日)が入っていて、1960年の5月28日なのです。


これが、冒頭に書いた「世界初の MML ドライバ完成の日」の根拠。


もちろん、数値として楽譜を入れるのでも、周波数として入れるのでもなく、MML が使われています。




MML で書かれた楽譜データもちゃんとあります。


今の MML とは少し表現が違います。

先頭から数行を見てみましょう。


BOURRE= b-o-u-r-r-e-acute, Hill.


p| 3600

220|

4e t8

4f t8

4g t4

4c t8

3b t8

4c t4


冒頭の部分はコメントです。BOURRE と言う曲名。


次の2行は、アセンブラに対する指令。

実は、この楽譜データはアセンブルしてから使用します。


4e t8 というのは、「4番目のオクターブの e の音を、8分音符の長さで」と言う指定。

音の名前だけでなく、オクターブも一緒に示すのですね。


#現代の MML では、オクターブが切り替わるところでのみ、オクターブの指定を行うのが普通です。


t8 は tempo 8 の意味でしょう。

ちなみに、d8 と言うような表記もあります。dot 8 …つまり付点8分音符の意味。


こんな表記もあります。


4g t8

4fs t8

4b t8


4fs は、オクターブ4 の f の音の「シャープ」です。半音上げる。

4gf のように、f を付けると「半音下げる」でした。4fs と 4gf は同じ音になります。


ちなみに、オクターブは 1 から 9 まで使えます。

ただし、オクターブ 9 で使えるのは c のみ。事実上は 8 まで、ということですね。



1行が1音符で、必ずオクターブを同時指定するなど若干の表記方法の違いもあるために現代の MML とは異なりますが、方言の範囲内ではないかな、と思います。


ちなみに、音階は必ずオクターブの数値から、音長は t か d から始まるため、1行の中に両方が書いてあれば、順番はどちらが先でも構いません。




僕は TX-0 のエミュレータを作っているので、是非今日までに音楽演奏プログラムが動くようにしたかった…のですが、残念ながら間に合いませんでした。


TX-0 の動作については多くの文献が残っていますが、音がどのように出ていたかは文献にないのです。


どうも、動作確認用のおまけだったので、この機能は説明されていない模様。


TX-0 で「遊んだ」ハッカーたちについてまとめられている書籍「ハッカーズ」の中には、「アキュムレータに持つ18ビット・ワードのうち、14番目のビットの状態にしたがって発声される」という記述があります。

でも、エミュレートを試みている現段階では、この記述は事実とは異なるみたい。


#僕がなにか勘違いしている可能性もありますが。




TX-0 の音楽演奏プログラムを作ったピーター・サムソンは、翌年には仲間と一緒に、PDP-1 を使って4声の和音も出せる音楽演奏プログラムを作っています。


このプログラムは Harmony Compiler と名付けられていました。


ただ、Harmony Compiler は、いわゆる「MML」の表記からは離れてしまっているのですよね。

音程は cdefgab ではなく、数字で示します。


#多分、「オクターブ指定」の概念を無くして、言語解析を単純にするため。

 これで単純になった分、演奏のための機能が非常に多彩になっている。



音楽演奏としては TX-0 よりも Harmony Compiler の方が有名です。

しかし、これが現代の MML 的でないとなると、TX-0 の MML は「後世に影響を与えていない」可能性が高いようにおもいます。


最初に「世界最初の MML」と書いたことについて「話盛っている」と書いたのはこのため。


TX-0 の MML を紹介した時点で「違いはあるけど方言の範囲内」と強弁したけど、たぶんこの違いは現代とつながっていないためです。

繋がってないのだから、歴史的に最初だとしても、現代の「始祖」ではない。



じゃぁ現代の始祖はどれか、っていうのは最初のMMLについて、調査した方のページがあったりしますが、諸説入り乱れているようです。




PDP-1 の演奏に関しては、ダニエル・スミスのページに当時の録音が MP3 で公開されています。


ダニエル・スミスは、Harmony Compiler を作った「仲間」の一人で、HAX の代表の1つであるマンチング・スクエアの作者でもあります。


Harmony Compiler はさらに後に、PDP-6 にも移植されたようで、その際の説明書が残されています。


後日、TX-0 以降、現代にいたるまでの MML の進化の歴史調査を行いました。

興味のある方は世界初のMMLもご覧ください。




同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

世界初のMML

訂正・NOP命令の誕生

DAISY DAISY【日記 14/06/29】

続・世界初のMML【日記 14/07/17】

別年同日の日記

03年 開発言語

03年 クレーマークレーマー

08年 風邪惹き

17年 CRT処分

19年 ビートウォッシュ 追加レポート


申し訳ありませんが、現在意見投稿をできない状態にしています

【keim_at_si】 修正ありがとうございます! (2014-05-29 10:30:39)

あきよし】 大変失礼いたしました。古いURLを示しているページが多く、ページ閉鎖してしまったのかと勘違いしてしまいました。 本文から「配布終了している」の節を削除します。 (2014-05-29 05:57:56)

【keim_at_si】 配布終了してないですよー。開発は終了してますが。http://soundimpulse.sakura.ne.jp/tss-clipboard-player/ (2014-05-28 19:06:13)


戻る
トップページへ

-- share --

51004

-- follow --




- Reverse Link -