CiCueTea v0.0.1
Loading...
Searching...
No Matches
CQTProcessor.hpp
Go to the documentation of this file.
1//
2// CQTProcessor.hpp
3// CQTDSP
4//
5// Created by Juan Sierra on 3/17/25.
6//
7
15
16#pragma once
17
18#include <Eigen/Core>
19
20#include "CQT.hpp"
21#include "DoubleBuffer.h"
22#include "Slicer.hpp"
23#include "Splicer.hpp"
24
25namespace jsa::cicuetea {
26
35{
36 public:
47 CqtDenseProcessor(double sampleRate, Eigen::Index numSamples, double fraction,
48 double minFrequency, double maxFrequency, double refFrequency);
49
57 virtual ~CqtDenseProcessor() = default;
58
65 double processSample(double sample);
66
72 virtual void processBlock(Eigen::ArrayXXcd& block) = 0;
73
79 const Eigen::ArrayXd& getWindow() const { return win; }
80
86 const NsgfCqtDense& getCqt() const { return cqt; }
87
93 Eigen::Index getLatency() const { return slicer.getBlockSize(); }
94
101 bool isValid() const { return cqt.isValid(); }
102
103 protected:
105
106 private:
107 Eigen::ArrayXd xi;
108 Eigen::ArrayXd win;
109 Eigen::ArrayXXcd Xcq;
110 Slicer slicer;
111 Splicer splicer;
112};
113
114//==========================================================================
115
124{
125 public:
136 CqtSparseProcessor(double sampleRate, Eigen::Index numSamples, double fraction,
137 double minFrequency, double maxFrequency, double refFrequency);
138
146 virtual ~CqtSparseProcessor() = default;
147
154 double processSample(double sample);
155
161 virtual void processBlock(NsgfCqtSparse::Coefs& block) = 0;
162
168 const Eigen::ArrayXd& getWindow() const { return win; }
169
175 const NsgfCqtSparse& getCqt() const { return cqt; }
176
182 Eigen::Index getLatency() const { return slicer.getBlockSize(); }
183
190 bool isValid() const { return cqt.isValid(); }
191
192 protected:
194
195 private:
196 Eigen::ArrayXd xi;
197 Eigen::ArrayXd win;
199 Slicer slicer;
200 Splicer splicer;
201};
202
203//==========================================================================
204
213{
214 public:
225 SlidingCqtDenseProcessor(double sampleRate, Eigen::Index numSamples, double fraction,
226 double minFrequency, double maxFrequency, double refFrequency);
227
235 virtual ~SlidingCqtDenseProcessor() = default;
236
243 double processSample(double sample);
244
250 virtual void processBlock(Eigen::ArrayXXcd& block) = 0;
251
257 const Eigen::ArrayXd& getWindow() const { return win; }
258
264 const NsgfCqtDense& getCqt() const { return cqt; }
265
271 Eigen::Index getLatency() const { return slicer.getBlockSize() + slicer.getHopSize(); }
272
279 bool isValid() const { return cqt.isValid(); }
280
281 protected:
283
284 private:
285 Eigen::ArrayXd xi;
288 Eigen::ArrayXXcd Ycq;
289 Eigen::ArrayXd win;
290 Slicer slicer;
291 Splicer splicer;
292};
293
294//==========================================================================
295
304{
305 public:
316 SlidingCqtSparseProcessor(double sampleRate, Eigen::Index numSamples,
317 double fraction, double minFrequency,
318 double maxFrequency, double refFrequency);
319
327 virtual ~SlidingCqtSparseProcessor() = default;
328
335 double processSample(double sample);
336
342 virtual void processBlock(NsgfCqtSparse::Coefs& block) = 0;
343
349 const Eigen::ArrayXd& getWindow() const { return win; }
350
357 const Eigen::ArrayXd& getCqtWindow(Eigen::Index k) const { return Win[k]; }
358
364 const NsgfCqtSparse& getCqt() const { return cqt; }
365
371 Eigen::Index getLatency() const { return slicer.getBlockSize() + slicer.getHopSize(); }
372
379 bool isValid() const { return cqt.isValid(); }
380
381 protected:
383
384 private:
385 Eigen::ArrayXd xi;
389 Eigen::ArrayXd win;
391 Slicer slicer;
392 Splicer splicer;
393};
394
395} // namespace jsa::cicuetea
Provides an implementation of CQT and its inverses.
Provides an implementation of a 2 step buffer to handle current and last elements.
Provides an implementation of a Slicer of continuous data.
Provides an implementation of a Splicer of sliced data to produce continuous data.
virtual ~CqtDenseProcessor()=default
Virtual destructor for safe polymorphic use.
const NsgfCqtDense & getCqt() const
Gets the CQT object.
Definition CQTProcessor.hpp:86
const Eigen::ArrayXd & getWindow() const
Gets the windowing function.
Definition CQTProcessor.hpp:79
bool isValid() const
True when the underlying CQT configuration is valid.
Definition CQTProcessor.hpp:101
double processSample(double sample)
Processes a single audio sample.
Definition CQTProcessor.cpp:38
virtual void processBlock(Eigen::ArrayXXcd &block)=0
Processes a block of data.
NsgfCqtDense cqt
The CQT object used for processing.
Definition CQTProcessor.hpp:104
CqtDenseProcessor(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructs a CqtDenseProcessor object.
Definition CQTProcessor.cpp:16
Eigen::Index getLatency() const
Gets the latency produced by the processor.
Definition CQTProcessor.hpp:93
virtual ~CqtSparseProcessor()=default
Virtual destructor for safe polymorphic use.
NsgfCqtSparse cqt
The CQT object used for processing.
Definition CQTProcessor.hpp:193
double processSample(double sample)
Processes a single audio sample.
Definition CQTProcessor.cpp:83
const NsgfCqtSparse & getCqt() const
Gets the CQT object.
Definition CQTProcessor.hpp:175
CqtSparseProcessor(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructs a CqtSparseProcessor object.
Definition CQTProcessor.cpp:63
const Eigen::ArrayXd & getWindow() const
Gets the windowing function.
Definition CQTProcessor.hpp:168
Eigen::Index getLatency() const
Gets the latency produced by the processor.
Definition CQTProcessor.hpp:182
bool isValid() const
True when the underlying CQT configuration is valid.
Definition CQTProcessor.hpp:190
virtual void processBlock(NsgfCqtSparse::Coefs &block)=0
Processes a block of data.
A double-buffer implementation for storing and switching between two values.
Definition DoubleBuffer.h:30
Dense implementation of the NSGF-CQT.
Definition CQT.hpp:197
Sparse implementation of the NSGF-CQT.
Definition CQT.hpp:246
std::vector< Eigen::ArrayXd > Frame
Type alias for frame.
Definition CQT.hpp:258
std::vector< Eigen::ArrayXcd > Coefs
Type alias for coefficients.
Definition CQT.hpp:257
A class for slicing audio or signal data into overlapping blocks.
Definition Slicer.hpp:32
virtual void processBlock(Eigen::ArrayXXcd &block)=0
Processes a block of data.
virtual ~SlidingCqtDenseProcessor()=default
Virtual destructor for safe polymorphic use.
const Eigen::ArrayXd & getWindow() const
Gets the windowing function.
Definition CQTProcessor.hpp:257
NsgfCqtDense cqt
The CQT object used for processing.
Definition CQTProcessor.hpp:282
double processSample(double sample)
Processes a single audio sample.
Definition CQTProcessor.cpp:140
const NsgfCqtDense & getCqt() const
Gets the CQT object.
Definition CQTProcessor.hpp:264
SlidingCqtDenseProcessor(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructs a SlidingCqtDenseProcessor object.
Definition CQTProcessor.cpp:107
bool isValid() const
True when the underlying CQT configuration is valid.
Definition CQTProcessor.hpp:279
Eigen::Index getLatency() const
Gets the latency produced by the processor.
Definition CQTProcessor.hpp:271
bool isValid() const
True when the underlying CQT configuration is valid.
Definition CQTProcessor.hpp:379
virtual void processBlock(NsgfCqtSparse::Coefs &block)=0
Processes a block of data.
double processSample(double sample)
Processes a single audio sample.
Definition CQTProcessor.cpp:226
const Eigen::ArrayXd & getWindow() const
Gets the windowing function.
Definition CQTProcessor.hpp:349
SlidingCqtSparseProcessor(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructs a SlidingCqtSparseProcessor object.
Definition CQTProcessor.cpp:191
NsgfCqtSparse cqt
The CQT object used for processing.
Definition CQTProcessor.hpp:382
Eigen::Index getLatency() const
Gets the latency produced by the processor.
Definition CQTProcessor.hpp:371
const Eigen::ArrayXd & getCqtWindow(Eigen::Index k) const
Gets the CQT window for a specific index.
Definition CQTProcessor.hpp:357
const NsgfCqtSparse & getCqt() const
Gets the CQT object.
Definition CQTProcessor.hpp:364
virtual ~SlidingCqtSparseProcessor()=default
Virtual destructor for safe polymorphic use.
A class for managing and processing audio blocks with overlap and hop sizes.
Definition Splicer.hpp:31