swift
simplecompressoreffect.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 namespace swift::sound::sample_provider
9 {
11  : ISampleProvider(parent), m_sourceStream(source)
12  {
13 
14  this->setObjectName("CSimpleCompressorEffect");
15  m_timer = new QTimer(this);
16  m_timer->setObjectName(this->objectName() + ":m_timer");
17 
18  m_simpleCompressor.setAttack(5.0);
19  m_simpleCompressor.setRelease(10.0);
20  m_simpleCompressor.setSampleRate(48000.0);
21  m_simpleCompressor.setThresh(16.0);
22  m_simpleCompressor.setRatio(6.0);
23  m_simpleCompressor.setMakeUpGain(16.0);
24  m_timer->start(3000);
25  }
26 
27  int CSimpleCompressorEffect::readSamples(QVector<float> &samples, qint64 count)
28  {
29  int samplesRead = m_sourceStream->readSamples(samples, count);
30 
31  if (m_enabled)
32  {
33  for (int sample = 0; sample < samplesRead; sample += m_channels)
34  {
35  double in1 = samples.at(sample);
36  double in2 = (m_channels == 1) ? 0 : samples.at(sample + 1);
37  m_simpleCompressor.process(in1, in2);
38  samples[sample] = static_cast<float>(in1);
39  if (m_channels > 1) { samples[sample + 1] = static_cast<float>(in2); }
40  }
41  }
42  return samplesRead;
43  }
44 
45  void CSimpleCompressorEffect::setEnabled(bool enabled) { m_enabled = enabled; }
46 
47  void CSimpleCompressorEffect::setMakeUpGain(double gain) { m_simpleCompressor.setMakeUpGain(gain); }
48 
50  {
51  if (channels < 1) { channels = 1; }
52  else if (channels > 2) { channels = 2; }
53  m_channels = channels;
54  }
55 } // namespace swift::sound::sample_provider
virtual void setAttack(double ms)
Attack time constant.
virtual void setSampleRate(double sampleRate)
Sample rate dependencies.
virtual void setRelease(double ms)
Release time constant.
virtual void setThresh(double dB)
set parameters
Definition: SimpleComp.cpp:48
void setMakeUpGain(double gain)
set parameters
Definition: SimpleComp.cpp:61
virtual void setRatio(double dB)
set parameters
Definition: SimpleComp.cpp:54
void process(double &in1, double &in2)
compressor runtime process
CSimpleCompressorEffect(ISampleProvider *source, QObject *parent=nullptr)
Ctor.
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.
virtual int readSamples(QVector< float > &samples, qint64 count)=0
Read samples.