Fairlight ミキサー(FLStudioModelBA)¶
タイムラインの Fairlight ミキサー全体(トラック・Bus・内蔵EQ と Dynamics・プラグイン・ルーティング)は1つのバイナリ、Sm2Sequence の FieldsBlob 内の FLStudioModelBA に入っています(.drp と Project.db 参照)。qCompress を展開すると、drpkit が読む2種類のデータ、チャンネル設定表とプラグイン記録が出てきます。
項目番号と換算の機械可読な正本は drpkit/fairlight_map.yaml です。下の項目一覧 はこのファイルから自動生成しています。
チャンネル設定表¶
リトルエンディアンのレコードの連続です。
- 列=チャンネル。ステレオトラックは同じ名前の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。つまみ位置と思われ、表示には使わない |
各換算をどう確かめたかは 換算。