reset() must clear envelope so a new burst starts from silence.
| 449 | |
| 450 | // reset() must clear envelope so a new burst starts from silence. |
| 451 | void testResetClearsEnvelope() |
| 452 | { |
| 453 | ClientComp comp; |
| 454 | comp.prepare(kSampleRate); |
| 455 | comp.setEnabled(true); |
| 456 | comp.setThresholdDb(-20.0f); |
| 457 | comp.setRatio(4.0f); |
| 458 | comp.setKneeDb(0.0f); |
| 459 | comp.setMakeupDb(0.0f); |
| 460 | comp.setAttackMs(50.0f); |
| 461 | comp.setReleaseMs(500.0f); |
| 462 | comp.setLimiterEnabled(false); |
| 463 | |
| 464 | // Drive envelope up |
| 465 | auto loud = makeTone(1000.0, static_cast<int>(kSampleRate), 0.5f); |
| 466 | processBlocks(comp, loud.data(), static_cast<int>(kSampleRate)); |
| 467 | const float grBefore = comp.gainReductionDb(); |
| 468 | |
| 469 | comp.reset(); |
| 470 | |
| 471 | // After reset, the first block of silence should leave GR at ~0. |
| 472 | std::vector<float> silence(kBlockSize * 2, 0.0f); |
| 473 | comp.process(silence.data(), kBlockSize, 2); |
| 474 | const float grAfter = comp.gainReductionDb(); |
| 475 | |
| 476 | report("reset() pulls envelope down", |
| 477 | grBefore < -2.0f && grAfter > -1.0f, |
| 478 | "before=" + std::to_string(grBefore) + ", after=" |
| 479 | + std::to_string(grAfter)); |
| 480 | } |
| 481 | |
| 482 | } // namespace |
| 483 |
no test coverage detected