3#ifndef QAMBISONICDECODER_P_H
4#define QAMBISONICDECODER_P_H
17#include <QtMultimedia/qaudioformat.h>
18#include <QtSpatialAudio/private/qtspatialaudioglobal_p.h>
19#include <QtCore/qspan.h>
25struct QAmbisonicDecoderData;
43 bool hasValidConfig()
const {
return decoderData !=
nullptr || simpleDecoderFactors !=
nullptr; }
48 int outputSamples(
int nFrames)
const {
return outputChannels * nFrames; }
51 void processBuffer(QSpan<
const float *> input, QSpan<
float> output);
60 const QAudioFormat::ChannelConfig channelConfig;
62 const int inputChannels;
63 const int outputChannels;
64 const QAmbisonicDecoderData *decoderData =
nullptr;
65 std::unique_ptr<QAmbisonicDecoderFilter[]> filters;
66 std::unique_ptr<
float[]> simpleDecoderFactors;
68 const float *reverbFactors =
nullptr;
69 std::unique_ptr<
float[]> m_reverbFactorsOwned;
QAmbisonicDecoderFilter()=default
void configure(float sampleRate, float cutoffFrequency=380)
static constexpr int maxAmbisonicOrder
void processBuffer(QSpan< const float * > input, QSpan< float > output)
QAmbisonicDecoder(AmbisonicOrder, int sampleRate, int numberOfOutputChannels, QAudioFormat::ChannelConfig)
int nInputChannels() const
static constexpr int maxAmbisonicChannels
int nOutputChannels() const
void processBufferWithReverb(QSpan< const float * > input, QSpan< const float *, 2 > reverb, QSpan< float > output)
int outputSamples(int nFrames) const
bool hasValidConfig() const
static constexpr QAmbisonicDecoderData decoderMap[]
constexpr float reverb_x_1[]
constexpr float reverb_x_0[]