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"
5
6namespace fl {
7
8template <> struct Hash<FFT_Args> {
9 uint32_t operator()(const FFT_Args &key) const noexcept {
10 return MurmurHash3_x86_32(&key, sizeof(FFT_Args));
11 }
12};
13
14struct FFT::HashMap : public fl::HashMapLru<FFT_Args, Ptr<FFTImpl>> {
17};
18
19FFT::FFT() { mMap.reset(new HashMap(8)); };
20
21FFT::~FFT() = default;
22
23void FFT::run(const Slice<const int16_t> &sample, FFTBins *out,
24 const FFT_Args &args) {
25 FFT_Args args2 = args;
26 args2.samples = sample.size();
27 get_or_create(args2).run(sample, out);
28}
29
30void FFT::clear() { mMap->clear(); }
31
32size_t FFT::size() const { return mMap->size(); }
33
34void FFT::setFFTCacheSize(size_t size) { mMap->setMaxSize(size); }
35
37 Ptr<FFTImpl> *val = mMap->find_value(args);
38 if (val) {
39 // we have it.
40 return **val;
41 }
42 // else we have to make a new one.
44 (*mMap)[args] = fft;
45 return *fft;
46}
47
48} // namespace fl
AudioAnalyzeFFT1024 fft
void clear()
Definition fft.cpp:30
void setFFTCacheSize(size_t size)
Definition fft.cpp:34
FFTImpl & get_or_create(const FFT_Args &args)
Definition fft.cpp:36
scoped_ptr< HashMap > mMap
Definition fft.h:92
size_t size() const
Definition fft.cpp:32
void run(const Slice< const int16_t > &sample, FFTBins *out, const FFT_Args &args=FFT_Args())
Definition fft.cpp:23
FFT()
Definition fft.cpp:19
Result run(const AudioSample &sample, FFTBins *out)
Definition fft_impl.cpp:150
Definition ptr.h:118
size_t size() const
Definition slice.h:90
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
HashMap(size_t max_size)
Definition fft.cpp:15
int samples
Definition fft.h:42
uint32_t operator()(const FFT_Args &key) const noexcept
Definition fft.cpp:9