<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Mario Lang:<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
#include <jack.hpp><br>
<br>
#include <boost/accumulators/<wbr>accumulators.hpp><br>
#include <boost/accumulators/<wbr>statistics.hpp><br>
<br>
template<typename... Features><br>
using AudioAccumulatorSet = boost::accumulators::<wbr>accumulator_set<<br>
  float, boost::accumulators::features<<wbr>Features...><br>
>;<br>
<br>
using Count = boost::accumulators::tag::<wbr>count;<br>
using Max = boost::accumulators::tag::max;<br>
using Min = boost::accumulators::tag::min;<br>
using Mean = boost::accumulators::tag::<wbr>mean;<br>
using Variance = boost::accumulators::tag::<wbr>variance;<br>
<br>
class Statistics final : public JACK::Client {<br>
  JACK::AudioIn In;<br>
  AudioAccumulatorSet<Count, Max, Mean, Min, Variance> Accumulator;<br>
<br>
public:<br>
  Statistics() : JACK::Client("Statistics"), In(createAudioIn("In")) {}<br>
  int process(std::uint32_t FrameCount) override {<br>
    for (auto &Value: In.buffer(FrameCount)) Accumulator(Value);<br>
    return 0;<br>
  }<br>
  auto max() const { return boost::accumulators::max(<wbr>Accumulator); }<br>
  auto mean() const { return boost::accumulators::mean(<wbr>Accumulator); }<br>
  auto min() const { return boost::accumulators::min(<wbr>Accumulator); }<br>
  auto sampleCount() const { return boost::accumulators::count(<wbr>Accumulator); }<br>
  auto variance() const { return boost::accumulators::variance(<wbr>Accumulator); }<br>
};<br>
<br></blockquote><div><br></div><div>Nice code. But I wonder about one small thing related to C++.</div><div>Couldn't these max/mean/etc. methods in the Statististics class</div><div>be written shorter like this?:</div><div><br></div><div>  auto max() const { return Max(<wbr>Accumulator); }<br>  auto mean() const { return Mean(<wbr>Accumulator); }<br>  auto min() const { return Min(<wbr>Accumulator); }<br>  auto sampleCount() const { return Count(<wbr>Accumulator); }<br>  auto variance() const { return Variance(<wbr>Accumulator); }<br></div><div><br></div><div><br></div><div>Sorry if it's a stupid question, but I haven't used "using" in C++ yet. :-)</div><div><br></div><div>Also thanks for demonstrating these things from boost.</div><div><br></div></div></div></div>