public void TestDynamicsLevelsAndPeaks() { AtemMockServerWrapper.Each(_output, _pool, null, DeviceTestCases.FairlightMain, helper => { IBMDSwitcherFairlightAudioMixer mixer = GetFairlightMixer(helper); var cb = new DynamicsLevelCallback(); var dynamics = AtemSDKConverter.CastSdk <IBMDSwitcherFairlightAudioDynamicsProcessor>(mixer.GetMasterOutEffect); using (new UseCallback <DynamicsLevelCallback>(cb, dynamics.AddCallback, dynamics.RemoveCallback)) { for (int i = 0; i < 5; i++) { cb.Reset(); AtemState expectedState = helper.Helper.BuildLibState(); FairlightAudioState.ProgramOutState pgmOutState = expectedState.Fairlight.ProgramOut; var testCmd = new FairlightMixerMasterLevelsCommand { InputLeftLevel = Randomiser.Range(-100, 0), InputRightLevel = Randomiser.Range(-100, 0), InputLeftPeak = Randomiser.Range(-100, 0), InputRightPeak = Randomiser.Range(-100, 0), OutputLeftLevel = Randomiser.Range(-100, 0), OutputRightLevel = Randomiser.Range(-100, 0), OutputLeftPeak = Randomiser.Range(-100, 0), OutputRightPeak = Randomiser.Range(-100, 0), }; expectedState.Fairlight.ProgramOut.Levels = new FairlightAudioState.LevelsState { Levels = new double[2], Peaks = new double[2], DynamicsInputLevels = new[] { testCmd.InputLeftLevel, testCmd.InputRightLevel }, DynamicsInputPeaks = new[] { testCmd.InputLeftPeak, testCmd.InputRightPeak }, DynamicsOutputLevels = new[] { testCmd.OutputLeftLevel, testCmd.OutputRightLevel }, DynamicsOutputPeaks = new[] { testCmd.OutputLeftPeak, testCmd.OutputRightPeak }, }; helper.SendAndWaitForChange(expectedState, () => { helper.Server.SendCommands(testCmd); }, -1, (sdkState, libState) => { sdkState.Fairlight.ProgramOut.Levels = new FairlightAudioState.LevelsState { Levels = new double[2], Peaks = new double[2], DynamicsInputLevels = cb.InputLevels, DynamicsInputPeaks = cb.InputPeaks, DynamicsOutputLevels = cb.OutputLevels, DynamicsOutputPeaks = cb.OutputPeaks, }; }); } } }); }
public void TestDynamicsGainReduction() { AtemMockServerWrapper.Each(_output, _pool, null, DeviceTestCases.FairlightMain, helper => { IBMDSwitcherFairlightAudioMixer mixer = GetFairlightMixer(helper); var cbCompressor = new DynamicEffectsLevelCallback(); var cbLimiter = new DynamicEffectsLevelCallback(); var dynamics = AtemSDKConverter.CastSdk <IBMDSwitcherFairlightAudioDynamicsProcessor>(mixer.GetMasterOutEffect); var limiter = AtemSDKConverter.CastSdk <IBMDSwitcherFairlightAudioLimiter>(dynamics.GetProcessor); var compressor = AtemSDKConverter.CastSdk <IBMDSwitcherFairlightAudioCompressor>(dynamics.GetProcessor); using (new UseCallback <DynamicEffectsLevelCallback>(cbCompressor, compressor.AddCallback, compressor.RemoveCallback)) using (new UseCallback <DynamicEffectsLevelCallback>(cbLimiter, limiter.AddCallback, limiter.RemoveCallback)) { for (int i = 0; i < 5; i++) { cbCompressor.Reset(); cbLimiter.Reset(); AtemState expectedState = helper.Helper.BuildLibState(); var testCmd = new FairlightMixerMasterLevelsCommand { CompressorGainReduction = Randomiser.Range(-100, 0), LimiterGainReduction = Randomiser.Range(-100, 0) }; expectedState.Fairlight.ProgramOut.Levels = new FairlightAudioState.LevelsState { Levels = new double[2], Peaks = new double[2], DynamicsInputLevels = new double[2], DynamicsInputPeaks = new double[2], DynamicsOutputLevels = new double[2], DynamicsOutputPeaks = new double[2], CompressorGainReductionLevel = testCmd.CompressorGainReduction, LimiterGainReductionLevel = testCmd.LimiterGainReduction }; helper.SendAndWaitForChange(expectedState, () => { helper.Server.SendCommands(testCmd); }, -1, (sdkState, libState) => { sdkState.Fairlight.ProgramOut.Levels = new FairlightAudioState.LevelsState { Levels = new double[2], Peaks = new double[2], DynamicsInputLevels = new double[2], DynamicsInputPeaks = new double[2], DynamicsOutputLevels = new double[2], DynamicsOutputPeaks = new double[2], CompressorGainReductionLevel = cbCompressor.GainReduction.Single(), LimiterGainReductionLevel = cbLimiter.GainReduction.Single() }; }); } } }); }