また、バージョンアップ等で挙動が変わったものがあったり、文章に間違いを見つけた場合は、こっそり教えてください。(^^;)
![]()
おしながき
![]()
ソフトエンベロープ
音量を細かく変更させることによって、音に表情を出します。 ちなみに、「ソフトエンベロープ」という名称は、MSXなどに搭載されているPSG音源が、デフォルトでエンベロープパターンを持っている(ハードウェアエンベロープと呼ばれる)ことから、それと区別する為に「『ソフトウェア』エンベロープ」と呼ばれる為です。但し、ファミコン本体の音源には、ハードエンベロープは搭載されていないようです。(※FDS音源には搭載されているようです)→正しくは、「ファミコン本体の音源にもハードエンベロープは搭載されていますが、現在のところ、MCKでは未対応のようです。(FDS音源にはハードエンベロープのコマンドがあるようです)」
mckc では2種類の方法でソフトエンベロープを実現させることができます。
1. v コマンドで直接音量を変更する
2. @v コマンドであらかじめソフトエンベロープパターンを定義する
なお、現在の mckc の仕様では、v コマンドと @v コマンドは同時に使用することはできません。(@v コマンドで指定したエンベロープパターン全体の音量を v コマンドで変更する等)
それぞれの具体例を示します。
1. v コマンドで直接音量を変更する
クレッシェンド(だんだん音が大きくなる)の例です。
A l8v1cv2cv3cv4cv5cv6cv7cv8cv9cv10cv11cv12cv13cv14cv15c MP3/NSF/MML
また、このMMLは、相対音量変更コマンドを使って、下記のように書くこともできます。
A l8v1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1cv+1c
更に、「v+」コマンドの省略値は1であるため(「v-」も同様)、下記のように省略できます。
A l8v1cv+cv+cv+cv+cv+cv+cv+cv+cv+cv+cv+cv+cv+cv+c
但し、現在のところ、以下のように書くと意図した動作にならないようです。
A l8v1[c|v+1]15
2. @v コマンドであらかじめソフトエンベロープパターンを定義する
@v コマンドは、1フレーム(1/60秒、以下エンベロープパターン定義は同様)ごとの絶対音量(0〜15)のみを半角スペースもしくはカンマ(",")で区切って羅列します。
ピアノ風の音色(アタックが強い音色)の例です。
@v0 = { 15 13 12 11 10 }
A l4@v0cde1.の例と一緒のファイルです。
ビブラート
周波数を細かく上下させることで、音にうねりを出すことです。 (音程)LFO(LowFrequencyOscillation=低周波変調)と呼ばれる場合もあります。 なお、音量を周期的に変化させることを、トレモロ(音量LFO)といいますが、mckc にはトレモロコマンドは実装されていません。 (しかし、@v コマンドを使うことで同様の効果を得ることもできます)
mckc では、@MP コマンドでLFOのパラメータを設定し、MPコマンドで指定番号のLFOを有効に、MPOFで無効にします。 LFOのパラメータは、1番目が発音からLFO開始までの待ち時間、2番目がLFOのスピード(値が小さいほど速いことに注意!)、3番目がLFOの深さ、4番目は常に0を指定してください。
以下に、数種類のビブラートの例を示します。
@MP0 = { 10 3 12 0 } // 普通のLFO
@MP1 = { 10 3 4 0 } // 浅いLFO
@MP2 = { 10 3 36 0 } // 深いLFO
@MP3 = { 10 1 12 0 } // 速いLFO
@MP4 = { 10 12 12 0 } // 遅いLFO
@MP5 = { 0 3 12 0 } // いきなりLFO
@MP6 = { 50 3 12 0 } // ディレイLFO
A l2. MP0cr4 MP1cr4 MP2cr4 MP3cr4 MP4cr4 MP5cr4 MP6cr4 MPOFcMP3/NSF/MML
ノートエンベロープ
これは、複数の音程(ノート)を交互に鳴らすことで、1つのパートで擬似的に和音を鳴らすものです。 別名「高速アルペジオ」と呼ばれる場合もあります。
mckc では、@EN コマンドでエンベロープパターンを定義し、ENコマンドで指定番号のノートエンベロープを有効に、ENOFで無効にします。 ノートエンベロープのパラメータは、直前の音程を基準とした相対ノート番号で指定します。 現在の音から半音上がる場合は 1 、半音下がる場合は -1 です。 また、同じパターンを繰り返す場合は、繰り返し位置に "|" を書きます。
以下の例は、ド(c)の音を鳴らした場合に、ドミソ(c, e, g)の和音にするパターンです。 基準音(c)から見て、ミ(e)はノート4つ上、ソ(g)はノート7つ上(ミ(e)からは3つ上)となります。(※筆者の環境では、MCK 2003/02/28 を使うと、このサンプルが正常に鳴りませんでした。 うまくいかない場合は、MCKのバージョンを変えてみてください^^;)
@EN0 = { | 0 4 3 -7 } // 1フレームおきにドミソを交互に鳴らす
@EN1 = { 0 | 0 4 0 3 0 -7 } // 2フレームおきにドミソを交互に鳴らす
@EN2 = { 0 4 3 0 } // 最初にドミソと変化し、ソの音で持続
@EN3 = { 0 4 3 } // ドミソと鳴った後、ノート3つ分づつ上昇
A l2 EN0c EN1c EN2c EN3c
A EN0 c c+ d d+ e f f+ g g+ a a+ b // ベースノートを変えた場合MP3/NSF/MML
ピッチベンド
発音している最中に、音程を滑らかに上下させる技法です。(余談ですが、私が中学くらいの頃、その発音の仕方から、友人との間では通称「うにょ〜ん」と呼ばれてました(笑))
実は、mckc には、現在のところピッチベンド専用のコマンドは実装されていません。(ピッチベンドコマンドが実装されているMMLの場合、「c_e」(ドからミに音程を滑らかに上昇させる)といったことができます) その為、ピッチベンドを実現する為には、@EP コマンドでピッチエンベロープパターンを定義し、EPコマンドで指定番号のピッチエンベロープを有効に、EPOFで無効にします。
以下に、ピッチエンベロープの例を示します。
@EP0 = { -100 20 20 20 20 20 0 } // 低い音程からはじめて基準音まで上昇
@EP1 = { 0 0 0 0 0 0 0 0 -10 } // 9カウント目からピッチが下がり始める
A l2 EP0cr4 EP1cMP3/NSF/MML
ショートノイズ
恐らく、ファミコン/GameBoy 音源独特のテクニックだと思います。(もしかしたらMSXとかのPSGでも可能なのかもしれませんが、試したことがないのでわかりません…^^;) ノイズの周波数を細かく変えることによって、トーンとノイズの中間のような音色を出します。(但し、音源エミュレータによっては正常に鳴らなかったり、実機でも鳴るものと鳴らないものが存在するようです) ハイハットやシンバル系の音色に用いられる場合が多いようです。
mckc の場合、@EP コマンドでノイズ周波数を例のように変更することによって実現できるようです。(実はこの原理は私にもよくわからなかったり…^^;) また、周波数の変化幅によって音色が変化します。
以下に、ショートノイズの例を示します。
@EP0 = { 15 0 } // ショートノイズ1
@EP1 = { 12 0 } // ショートノイズ2
@EP2 = { 8 0 } // ショートノイズ3
D l4 EP0ccccr EP1ccccr EP2ccccMP3/NSF/MML
デチューン
同じノートを周波数をずらして2チャンネル以上重ね合わせることによって、音に厚みを出す技法です。 別名、「周波数ずらし」(そのまんまですね^^;)、「コーラス効果」などとも呼ばれます。
mckc では、D コマンドを使ってデチューンレベルを指定します。
以下に、デチューンの例を挙げます。
AB l2
A cr4 cr4 c // 普通に鳴らすチャンネル
B D-1cr4 D-4cr4 D4c // デチューンをかけるチャンネルMP3/NSF/MML
ディレイ
現在鳴らしている音を、タイミングを若干遅らせて再度鳴らすことによって、音の広がりを出す技法です。 通常、2チャンネル使ってデチューンをかけた状態で行う場合が多いです。 また、ディレイをかけるチャンネルの音量は、基準トラックよりも若干音量を下げます。
以下に、2チャンネルディレイの例を挙げます。
A v15D0
B r16. v10D-2 // 付点16分音符だけ発音を遅らせる
AB l8 cdefgabMP3/NSF/MML
応用として、1チャンネルのみでディレイを行う方法もあります。 このテクニックは、アルペジオ(和音を1音1音順番に鳴らす)などを鳴らすパートによく使われます。 基本的な使い方ですが、通常の音とディレイ音を実際の音長の半分の長さで交互に鳴らすことで実現できます。
以下に、1チャンネルディレイの例を挙げます。
@v0 = { 15 13 12 11 10 } // 通常音
@v1 = { 10 8 7 6 5 } // ディレイ音
A l16 @v0c@v1c @v0d@v1d @v0e@v1e @v0f@v1f @v0g@v1g @v0a@v1a @v0b@v1b2chディレイの例と一緒のファイルです。
更に応用として、1チャンネルでディレイ時間を更に遅らせる方法です。 具体的には、1番目の音を発音後にはディレイパートを鳴らさず、2番目の音を発音後に1番目の音を発音します。 以後同様に、ディレイ部分では、1つ前の音を鳴らすようにします。 以下にその例を挙げます。
@v0 = { 15 13 12 11 10 } // 通常音
@v1 = { 10 8 7 6 5 } // ディレイ音
A l16 @v0cr @v0d@v1c @v0e@v1d @v0f@v1e @v0g@v1f @v0a@v1g @v0b@v1a rb2chディレイの例と一緒のファイルです。
クオンタイズ
1つ1つの音について、実際の発音時間をどれくらいにするかを定義します。 パート数の少ない音源にとって、クオンタイズを細かく変えることは、単調になりがちな音に表情を与える為の重要なテクニックです。
mckc の場合、2つのコマンドが用意されています。 q コマンドは、実際の音調を8で割った長さのいくつ分を鳴らすかを指定、@q コマンドは、実際の音調から何フレーム分早く停止するかを指定します。 q コマンドの場合、音の長さを割合で指定する為、音長が長くなればなるほど、発音停止時間も長くなります。 @q コマンドの場合は、音長が違う場合も、発音停止時間は常に一定です。 場合によって使い分けると良いでしょう。
以下に、クオンタイズの例を示します。
A l4 q1c q2c q3c q4c q5c q6c q7c q8c r // q コマンドの場合
A @q35c @q30c @q25c @q20c @q15c @q10c @q5c @q0c // @q コマンドの場合
A q4 c8 c4 c2 c1 // 発音停止時間も長くなる
A @q20 c8 c4 c2 c2 // 発音停止時間は常に一定MP3/NSF/MML
リリースエンベロープ
前述の「ソフトエンベロープ」の後者(@vコマンド)を使った技法です。 q コマンドで指定した発音時間が経過後、再度 @v コマンドで定義したソフトエンベロープパターンで演奏します。 これによって、発音停止後の残響音を鳴らしたり、前述の1チャンネルディレイ(基本編)のような効果が作れたりします。 なお、q コマンドによる発音停止ではなく、発音直後の r コマンドによる休符の場合は、リリースエンベロープは働かないようです。
以下に、リリースエンベロープの例を示します。
@v0 = { 15 13 12 11 10 } // 通常音
@v1 = { 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 } // リリースエンベロープ用
@v2 = { 12 10 9 8 7 } // ディレイ音
A q6@vr1 @v0c2 r // リリースエンベロープで残響音
A q4@vr2 l4cdefgab r // リリースエンベロープで1chディレイ
A q8@vr1 @v0c2r // この場合はリリースエンベロープは働かないMP3/NSF/MML
音色変更
ファミコンの音源では、チャンネルA,Bにおいて、4つの音色から1つを選択できます。 これらの音色の基本は矩形波(MSXやSEGA MARK-IIIのPSGの音)なのですが、波形の上下発音比率(デューティ比)を、12.5%(@0)、25%(@1)、50%(@2: MSXのPSGの音)、75%(@3)に変更できます。 それぞれ違った音色が鳴る為、効果的に音色を変更することで、より表情豊かな音楽を作ることができます。
以下に、各音色の発音例を示します。
A o4v15l1 @0c @1c @2c @3c // 12.5%, 25%, 50%, 75% MP3/NSF/MML
また、mckc においては、1回の発音に対して、音色変化パターンを作成し、それを1つの自作音色として定義することができます。 具体的には、@{} コマンドで音色変化パターンを定義し、@@ コマンドでその音色に切り替えます。
以下に、自作音色の例を挙げます。
@0 = { 0 0 0 0 1 1 1 1 2 2 2 2 3 } // 4カウントおきに音色変化
@1 = { | 0 2 } // 12.5% と 50% を交互に繰り返す
A l1 @@0cr4 @@1c矩形波音色例と同じファイルです
その他、チャンネルCは三角波を発音することができます。 三角波は、低音で鳴らすことでファミコン独特のアクの強いベースラインを鳴らす等の使い方が考えられますが、高音で鳴らすと柔らかい音が発音できますので、メロディラインに使うと矩形波とは違う効果を得られることを覚えておくと便利かもしれません。
以下に、三角波の例を挙げます。
C l4 o2cdefgab>c r // 低音で鳴らした場合
C o5cdefgab>c // 高音で鳴らした場合MP3/NSF/MML
DPCM(デルタPCM)
ファミコンの音源では、音声ファイル(wavファイル等)を変換したデルタPCMファイル(dmcファイル)を鳴らすことができます。 これによって、実際の打楽器やSE等をサンプリングした音を発声可能となっています。
まず、ファミコンで鳴らす音声ファイル(44.1kHz/16bitのモノラルwavファイル)を準備します。 但し、ファイルサイズに制限がある為、巨大なファイルは鳴らせない場合があります。 この場合、音声ファイルエディタ(SoundEngine, SoundForge, CoolEdit 等)で、不要な部分をカットする等の編集が必要です。(もし、フォーマットが違う場合は、音声ファイルエディタでフォーマットを 44.1kHz/16bit/Mono にして保存しましょう) 続いて、dmc converter を用意し、ファイルを dmc 形式に変換します。(ここからダウンロードできます) 実際の使い方は以下のとおりです。
1. dmc converter/dmcconv-gui をダウンロードし、同じディレクトリに解凍
2. dmcconv-gui を起動する
3. 変換したいwavファイルを dmcconv-gui にドロップする
4. ファイル一覧から変換したいファイルを選択する
5. 「変換」ボタンを押す
基本的にはこれだけです。 簡単ですね〜(^^) もし、変換ボタンを押してもファイルが出力されない場合は、変換元のwavファイルのフォーマットを確認してみてください。 その他、変換周波数や音量設定などもできるようですが、そこらへんはマニュアルを見るか試行錯誤してみてください。(私はwavファイルの時点で音量を調整するので使ったことが無いのです^^;)
実際にMML内でこれらのファイルを使用する場合は、@DPCM コマンドで使用ファイルの定義を行い、定義したノートを E チャンネルで発音することによって鳴らすことが出来ます。 @DPCM コマンドの数値は、オクターヴ0のド(o0c)を0とし、以降、半音上がる度に値が1づつ増加します。 また、定義内の2番目の数値は、再生周波数の指定を0〜15の範囲で行います。 同じDPCMファイルを使った場合、値が大きい=音が良い・音程が高い・発音時間が短い、値が小さい=音が悪い・音程が低い・発音時間が長い、となります。 なお、DPCM は、その構造上、元の wav ファイルに比べて、こもったような音が発音されます。 従って、元の wav ファイルと全く同じ音が鳴るわけではありませんので注意してください。
以下に、DPCM の使用例を挙げます。
@DPCM0 = { "wz_kick.dmc",15 } // o0c: Kick
@DPCM4 = { "wz_powsd.dmc",15 } // o0e: Power Snare
@DPCM9 = { "wz_htom.dmc",15 } // o0a: High Tom
@DPCM7 = { "wz_mtom.dmc",15 } // o0g: Middle Tom
@DPCM5 = { "wz_ltom.dmc",15 } // o0f: Low Tom
@DPCM8 = { "wz_htom.dmc",13 } // o0a-: High Tom-Middle
@DPCM6 = { "wz_htom.dmc",11 } // o0g-: High Tom-Low
E l4o0 cccc eeee aaggff r // 普通に鳴らす場合
E aaa-a-g-g- // 同じ音色で周波数を下げてみるMP3/NSF/MML
FDS音源(DISK-SYSTEM音源)
n106音源(namcoウェーブメモリ音源)
スウィープ機能
以上3つはまだ使ったことないのでよくわかりません…(^^;) 実際に使ってみたら追記したいと思います。
現状でのバグではなくて仕様です?
現在のMCK/mckc等でできないこと(=要望の裏返し^^;)を以下に挙げます。 但し、mckcのバージョンアップで改善されている可能性もあります。
- 三角波チャンネル(Cチャンネル)では、音量変更コマンド(v,@v,@vr,v+,v-)が使えないようです。(ハードウェア制限によるもの??)
- 本文でも挙げましたが、相対音量変更コマンド(v+/v-)をリピートコマンド内で使用すると、リピート後には音量が戻ります。 仕様と割り切ってしまえば良いのですが、例に出したような省略ができないのは辛い…(;_;)
- ノート指定と音長指定の間に空白を入れるとエラーになります。 個人的には、複数チャンネルで和音を書く場合に以下のように列を揃えられないのが悲しいです…(T_T)
A e-4g 4b-4
B c 4e-4g 4- やはり、ピッチベンドコマンドが無いのは悲しいです。 うにょ〜ん好き(笑)な私としては、是非実装してもらいたいところです。
これはMCKwatch側の問題かもしれませんが、8.3形式(ファイル名8文字+拡張子3文字:MS-DOS時代のファイル名の制限)以上のファイル名をつけた場合、ファイルをMCKwatchの実行ファイルにドラッグ後、MCKwatchの自動コンパイル機能を使うと、MMLが正しくてもコンパイルが通りません。(これに気づかずに結構ハマったことがありました…皆さん気をつけましょう^^;)→MCKwatch ver 4.16 以降でロングファイル名に対応しました!- たまたまかもしれませんが、ノートエンベロープ実行後に休符を挟んでノートエンベロープパターンを変えると、次以降の音が鳴らない現象が発生しました。
A l2 EN0cr EN1cr EN2cr EN3cr
休符を挟まないと大丈夫らしい…なんでだろ〜なんでだろう〜(?_?)- ちなみに、ノートエンベロープに関しては、鳴らし方によってはエミュレータが対応しきれずに正常に鳴らない場合があるようです。 意図した通りの音が鳴らない場合は別の音源エミュレータを試してみてください。(執筆時点では、Festaron か VirtuaNES がノートエンベロープの再現性が高いようでした)
- @q コマンドは省略値0ですが、実際に「@q」のみ、もしくは「@q0」と指定すると、発音停止時間が0になると思いきや、それ以降のノートはほとんど発音されなくなります。(1フレームのみの発音になる?) ここは素直に「q8」を指定しましょう。(^^;)
- 本文にもありますが、r コマンドだと常にリリースエンベロープが効かないのがちょっと困る場合があるかも。 個人的には、r コマンドでリリースエンベロープが有効になるかどうかを指定可能になると良いような気がします。
![]()
「MCKでファミコン音源を使いたおせ!!」にもどる
。
「VIVA! PSC!!」表紙にもどる 。
「打ち込み魂」表紙にもどる 。