bpmdetect 0.8.11
Automatic BPM detection tool
Loading...
Searching...
No Matches
bpmdetectplugin.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
3#pragma once
4#include <atomic>
5#include <cstddef>
6#include <cstdint>
7#include <thread>
8#include <vector>
9
10#include <DistrhoPlugin.hpp>
11
12#include "parameters.h"
13#include "sampleringbuffer.h"
14
15START_NAMESPACE_DISTRHO
16
24class BpmDetectPlugin : public Plugin {
25public:
26 BpmDetectPlugin();
27 ~BpmDetectPlugin() override;
28
29protected:
31 const char *getLabel() const override;
33 const char *getDescription() const override;
35 const char *getMaker() const override;
37 const char *getHomePage() const override;
39 const char *getLicense() const override;
41 uint32_t getVersion() const override;
43 int64_t getUniqueId() const override;
45 void initParameter(uint32_t index, Parameter &parameter) override;
47 float getParameterValue(uint32_t index) const override;
49 void setParameterValue(uint32_t index, float value) override;
51 void activate() override;
53 void run(const float **inputs, float **outputs, uint32_t frames) override;
55 void bufferSizeChanged(uint32_t newBufferSize) override;
57 void sampleRateChanged(double newSampleRate) override;
58
59private:
60 // Folds a raw estimate into the configured tempo range by halving or doubling.
61 float foldBpmIntoRange(float bpm) const;
62 // Body of workerThread_: drains the ring buffer and updates the estimate.
63 void workerLoop();
64
65 std::atomic<float> detectedBpm_{0.f};
66 std::atomic<float> minimumBpm_{kDefaultMinimumBpm};
67 std::atomic<float> maximumBpm_{kDefaultMaximumBpm};
68 std::atomic<double> currentSampleRate_{0.};
69 std::atomic<bool> resetRequested_{true};
70 std::atomic<bool> workerShouldExit_{false};
71 SampleRingBuffer ringBuffer_;
72 std::vector<float> interleaveBuffer_;
73 std::thread workerThread_;
74};
75
76END_NAMESPACE_DISTRHO
void setParameterValue(uint32_t index, float value) override
Definition bpmdetectplugin.cpp:121
uint32_t getVersion() const override
Definition bpmdetectplugin.cpp:59
int64_t getUniqueId() const override
Definition bpmdetectplugin.cpp:63
const char * getHomePage() const override
Definition bpmdetectplugin.cpp:51
const char * getLicense() const override
Definition bpmdetectplugin.cpp:55
void sampleRateChanged(double newSampleRate) override
Definition bpmdetectplugin.cpp:174
const char * getLabel() const override
Definition bpmdetectplugin.cpp:39
void initParameter(uint32_t index, Parameter &parameter) override
Definition bpmdetectplugin.cpp:67
void bufferSizeChanged(uint32_t newBufferSize) override
Definition bpmdetectplugin.cpp:169
const char * getDescription() const override
Definition bpmdetectplugin.cpp:43
void activate() override
Definition bpmdetectplugin.cpp:139
void run(const float **inputs, float **outputs, uint32_t frames) override
Definition bpmdetectplugin.cpp:143
const char * getMaker() const override
Definition bpmdetectplugin.cpp:47
float getParameterValue(uint32_t index) const override
Definition bpmdetectplugin.cpp:107
Definition sampleringbuffer.h:15