HomeBakery

FM音源ドライバ「FMP」で作成した曲を公開しています。
FMP7の使い方からMMLによる曲データ作成の方法も掲載!

FMP7で曲データを作ってみよう!(補足編:ディレイを使わないエコー表現の効率的な入力方法)

2021-02-21 20:40:43 | 曲データの作り方(補足編)

【対象者】
・「応用編3:ディレイとその使い分け」において、後半のディレイを使わない表現方法において、MMLの入力方法がわからなかった方

応用編3:ディレイとその使い分け」で、学校のチャイムを例にしてディレイの表現方法を学びました。

「メインのメロディーチャンネルとは別に、音量を下げて少し遅らせて同じメロディーを流すチャンネルを作る」
というやり方でした。MMLとしては下のようになります。

'{
 Title=ディレイsample(After)

 PartSSG=A1-A3
 PartMixLevel=100
 ClockCount=192
}

'A1 T80

'A1 v120 o5 l8 D0 P128
'A2 v 60 o5 l8 D2 P108 r
'A3 v 30 o5 l8 D4 P148 r4

★SSGエンベロープ
'@ E 1, 255,255,255,255,004,001

'A123 @1,1 E1

'A123 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

これとは別に、ディレイを使わない方法でエコーを表現するやり方も学びました。
鉄琴の音板をイメージして、1チャンネル1音にする方法ですね。
MMLとして以下のようになります。

'{
 Title=ディレイを使わずに表現する

 PartSSG=A1-A4
 PartMixLevel=100
 ClockCount=192
}

'A1 T80

'A1 v120 o5 l8 D0 P128
'A2 v120 o5 l8 D0 P128
'A3 v120 o5 l8 D0 P128
'A4 v120 o5 l8 D0 P128

★SSGエンベロープ
'@ E 1, 255,255,255,255,004,001

'A1234 @1,1 E1

'A1 r4 r4 r4< g2. &g4&g4&g4&g2. &g4&g4&g4 g2. g4 &g4&g4&g2.
'A2 c4&c4&c4 &c2.  c4&c4&c4 c2. &c4c4& c4&c2.&c4 &c4&c4 c2.
'A3 r4 r4 d4 &d2. &d4 d4&d4&d2. &d4&d4 d4&d2.&d4  d4&d4&d2.
'A4 r4 e4&e4 &e2. &e4&e4 e4&e2.  e4&e4&e4&e2.&e4 &e4 e4&e2.

上記のMMLは、考えながらダイレクトに入力しようとするととても難しいです。
混乱しますし、入力をミスした時に修正箇所が見つけにくいです。

そこで自分が入力する時のコツを教えます。
ちょっと遠回りですが、慣れれば入力ミスを減らし、結果効率よく入力できると思います。


(1)まずは普通に入力する
まず1チャンネルで普通にMML入力しましょう。
ここで、意図したとおり入力できているか、再生して確認しておきましょう。

'{
 Title=ディレイを使わずに表現する

 PartSSG=A1-A4
 PartMixLevel=100
 ClockCount=192
}

'A1 T80

'A1 v120 o5 l8 D0 P128
'A2 v120 o5 l8 D0 P128
'A3 v120 o5 l8 D0 P128
'A4 v120 o5 l8 D0 P128

★SSGエンベロープ
'@ E 1, 255,255,255,255,004,001

'A1234 @1,1 E1

'A1 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

 

(2)作った1チャンネルのMMLを複数チャンネルコピーする
分割したい分だけチャンネルをコピーして増やします。
今回は1音1チャンネルなので、4チャンネルに増やします。
ここで必ず再生して、全てのチャンネルが同じオクターブで再生されているか確認しておきましょう。

'{
 Title=ディレイを使わずに表現する

 PartSSG=A1-A4
 PartMixLevel=100
 ClockCount=192
}

'A1 T80

'A1 v120 o5 l8 D0 P128
'A2 v120 o5 l8 D0 P128
'A3 v120 o5 l8 D0 P128
'A4 v120 o5 l8 D0 P128

★SSGエンベロープ
'@ E 1, 255,255,255,255,004,001

'A1234 @1,1 E1

'A1 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

 

(3)前後の音階を見ながら、適用するチャンネルを1つ決めて、残りを休符にする
ここからが一番、勘所が必要になってくる所ですが、1小節分くらいの音階の流れを見つつ、
A1がオクターブが一番低い音階。A4が逆に一番高い音階になるように、適用するチャンネルを1音ずつ決めて行きます。

'A1 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

たとえば、上記の最初の約1小節分「c4e4d4<g2.」の流れを見ると
「g2.」が一番低いオクターブなので、A1チャンネルに。
「e4」が逆に一番高いオクターブなので、A4チャンネルに割り充てます。

下のように「g2.」はA1チャンネルだけ残し、残りのA2からA4の「g2.」は休符「r2.」に置き換えます。
'A1 c4e4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4e4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 c4e4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 c4e4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

一番高い音階の「e4」もA4チャンネルだけ残し、残りのA1からA3の「e4」は休符「r4」に置き換えます。
'A1 c4r4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4r4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 c4r4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 c4e4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

こうすると最初の1音目の「c4」が音階的にA2チャンネルに決められます。同じように書き換えます。
'A1 r4r4d4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4r4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 r4r4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 r4e4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

3音目の「d4」は残ったA3チャンネルに割り当てましょう。同じように書き換えます。
'A1 r4r4r4<g2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A2 c4r4r4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A3 r4r4d4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.
'A4 r4e4r4<r2.> c4d4e4c2. e4c4d4<g2. g4>d4e4c2.

慣れてくると、1音目から横へ順に書き換えができるようになってきます。
前後の音階を見ながら、割り当てるチャンネルが読めるようになってきますので。
全部書き換えると以下になります。
'A1 r4r4r4<g2.> r4r4r4r2. r4r4r4<g2. g4>r4r4r2.
'A2 c4r4r4<r2.> c4r4r4c2. r4c4r4<r2. r4>r4r4c2.
'A3 r4r4d4<r2.> r4d4r4r2. r4r4d4<r2. r4>d4r4r2.
'A4 r4e4r4<r2.> r4r4e4r2. e4r4r4<r2. r4>r4e4r2.

上記のように、1音1音がどこかのチャンネルに1つだけ残る形になればOKです。

 

(4)一度再生し、(3)が正しいか確認します。

これまでの作業をしても音が外れたりしていないはずです。
FMDSP7で再生確認し、同じ音が複数チャンネルで鳴っていないか。を確認しましょう。

 

(5)相対指定のオクターブを最適化をする
'A1 r4r4r4<g2.> r4r4r4r2. r4r4r4<g2. g4>r4r4r2.
'A2 c4r4r4<r2.> c4r4r4c2. r4c4r4<r2. r4>r4r4c2.
'A3 r4r4d4<r2.> r4d4r4r2. r4r4d4<r2. r4>d4r4r2.
'A4 r4e4r4<r2.> r4r4e4r2. e4r4r4<r2. r4>r4e4r2.

あとは上記の休符(赤字)部分を、その前の音階と同じ音階に書き換えて、タイ(&)で繋げていけばいいのですが、
ただ、相対指定のオクターブ「>」「<」がタイで繋げる時に邪魔になる場合があります。
先にそこを最適化しておきましょう。

オクターブの最適化方法として気をつけることは2つ
・1つのチャンネルに着目し、音階指定がしてあるところから、次の音階が指定されているまでの間は休符になっているので
 この間にある、相対指定のオクターブは、相殺する。

・相殺できず余った相対してオクターブ記号は、次の音階の前に集約させる

A1チャンネルを例にやってみましょう。
赤字になっている範囲の相対指定のオクターブ記号をみると「>」と「<」が1つずつあるので、ちょうと相殺できますね。
'A1 r4r4r4<g2.> r4r4r4r2. r4r4r4<g2. g4>r4r4r2.
         ↓
'A1 r4r4r4<g2. r4r4r4r2. r4r4r4 g2. g4>r4r4r2.

次に赤字になっている範囲の相対指定のオクターブ記号をみると「>」が1つだけなので相殺できません。
次の音階があるところに集約するのですが、この例だともう音階がないので、削除で構いません。
'A1 r4r4r4<g2. r4r4r4r2. r4r4r4 g2. g4>r4r4r2.
         ↓
'A1 r4r4r4<g2. r4r4r4r2. r4r4r4 g2. g4 r4r4r2.

※仮に音階があったらその直前に集約させます
'A1 r4r4r4<g2. r4r4r4r2. r4r4r4 g2. g4>r4r4r2. e4
         ↓
'A1 r4r4r4<g2. r4r4r4r2. r4r4r4 g2. g4 r4r4r2.>e4

他のチャンネルも同じように最適化しましょう。以下のようになります。
'A1 r4r4r4<g2.  r4r4r4r2. r4r4r4 g2. g4 r4r4r2.
'A2 c4r4r4 r2.  c4r4r4c2. r4c4r4 r2. r4 r4r4c2.
'A3 r4r4d4 r2.  r4d4r4r2. r4r4d4 r2. r4 d4r4r2.
'A4 r4e4r4 r2.  r4r4e4r2. e4r4r4 r2. r4 r4e4r2.

今回は、1音1チャンネルなので、綺麗に相殺できました。

 

(6)一度再生し、(5)が正しいか確認します。
これまでの作業をしても音は音が外れたりしていないはずです。
FMDSP7で再生確認し、オクターブの最適化が誤っていないか。を確認しておきましょう。


(7)休符を音階に置き換え、タイで繋ぐ

最後を休符を、音階とタイで繋いでいきます。
'A1 r4r4r4<g2.  r4r4r4r2. r4r4r4 g2. g4 r4r4r2.
      ↓
'A1 r4r4r4<g2.  &g4r4r4r2. r4r4r4 g2. g4 r4r4r2.
上記のように前の音階と同じ音階に置き換えて直前にタイ「&」を置きます。


A1チャンネルの休符を全て書き換えたのが下です。
'A1 r4r4r4<g2. &g4&g4&g4&g2. &g4&g4&g4 g2. g4 &g4&g4&g2.
'A2 c4r4r4 r2.  c4r4r4c2. r4c4r4 r2. r4 r4r4c2.
'A3 r4r4d4 r2.  r4d4r4r2. r4r4d4 r2. r4 d4r4r2.
'A4 r4e4r4 r2.  r4r4e4r2. e4r4r4 r2. r4 r4e4r2.

あとは同じようにして、全てのチャンネルを書き換えて完成です。

'{
 Title=ディレイを使わずに表現する

 PartSSG=A1-A4
 PartMixLevel=100
 ClockCount=192
}

'A1 T80

'A1 v120 o5 l8 D0 P128
'A2 v120 o5 l8 D0 P128
'A3 v120 o5 l8 D0 P128
'A4 v120 o5 l8 D0 P128

★SSGエンベロープ
'@ E 1, 255,255,255,255,004,001

'A1234 @1,1 E1

'A1 r4 r4 r4< g2. &g4&g4&g4&g2. &g4&g4&g4 g2. g4 &g4&g4&g2.
'A2 c4&c4&c4 &c2.  c4&c4&c4 c2. &c4c4& c4&c2.&c4 &c4&c4 c2.
'A3 r4 r4 d4 &d2. &d4 d4&d4&d2. &d4&d4 d4&d2.&d4  d4&d4&d2.
'A4 r4 e4&e4 &e2. &e4&e4 e4&e2.  e4&e4&e4&e2.&e4 &e4 e4&e2.


上記のように1小節くらいずつ空白で区切っておくと、万が一の時に修正箇所が見つけやすいです。

慣れるまでは、逆に時間が掛かるかもしれませんが、段階を踏んで確認しながら作業感覚で出来るので試してみて下さい。


FMP7で曲データを作ってみよう!(補足編:バランス調整について)

2019-01-05 14:10:15 | 曲データの作り方(補足編)
今回の補足編は、「バランス調整」というざっくりとしたキーワードになります。(笑)
要は各チャンネルの音をまとめて再生させた時に「自分が気持ちよく聴こえる」ように調整するための手段ですね。
 
DAWの世界だと「ミックス」とかそういう言い方になるのでしょうか?
自分の場合は、MMLという作成手段がゆえに「ミックス」というよりは「バランス調整」と言うほうがしっくりくるのでこう呼んでいます。
皆様はお好きなように呼んでもらえればと思いますが、ここでは「バランス調整」という言葉で進めさせてください。
 
 
■ボリュームによるバランス調整
まずは、最も一般的な方法から。
「v」コマンドで各チャンネルのボリュームを調整することで全体のバランスを整えるやり方ですね。
vの設定範囲は0~127ですが、FMP7でのデフォルトの音量管理は少し特殊になっています。
0が「無音」で、127が「最大音量」なのは当然なんですが、1~126は、その間を一定間隔で音量が大きくなっているわけではありません。
 
 
図にするとこんな感じです。
上の数字が実際に出る音量。下の数字がvコマンドにて指定した数値のイメージになります。

これを見ると0の無音と、1の音量の差がかなりあります。
v0で無音なのに、v1を指定すると実際の音量は25弱相当がいきなり出るということです。
v1~127は、25弱~127(最大)の実際の音量を等間隔で音量変化していきます。
 
なぜこういう仕様になったのかは不明ですが、自分が推測するに、音量「+1」もしくは「-1」当たりの音量変化を細かくさせたかったのだと思います。
バランス調整をする上で、1あたりの音量変化量は大事です。「+1」大きくしたら大きすぎる!「-1」にしたら逆に小さすぎる!ということは良くあります。
 
そのため実際の音量1~25弱相当はあまり使われないと想定してバッサリ落とし、よく使われる25弱~127(最大)の範囲で127等分することで細かい音量調整を可能にさせたかったのかなと思っています。
逆に言えば、実際の音量1~25弱相当が使えないことがデメリットです。静かな曲や、手動でフェードイン・アウトが綺麗に表現できないというのも困りもの。
 
そういう場合は、音量テーブル指定をデフォルトから変更するという方法があります、
一番最初のおまじない部分に
 
'{ VolumeExtend=1}
 
と指定することで、音量管理がリニアに変わります。(何も指定しないと、通常の音量管理ということになります)
 
図にするとこんな感じ。
音量テーブル指定を「1」にすると、実際の音量と指定する数字が同じになるのでイメージがつかみやすいです。
 
ただ、使ってみるとわかりますが、これはこれでクセがあります。
大きな音量を扱う曲だと、0~80くらいまでは実際の音はあまり聞こえないので、大体100~127くらいの範囲をメインで使うことになります。
(ディレイチャンネルで80くらいでしょうか。)
 
メインで使うボリューム範囲が狭いので、1つあげると結構ボリュームが大きくなりがちで、バランス調整しにくいケースも出てきます。
どちらの管理テーブルにも一長一短がありますので、作成する曲に応じて音量テーブルを使い分けるというのも最終的なバランス調整をする上で有効かと思います。
 
音量テーブル指定は全チャンネルに適用されるので、一部チャンネルだけ音量テーブル「1」指定ができると嬉しいんですけどねぇ。
※製作者の方に要望を出してみましたが、仕様上とても難しいのだそうです
 

■パンによるバランス調整
パンポッド(Pコマンド)もバランス調整する上で大きな影響を与えます。

「応用編2:パンポット(パン)を活用しよう!」でもお話したのですが、パンは左と右の音量レベルを調節している仕組みになっています。
※つまり、パンを一番左にするということは、「左の音量をMAX、右の音量を0にする」ということになります(パンが中央の場合は両方の音量がMAX)
 
ですので、パンも結果的に「音量によるバランス調整をしているのと同じ」だと自分は思っています。
 
更に255段階もパンが指定できるため、vコマンドとPコマンドの複合調整により実際に耳に聞こえてくる音の変化をより柔軟に設定できます。
一番左とか、一番右にパンを振るということは、vで指定した音量がMAXの状態で左や右だけにダイレクトに耳に伝わりますので、vコマンドで指定した数字以上に耳に入ってくる情報量が多く感じとれます。
音の分離感(要はステレオ感)が生まれるというのは、そういう耳に入る情報量の差によるものかもしれません。
 
そんな感覚をイメージすると、バランス調整もやりやすくなってくるのではないでしょうか。
※もう1つ音色パラメータの変更による音量調整という手段もありますが、ここでは割愛します。いずれ応用編のほうで説明しますね。
 

■SSG音源の音量バランスについて
SSG音源は、FM音源に比べると音量がとりにくいです。
FM音源で多チャンネルを使っていると、その音圧はかなりのものになりますので、一緒に鳴らしているSSG音源のチャンネルをv127で最大にしても、あまり聞こえないことがあります。
これは、SSG音源の特性上、エンベロープ(Eコマンド)により、実際にvで指定した最大音量に到達&それを維持している時間が短いというのが理由の1つとしてあります。
 
じゃあ、どうするのかというと、SSG音源も多チャンネル重ねて音圧を上げるやり方と、SSGミキシングレベル指定でSSGの音量レベルを持ち上げるやり方の2種類があります。
 
(1)SSGチャンネルを重ねる
このあたりは、「応用編1:ディチューンって何?」を参照してもらえるといいですね。
同じ音を重ねてディチューン(Dコマンド)をかけて音を厚くする。
こうすることで、FM音源に少しでも対向するバランス調整が可能です。
 
(2)SSGミキシングレベル指定でSSGの音量レベルを持ち上げる
一番最初のおまじない部分に

'{ SSGMixLevel=*1 } 
(*1の範囲は-20~20)

と指定するこで、SSGの音量レベルを変えられます。

マイナス数値は使うことはほとんどないので、基本的には1~20を指定することになりますが、これを指定すると音割れが発生しやすいです。
使う際は、そのあたりも考慮して使ってみましょう。
ちなみに自分は(1)の方法をメインで使ってます。(2)は最終手段としています。実際は使ったことないですけど。
 

■曲全体の音量バランスについて
多チャンネル構成で音量をガンガン上げていくと、音割れが発生しやすくなってきます。
特にバスドラムやベースなど低域となるチャンネルの音量が上がると確実に音割れが起きます。
それに伴って、ベースやバスドラムの音量を下げると、それに合わせて他のチャンネルの音量も下げざるを得なくなる。
それなら、いっそのこと曲全体の音量バランスをコントロールしたくなりますよね。(いわゆるマスターボリューム的な感じ)
それができるのがミックス割合指定です。

一番最初のおまじない部分に

'{ PartMixLevel=*1 }
(*1の範囲は0~100)

と指定することで、曲全体のボリュームを調整できます。
数字は%で設定し、何も設定しなければデフォルト100%です。
音割れが発生したら、少しずつ%の割合を下げて指定していってください。どこかで音割れしないポイントが見つかるはずです。
 

■WAVE出力時の音割れについて
FMP7は、WAVE出力機能がついています。
FMP7のバーを右クリックし、「ファイル」→「WAVE出力」を選択することで、現在再生中のデータをWAV形式で出力できます。
ネットで動画公開などする場合、とてもありがたい機能です。
 
FMP7再生の時は音割れしないのに、出力したWAVEを再生すると音割れする場合は、WAVE出力のオプションを確認しましょう。

WAVE出力する際の、名前を付けて保存する画面の中の「音量調整」という項目。

デフォルトは、「80%」でチェック「有」となっています。
このデフォルト状態でまずは出力してみてください。

FMP7 ver7.10gでは、このデフォルト状態での出力が、FMP7から直接再生した時とほぼ同じ音量になるように調整されている感じがします。
WAVE出力だと音割れする場合、このチェックが外れてしまっているか、数値が「100%」になっているかもしれません。
※WAVE出力の「音量調整」のデフォルトが、なぜ「80%」でチェック「有」なのか?
 これに関しては自分もよくわかりません。製作者の方に時間あれば確認してみたいと思います。
 
 

以上のように、一言でバランス調整と言っても、いろいろな方法がありますね。(これ以外の方法もあるでしょう)
ただ、1つ言えることは、作り手が一番「気持ちいい!」と感じることが最高のバランス調整だと自分は思っています。
そこに近づけるための手段の1つとして、このブログが参考になれば、うれしいですね。
ではまた!

FMP7で曲データを作ってみよう!(補足編:カウント数による音長指定)

2018-08-18 09:26:29 | 曲データの作り方(補足編)
前提:FMP7で曲データを作ってみよう!(補足編:連符について)を読んでいること
 
前回の補足編では、連符の説明の中で「音長」のお話をしました。
音長は下の図のように、音符に対応した数値を音階の後ろにくっつけることで指定できます。

ただ、この指定方法だと、音長「6」「12」「24」「48」といった中間値までの指定が限界で、それ以上細かい音長指定はできません。
ギターソロでのグリッサンド、ボーカルのしゃくりといった絶妙な部分を表現しようとするために、もっと細かい音長指定が欲しくなりますよね。
そういった場合、クロックカウント数で音長を指定する方法があります。
 
 
■クロックカウント数で音長を指定する方法
まずここで言う「クロックカウント」とは、全音符の分解能を定義することをいいます。
MMLの冒頭で「おまじない」のように指定している

ClockCount=192

この指定で、全音符(つまり音長「1」)=クロックカウント数「192」と定義しています。
あとは音階の隣に「c#192」といった感じで「#」をつけることでカウント数として音長を指定することができます。
この例だと全音符のド「c1」と同じになりますね。
そのほかの音長も、192から割り算してあげれば、おのずとカウント数が算出できます。(下図、参照)

上の数値を参考にしてあとは、ちょっと長くする、ちょっと短くするといった細かい音長指定が可能になります。
 
ただ、全音符を192カウントと定義している以上、「1小節内の合計カウント数を192」で納めないといけません。
あまり多用しすぎると計算ミスなどで、192カウントに足りなかったり、オーバーしたりして音ズレが発生しやすくなります。
さらに通常の音長指定とカウント数指定を混ぜて使用してしまうと、更に計算がややこしくなってきます。
 
ですので、カウント数指定は「音階+音長」の「音長指定側」で使うよりも、ピッチベンドやLFOの「開始タイミング(遅延)」といった「オプション側」で使うほうが、音ズレの発生をさせずに細かい調整ができます。
 
例えば、大本が「c4」だったギターパートのMMLを後半、グリッサンドにしたい場合
(音ズレしやすい使用例)c#34 & c#14_<c
(メンテしやすい使用例)c4_<c#34
 
どちらの例も同じ再生結果になりますが、
前者の場合、グリッサンド部分の音長#14を変更したい場合、前半の#34も変更を余儀なくされます。
(合計で4分音符分のカウント#48にしなければいけないため)
後者の場合、音長指定は変えていないため、#34の数値だけ調整してあげれば、音ズレの心配なく、最適値の調整を細かくしていくことが簡単になります。
上記の例はギターのグリッサンドだけなく、ボーカルのフォールの時などにも有効ですね。
 
ボーカルのしゃくりの場合は、どうでしょう?

例えば、大本が「b4」だったボーカルパートの最初にしゃくりを入れたい場合、
(音ズレしやすい使用例)a24_b#7 & b&b12
(メンテしやすい使用例)a24_b#7 & b4~24

これもどちらも同じ再生結果になります。
今回の例では「しゃくり用の音長」+「残りのビブラート用の音長」に分割して入力しています。
前者の場合、単純に音長を分割しているので、カウント数指定ではないにしろ計算が面倒ですし、メンテするにも見にくいですよね。
後者の場合、しゃくり用に確保した分の音長「24」を大本の「b4」から減算させています。
音長の減算には「~(チルダ)」の記号を使います。この記号の後に指定した音長分マイナスするので、結果差し引き4分音符の音長とイコールになっています。
 
実際のMMLによる曲作りは、修正→コンパイル→試聴→修正→コンパイル→試聴の連続になります。
慣れるまで入力したパラメータに対して、コンパイル後の演奏イメージが直結しにくいためです。
なので、音長指定やカウント数指定、そして減算(~)を上手に使って、調整しやすいMMLにすることで、入力ミスなどを減らし、その分バランス調整に時間を費やせるようになります。
 
今回は少し難易度が高い補足編となってしまいましたが、是非このあたりを意識してみてください。
余計なミスでイライラすることがグッと減りますよ(笑)
 
 
■最後に
グリッサンドや、しゃくりといった具体的な手法を例として挙げていますが、今回示したMML表記方法が、必ずしもそれらの表現を限定しているものではありません。
手法に対するMMLの表現方法は自由であってよいので、あくまで個人的な例として捉えてください。

FMP7で曲データを作ってみよう!(補足編:連符について)

2018-08-17 13:54:14 | 曲データの作り方(補足編)
補足編の3回目は「連符」についてです。

連符とは、ある音符を何等分かに分割することを言うのですが、2分音符や4分音符、8分音符といった音長に対して、2等分、4等分、8等分することは簡単です。
 
例えば、4分音符を2等分するということは、8分音符2つ分といったように、キレイに分割できます。
でも、4分音符を3等分したい場合、用意されている音符ではキレイに分割することができません。(下図参照)
こういう場合、楽譜だと下のように表現されているのを見たことがあるかもしれません。この図の場合、3連符と言います。
これをMML上で入力する方法は2種類あります。
1つは、連符コマンドを使う方法。もう1つは直接、音長指定する方法です。
 
 
■連符コマンドを使う方法
MMLで連符を実現するためには、連符コマンド。というか表記方法があります。

上記のように中カッコ({ と })で音階を括って、最後に「分割前の大本の音長」を添えます。

中カッコの中の音階を増やせば、単純に何連符でも指定できますが、大本の音長より多く音階指定すると、理論上分割することはできませんので、コンパイルエラーとなります。
また、「{ [c]3 }4」のように、連符コマンド内では、繰り返し指定が使えないというのがデメリットです。
以上のように使い方に少しクセのある方法ですが、楽譜からの打ち込みとかなら迷わないので確実です。
 

■直接、音長を指定する方法
こちらは、MMLの基本となる「音階+音長」の入力スタイルを崩すことなく打ち込めるので、自分はこちらを使っています。
ただ、音長は、下の図のように音符ごとに数値が決まっているので、連符を入力する上でどんな音長を数値にすればよいのでしょう?
 
実際に入力する場合は以下のようになります。
上記の音長「12」という数値はどこから来るのでしょう?

8分音符だと2つ分、16分音符だと4つ分になるから、3つ分にするならその中間の数字にすれば良いというのは感覚的にわかると思います。
3連符や6連符であれば、この直接音長指定のほうが簡単ですね。
ちなみに、同じ考え方に則れば
・2分音符の3連符指定の時の音長は「6」
・8分音符の3連符指定の時の音長は「24」
・16分音符の3連符指定の場合の音長は「48」
となります。(3連符なら、大本の音調の3倍の数値という覚え方を自分はしています)
 
音長指定による分割のメリットはもう1つあります。
連符コマンドだと当たり前なことですが、音長は必ず等分されます。
でも、音長指定ならより柔軟な分割もできます。
例えば、4分音符が音調「12」の3つ分だとするなら、音長「6」や音長「24」を混ぜ込んで分割することもできます。
つまり「c12 c12 c24 c24」で4分割とか、「c12 c6」で2分割とか。
※連符のお話とはちょっと離れてしまいましたが、次回の補足編のフラグでもあるので、連符コマンドしか使わないという人も、この音長指定の数値の概念はちょこっと頭の隅に入れておいてくださいね
 
で、5連符とかになってくると流石に無理(音長直接指定では等分できない)なので、連符コマンドを素直に使いましょう。
強引に音長直接指定しようとすると、コンパイル時に「カウント数が整数値ではありません」というワーニングメッセージが表示されます。
メッセージだけだと意味がわかりにくいですが、「音長の指定が適切ではない」と理解してもらってよいです。実際、この部分で音ズレが発生しているはずです。
 
それでは、また次回。

FMP7で曲データを作ってみよう!(補足編:MMLの音長ズレを無くしたい!)

2018-05-04 10:48:22 | 曲データの作り方(補足編)

今回はFMP7で曲データを作ってみよう!補足編として、MML入力ミスの中でもよくある「音長ズレ」対策にフォーカスを当てます。

例えばAチャンネルをベース、Bチャンネルを主旋律(メロディー)、Cチャンネルをコード(和音)に充てるとして、コンパイルして聞いてみるとなんかズレて聞こえる。
どこかのパートで音長の数値を誤っているか、音符を余計に入力しすぎている。そんなことってありますよね?
誤っている部分を早く見つけるためにはどうしたらよいでしょう?

(1)MMLの入力方法を見直す
 楽譜などを利用して入力する人にやりがちなのが、パート単位で全小節入力しきっちゃうやり方。これはおススメしません。
 例えば、Aチャンネルのベースを全部入力して、それからBチャンネルの主旋律(メロディー)を全部入力して・・・
 というパート単位に入力すると、AチャンネルとBチャンネルを入力し終えて、仮に音長ズレが発生したときに「ズレてる場所は耳で判断できても、MMLのどの部分を修正したらよいか範囲が広すぎてつかみにくい」という状況に陥りやすいです。
 
 自分の場合は、4小節ずつ全パート分入力し、ズレがないことを確認してから、次の4小節に進む。というやり方にしています。
 これなら、ズレても4小節内のどこかに誤りがあるので、範囲が絞れる分MMLの修正箇所の特定がしやすいです。
 また、全体の音量バランス(ミックス)調整しながら進めるし、音程を外していたりする部分も発見しやすくなるので、手戻りが少なくなります。
 ※単一パートでベースを聞くと外れていないようでも、コードと合わせると途端にベースの音が外れてるとかよくあります。(その逆も然り)

 MMLの入力スタイルは人ぞれぞれ好みがありますので、自分のやり方を押し付けるつもりはありませんが、MML修正が生じた時のために、そのチェック範囲が少なくなるような入力スタイルにしておくとトータル効率は良くなります。
 
 

(2)FMC7の「コンパイル情報」を活用する
  (1)で入力方法を4小節単位にしたとしましょう。
  じゃあ、次はどのパートが音長ズレを起こしているのかの特定方法になります。
  
  FMC7には「コンパイル情報」なるものがあります。
  FMC7のメニュー「ウィンドウ」→「コンパイル情報」を選択すると、FMC7とは別のウィンドウとして表示されます。

  
  これは、各パートの全体クロックカウントやループ内でのクロックカウントを確認できる機能です。
  クロックカウントというと難しいですが、簡単にここでは「各パート毎の音長ズレを数字で確認できる」と思ってください。
  
  「PART」の部分が各チャンネルで、「TOTAL」というのが確認してほしい数値です。
  すべての「PART」で、「TOTAL」の数字が同じであれば音長ズレは発生していないと判断できる1つの目安になります。
  
  ここで「目安」と言っている理由は2つあります。


  1つは、あくまでパート毎のTOTAL値ですので、例えばあるパートで複数の音長ズレがあって、「超過したプラスとなる音長ズレ」と「不足するマイナスの音長ズレ」によって差し引きゼロになれば、「音楽としての音長ズレ」が発生していても、「データとしての音長ズレ」はない。ということになるから。
  
  もう1つは、ディレイチャンネルの場合は、MML上わざとズラして演奏させるので、その分、TOTAL値もプラスされて表示されるから。
   ※ディレイについては、応用編3:ディレイとその使い分けを参照してください
  
  ですので数字だけに捉われず、自分がイメージしている曲そのものを神様として、耳で最終判断するための目安として使ってください。
  
  【補足】
  TOTALの数字については、MMLの冒頭で「ClockCount=192」と指定している場合、「8分音符1個=24カウント」で計算してください。
  どのくらい音長がズレているかの参考になると思います。
  (全音符を192カウントと定義しているので、全音符=8分音符X8なので、8分音符1個あたり24カウントと計算できますね。同様に16分音符だと12カウント、4分音符だと48カウントです。)
  

(3)ファイル監視でコンパイルをラクチンに
  FMC7には、もう1つ便利な「ファイル監視」というコンパイルを楽にする機能があります。
  MMLファイル名を指定しておくと、テキストエディタで指定したMMLファイルを「保存」した瞬間に自動的にコンパイルしてくれるのでとっても便利です。
  テキストエディタで保存→自動コンパイル→コンパイル情報で音長ズレを確認
  この一連の動作がシームレスにできるのは嬉しいです。
  
  ファイル監視の使い方は、FMC7メニュー「ウィンドウ」→「ファイル監視」を選択すると、MMLファイル名を指定できるウィンドウが開きますので、最大3ファイルまで指定できます。
  「監視」のチェックボックスにチェックが入ってるかも確認してくださいね。

  

  

今回の補足編はここまで。効率的なMML入力の一助になってもらえると嬉しいです。
それでは!