50template <
typename T =
int16_t,
size_t N = 3>
68 auto& fft_cfg = fft.
config();
86 float threshold_percent,
const char* name) {
89 t.threshold_percent = threshold_percent;
91 t.last_match_percent = 0.0f;
109 for (
size_t j = 0;
j < N;
j++) {
112 self->_recent_frames.push_back(frame);
114 if (self->_is_recording) {
118 if (self->_recent_frames.size() > self->_max_template_len)
119 self->_recent_frames.erase(self->_recent_frames.begin());
120 for (
size_t i = 0; i < self->_templates.size(); ++i) {
122 if (self->_recent_frames.size() >=
tmpl.frames.size()) {
125 if (self->_callback) self->_callback(
tmpl.name);
144 for (
size_t i = 0; i <
tmpl.frames.size(); ++i) {
146 for (
size_t j = 0;
j < N; ++
j) {
147 if (
tmpl.frames[i].top_freqs[
j] ==
155 ? (100.0f * matches /
tmpl.frames.size())