--- Utility: Mix two PCM streams ---
| 109 | |
| 110 | // --- Utility: Mix two PCM streams --- |
| 111 | static fl::vector<fl::i16> mixPcm(fl::span<const fl::i16> a, fl::span<const fl::i16> b, |
| 112 | float ratioA, float ratioB) { |
| 113 | fl::size len = fl::min(a.size(), b.size()); |
| 114 | fl::vector<fl::i16> out; |
| 115 | out.reserve(len); |
| 116 | for (fl::size i = 0; i < len; ++i) { |
| 117 | float mixed = static_cast<float>(a[i]) * ratioA + static_cast<float>(b[i]) * ratioB; |
| 118 | if (mixed > 32767.0f) mixed = 32767.0f; |
| 119 | if (mixed < -32768.0f) mixed = -32768.0f; |
| 120 | out.push_back(static_cast<fl::i16>(mixed)); |
| 121 | } |
| 122 | return out; |
| 123 | } |
| 124 | |
| 125 | // --- Utility: Run audio::detector::Vocal over PCM stream --- |
| 126 | struct RealAudioResult { |
no test coverage detected