swift
equalizersampleprovider.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QDebug>
7 
8 #include "sound/audioutilities.h"
9 
10 using namespace swift::sound::dsp;
11 
12 namespace swift::sound::sample_provider
13 {
14  CEqualizerSampleProvider::CEqualizerSampleProvider(ISampleProvider *sourceProvider, EqualizerPresets preset,
15  QObject *parent)
16  : ISampleProvider(parent)
17  {
18  Q_ASSERT_X(sourceProvider, Q_FUNC_INFO, "Need provider");
19  const QString on =
20  QStringLiteral("%1 of %2").arg(this->metaObject()->className(), sourceProvider->objectName());
21  this->setObjectName(on);
22 
23  m_sourceProvider = sourceProvider;
24  setupPreset(preset);
25  }
26 
27  int CEqualizerSampleProvider::readSamples(QVector<float> &samples, qint64 count)
28  {
29  const int samplesRead = m_sourceProvider->readSamples(samples, count);
30  if (m_bypass) return samplesRead;
31 
32  for (int n = 0; n < samplesRead; n++)
33  {
34  for (int band = 0; band < m_filters.size(); band++) { samples[n] = m_filters[band].transform(samples[n]); }
35  samples[n] *= static_cast<float>(m_outputGain);
36  }
37  return samplesRead;
38  }
39 
40  void CEqualizerSampleProvider::setupPreset(EqualizerPresets preset)
41  {
42  switch (preset)
43  {
44  case VHFEmulation:
45  m_filters.push_back(BiQuadFilter::highPassFilter(44100, 310, 0.25));
46  m_filters.push_back(BiQuadFilter::peakingEQ(44100, 450, 0.75, 17.0));
47  m_filters.push_back(BiQuadFilter::peakingEQ(44100, 1450, 1.0, 25.0));
48  m_filters.push_back(BiQuadFilter::peakingEQ(44100, 2000, 1.0, 25.0));
49  m_filters.push_back(BiQuadFilter::lowPassFilter(44100, 2500, 0.25));
50  break;
51  }
52  }
53 
54  double CEqualizerSampleProvider::outputGain() const { return m_outputGain; }
55 
56  void CEqualizerSampleProvider::setOutputGain(double outputGain) { m_outputGain = outputGain; }
57 } // namespace swift::sound::sample_provider
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.
virtual int readSamples(QVector< float > &samples, qint64 count)=0
Read samples.