音楽マクロ言語(MML)は、コンピュータやビデオゲームシステム上で音楽をシーケンスするために使用される音楽記述言語です。
ミュージックマクロ言語(MML )という用語は、パーソナルコンピュータのBASIC方言の音楽文字列構文の説明において、1980年代初頭にはすでに使用されていました。初期の文書化された例の1つは、1982年5月のBYTE誌に掲載された、OKI if-800を解説した日本のパーソナルコンピュータに関する記事にあり、「MML(ミュージックマクロ言語)と呼ばれる別のサブ言語が使用されている」と記載されています。[ 1 ]
Microsoft の GW-BASIC のドキュメントでは、後に PLAY ステートメントで使用される構文を文字列式に埋め込まれた「音楽マクロ言語」と説明しました。[ 2 ]このことから、この用語は 1980 年代初頭までに Microsoft BASIC 派生環境でコンピュータ音楽に使用されるテキストコマンド構文に関連付けられていたことが示唆されます。[ 3 ]
音楽の弦表記自体はGW-BASICよりも古く、OKI BASICマニュアルなどの同時代のBASICドキュメントにも音楽シーケンスのPLAYステートメントの説明はあるものの、「音楽マクロ言語」という用語は使用されていないことからも明らかである。[ 4 ]
MMLという用語は、1982年までに出版された資料で明確に確認されている。[ 1 ]
初期の自動音楽生成機能は、コンピュータ音源を多用したアーケードビデオゲームで使用されていた。アーケードビデオゲームの音楽チップチューンの初期の例としては、 『ガンファイト』(1975年)や『サーカス』(1977年)などが挙げられる。
日本のビデオゲームブームは、1978年にタイトーのスペースインベーダーが日本のゲームセンター(アミューズメントアーケード)に登場したことで幕を開けた。[ 5 ]
音楽はすべて独自仕様(クローズドソース)でした。1978 年にIntelがプログラマブルインターバルタイマーをリリースしたことは重要でした。Intel 8253モード 3 方形波発生器は、シャープ株式会社が 1978 年 5 月に日本で製造したキットコンピュータ MZ-40K(マイコン博士/まいこんはかせ)で音楽に使用されました。別のマイクロコンピュータBASIC MASTER MB-6880(ja) BASIC Master (BASIC Master )は、 5ビットD/A コンバータを使用して音楽の自動参照信号を使用しました。BASIC ソフトウェアを使用して生成する方法の開発も重要でした。[ 6 ]このマシンは日立が組み立て、1978 年 9 月に日本で製造されました。MZ-40K はオープンアーキテクチャとプログラムソースを使用していたため、一種のオープンソースソフトウェアでした。
古典的な MML の最初のコマンドは、MZ-80K 8 ビット[ 8 ]コンピュータの SP-1002 MONITOR IOCS [ 7 ]および SP-5001 BASICオペレーティングシステムの内部アーキテクチャに登場しました。これは1978 年に日本のシャープ株式会社によって製造されました。[ 9 ] Intel 8253ハードウェアとメモリ マップド I/Oが組み込まれていました。サウンド関連のBASICステートメントは、MUSIC、TEMPO、および BEEP でした。 [ 10 ]

ここでは、 BASICで使用される古典的なMMLについて説明します。「MMLコマンド」はMUSICステートメントに渡されます。音符は3オクターブの範囲で指定されます。曲は、単音の連続です。
「+」(または古いコードでは「 ̄」)は上のオクターブ、「-」(または古いコードでは「_」)は下のオクターブを示します。「CDEFGAB」は音階(「Doremi Faso Lassi」)に対応します。半音は、音符の後に「#」文字を付けることで示されます。音符名の後には、0~9の数字で示される音の長さが続きます。同様に、Rは休符を示し、長さを示す0~9の数字が続きます。音の長さ内部値×テンポ値。音の長さ33分音符は0(SP-1002内部値は1)-全音符は9(SP-1002内部値は32)。$0030 SP-1002 IOCSプログラムルーチンを呼び出すと音楽が再生されます。[ 11 ]
ステートメント TEMPO n は 1〜9 で、最も遅い 1.TEMPO 4 は T=120 と似ています。
以下は、 MZ-731 SHARP S-BASIC 1Z-007B (SP-5001 Upper互換)で MML を使用して作成された人気の日本の歌「とりゃんせ」です。 [ 12 ]
10テンポ4 20 A$ = "E5R1E3R0D3R0E3R0E1R0D1R0-B4R1" 30 B$ = "F3R0F1R0F1R0A3R0F1R0E1R0F1R0E1R0D1R0D1R0E4R1" 40 C$ = "C3R0C1R0C1R0E3R0C1R0-B1R0C1R0-B1R0-A1R0-A1R0-B4R1" 50 D$ = "E1R0E1R0E1R0E1R0E1R0E1R0D1R0E1R0E1R0E1R0D1R0-A1R0-A1R0-B4R1" 60 E$ = "-A1R0-B1R0C1R0D1R0E1R0F1R0E1R0F3R1A3R1B1R0A1R0F3R0E3R0E1R0D1R0E4R1" 100音楽A$ + B$ + B$ 110音楽C$ + C$ + B$ 120音楽C$ + D$ + E$現代の MML は元々Microsoft BASICに登場し、1970 年代初頭から 1980 年代にかけて、日本の8 ビットおよび16 ビット時代のパーソナルコンピュータで一般的でした。NEC PC-6001 は1981 年にMicrosoft BASIC とプログラマブルサウンドジェネレータを搭載しました。MML は、 NEC PC-8801などのNECのパーソナルコンピュータで特に人気がありました。[ 13 ] 2001 年にNintendo Entertainment Systemで音楽を再生するために MML をコンパイルするソフトウェア mck (Music Creation Kit) がリリースされると、[ 14 ] MML の認知度と使用が増加しました。[ 15 ] MML は現在、日本の電子音楽家[ 13 ]やチップチューンを作成する音楽家[ 16 ]の間で、Nintendo Entertainment System用の音楽を作成する方法として人気があります。
現代の MML は、 BASICのサブ言語として始まり、その後マイクロコンピュータのROMに一般的に含まれていました。ステートメントは引数PLAYを使用して、サウンドチップが再生する音の列を定義します。MML コードは、再生する音符を記述するために文字と数字を使用するシンプルなテキスト形式です。 [ 13 ]さらに、MML のさまざまな実装では、特殊なコマンドでオーディオ合成のパラメータを変更したり、アルペジオなどの一般的な音楽的図形の入力を簡素化したりできるシステム拡張機能が追加されています。
多くのプラットフォームではカスタム拡張機能や大文字小文字の要件、その他のマイナーな構文機能が実装によって若干異なりますが、MML を定義する基本的な構文規則、コマンド、機能はすべて実装に全体または一部存在します。[ 13 ] [ 17 ]
cdefgab – 文字は音高に対応aし、対応する音符を演奏します。シャープ音符はまたはを付加することで、フラット音符は を付加することで作成されます。音符の長さは、全音符に対する分数としてその長さを表す数字を付加することで指定されます。たとえば、はC の8 分音符、 はF♯の2 分音符を表します。g+#- c8f+2p –休止または休符。rオリジナルの IBM および Microsoft BASIC では が使用されていましたがp、[ 18 ]すべてのクローン (Linux および BSD スピーカー デバイスなど) も同様です。[ 19 ]休符の長さは、音符の長さと同じ方法で指定されます 。たとえば、 は全休符r1を生成します。o – 数字が後に続くことで、楽器が演奏するオクターブoを選択します。>、 – 1オクターブ< 上下するために使用されます。l – 数字が後に続く場合、明示的に長さが定義されていない音符や休符に使用されるデフォルトの長さを指定します。たとえば、 4 つの8 分音符の後に 4 つの16 分音符l8 g a b g l16 g a b gが続くように指定します。v – 数値の後に続く値は、楽器の音量を設定します。設定可能な値の範囲は、使用するサウンドハードウェアによって異なります。一部の実装では、各音符の振幅にADSRエンベロープを適用することもできます。t – 数字の後に続くことで、1分あたりの拍数(BPM)でテンポを設定します。複数のサウンドチャンネルを備えたハードウェアでは、各チャンネルに異なるテンポを設定できる場合が多くあります。これらに加えて、ほとんどの実装では、システム固有の機能強化や拡張のために独自のキーワードやシンボルを追加しています。
以下は「カッコウの踊り」の現代MML転写です(読みやすさのために空白を入れていますが、MMLの演奏者によっては再生前に空白を削除する必要がある場合があります)。
t104 l4 > c16f16 a>c8<a c16f16 a>c8<a c8 b-8>c8<b-8 g c8 a8>c8<a8 f c16f16 a>c8<a c16f16 a>c8<a c8 b-8>c8<b-8 g >c8 <f2
以下は、 PC-6001(NEC PC-6000シリーズ)N60-BASICでMMLを使用して書かれた人気の日本の歌「とうりゃんせ」です。これは、従来のMMLとの比較のために記載されています。 [ 20 ]
10 A$ = "o4e2r32e4r32d4r32e4r32e8r32d8r32o3b2r16" 20 B$ = "o4f4r32f8r32f8r32a4r32f8r32e8r32f8r32e8r32d8r32d8r32e2r16" 30 C$ = "o4c4r32c8r32c8r32e4r32c8r32o3b8r32o4c8r32o3b8r32a8r32a8r32b2r16" 40 D$ = "o4e8r32e8r32e8r32e8r32e8r32e8r32d8r32" 50 E$ = "o4e8r32e8r32e8r32d8r32o3a8r32a8r32b2r16" 60 F$ = "o3a8r32b8r32o4c8r32d8r32e8r32f8r32e8r32" 70 G$ = "o4f4r32a4r32b8r32a8r32f4r32" 80 H$ = "e4r32e8r32d8r32e2r16" 100 PLAY "t120" 110 PLAY A$ 120 PLAY B$ 130 PLAY B$ 140 PLAY C$ 150 PLAY C$ 160 PLAY B$ 170 PLAY C$ 180 PLAY D$ 190 PLAY E$ 200 PLAY F$ 210 PLAY G$ 220 PLAY H$Standard Musical Expression (SMX) は、Microsoft がQBASIC、BASICA、およびGW-BASICのステートメントで提供している Modern MML のバリアントですPLAY。[ 13 ] GW-BASIC で使用されているバージョンは、最新の BSD、 FreeBSD、[ 21 ] NetBSD、OpenBSD、およびMirOSの一部です。言語については speaker(4) を参照してください。[ 22 ]
以下の例は、同じメロディー(「きらきら星」)を、初期の日本のマイクロコンピュータ向けMML言語であるシャープMZ用BASICとNEC PC-6001 N60-BASICの2種類でBASIC構文を用いて記述したものです。この比較により、初期のミュージックマクロ言語の実装における構文構造、コマンド統合、再生方法の違いが明らかになります。
特徴:
例
10テンポ4 20 A$ = "C3C3G3G3A3A3G6" 30 A$ = A$ + "F3F3E3E3D3D3C6" 40 A$ = A$ + "G3G3F3F3E3E3D6" 50 A$ = A$ + "G3G3F3F3E3E3D6" 60 A$ = A$ + "C3C3G3G3A3A3G6" 70 A$ = A$ + "F3F3E3E3D3D3C6" 80音楽A$この実装では、音楽データはBASICの文字列変数として段階的に構築されます。メロディーは文字列連結()を使用して拡張され、再生コマンドA$=A$+"..."に渡されます。MUSIC
特徴:
T)、オクターブ(O)、およびデフォルトの音符の長さ(L)は、PLAY 文字列内に埋め込まれています。PLAYステートメント内でインラインMMLを使用して直接記述されます。PLAYステートメントを使用して実行されます。例
10 PLAY "T120 O4 L4" 20 PLAY "CCGGAA G2" 30 PLAY "FFEEDD C2" 40 PLAY "GGFFEE D2" 50 PLAY "GGFFEE D2" 60 PLAY "CCGGAA G2" 70 PLAY "FFEEDD C2"これらの例は、初期のBASICベースのMML実装がしばしば周囲のプログラム構造に依存していたのに対し、後のシステムでは音楽制御パラメータがMMLコマンド構文内に直接統合されるようになったことを示している。
MMLの初期形態は、1970年代後半から1980年代初頭にかけて、日本の8ビットマイクロコンピュータのBASICインタープリタに広く実装されていました。シャープのMZシリーズやNECのPC-6001などのシステムでは、BASICプログラムに埋め込まれたテキスト表記を用いて、ユーザーが簡単なメロディーを作曲することができました。これらの初期の実装では、音符、オクターブ制御、テンポパラメータといった慣習が確立され、後にNECのPC-8801やPC-9801などのプラットフォーム上の音楽ドライバやゲーム開発環境で使用される、より高度なMML方言へと発展していきました。
日本のマイクロコンピュータ上で開発された初期のBASICベースのMMLシステムは、後に、NEC PC-9801システムで使用されたProfessional Music Driverなどのソフトウェアを含む、プログラマブルサウンドハードウェア向けに開発されたより高度な音楽ドライバや作曲環境に影響を与えた。
PLAY引数を受け取るステートメントを備えています。 [ 23 ] [ 24 ] [ 25 ]「ミュージック マクロ ランゲージ」という名前は、文字列データ型にミュージック マクロ ランゲージを埋め込むことで音楽を再生する機能を提供していた GW-BASIC に由来する可能性があります。[ 26 ]ドイツの雑誌 DOS Extra の DMV Widuch が作成した SBasic コンパイラは、同じ PLAY コマンドを提供しており、数行の BASIC プログラムをコンパイルして、コマンドラインで指定された MML ファイル (多くの場合 *.PLY と呼ばれます) を再生する小さな (数 KiB) ツールを作成することができました。 PLAYが製造または販売した他のいくつかのBASIC実装と同様に、ステートメントでMMLを使用していた。[ 13 ] [ 28 ]BGMPLAY、あらかじめ設定されたMMLトラック、または文字列として提供されたMMLトラックのいずれかを受け取ることができる関数を提供しています。MML (Music Macro Language) と呼ばれる別のサブ言語が使用されています。
{{cite web}}: CS1 maint: 非推奨のアーカイブサービス (リンク)元井健吉 によるプログラミングと編曲 。 「Twitter @PlayTrueName Σ:D『So long time wake up to the◎Programming to sound of music』2012年9月22日取得。 ライセンス #AAAP (クリエイティブ・コモンズ CC-BY-SA およびGNU フリー文書ライセンスのテキストを含む)。{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)