これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの 2 つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド gramophoneXNUMX です。
プログラム:
NAME
gramophone2 - GRAMophone は、音楽作曲のアルゴリズム ジェネレーターです。
シノプシス
蓄音機2 [-c|-d] ソースファイル [midifile]
OPTIONS
-c を生成せずにソースの構文を制御できるオプションです。
音楽。
-d は、ビデオ出力を使用してデバッグ モードをアクティブ化できるオプションです。
構成とプレーヤーのパラメーターと生成されたノート。
DESCRIPTION
GRAMophone では、音楽は XNUMX 種類の正式な文法を使用して生成されます。
構成に対するトップダウンアプローチの文法 (またはタイプ 3) と、
ボトムアップアプローチのためのリンデンマイヤー文法。
BASIC Concept OF 蓄音機
GRAMophone は、部分的には、
バーチャルプレイヤー(バーチャルミュージシャン)。 問題のプレーヤーは MIDI トラックに関連付けられており、
そして何をすべきかを伝える指示を解釈します。 一般的に、彼らは「ノートを再生する(送信する)」と言います。
MIDI メッセージ)。 GRAMophone のプレイヤーが集まってオーケストラを構成し、音楽を演奏します。
組成。
任意の数のプレーヤーが作品を再生できますが、実際には使用されるハードウェアによって影響を受ける可能性があります。
上限を設ける。
一般に、すべての奏者が楽器を演奏し、それぞれが異なる文法規則を持っています。
個々のプレイヤーは、全体で共有される一連のパラメータによって特徴付けられます。
オーケストラや個人のパラメータセット。
オーケストラのパラメータは次のもので構成されます。
使用される文法の種類 (チョムスキーまたはリンデンマイヤー)。
メトロノーム。
尺度。
生産プロセスで使用される反復回数。
各プレイヤーのパラメータは次のもので構成されます。
使用される文法の種類 (チョムスキーまたはリンデンマイヤー)。
楽器;
プレーヤーに関連付けられた MIDI チャンネル。
生産プロセスで使用される反復回数。
プレイヤーのノートには、次のような現在の状態があります。
オクターブ
ボリューム
デュレーション
リリース
これらの特性は、プレイヤーが宣言することでパラメータ的に制御できます。
関連する変数。 したがって、GRAMophone では、非決定的な生成が可能になります。
チョムスキー文法またはリンデンマイヤー文法を使用した音楽。
ガイド に 蓄音機
「Give Me A」(GRAMophone の「Hello, World!」)
基本的な考え方を紹介するために、以下に最も単純なアルゴリズム構成を示します。
GRAMophone で生成されます。この構成は単に音 A を生成するものであり、
チョムスキーとリンデンマイヤーの両方の方法で提示されます。
「シュローダー」の作曲「Give Me A」{
//この構成はチョムスキー文法で A ノートを生成します
文法チョムスキー
テンポ120
拍子記号 4/4
%
シュローダー選手 {
楽器0
%
@composition->A[,,,];
}
}
「シュローダー」の作曲「Give Me A」{
//この構成は、リンデンマイヤー文法を使用して A ノートを生成します
文法リンデンマイヤー
テンポ120
拍子記号 4/4
%
シュローダー選手 {
楽器0
%
公理->A[,,,];
}
}
キーワード構成 E
すべての構成は、キーワード構成で始まり、その後に文字列 (反転) が続く必要があります。
カンマ) にはコンポジションの名前が含まれます。 この後にはキーワードを続ける必要があります
次に、作品の著作権を含む別の文字列。
構成ブロック
構成ブロックは括弧内に配置されます。 これは XNUMX つのセクションに分かれています。
セクションではコンポジションのパラメータを定義し、グローバルなパラメータを宣言して開始します。
変数と、その曲を「演奏」する奏者がいるオーケストラセクション
定義されています。 最初の XNUMX つのセクションは % 記号で区切られています。
プレーヤーのキーワード
各プレーヤーは、キーワード player とそれに続く識別子で定義されます。
プレイヤーブロック
プレーヤー ブロックは括弧内に配置され、XNUMX つのセクションに分かれています。XNUMX つのセクション
プレーヤーに関連付けられたトラックのパラメーターを定義し、ローカルのパラメーターを宣言します。
XNUMX つはプレーヤー用の変数で、もう XNUMX つは正式なルール用です。 最初の XNUMX つのセクションは次のとおりです
%記号で区切ります。
コメント
GRAMophone では、コメントは C に似ています。コメントは文字ペア「/*」で始まり、終わる必要があります。
文字ペア '* を使用/.' アスタリスクとスラッシュの間にスペースを入れてはなりません。
これらのシンボルのペアの間にあるものはすべて、GRAMophone パーサーによって無視されます。 全体
コメント行も含めることができます。 コメント行は記号 // で始まり、終わります
最初の XNUMX つの例のように、行の最後にあります。
コンポジションのパラメータを定義するセクション
オーケストラのすべてのプレイヤーが共有するパラメータがここで宣言されます。 パラメータ
宣言できるものは次のとおりです。
文法
分解能
繰り返し
テンポ
拍子記号
このセクションは % 記号で終わる必要があります。
文法
このパラメータは必須であり、生成で使用される文法の種類を定義します。
これはチョムスキーまたはリンデンマイヤーのいずれかになります。
分解能
このパラメータは、1/4 継続時間の時間単位の数を定義します。 省略した場合、デフォルト
値 480 が使用されます。
繰り返し
このパラメータは、生成に含まれる反復の数を定義します。 その意味
以下で説明するように、選択した文法の種類によって異なります。 省略した場合、デフォルト値は 1
使用されます。
テンポ
このパラメータは、作品のリズムを定義します。 省略した場合、デフォルト値 120 が適用されます。
中古。
拍子記号
このパラメータは、コンポジションのメジャーを定義します。 省略した場合、デフォルト値 4/4 が適用されます。
利用される。
コンポジションのグローバル変数を宣言するセクション
以下で説明するように、変数はノートの属性のパラメータを制御します。
プレーヤーのパラメータを定義するセクション
各プレイヤーの個人パラメータと変数はここで宣言されます。 個人パラメータ
宣言できるものは次のとおりです。
楽器
チャンネル
繰り返し
このセクションは % 記号で終わる必要があります。
楽器
このパラメータはプレーヤーの楽器のタイプを示します。 GRAMophoneの楽器セットは、
ジェネラルMIDIと同じです。 値の許容範囲は 0 ~ 127 です。 がある
したがって、128 の楽器から選択できます。 機器コードを示す表が表示されます
以下:
0ピアノ
1 ブライトピアノ
2 ハンマーピアノ
3 ホンキートンク
4つの新しい歯
5 電子ピアノ
6チェンバロ
7クラビ
8チェレスタ
9 グロッケン
10オルゴール
11 バイブス
12マリンバ
13 木琴
14 チューブラーベル
15サントゥール
16 フルオルガン
17パーカッシブオルガン
18 BX-3 オルガン
19教会オルガン
20ポジティブ
21ミュゼット
22ハーモニカ
23タンゴ
24 クラシックギター
25 アコースティックギター
26ジャズギター
27クリーンギター
28 ミュートギター
29 オーバードライブギター
30 ディストーションギター
31高調波
32 ジャズベース
33ディープベース
34ピックベース
35フレットレスベース
36スラップベース1
37スラップベース2
38 シンセサイズドベース 1
39 シンセサイズドベース 2
40ヴァイオリン
41ヴィオラ
42チェロ
43 コントラバス
44 トレモロストリング
45 ピチカート
46ハープ
47ティンパニ
48マルカート
49 スローストリング
50アナログパッド
51 ストリングパッド
52 合唱団
53 ドゥーボイス
54の声
55オーケストラルヒット
56トランペット
57トロンボーン
58チューバ
59 ミュートトランペット
60フレンチホルン
61ブラスセクション
62 合成真鍮 1
63 合成真鍮 2
64ソプラノサックス
65アルトサックス
66テナーサックス
67バリトンサックス
68 スイートオーボエ
69イングリッシュホルン
70 ファゴット オーボエ
71クラリネット
72 Piccolo
73フルート
74レコーダー
75パンフルート
76ボトル
77 尺八
78ホイッスル
79オカリナ
80角リード
81 ソーリード
82 カリオペリード
83シフリード
84チャランリード
85 エアコーラス
86 レッツォ4ths
87ベース&リード
88ファンタジア
89ウォームパッド
90ポリシンセパッド
91 ゴーストパッド
92お辞儀パッド
93メタルパッド
94ハローパッド
95スイープパッド
96 アイスレイン
97サウンドトラック
98クリスタル
99雰囲気
100明るさ
101 ゴブリン
102 エコードロップ
103 スターのテーマ
104シタール
105バンジョー
106三味線
107琴
108カリンバ
109 スコットランド
110フィドル
111シャナイ
112 メタルベル
113アゴゴ
114スチールドラム
115 ウッドブロック
116太鼓
117メロディックトム
118 シンセトム
119リバースシンバル
120フレットノイズ
121 ノイズチフ
122海岸
123の鳥
124電話
125ヘリコプター
126スタジアム!!
127銃声
省略した場合、デフォルトの機器値 0 が使用されます。
チャンネル
このパラメータは、どの MIDI チャンネルをプレーヤーに関連付けるかを定義します。 16個あります
可能なチャネル。 チャンネル 10 は打楽器用に予約されています。 省略した場合、
デフォルトのチャネル値 1 が使用されます。
繰り返し
このパラメータは、生成における反復回数を定義します。 その意味は以下によって異なります
以下で説明するように、選択された文法の種類。 iterations パラメータが
構成宣言に含まれている場合、後者の宣言は無視されます。
プレーヤーのローカル変数を宣言するセクション
以下で説明するように、変数はノートの属性のパラメータを制御します。
GRAMophone のメモ
蓄音機でメモを書く方法
注記は、GRAMophone の端末記号の最初のカテゴリです。
GRAMophone は音符に英語表記を使用します。
ABCDEFG
音符の名前は大文字で記述する必要があります。 フラット記号とシャープ記号は、
それぞれ「b」と「#」で表されます。 これらの記号の間にスペースを入れてはなりません。
音名:A#、Gbなど。
ノートの属性
GRAMophone では、ノートにはオクターブ、ベロシティ、デュレーション、リリースという XNUMX つの属性を持つことができます。 の
オクターブ属性は -2 ~ 8 の間で変化し、ベロシティとリリース属性は変化します。
0 から 127 まで。メモが属性なしで書かれた場合、次のデフォルト
値が使用されます: オクターブには 3、ベロシティとリリースには 64。 現在のデフォルト値は、
期間はクロッチェットです。 この例では、「A をください」は単に A[,,,] と書かれています。 これ
は、A が 1 オクターブで、長さ 4/XNUMX、ベロシティで生成されることを意味します。
そして64のリリース。
ノートの属性の定義
ノートの属性は、角括弧内に記述することで定義されます。
ノート名の後にスペースを入れずに続けてください。 ノートには最大 XNUMX つの属性を含めることができます。
各属性タイプは値を XNUMX つだけ持つことができます。
属性は次の順序で定義する必要があります。
オクターブ
速度
デュレーション
リリース
XNUMX つの属性がすべて定義されていない場合、不足している属性にはデフォルト値が使用されます。
属性を含むメモの例をいくつか示します。
C[2, 50+60/2, 240*4,] - ベロシティ 80 で第 XNUMX オクターブの C を演奏します。
期間は 960 (解像度 480 の最小値)、リリースは 64 (デフォルト)
価値);
Db[4,,,] - のデフォルト値を使用して、第 XNUMX オクターブで D フラットを演奏します。
速度、持続時間、リリース。
F#[,,,] - すべての属性にデフォルト値を使用します。
間違った例は次のとおりです。
Db[3, 127, 960, 64, x] - 属性が多すぎます (x は変数です)。
PAUSE
一時停止は、GRAMophone の終端記号の別のカテゴリです。 それらは、
文字 R を持ち、期間タイプ属性のみを受け取ります。 指定しない場合、デフォルトの解像度
値が使用されます。 属性はメモの場合と同じ方法で定義されます。
一時停止の例をいくつか示します。
R[480/2] - 持続時間 240 で一時停止します。
R[] - 期間タイプの属性のデフォルト値を使用します。
コード
コードは、GRAMophone で使用される終端記号の最後のカテゴリです。 コードは系列です
同時に演奏されるノートの数。 GRAMophone では、コードで演奏された音符が囲まれています。
XNUMX つの「^」記号の間。
コードの例をいくつか示します。
^C[,,,]E[,,,]G[,,,]^ - 各ノートのデフォルト値を使用して C メジャーコードを演奏します。
^A[2,80,240,]C[2,,240,]E[2,,240,]^ - 長さ 1/8 の A マイナーコードを演奏します。
すべてのノートは 64 オクターブ、ベロシティ XNUMX (デフォルト値)、最初のノートは
コードの 80 つはベロシティ 64 で演奏され、残りの XNUMX つはベロシティ XNUMX で演奏されます。
(デフォルト値)。
複雑なコードにおける R の役割
コードの音の長さは常に同じであるとは限りません。 たとえば、それは可能です
つまり、長さ 2/1920 の音 C[4,,4,] が演奏されている間、音楽家は XNUMX つ演奏しなければなりません。
C[,,,]、E[,,,]、G[,,,]、Bb[,,,]の順に編みます。 方法があるはずです
C[2,,1920,] と C[,,,] は同時に開始しなければならないと GRAMophone に指示する場合、
E[,,,]は1/4の休止の後に始まり、G[,,,]は2/4の後に、Bb[,,,]は3/4の後に開始しなければなりません。 で
GRAMophone では次のように記述されます。
^C[2,,1920,]C[,,,]R[]E[,,,]R[960]G[,,,]R[1440]Bb[,,,]^
言い換えれば、コード内のすべての音符の前に、ポーズを表すポーズ定義を置くことができます。
ノートを演奏するまでの待ち時間。 どの順番で書いても大丈夫です
コード内の音を下げます。 上の例のコードは次のように書くこともできます。
^R[]E[,,,]C[2,,1920,]R[1440]Bb[,,,]C[,,,]R[960]G[,,,]^
識別子
GRAMophone の言語エンティティ、変数、マクロ、および非終端記号の一部
たとえば、チョムスキー文法には、それを識別できる名前が必要です。 これらの名前
は識別子と呼ばれ、作曲者によって選択されます。 GRAMophone の識別子は次のとおりです
プログラミング言語 Pascal で使用される識別子のシステム。 実際には識別子
は、文字とそれに続く一連の文字または数字で構成されます。 グラモフォンの
識別子も小文字で記述する必要があります。
チョムスキー文法
非終端記号
チョムスキー文法では、非終端記号は構造または「スタイル」を与えるために使用されます。
楽曲。 これらは、「@」の直後に識別子が続いて書かれます。
GRAMophone が使用するチョムスキー文法は文脈に依存しないため、制作責任者は次のことを行うことができます。
非端末のみである必要があります。
非終端記号 @composition
この非終端記号は、単一のプレーヤーの最終的な構成に対応し、
義務的です。
生産オペレーター
これは文字シーケンス「->」によって定義され、プロダクションの先頭を区切ります。
体から。
作品の本体
これには終端 (音符、ポーズ、コード) と終端以外のシーケンスが含まれる場合があります。
シンボル。 各プロダクションはセミコロンで終わる必要があります。
| (または) 演算子
制作物は非決定的である可能性があります。言い換えれば、制作物は XNUMX つ以上の選択肢を提示する可能性があります。
世代中。 非決定的なプロダクションの本体は、さまざまな要素で構成されます。
| で区切られた選択肢オペレーター。 例えば
@non_det->A[,,,]B[,,,]@Seq1|^A[,,,]B[,,,]C[,,,]^@Seq2R[]C[,,,];
は非決定的な生産です。
チョムスキー文法における反復の意味
チョムスキー文法では、生産物にはサイクルが含まれる場合があります。つまり、生産物体には非要素が含まれます。
実際に生産される生産物を指す終端記号。 例えば:
@Sequenza1->B[,,,]A[,,,]C[,,,]@Sequenza1;
生成中の無限ループを回避するために、非終端シンボル @Sequenza1 は次のようになります。
iterations パラメーターと同じ回数だけ処理されます。
リンデンマイヤー文法
リンデンマイヤー文法は終端記号のみを扱い、GRAMophone のバージョンでは次のことが可能です。
コンテキストフリーまたはポリフォニックコンテキストでの作業。 したがって、単音またはコードが表示されることがあります。
制作の先頭に立って。 すべてのプロダクションはセミコロンで区切られます。
オキサンドロロン
これは、生成が開始される最初の生産です。 それは義務です。 生産
オペレーター
これは文字シーケンス「->」によって定義され、プロダクションの先頭を区切ります。
体から。
| (または) 演算子
制作物は非決定的である可能性があります。言い換えれば、制作物は XNUMX つ以上の選択肢を提示する可能性があります。
世代中。 非決定的なプロダクションの本体は、さまざまな要素で構成されます。
| で区切られた選択肢オペレーター。 例えば
A[,,,]->A[,,,]B[,,,]|C[,,,]D[,,,];
は非決定的な生産です。
リンデンマイヤー文法における反復の意味
各ステップで、すべての文法の生成が同時に音符列に適用されます。
この場合、iterations パラメーターは実行されるステップの数を表します。
変数の使用
変数の宣言と初期化
GRAMophone は、以下を使用してノートの属性をパラメトリックに制御できます。
変数。 これらの変数はプレーヤーの宣言セクションで宣言されており、
次のタイプ: オクターブ、ベロシティ、デュレーション、MSB。 変数は次のように書くことで宣言されます。
そのタイプの後に、カンマで区切られた XNUMX つ以上の識別子が続きます。 宣言は必ず
セミコロンで終わります。 プレーヤーの識別子は XNUMX 回だけ宣言する必要があります。
以下は正しい宣言です。
速度x、y;
オクターブ oct、z;
期間 w;
以下は間違った宣言です。
速度 x、x;
オクターブz;
持続時間z;
宣言セクションの後、文法の前に初期化することができます。
= 演算子を使用して変数を取得します。
以下は宣言と初期化の例です。
速度x;
x = 0。
注記付きの変数の使用
変数は音符の属性式で使用されます。 GRAMophone は内部の型を制御します
式のため、オクターブ変数をベロシティ変数に追加することはできません。
例。
以下は note 変数の例です。
速度x;
持続時間z、w;
A[4,x,z+w,]。
実施例
「シュローダー」の作曲「クレッシェンド」{
//このコンポジションでは、速度が増加しながら 64 個の A ノートが生成されます
文法チョムスキー
テンポ120
拍子記号 4/4
反復 64
%
シュローダー選手 {
楽器40
%
速度 x=0;
@composition->A[,x=x+1,,]@composition;
}
}
条件
チョムスキー文法とリンデンマイヤー文法の両方で、次の条件を定義できます。
プロダクション本体内の変数。 条件が true の場合、プロダクションが実行されます。
それ以外の場合はそうではありません。 条件はプロダクション名の直後に定義されます。
「?」を使って記号の後に XNUMX つ以上のブール式が続きます。
ブール演算子は次のとおりです。
! ない
&& と
|| また
関係演算子は次のとおりです。
== ウグアレ
!= ディベルソ
< マイナー
> マッジョーレ
<= ミノレ・オ・ウグアレ
>= マッジョーレ・オ・ウグアレ
以下は条件付きプロダクションの例です。
@battuta?x!=0->A[,x=x-10,,]@battuta;
これは、x がゼロに等しくない間、@battuta プロダクションを生成することを意味します。 それ以外の場合はそうする
ではありません。
ディスコグラフィー、GRAMophone のライブラリ
GRAMophone には、ディスコグラフィーと呼ばれる外部ライブラリを含めることができます。 を含めるには
ソース ファイル内のディスコグラフィーでは、キーワード discography の後にファイル名を使用します。 あ
ディスコグラフィーは、内容が一致する限り、ソース ファイルの任意の位置に含めることができます。
含まれているソースの位置。
マクロ
マクロは、キーワードdefineの後に小文字の識別子と
逆カンマで区切られた文字列。 マクロはソースの先頭で定義する必要があります
構成、構成キーワードの前。 たとえば、単に次のように書くには、
A[,,,] の代わりに、次のマクロを定義する必要があります: "A[,,,]" を定義する
GRAMophoneの機能
repeat() 関数
repeat() 関数は、msb タイプの値とチョムスキーまたはリンデンマイヤーシーケンスを受け取ります。 それ
含まれているシーケンスを msb と同じ回数だけ繰り返すことができます。
型の値。
rand() 関数
rand() 関数は式を受け取り、次の値より小さいランダムな値を返します。
式の値。
GRAMophone のメロディック演算子
転置()
transpose() 演算子は、msb 型の値とチョムスキー シーケンスまたはリンデンマイヤー シーケンスを受け取ります。
関連するシーケンス内のすべてのノートが次のようにトランスポーズされるシーケンスを生成します。
msb タイプの値に等しい半音数。
反転()
inversion() 演算子は、Chomsky シーケンスまたは Lindenmayer シーケンスを受け取ります。 シーケンスを生成します
ここで、取られるシーケンスの最初の音符と他の音符の間の間隔は次のようになります。
逆算してみると。
逆行()
Retrograde() 演算子は、Chomsky シーケンスまたは Lindenmayer シーケンスを受け取ります。 シーケンスを生成します
これは挿入されたシーケンスの逆です。
onworks.net サービスを使用して、gramophone2 をオンラインで使用する
