コンテンツにスキップ

Fairlight ミキサー(FLStudioModelBA)

タイムラインの Fairlight ミキサー全体(トラック・Bus・内蔵EQ と Dynamics・プラグイン・ルーティング)は1つのバイナリ、Sm2Sequence の FieldsBlob 内の FLStudioModelBA に入っています(.drp と Project.db 参照)。qCompress を展開すると、drpkit が読む2種類のデータ、チャンネル設定表とプラグイン記録が出てきます。

項目番号と換算の機械可読な正本は drpkit/fairlight_map.yaml です。下の項目一覧 はこのファイルから自動生成しています。

チャンネル設定表

リトルエンディアンのレコードの連続です。

u32 1 | u32 項目番号 | u32 列数 | 列数 × int32
  • 列=チャンネル。ステレオトラックは同じ名前の2列、モノラルは1列。
  • 項目 0xBC だけは例外で、列数ぶんの長さ付き UTF-8 文字列=チャンネル名を持ちます。表を見つけ、見分ける手がかりです。
  • 1つの表に同じ項目番号が2回出たら、最初のものを使います。

表は複数あり、名前で見分けます。

表 名前の例
トラック表 トラック名
Bus 表 Bus 1・Bus 2…(項目 0x1D から始まる)
その他 VCA…・Mapping…・Folder…(読まない)

reader の探し方:すべての 0xBC レコードを見つけ、レコード単位で後ろ向きにたどって表の先頭を求め、そこからレコードの形が崩れるまで前向きに読みます。

Bus 表の前半

Bus 表は2つに分かれています。前半(フェーダー 0x001・ミュート 0x002・前段ゲイン 0x019・パン…)は、ブロブ内のもっと前に離れて、見出し u32 0, u32 7 の直後に置かれます(7 は Bus の種別番号で、プラグインの所属と同じ番号)。reader は Bus 表より前にある、列数が Bus の数と同じその並びのうち最後のものを取り、Bus のストリップに合流させます。

ストリップ番号とルーティング

項目 トラック Bus
ストリップ番号 0x458 0 … n−1(ステレオトラックの2列目は −1) トラック数 + 1
Bus のチャンネル数 0x1B4 — そのまま(2=ステレオ)
出力接続/出力先 0x400/0x40B フラグ/Bus 番号(0=Bus 1、−1=なし)

プラグイン記録

プラグインの各インスタンス(トラックと Bus の挿入プラグイン、トラック内蔵FX)は ASCII のタグ bmd:<名前>:<ID> として現れます。

タグからの位置    内容
  −12            u8 種別 | u8 列 | u8 0 | u8 スロット
   −4            u32 所属(2=ミキサーのインスタンス)
    0            名前欄 256 バイト("bmd:<名前>:<ID>" を NUL 埋め)
  256            int32 × 4:プラグイン画面の位置と大きさ(一度も開いていなければすべて −1)
  272            u32 状態フラグ
  ...            次のタグまでパラメーター
欄 値
種別 0=トラック、7=Bus
列 所属するストリップの、その表での列
スロット 0〜5=挿入スロット1〜6、6〜10=トラック内蔵FX:6 Voice Isolation、7 Dialogue Leveler、8 Dialogue Separator、9 Music Remixer、10 Ducker
所属 ミキサーのインスタンスは 2、内蔵FX は 0/1。それ以外は雛形(AutoMix のプリセットなど)なので無視
パラメーター 64 バイトの NUL 埋めの名前(Plugin::PARAM、または UI_BAS_PRESET のような :: なしの名前)+リトルエンディアン float32 の正規化値 0〜1
状態フラグ トラック内蔵 Voice Isolation:ビット 0x10 が立っていれば無効、なければ有効(無効中も量は保持)。使っていない内蔵スロットも 0x10。挿入プラグインとほかの内蔵FX では未解読(--all で生値表示)

つまみの換算は プラグイン にあります。

確度記号

換算した値にはすべて、どう確かめたかを示す記号が付きます。

記号 conf 意味
無印 direct 保存値そのまま、または定数倍。既知の画面値と照合済み
² two_point 2点以上の既知点で一次式・対数式を確定
※ calib/law 画面で読んだ値との対応表(Dynamics は補間)。表にない保存値は 未較正(raw=…)
? assumed 1点のみ・範囲は仮定。参考値
✗ raw/uncal 意味未確定・未較正。生値のみ

全チャンネル項目

drpkit/fairlight_map.yaml から生成(python tools/gen_map_docs.py)。項目番号はトラック表と Bus 表で共通です。種類:scale=生値×定数、flag=0/1、flag_inv=反転フラグ、enum=対応表、affine=a+b×生値(範囲で頭打ち)、law=内蔵 Dynamics の換算、raw=未解読。

番号 項目 種類 保存値 → 画面値 確度
0x001 fader scale ÷ 10 dB ² two_point
0x002 mute flag 1 = 有効 direct
0x004 pan_x scale ÷ 10 % direct
0x00D pan_bypass flag_inv 1 = 無効(pan_on として反転して出力) direct
0x011 solo flag 1 = 有効 direct
0x019 pre_gain scale ÷ 10 dB ² two_point
0x01D effects_in flag 1 = 有効 direct
0x0AA track_selected flag 1 = 有効 direct
0x0B9 unknown_0b9 raw 生値のみ(意味未確定) ✗ raw
0x0DE proc_order enum 0 = EQ→DY→FX, 1 = EQ→FX→DY, 2 = DY→EQ→FX, 3 = DY→FX→EQ, 4 = FX→EQ→DY, 5 = FX→DY→EQ (default) direct
0x0DF eq_on flag 1 = 有効 direct
0x0E1 eq_band1_gain scale ÷ 10 dB direct
0x0E2 eq_band2_gain scale ÷ 10 dB direct
0x0E3 eq_band3_gain scale ÷ 10 dB direct
0x0E4 eq_band4_gain scale ÷ 10 dB direct
0x0E5 eq_band5_gain scale ÷ 10 dB direct
0x0E6 eq_band6_gain scale ÷ 10 dB direct
0x0E9 eq_band1_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0EA eq_band2_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0EB eq_band3_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0EC eq_band4_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0ED eq_band5_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0EE eq_band6_q affine -0.615 + 0.06567 × 保存値、0.3〜10.3 ※ calib
0x0F1 eq_band1_freq scale そのまま Hz direct
0x0F2 eq_band2_freq scale そのまま Hz direct
0x0F3 eq_band3_freq scale そのまま Hz direct
0x0F4 eq_band4_freq scale そのまま Hz direct
0x0F5 eq_band5_freq scale そのまま Hz direct
0x0F6 eq_band6_freq scale そのまま Hz direct
0x0F9 eq_band1_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x0FA eq_band2_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x0FB eq_band3_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x0FC eq_band4_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x0FD eq_band5_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x0FE eq_band6_type enum 1 = ローシェルフ, 2 = ベル, 3 = ハイシェルフ, 4 = ノッチ, 5 = ローパス, 6 = ハイパス direct
0x101 eq_band1_on flag 1 = 有効 direct
0x102 eq_band2_on flag 1 = 有効 direct
0x103 eq_band3_on flag 1 = 有効 direct
0x104 eq_band4_on flag 1 = 有効 direct
0x105 eq_band5_on flag 1 = 有効 direct
0x106 eq_band6_on flag 1 = 有効 direct
0x109 dyn_makeup scale ÷ 10 dB direct
0x10C comp_on flag 1 = 有効 direct
0x10D comp_ratio law Dynamics 換算表 ratio(換算) :1 ※ law
0x10E comp_threshold scale ÷ 10 dB direct
0x10F comp_knee scale そのまま direct
0x110 comp_attack law Dynamics 換算表 attack(換算) ms、最小 0.7 ms ※ law
0x111 comp_hold law Dynamics 換算表 hold(換算) ms ※ law
0x112 comp_release law Dynamics 換算表 release(換算) ms ※ law
0x114 exp_on flag 1 = 有効 direct
0x115 exp_range scale × 0.6 dB ² two_point
0x116 exp_threshold scale ÷ 10 dB ? assumed
0x117 comp_mix scale そのまま direct
0x118 exp_attack law Dynamics 換算表 exp_attack(換算) ms、最小 0.5 ms ※ law
0x119 exp_hold law Dynamics 換算表 hold(換算) ms ※ law
0x11A exp_release law Dynamics 換算表 release(換算) ms ※ law
0x11B exp_mode enum 0 = Expander ※ calib
0x11D limiter_on flag 1 = 有効 ² two_point
0x11E limiter_threshold scale ÷ 10 dB direct
0x11F limiter_attack law Dynamics 換算表 lim_attack(換算) ms、最小 0.7 ms ※ law
0x120 limiter_hold law Dynamics 換算表 hold(換算) ms ※ law
0x121 limiter_release law Dynamics 換算表 release(換算) ms ※ law
0x13B unknown_13b raw 生値のみ(意味未確定) ✗ raw
0x1B4 bus_channels scale そのまま direct
0x253 exp_ratio law Dynamics 換算表 exp_ratio(換算) 1: ※ law
0x289 eq_band2_range enum 0 = L, 1 = ML, 2 = MH, 3 = H ※ calib
0x28A eq_band3_range enum 0 = L, 1 = ML, 2 = MH, 3 = H ※ calib
0x28B eq_band4_range enum 0 = L, 1 = ML, 2 = MH, 3 = H ※ calib
0x28C eq_band5_range enum 0 = L, 1 = ML, 2 = MH, 3 = H ※ calib
0x334 eq_band1_knob raw 生値のみ(意味未確定) ✗ raw
0x335 eq_band2_knob raw 生値のみ(意味未確定) ✗ raw
0x336 eq_band3_knob raw 生値のみ(意味未確定) ✗ raw
0x337 eq_band4_knob raw 生値のみ(意味未確定) ✗ raw
0x338 eq_band5_knob raw 生値のみ(意味未確定) ✗ raw
0x339 eq_band6_knob raw 生値のみ(意味未確定) ✗ raw
0x400 route_connected flag 1 = 有効 direct
0x40B route_bus scale そのまま direct
0x458 strip_id scale そのまま direct
0x4BE eq_band1_slope enum 0 = 6 dB/oct, 1 = 12 dB/oct, 2 = 18 dB/oct, 3 = 24 dB/oct direct
0x4C3 eq_band6_slope enum 0 = 6 dB/oct, 1 = 12 dB/oct, 2 = 18 dB/oct, 3 = 24 dB/oct direct

項目の並び

種類 番号 備考
EQ バンド k の有効(k=1〜6) 0x100+k 1=有効
EQ バンド k のフィルター種類 0xF8+k 1 ローシェルフ、2 ベル、3 ハイシェルフ、4 ノッチ、5 ローパス(バンド6の既定)、6 ハイパス(バンド1の既定)
EQ バンド k の周波数 0xF0+k Hz そのまま
EQ バンド k のゲイン 0xE0+k ÷10 dB
EQ バンド k の Q 0xE8+k Q ≈ −0.615 + 0.06567 × 生値
EQ バンド k のレンジ(k=2〜5) 0x287+k 0 L、1 ML、2 MH、3 H
EQ バンド1/バンド6のスロープ 0x4BE/0x4C3 0=6、1=12、2=18、3=24 dB/oct
EQ バンド k のつまみ(生値) 0x333+k 周波数に連動。Hz の自然対数1あたり約94、0〜256。つまみ位置と思われ、表示には使わない

各換算をどう確かめたかは 換算。