2021-02-20 18:13:51 +01:00
|
|
|
#pragma once
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <string>
|
|
|
|
#include <fstream>
|
|
|
|
#include <memory>
|
|
|
|
#include <mutex>
|
|
|
|
#include <VUtils/Environment.h>
|
|
|
|
#include <VulcanoLE/Audio/FFT.h>
|
|
|
|
#include <VulcanoLE/Audio/Types.h>
|
2021-12-30 18:06:04 +01:00
|
|
|
#include <VulcanoLE/Audio/Filter.h>
|
2021-02-20 18:13:51 +01:00
|
|
|
|
|
|
|
class AudioGrabber {
|
|
|
|
public:
|
|
|
|
enum class ReqMode {
|
|
|
|
FFT = 0,
|
|
|
|
RMS = 1,
|
|
|
|
PEAK = 2,
|
2021-12-30 18:06:04 +01:00
|
|
|
FILTER = 3,
|
|
|
|
ALL = 4
|
2021-02-20 18:13:51 +01:00
|
|
|
};
|
|
|
|
AudioGrabber();
|
|
|
|
~AudioGrabber();
|
2021-02-22 14:27:34 +01:00
|
|
|
bool read(stereoSample *buffer, uint32_t bufferSize);
|
2021-02-20 18:13:51 +01:00
|
|
|
static AudioGrabber* createAudioGrabber();
|
|
|
|
void init();
|
2021-12-30 18:06:04 +01:00
|
|
|
Audio::FilterHelper& getFilter();
|
2021-02-20 18:13:51 +01:00
|
|
|
FFT fft;
|
|
|
|
ReqMode requestMode = ReqMode::FFT;
|
2021-02-24 18:52:01 +01:00
|
|
|
stereoSampleFrame loudness = {0.0, 0.0};
|
|
|
|
stereoSampleFrame getLoudness();
|
2021-02-22 14:27:34 +01:00
|
|
|
bool work();
|
2021-02-20 18:13:51 +01:00
|
|
|
VUtils::Environment *env = nullptr;
|
2021-12-30 18:06:04 +01:00
|
|
|
double getBass();
|
2021-02-20 18:13:51 +01:00
|
|
|
private:
|
|
|
|
std::mutex m_mtx;
|
2021-02-22 14:27:34 +01:00
|
|
|
stereoSample *m_buffer{};
|
|
|
|
void calculateRMS(stereoSample *pFrame);
|
|
|
|
void calculatePEAK(stereoSample *pFrame);
|
2021-02-20 18:13:51 +01:00
|
|
|
double m_scale = 1.0;
|
2021-05-02 17:25:03 +02:00
|
|
|
int availableData = 0;
|
2021-12-30 18:06:04 +01:00
|
|
|
Audio::FilterHelper m_filter;
|
2021-02-20 18:13:51 +01:00
|
|
|
};
|