Fairlight audio mixer
Some of the newer models of the ATEM switchers have Fairlight audio mixers in them instead of the more basic ATEM audio mixers of the previous models. These mostly use new datastructures to represent the mixer.
- class pyatem.field.FairlightAudioInputField(raw)
Data from the FAIP. Describes the inputs to the fairlight mixer
Offset
Size
Type
Descriptions
0
2
u16
Audio source index
2
1
u8
Input type
3
2
?
unknown
5
1
u8
Index in group
10
1
u8
Changes when stereo is split into dual mono
12
1
u8
Analog audio input level [1=mic, 2=line]
Val
Input type
0
External video input
1
Media player audio
2
External audio input
After parsing: :ivar volume: Master volume for the mixer, signed int which maps [-10000 - 1000] to +10dB - -100dB (inf)
- class pyatem.field.FairlightMasterPropertiesField(raw)
Data from the FAMP. Settings for the master bus on fairlight audio units.
Offset
Size
Type
Descriptions
0
1
?
unknown
1
1
bool
Enable master EQ
2
4
?
unknown
6
2
i16
EQ gain [-2000 - 2000]
8
2
?
unknown
10
2
u16
Dynamics make-up gain [0 - 2000]
12
4
i32
Master volume [-10000 - 1000]
16
1
bool
Audio follow video
17
3
?
unknown
After parsing: :ivar volume: Master volume for the mixer, signed int which maps [-10000 - 1000] to +10dB - -100dB (inf) :ivar eq_enable: Enabled/disabled state for the master EQ :ivar eq_gain: Gain applied after EQ, [-2000 - 2000] maps to -20dB - +20dB :ivar dynamics_gain: Make-up gain for the dynamics section, [0 - 2000] maps to 0dB - +20dB :ivar afv: Enable/disabled state for master audio-follow-video (for fade-to-black)
- class pyatem.field.FairlightStripPropertiesField(raw)
Data from the FASP. Settings for a channel strip on fairlight audio units.
Offset
Size
Type
Descriptions
0
2
u16
Audio source index
14
1
u8
Split indicator? [01 for normal, FF for split]
15
1
u8
Subchannel index
18
1
u8
Delay in frames
22
2
i16
Gain [-10000 - 600]
29
1
bool
Enable EQ
34
2
i16
EQ Gain
38
2
u16
Dynamics gain
40
2
i16
Pan [-10000 - 10000]
46
2
i16
Volume [-10000 - 1000]
49
1
u8
AFV bitfield? 1=off 2=on 4=afv
The way byte 14 and 15 work is unclear at the moment, this need verification on a mixer with an video input that has more than 2 embedded channels, of of these bytes might be a channel count.
After parsing: :ivar volume: Master volume for the mixer, signed int which maps [-10000 - 1000] to +10dB - -100dB (inf) :ivar eq_enable: Enabled/disabled state for the master EQ :ivar eq_gain: Gain applied after EQ, [-2000 - 2000] maps to -20dB - +20dB :ivar dynamics_gain: Make-up gain for the dynamics section, [0 - 2000] maps to 0dB - +20dB :ivar afv: Enable/disabled state for master audio-follow-video (for fade-to-black)
- class pyatem.field.FairlightStripDeleteField(raw)
Data from the FASD. Fairlight strip delete, received only when changing the source routing in fairlight to remove channels that have changed.
- class pyatem.field.FairlightTallyField(raw)
Data from the FMTl. Encodes the state of tally lights on the audio mixer
Offset
Size
Type
Descriptions
0
2
u16
Number of tally lights
2
1
u8
Input type
3
2
?
unknown
5
1
u8
Index in group
10
1
u8
Changes when stereo is split into dual mono
12
1
u8
Analog audio input level [1=mic, 2=line]
Val
Input type
0
External video input
1
Media player audio
2
External audio input
After parsing: :ivar volume: Master volume for the mixer, signed int which maps [-10000 - 1000] to +10dB - -100dB (inf)
- class pyatem.field.AtemEqBandPropertiesField(raw)
Data from the AEBP field. This encodes the EQ settings in the fairlight mixer. For every channel there will be 6 off these fields sent, one for every band of the EQ. The “possible band filters” differentiates the first and last band which have a different option list for the filter dropdown in the UI.
Offset
Size
Type
Descriptions
0
2
u16
Audio source index
2
2
?
unknown
4
4
?
unknown
14
1
u8
Split indicator? [01 for normal, FF for split]
15
1
u8
subchannel index
16
1
u8
bond index
17
1
bool
band enabled
18
1
u8
possible band filters
19
1
u8
band filter
20
1
?
?
21
1
?
band frequency range
26
2
u16
band frequency
28
4
i32
band gain
32
2
u16
band Q
Val
Band filter
01
Low shelf
02
Low pass
04
Bell
08
Notch
10
High pass
20
High shelf
After parsing: :ivar volume: Master volume for the mixer, signed int which maps [-10000 - 1000] to +10dB - -100dB (inf)
Level meters
- class pyatem.field.FairlightMeterLevelsField(raw)
Data from the FMLv. This contains the realtime audio levels for the fairlight audio mixer
Offset
Size
Type
Description
0
6
?
Unknown
6
1
u8
is_split, 255 when split or 0 when it isn’t
7
1
u8
subchannel index
8
2
u16
source index
10
2
i16
Input level left, -10000 to 0
12
2
i16
Input level right, -10000 to 0
14
2
i16
Input peak left, -10000 to 0
16
2
i16
Input peak right, -10000 to 0
18
2
i16
Expander gain reduction, -10000 to 0
20
2
i16
Compressor gain reduction, -10000 to 0
22
2
i16
Limiter gain reduction, -10000 to 0
24
2
i16
Output level left, -10000 to 0
26
2
i16
Output level right, -10000 to 0
28
2
i16
Output peak left, -10000 to 0
30
2
i16
Output peak right, -10000 to 0
32
2
i16
Fader level left, -10000 to 0
34
2
i16
Fader level right, -10000 to 0
36
2
i16
Fader peak left, -10000 to 0
38
2
i16
Fader peak right, -10000 to 0
After parsing:
- Variables:
index – Channel source index
is_split – Stereo channel is split into dual mono
subchannel – Channel index after splitting
strip_id – Strip identifier in {source}.{subchannel} format
input – Volume level before dynamics
output – Volume level after dynamics
level – Volume level after fader
expander_gr – Gain reduction by the expander
compressor_gr – Gain reduction by the compressor
limiter_gr – Gain reduction by the limiter
- class pyatem.field.FairlightMasterLevelsField(raw)
Data from the FDLv. This contains the realtime audio levels for the master channel of the fairlight mixer
Offset
Size
Type
Description
0
2
i16
Input level left, -10000 to 0
2
2
i16
Input level right, -10000 to 0
4
2
i16
Input peak left, -10000 to 0
6
2
i16
Input peak right, -10000 to 0
8
2
i16
Compressor gain reduction, -10000 to 0
10
2
i16
Limiter gain reduction, -10000 to 0
12
2
i16
Output level left, -10000 to 0
14
2
i16
Output level right, -10000 to 0
16
2
i16
Output peak left, -10000 to 0
18
2
i16
Output peak right, -10000 to 0
20
2
i16
Fader level left, -10000 to 0
22
2
i16
Fader level right, -10000 to 0
24
2
i16
Fader peak left, -10000 to 0
26
2
i16
Fader peak right, -10000 to 0
After parsing: :ivar input: Volume level before dynamics :ivar output: Volume level after dynamics :ivar level: Volume level after fader :ivar compressor_gr: Gain reduction by the compressor :ivar limiter_gr: Gain reduction by the limiter
Monitoring
- class pyatem.field.FairlightHeadphonesField(raw)
Data from the FMHP, phones output volume and mute
This doesn’t get triggered when soloing channels.
Offset
Size
Type
Descriptions
0
4
i32
Volume in 0.01 dB (-60.00 to +6.00 dB)
5
4
?
Unknown
8
1
bool
Muted (0) / Umuted (1)
9
1
u8
Last soloed channel (just the main part)
10
22
?
Unknown
- class pyatem.field.FairlightSoloField(raw)
Data from the FAMS, soloing channels to phones
Offset
Size
Type
Descriptions
0
1
bool
Anything soloed?
1
7
?
Unknown
8
1
u8
Unknown: 0x00 for HDMI channels, 0x05 for 3.5mm jack
9
1
u8
Soloed channel (main)
10
12
?
Unknown
22
1
u8
No subchannels (0x01), split into L/R (0xff)
23
1
u8
Soloed channel (subchannel)