swift
sinusgenerator.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 "sinusgenerator.h"
5 
6 #include <cmath>
7 
8 #include "misc/metadatautils.h"
9 
10 using namespace swift::misc;
11 
12 namespace swift::sound::sample_provider
13 {
14  CSinusGenerator::CSinusGenerator(double frequencyHz, QObject *parent)
15  : ISampleProvider(parent), m_frequencyHz(frequencyHz)
16  {
17  const QString on = QStringLiteral("%1 frequency: %2Hz").arg(classNameShort(this)).arg(frequencyHz);
18  this->setObjectName(on);
19  }
20 
21  int CSinusGenerator::readSamples(QVector<float> &samples, qint64 count)
22  {
23  samples.clear();
24  samples.fill(0, static_cast<int>(count));
25 
26  for (int sampleCount = 0; sampleCount < count; sampleCount++)
27  {
28  const double multiple = s_twoPi * m_frequencyHz / m_sampleRate;
29  const double sampleValue = m_gain * qSin(m_nSample * multiple);
30  samples[sampleCount] = static_cast<float>(sampleValue);
31  m_nSample++;
32  }
33  return static_cast<int>(count);
34  }
35 
36  void CSinusGenerator::setFrequency(double frequencyHz) { m_frequencyHz = frequencyHz; }
37 } // namespace swift::sound::sample_provider
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.
void setFrequency(double frequencyHz)
Set frequency in Hz.
Free functions in swift::misc.
QString classNameShort(const QObject *object)
Class name as from QMetaObject::className without namespace.