#pragma once
#include "AnalyserOptions.h"
#include "AudioBasicInspectorNode.h"
#include "RealtimeAnalyser.h"
namespace WebCore {
class AnalyserNode final : public AudioBasicInspectorNode {
WTF_MAKE_ISO_ALLOCATED(AnalyserNode);
public:
static ExceptionOr<Ref<AnalyserNode>> create(BaseAudioContext&, const AnalyserOptions& = { });
virtual ~AnalyserNode();
unsigned fftSize() const { return m_analyser.fftSize(); }
ExceptionOr<void> setFftSize(unsigned);
unsigned frequencyBinCount() const { return m_analyser.frequencyBinCount(); }
ExceptionOr<void> setMinMaxDecibels(double minDecibels, double maxDecibels);
ExceptionOr<void> setMinDecibels(double);
double minDecibels() const { return m_analyser.minDecibels(); }
ExceptionOr<void> setMaxDecibels(double);
double maxDecibels() const { return m_analyser.maxDecibels(); }
ExceptionOr<void> setSmoothingTimeConstant(double);
double smoothingTimeConstant() const { return m_analyser.smoothingTimeConstant(); }
void getFloatFrequencyData(const Ref<JSC::Float32Array>& array) { m_analyser.getFloatFrequencyData(array.get()); }
void getByteFrequencyData(const Ref<JSC::Uint8Array>& array) { m_analyser.getByteFrequencyData(array.get()); }
void getFloatTimeDomainData(const Ref<JSC::Float32Array>& array) { m_analyser.getFloatTimeDomainData(array.get()); }
void getByteTimeDomainData(const Ref<JSC::Uint8Array>& array) { m_analyser.getByteTimeDomainData(array.get()); }
private:
AnalyserNode(BaseAudioContext&);
void process(size_t framesToProcess) final;
void reset() final;
double tailTime() const final { return 0; }
double latencyTime() const final { return 0; }
RealtimeAnalyser m_analyser;
};
}