swift
pinknoisegenerator.cpp
Go to the documentation of this file.
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 "pinknoisegenerator.h"
7 
8 namespace swift::sound::sample_provider
9 {
10  int CPinkNoiseGenerator::readSamples(QVector<float> &samples, qint64 count)
11  {
12  const int c = static_cast<int>(count);
13  samples.clear();
14  samples.fill(0, c);
15 
16  for (int sampleCount = 0; sampleCount < count; sampleCount++)
17  {
18  double white = 2 * m_random.generateDouble() - 1;
19 
20  m_pinkNoiseBuffer[0] = 0.99886 * m_pinkNoiseBuffer[0] + white * 0.0555179;
21  m_pinkNoiseBuffer[1] = 0.99332 * m_pinkNoiseBuffer[1] + white * 0.0750759;
22  m_pinkNoiseBuffer[2] = 0.96900 * m_pinkNoiseBuffer[2] + white * 0.1538520;
23  m_pinkNoiseBuffer[3] = 0.86650 * m_pinkNoiseBuffer[3] + white * 0.3104856;
24  m_pinkNoiseBuffer[4] = 0.55000 * m_pinkNoiseBuffer[4] + white * 0.5329522;
25  m_pinkNoiseBuffer[5] = -0.7616 * m_pinkNoiseBuffer[5] - white * 0.0168980;
26  double pink = m_pinkNoiseBuffer[0] + m_pinkNoiseBuffer[1] + m_pinkNoiseBuffer[2] + m_pinkNoiseBuffer[3] +
27  m_pinkNoiseBuffer[4] + m_pinkNoiseBuffer[5] + m_pinkNoiseBuffer[6] + white * 0.5362;
28  m_pinkNoiseBuffer[6] = white * 0.115926;
29  const float sampleValue = static_cast<float>(m_gain * (pink / 5));
30  samples[sampleCount] = sampleValue;
31  }
32  return c;
33  }
34 } // namespace swift::sound::sample_provider
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.