| 119 | } |
| 120 | |
| 121 | float DropDetector::getMidEnergy(const fft::Bins& fft) const { |
| 122 | // Mid = middle 50% of bins (midrange frequencies) |
| 123 | int startBin = static_cast<int>(fft.raw().size() / 4); |
| 124 | int endBin = static_cast<int>(fft.raw().size() * 3 / 4); |
| 125 | float energy = 0.0f; |
| 126 | int count = 0; |
| 127 | |
| 128 | for (int i = startBin; i < endBin; i++) { |
| 129 | energy += fft.raw()[i]; |
| 130 | count++; |
| 131 | } |
| 132 | |
| 133 | return (count > 0) ? energy / static_cast<float>(count) : 0.0f; |
| 134 | } |
| 135 | |
| 136 | float DropDetector::getTrebleEnergy(const fft::Bins& fft) const { |
| 137 | // Treble = top 25% of bins (high frequencies) |
no test coverage detected