FM音色パラメータ仕様
4オペレータFM音源の音色(音色)を定義するYAMLファイルの記載方法です。1ファイルに 複数音色を定義できます。
ファイル形式
YAML形式。コメント行は#で表現し、空行・スペースのみの行は無視されます。
fileio.LoadFMVoiceFile / LoadFMVoiceFileFS / SetFMVoiceData
のいずれかで読み込みます。
fmVoice:
- voiceID: 0
algorithm: 2
feedback: 20
lfo: true
lfoDelay: 0.3
lfoFade: 0.4
lfoDepth: 30
lfoHz: 7
operators:
- multiple: 1
totallevel: 127
detuneCents: 0
wave: W1
envelope: "11, 10, 0.6, 4, 12"
- multiple: 2
totallevel: 40
detuneCents: 0
wave: W1
envelope: "31, 12, 0.3, 4, 12"
- multiple: 1
totallevel: 30
detuneCents: 0
wave: W2
envelope: "31, 10, 0.5, 4, 12"
- multiple: 1
totallevel: 0
detuneCents: 0
wave: W2
envelope: "31, 8, 0.7, 2, 12"
音色パラメータ一覧
| キー | 範囲・書式 | 説明 |
|---|---|---|
voiceID | 整数 | 音色を一意に識別するID。[partSetting]の
voiceIDやRegisterVoiceから参照します。 |
algorithm | 0〜7の整数 | 4基のオペレータの接続方法(下記「アルゴリ ズム一覧」参照)。 |
feedback | 0〜7 | オペレータ1(OP1)にかけるセルフフィードバック量。 7を超える値は7として扱われます。 |
lfo | true / false | ビブラートLFOの有効/無効。未設定時はfalse (Phase 8)。 |
lfoDelay | 秒(0.1秒単位) | 発音開始からLFOが掛かり始めるまでの
遅延時間。未設定時のデフォルトは0.4。 |
lfoFade | 秒(0.1秒単位) | LFO開始から深さが最大になるまでの時間。
未設定時のデフォルトは0.5。 |
lfoDepth | セント(100=半音1個分) | LFOの揺れ幅。未設定時の
デフォルトは30。 |
lfoHz | Hz | LFOの周期。未設定時のデフォルトは6。 |
operators(4要素固定、各オペレータ共通)
| キー | 範囲・書式 | 説明 |
|---|---|---|
multiple | 正の小数 | ノート基本周波数に対する周波数比。値が大きい ほど倍音的に高い成分になります。クランプはされません。 |
totallevel | 0(最大音量)〜127(無音) | そのオペレータの出力減衰 量。キャリア(音として出力されるオペレータ)では音量、モジュレータでは変調の深さに相当します。 約0.75dB/ステップで減衰します。 |
detuneCents | セント(100=半音1個分) | multipleに
対する微調整デチューン。正負両方指定可能です。 |
wave | W1〜W8 | 基本波形(下記「基本
波形一覧」参照)。未設定または無効値はW1(正弦波)として扱われます。 |
envelope | "attackRate, decay1Rate, sustainLevel, decay2Rate, releaseRate"
のカンマ区切り文字列 | 下記「エンベロープ」参照。 |
envelope(5項目)
| 項目(記載順) | 範囲 | 説明 |
|---|---|---|
| attackRate | 0〜31 | アタック(無音から最大音量に達するまで)の速さ。0は立ち上 がらない、31が最速。 |
| decay1Rate | 0〜31 | 最大音量からsustainLevelまで減衰する速さ。0は最大音量を 保持し続ける。 |
| sustainLevel | 0.0〜1.0 | decay1が落ち着く先のレベル。 |
| decay2Rate | 0〜31 | sustainLevelから0へゆっくり減衰する速さ(セカンダリ ディケイ)。0は減衰せず持続。 |
| releaseRate | 0〜31 | ノートオフ後、無音になるまでの速さ。0は減衰しません (キャリアでは音が鳴り止まなくなるため注意)。 |
レート値は
0〜31の対数的スケールで、実時間(約8秒〜数ミリ秒)に変換
されます。値が小さいほどゆっくり、大きいほど速く変化します。基本波形一覧(W1〜W8)
waveで選択できる8種類の基本波形です。phaseは0〜2πの位相を表します。
| 選択子 | 名称 | 波形の特徴 |
|---|---|---|
W1 | 正弦波(サイン波) | 全周期の基本波形。既存音色との後方互換の デフォルト。 |
W2 | 半波整流正弦波 | 正(上)の半周期のみを取り出し、負(下)を0 に固定。 |
W3 | 全波整流正弦波 | 負(下)の半周期を正(上)へ反転。 |
W4 | 半波整流正弦波(周期半分) | 前半のみ正の半周期で、後半は0。 |
W5 | 鋸の歯状に近い正弦波 | 正の半波を2倍周期(半分の幅)で2回 繰り返す。 |
W6 | 全波整流(周期半分) | W3の山をさらに2倍の密度で詰めた形。 |
W7 | 正の全波整流(極性あり) | W3を小さくし、正側にシフトした 波形。 |
W8 | 非対称鋸の歯状正弦波 | W5の交互反転版。 |
アルゴリズム一覧(0〜7)
4基のオペレータ(図ではOP1〜OP4、内部では0〜3)をどう接続するかを選びます。矢印はモジュレータ
→キャリアの変調方向、オレンジ枠がそのアルゴリズムで音として出力される「キャリア」です。オペレータ
1(OP1)には全アルゴリズム共通でfeedbackによるセルフフィードバックを追加でかけられます。
algorithm: 0 — フルシリアルチェーン
OP1→OP2→OP3→OP4 の一直線。出力 = OP4。最もFM感(倍音の複雑さ)が強く出る
基本形です。
algorithm: 1
OP1→OP4、OP2→OP3→OP4。出力 = OP4。2系統のモジュレータが1つのキャリアに
合流します。
algorithm: 2
OP1→OP4、OP2→OP3→OP4。出力 = OP4。algorithm 1と似ますが、OP1が直接OP4を
変調する点が異なります(サンプル音色 voiceID:0 で使用)。
algorithm: 3
OP1→OP2→OP4、OP3→OP4。出力 = OP4。2系統のモジュレータ経路が1つのキャリア
に合流する構成です。
algorithm: 4 — 2系統の並列FMペア
(OP1→OP2) と (OP3→OP4) が独立に並列動作。出力 = OP2+OP4。2つの音色を重ねた
ような厚みのある音になります。
algorithm: 5 — 1対多モジュレータ
OP1が OP2・OP3・OP4 の3つを同時に変調。出力 = OP2+OP3+OP4。1個のモジュレータ
で複数キャリアを揺らす構成です。
algorithm: 6
OP1→OP2のみ変調あり、OP3・OP4は完全独立のキャリア。出力 = OP2+OP3+OP4。
algorithm: 7 — 全独立(加算合成)
変調接続なし。4基とも独立キャリア。出力 = OP1+OP2+OP3+OP4。オルガン的な
加算合成音に向きます。
設定例
ベース/リード寄りの音色(シリアル寄りのalgorithm 2、波形はキャリア寄りにW2):
fmVoice:
- voiceID: 0
algorithm: 4
feedback: 20
operators:
- multiple: 20
totallevel: 20
detuneCents: 0
wave: W1
envelope: "28, 10, 0.6, 4, 20"
- multiple: 2
totallevel: 40
detuneCents: 0
wave: W1
envelope: "31, 12, 0.3, 4, 20"
- multiple: 1
totallevel: 30
detuneCents: 0
wave: W2
envelope: "31, 10, 0.5, 4, 20"
- multiple: 1
totallevel: 0
detuneCents: 0
wave: W2
envelope: "31, 8, 0.7, 2, 20"
未定義・不正な値(YAMLパースエラー等の軽微なもの)は警告ログを出力した上で0扱い
にして解析を継続します。YAML自体が不正な場合のみ致命的エラーとして読み込みが中止されます。