<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>