swift
sawtoothgenerator.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 
4 #include "sawtoothgenerator.h"
5 
6 #include <cmath>
7 
8 namespace swift::sound::sample_provider
9 {
10  CSawToothGenerator::CSawToothGenerator(double frequency, QObject *parent)
11  : ISampleProvider(parent), m_frequency(frequency)
12  {
13  this->setObjectName("CSawToothGenerator");
14  }
15 
16  int CSawToothGenerator::readSamples(QVector<float> &samples, qint64 count)
17  {
18  samples.clear();
19  samples.fill(0, static_cast<int>(count));
20 
21  for (int sampleCount = 0; sampleCount < count; sampleCount++)
22  {
23  double multiple = 2 * m_frequency / m_sampleRate;
24  double sampleSaw = std::fmod((m_nSample * multiple), 2) - 1;
25  double sampleValue = m_gain * sampleSaw;
26  samples[sampleCount] = static_cast<float>(sampleValue);
27  m_nSample++;
28  }
29  return static_cast<int>(count);
30  }
31 } // namespace swift::sound::sample_provider
CSawToothGenerator(double frequency, QObject *parent=nullptr)
Ctor.
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.