- boost::range::transform(result_ps, std::back_inserter(result), [](float sample){return static_cast<int32_t>(sample);});
+ const int32_t min_amplitude = std::numeric_limits<int32_t>::min();
+ const int32_t max_amplitude = std::numeric_limits<int32_t>::max();
+ bool clipping = false;
+ boost::range::transform(result_ps, std::back_inserter(result), [&](double sample)
+ {
+ if (sample > max_amplitude)
+ {
+ clipping = true;
+ return max_amplitude;
+ }
+ else if (sample < min_amplitude)
+ {
+ clipping = true;
+ return min_amplitude;
+ }
+ else
+ return static_cast<int32_t>(sample);
+ });
+
+ if (clipping)
+ graph_->set_tag(diagnostics::tag_severity::WARNING, "audio-clipping");