FastLED 3.9.15
Loading...
Searching...
No Matches
fft.cpp
Go to the documentation of this file.
1
2#include "fl/fft.h"
3#include "fl/fft_impl.h"
4#include "fl/hash_map_lru.h"
6
7namespace fl {
8
9template <> struct Hash<FFT_Args> {
10 uint32_t operator()(const FFT_Args &key) const noexcept {
11 return MurmurHash3_x86_32(&key, sizeof(FFT_Args));
12 }
13};
14
15struct FFT::HashMap : public fl::HashMapLru<FFT_Args, Ptr<FFTImpl>> {
18};
19
20FFT::FFT() { mMap.reset(new HashMap(8)); };
21
22FFT::~FFT() = default;
23
24void FFT::run(const Slice<const int16_t> &sample, FFTBins *out,
25 const FFT_Args &args) {
26 FFT_Args args2 = args;
27 args2.samples = sample.size();
28 get_or_create(args2).run(sample, out);
29}
30
31void FFT::clear() { mMap->clear(); }
32
33size_t FFT::size() const { return mMap->size(); }
34
35void FFT::setFFTCacheSize(size_t size) { mMap->setMaxSize(size); }
36
38 Ptr<FFTImpl> *val = mMap->find_value(args);
39 if (val) {
40 // we have it.
41 return **val;
42 }
43 // else we have to make a new one.
45 (*mMap)[args] = fft;
46 return *fft;
47}
48
49
50
51bool FFT_Args::operator==(const FFT_Args &other) const {
53 FL_DISABLE_WARNING(float-equal);
54
55 return samples == other.samples && bands == other.bands &&
56 fmin == other.fmin && fmax == other.fmax &&
57 sample_rate == other.sample_rate;
58
60}
61
62} // namespace fl
AudioAnalyzeFFT1024 fft
void clear()
Definition fft.cpp:31
void setFFTCacheSize(size_t size)
Definition fft.cpp:35
FFTImpl & get_or_create(const FFT_Args &args)
Definition fft.cpp:37
scoped_ptr< HashMap > mMap
Definition fft.h:85
size_t size() const
Definition fft.cpp:33
void run(const Slice< const int16_t > &sample, FFTBins *out, const FFT_Args &args=FFT_Args())
Definition fft.cpp:24
FFT()
Definition fft.cpp:20
Result run(const AudioSample &sample, FFTBins *out)
Definition fft_impl.cpp:150
Definition ptr.h:118
size_t size() const
Definition slice.h:92
#define FL_DISABLE_WARNING(warning)
#define FL_DISABLE_WARNING_PUSH
#define FL_DISABLE_WARNING_POP
static uint32_t MurmurHash3_x86_32(const void *key, size_t len, uint32_t seed=0)
Definition hash.h:18
Ptr< T > NewPtr(Args... args)
Definition ptr.h:451
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16
corkscrew_args args
Definition old.h:142
HashMap(size_t max_size)
Definition fft.cpp:16
bool operator==(const FFT_Args &other) const
Definition fft.cpp:51
FFT_Args(int samples=DefaultSamples(), int bands=DefaultBands(), float fmin=DefaultMinFrequency(), float fmax=DefaultMaxFrequency(), int sample_rate=DefaultSampleRate())
Definition fft.h:48
float fmax
Definition fft.h:45
int samples
Definition fft.h:42
float fmin
Definition fft.h:44
int sample_rate
Definition fft.h:46
int bands
Definition fft.h:43
uint32_t operator()(const FFT_Args &key) const noexcept
Definition fft.cpp:10