Audacity 3.2.0
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
NoiseReductionBase::Worker Class Referencefinal
Collaboration diagram for NoiseReductionBase::Worker:
[legend]

Public Types

typedef NoiseReductionBase::Settings Settings
 
typedef NoiseReductionBase::Statistics Statistics
 

Public Member Functions

 Worker (NoiseReductionBase &effect, const Settings &settings, Statistics &statistics)
 
 ~Worker ()
 
bool Process (eWindowFunctions inWindowType, eWindowFunctions outWindowType, TrackList &tracks, double mT0, double mT1)
 
void ApplyFreqSmoothing (FloatVector &gains)
 
void GatherStatistics (MyTransformer &transformer)
 
bool Classify (MyTransformer &transformer, unsigned nWindows, int band)
 
void ReduceNoise (MyTransformer &transformer)
 
void FinishTrackStatistics ()
 

Static Public Member Functions

static bool Processor (SpectrumTransformer &transformer)
 

Public Attributes

const bool mDoProfile
 
NoiseReductionBasemEffect
 
const SettingsmSettings
 
StatisticsmStatistics
 
FloatVector mFreqSmoothingScratch
 
const size_t mFreqSmoothingBins
 
size_t mBinLow
 
size_t mBinHigh
 
const int mNoiseReductionChoice
 
const int mMethod
 
const double mNewSensitivity
 
float mOneBlockAttack
 
float mOneBlockRelease
 
float mNoiseAttenFactor
 
float mOldSensitivityFactor
 
unsigned mNWindowsToExamine
 
unsigned mCenter
 
unsigned mHistoryLen
 
unsigned mProgressTrackCount = 0
 
sampleCount mLen = 0
 
sampleCount mProgressWindowCount = 0
 

Detailed Description

Definition at line 229 of file NoiseReductionBase.cpp.

Member Typedef Documentation

◆ Settings

Definition at line 232 of file NoiseReductionBase.cpp.

◆ Statistics

Definition at line 233 of file NoiseReductionBase.cpp.

Constructor & Destructor Documentation

◆ Worker()

NoiseReductionBase::Worker::Worker ( NoiseReductionBase effect,
const Settings settings,
Statistics statistics 
)

Definition at line 683 of file NoiseReductionBase.cpp.

691
692 , mEffect { effect }
693 , mSettings { settings }
694 , mStatistics { statistics }
695
697 , mFreqSmoothingBins { size_t(std::max(0.0, settings.mFreqSmoothingBands)) }
698 , mBinLow { 0 }
700
703
704 // Sensitivity setting is a base 10 log, turn it into a natural log
706{
707 const auto sampleRate = mStatistics.mRate;
708
709#ifdef SPECTRAL_EDIT_NOISE_REDUCTION
710 {
711 // mBinLow is inclusive, mBinHigh is exclusive, of
712 // the range of frequencies to affect. Include any
713 // bin that partly overlaps the selected range of frequencies.
714 const double bin = sampleRate / mWindowSize;
715 if (f0 >= 0.0)
716 mBinLow = floor(f0 / bin);
717 if (f1 >= 0.0)
718 mBinHigh = ceil(f1 / bin);
719 }
720#endif
721
722 const double noiseGain = -settings.mNoiseGain;
723 const unsigned nAttackBlocks =
725 const unsigned nReleaseBlocks =
727 // Applies to amplitudes, divide by 20:
728 mNoiseAttenFactor = DB_TO_LINEAR(noiseGain);
729 // Apply to gain factors which apply to amplitudes, divide by 20:
730 mOneBlockAttack = DB_TO_LINEAR(noiseGain / nAttackBlocks);
731 mOneBlockRelease = DB_TO_LINEAR(noiseGain / nReleaseBlocks);
732 // Applies to power, divide by 10:
734
737 std::max(2, (int)(minSignalTime * sampleRate / mSettings.StepSize())) :
739
741 wxASSERT(mCenter >= 1); // release depends on this assumption
742
743 if (mDoProfile)
744#ifdef OLD_METHOD_AVAILABLE
746#else
747 mHistoryLen = 1;
748#endif
749 else
750 {
751 // Allow long enough queue for sufficient inspection of the middle
752 // and for attack processing
753 // See ReduceNoise()
754 mHistoryLen = std::max(mNWindowsToExamine, mCenter + nAttackBlocks);
755 }
756}
#define DB_TO_LINEAR(x)
Definition: MemoryX.h:338
static Settings & settings()
Definition: TrackInfo.cpp:51

References DB_TO_LINEAR, anonymous_namespace{NoiseReductionBase.cpp}::DM_OLD_METHOD, NoiseReductionBase::Settings::mAttackTime, mBinHigh, mBinLow, mCenter, mDoProfile, mHistoryLen, anonymous_namespace{NoiseReductionBase.cpp}::minSignalTime, mMethod, mNoiseAttenFactor, NoiseReductionBase::Settings::mNoiseGain, mNWindowsToExamine, NoiseReductionBase::Settings::mOldSensitivity, mOldSensitivityFactor, mOneBlockAttack, mOneBlockRelease, NoiseReductionBase::Statistics::mRate, NoiseReductionBase::Settings::mReleaseTime, mSettings, mStatistics, anonymous_namespace{ClipSegmentTest.cpp}::sampleRate, settings(), NoiseReductionBase::Settings::StepSize(), and NoiseReductionBase::Settings::StepsPerWindow().

Here is the call graph for this function:

◆ ~Worker()

NoiseReductionBase::Worker::~Worker ( )

Definition at line 553 of file NoiseReductionBase.cpp.

554{
555}

Member Function Documentation

◆ ApplyFreqSmoothing()

void NoiseReductionBase::Worker::ApplyFreqSmoothing ( FloatVector gains)

Definition at line 648 of file NoiseReductionBase.cpp.

649{
650 // Given an array of gain mutipliers, average them
651 // GEOMETRICALLY. Don't multiply and take nth root --
652 // that may quickly cause underflows. Instead, average the logs.
653
654 if (mFreqSmoothingBins == 0)
655 return;
656
657 const auto spectrumSize = mSettings.SpectrumSize();
658
659 {
660 auto pScratch = mFreqSmoothingScratch.data();
661 std::fill(pScratch, pScratch + spectrumSize, 0.0f);
662 }
663
664 for (size_t ii = 0; ii < spectrumSize; ++ii)
665 gains[ii] = log(gains[ii]);
666
667 // ii must be signed
668 for (int ii = 0; ii < (int)spectrumSize; ++ii)
669 {
670 const int j0 = std::max(0, ii - (int)mFreqSmoothingBins);
671 const int j1 = std::min(spectrumSize - 1, ii + mFreqSmoothingBins);
672 for (int jj = j0; jj <= j1; ++jj)
673 {
674 mFreqSmoothingScratch[ii] += gains[jj];
675 }
676 mFreqSmoothingScratch[ii] /= (j1 - j0 + 1);
677 }
678
679 for (size_t ii = 0; ii < spectrumSize; ++ii)
680 gains[ii] = exp(mFreqSmoothingScratch[ii]);
681}
int min(int a, int b)

References min(), and NoiseReductionBase::mSettings.

Here is the call graph for this function:

◆ Classify()

bool NoiseReductionBase::Worker::Classify ( MyTransformer transformer,
unsigned  nWindows,
int  band 
)
inline

Definition at line 866 of file NoiseReductionBase.cpp.

868{
869 switch (mMethod)
870 {
871#ifdef OLD_METHOD_AVAILABLE
872 case DM_OLD_METHOD:
873 {
874 float min = NthWindow(0).mSpectrums[band];
875 for (unsigned ii = 1; ii < nWindows; ++ii)
876 min = std::min(min, NthWindow(ii).mSpectrums[band]);
877 return min <= mOldSensitivityFactor * mStatistics.mNoiseThreshold[band];
878 }
879#endif
880 // New methods suppose an exponential distribution of power values
881 // in the noise; NEW sensitivity (which is nonnegative) is meant to be
882 // the negative of a log of probability (so the log is nonpositive)
883 // that noise strays above the threshold. Call that probability
884 // 1 - F. The quantile function of an exponential distribution is
885 // - log (1 - F) * mean. Thus simply multiply mean by sensitivity
886 // to get the threshold.
887 case DM_MEDIAN:
888 // This method examines the window and all other windows
889 // whose centers lie on or between its boundaries, and takes a median, to
890 // avoid being fooled by up and down excursions into
891 // either the mistake of classifying noise as not noise
892 // (leaving a musical noise chime), or the opposite
893 // (distorting the signal with a drop out).
894 if (nWindows <= 3)
895 // No different from second greatest.
896 goto secondGreatest;
897 else if (nWindows <= 5)
898 {
899 float greatest = 0.0, second = 0.0, third = 0.0;
900 for (unsigned ii = 0; ii < nWindows; ++ii)
901 {
902 const float power = transformer.NthWindow(ii).mSpectrums[band];
903 if (power >= greatest)
904 third = second, second = greatest, greatest = power;
905 else if (power >= second)
906 third = second, second = power;
907 else if (power >= third)
908 third = power;
909 }
910 return third <= mNewSensitivity * mStatistics.mMeans[band];
911 }
912 else
913 {
914 // not implemented
915 wxASSERT(false);
916 return true;
917 }
918 secondGreatest:
920 {
921 // This method just throws out the high outlier. It
922 // should be less prone to distortions and more prone to
923 // chimes.
924 float greatest = 0.0, second = 0.0;
925 for (unsigned ii = 0; ii < nWindows; ++ii)
926 {
927 const float power = transformer.NthWindow(ii).mSpectrums[band];
928 if (power >= greatest)
929 second = greatest, greatest = power;
930 else if (power >= second)
931 second = power;
932 }
933 return second <= mNewSensitivity * mStatistics.mMeans[band];
934 }
935 default:
936 wxASSERT(false);
937 return true;
938 }
939}
constexpr fastfloat_really_inline int32_t power(int32_t q) noexcept
Definition: fast_float.h:1454
MyWindow & NthWindow(int nn)

References anonymous_namespace{NoiseReductionBase.cpp}::DM_MEDIAN, anonymous_namespace{NoiseReductionBase.cpp}::DM_OLD_METHOD, anonymous_namespace{NoiseReductionBase.cpp}::DM_SECOND_GREATEST, min(), MyTransformer::MyWindow::mSpectrums, NoiseReductionBase::mStatistics, MyTransformer::NthWindow(), and fast_float::detail::power().

Here is the call graph for this function:

◆ FinishTrackStatistics()

void NoiseReductionBase::Worker::FinishTrackStatistics ( )

Definition at line 804 of file NoiseReductionBase.cpp.

805{
806 const auto windows = mStatistics.mTrackWindows;
807
808 // Combine averages in case of multiple profile tracks.
809 if (windows)
810 {
811 const auto multiplier = mStatistics.mTotalWindows;
812 const auto denom = windows + multiplier;
813 for (size_t ii = 0, nn = mStatistics.mMeans.size(); ii < nn; ++ii)
814 {
815 auto& mean = mStatistics.mMeans[ii];
816 auto& sum = mStatistics.mSums[ii];
817 mean = (mean * multiplier + sum) / denom;
818 // Reset for next track
819 sum = 0;
820 }
821 // Reset for next track
824 }
825}

References NoiseReductionBase::mStatistics.

◆ GatherStatistics()

void NoiseReductionBase::Worker::GatherStatistics ( MyTransformer transformer)

Definition at line 827 of file NoiseReductionBase.cpp.

828{
830
831 {
832 // NEW statistics
833 auto pPower = transformer.NthWindow(0).mSpectrums.data();
834 auto pSum = mStatistics.mSums.data();
835 for (size_t jj = 0; jj < mSettings.SpectrumSize(); ++jj)
836 {
837 *pSum++ += *pPower++;
838 }
839 }
840
841#ifdef OLD_METHOD_AVAILABLE
842 // The noise threshold for each frequency is the maximum
843 // level achieved at that frequency for a minimum of
844 // mMinSignalBlocks blocks in a row - the max of a min.
845
846 auto finish = mHistoryLen;
847
848 {
849 // old statistics
850 auto pPower = NthWindow(0).mSpectrums.data();
851 auto pThreshold = mStatistics.mNoiseThreshold.data();
852 for (size_t jj = 0; jj < mSpectrumSize; ++jj)
853 {
854 float min = *pPower++;
855 for (unsigned ii = 1; ii < finish; ++ii)
856 min = std::min(min, NthWindow(ii).mSpectrums[jj]);
857 *pThreshold = std::max(*pThreshold, min);
858 ++pThreshold;
859 }
860 }
861#endif
862}

References min(), NoiseReductionBase::mSettings, MyTransformer::MyWindow::mSpectrums, NoiseReductionBase::mStatistics, and MyTransformer::NthWindow().

Referenced by Processor().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Process()

bool NoiseReductionBase::Worker::Process ( eWindowFunctions  inWindowType,
eWindowFunctions  outWindowType,
TrackList tracks,
double  mT0,
double  mT1 
)

Definition at line 557 of file NoiseReductionBase.cpp.

560{
562 for (auto track : tracks.Selected<WaveTrack>())
563 {
565 if (track->GetRate() != mStatistics.mRate)
566 {
567 if (mDoProfile)
569 XO("All noise profile data must have the same sample rate."));
570 else
572 "The sample rate of the noise profile must match that of the sound to be processed."));
573 return false;
574 }
575
576 double trackStart = track->GetStartTime();
577 double trackEnd = track->GetEndTime();
578 double t0 = std::max(trackStart, inT0);
579 double t1 = std::min(trackEnd, inT1);
580
581 if (t1 > t0)
582 {
583 auto start = track->TimeToLongSamples(t0);
584 auto end = track->TimeToLongSamples(t1);
585 const auto len = end - start;
586 mLen = len;
587 const auto extra =
589 // Adjust denominator for presence or absence of padding,
590 // which makes the number of windows visited either more or less
591 // than the number of window steps in the data.
592 if (mDoProfile)
593 mLen -= extra;
594 else
595 mLen += extra;
596
597 auto t0 = track->LongSamplesToTime(start);
598 auto tLen = track->LongSamplesToTime(len);
599 std::optional<WaveTrack::Holder> ppTempTrack;
600 std::optional<ChannelGroup::ChannelIterator<WaveChannel>> pIter;
601 WaveTrack* pFirstTrack {};
603 {
604 ppTempTrack.emplace(track->EmptyCopy());
605 pFirstTrack = ppTempTrack->get();
606 pIter.emplace(pFirstTrack->Channels().begin());
607 }
608 for (const auto pChannel : track->Channels())
609 {
610 auto pOutputTrack = pIter ? *(*pIter)++ : nullptr;
611 MyTransformer transformer { *this,
612 pOutputTrack.get(),
614 inWindowType,
615 outWindowType,
620 if (!transformer.Process(
621 Processor, *pChannel, mHistoryLen, start, len))
622 return false;
624 }
625 if (ppTempTrack)
626 {
627 TrackSpectrumTransformer::PostProcess(*pFirstTrack, len);
628 constexpr auto preserveSplits = true;
629 constexpr auto merge = true;
630 track->ClearAndPaste(
631 t0, t0 + tLen, **ppTempTrack, preserveSplits, merge);
632 }
633 }
634 }
635
636 if (mDoProfile)
637 {
638 if (mStatistics.mTotalWindows == 0)
639 {
640 BasicUI::ShowMessageBox(XO("Selected noise profile is too short."));
641 return false;
642 }
643 }
644
645 return true;
646}
XO("Cut/Copy/Paste")
const auto tracks
static bool Processor(SpectrumTransformer &transformer)
static bool PostProcess(WaveTrack &outputTrack, sampleCount len)
Final flush and trimming of tail samples.
A Track that contains audio waveform data.
Definition: WaveTrack.h:203
MessageBoxResult ShowMessageBox(const TranslatableString &message, MessageBoxOptions options={})
Show a modal message box with either Ok or Yes and No, and optionally Cancel.
Definition: BasicUI.h:287
const char * end(const char *str) noexcept
Definition: StringUtils.h:106

References details::end(), min(), NoiseReductionBase::mSettings, NoiseReductionBase::mStatistics, TrackSpectrumTransformer::PostProcess(), BasicUI::ShowMessageBox(), tracks, and XO().

Here is the call graph for this function:

◆ Processor()

bool NoiseReductionBase::Worker::Processor ( SpectrumTransformer transformer)
static

Definition at line 770 of file NoiseReductionBase.cpp.

771{
772 auto& transformer = static_cast<MyTransformer&>(trans);
773 auto& worker = transformer.mWorker;
774 // Compute power spectrum in the newest window
775 {
776 auto& record = transformer.NthWindow(0);
777 float* pSpectrum = &record.mSpectrums[0];
778 const double dc = record.mRealFFTs[0];
779 *pSpectrum++ = dc * dc;
780 float *pReal = &record.mRealFFTs[1], *pImag = &record.mImagFFTs[1];
781 for (size_t nn = worker.mSettings.SpectrumSize() - 2; nn--;)
782 {
783 const double re = *pReal++, im = *pImag++;
784 *pSpectrum++ = re * re + im * im;
785 }
786 const double nyquist = record.mImagFFTs[0];
787 *pSpectrum = nyquist * nyquist;
788 }
789
790 if (worker.mDoProfile)
791 worker.GatherStatistics(transformer);
792 else
793 worker.ReduceNoise(transformer);
794
795 // Update the Progress meter, let user cancel
796 return !worker.mEffect.TrackProgress(
797 worker.mProgressTrackCount,
798 std::min(
799 1.0, ((++worker.mProgressWindowCount).as_double() *
800 worker.mSettings.StepSize()) /
801 worker.mLen.as_double()));
802}

References GatherStatistics(), min(), and MyTransformer::mWorker.

Here is the call graph for this function:

◆ ReduceNoise()

void NoiseReductionBase::Worker::ReduceNoise ( MyTransformer transformer)

Definition at line 941 of file NoiseReductionBase.cpp.

942{
943 auto historyLen = transformer.CurrentQueueSize();
944 auto nWindows = std::min<unsigned>(mNWindowsToExamine, historyLen);
945
946 const auto spectrumSize = mSettings.SpectrumSize();
947
949 {
950 auto& record = transformer.NthWindow(0);
951 // Default all gains to the reduction factor,
952 // until we decide to raise some of them later
953 float* pGain = &record.mGains[0];
954 std::fill(pGain, pGain + spectrumSize, mNoiseAttenFactor);
955 }
956
957 // Raise the gain for elements in the center of the sliding history
958 // or, if isolating noise, zero out the non-noise
959 if (nWindows > mCenter)
960 {
961 auto pGain = transformer.NthWindow(mCenter).mGains.data();
963 {
964 // All above or below the selected frequency range is non-noise
965 std::fill(pGain, pGain + mBinLow, 0.0f);
966 std::fill(pGain + mBinHigh, pGain + spectrumSize, 0.0f);
967 pGain += mBinLow;
968 for (size_t jj = mBinLow; jj < mBinHigh; ++jj)
969 {
970 const bool isNoise = Classify(transformer, nWindows, jj);
971 *pGain++ = isNoise ? 1.0 : 0.0;
972 }
973 }
974 else
975 {
976 // All above or below the selected frequency range is non-noise
977 std::fill(pGain, pGain + mBinLow, 1.0f);
978 std::fill(pGain + mBinHigh, pGain + spectrumSize, 1.0f);
979 pGain += mBinLow;
980 for (size_t jj = mBinLow; jj < mBinHigh; ++jj)
981 {
982 const bool isNoise = Classify(transformer, nWindows, jj);
983 if (!isNoise)
984 *pGain = 1.0;
985 ++pGain;
986 }
987 }
988 }
989
991 {
992 // In each direction, define an exponential decay of gain from the
993 // center; make actual gains the maximum of mNoiseAttenFactor, and
994 // the decay curve, and their prior values.
995
996 // First, the attack, which goes backward in time, which is,
997 // toward higher indices in the queue.
998 for (size_t jj = 0; jj < spectrumSize; ++jj)
999 {
1000 for (unsigned ii = mCenter + 1; ii < historyLen; ++ii)
1001 {
1002 const float minimum = std::max(
1004 transformer.NthWindow(ii - 1).mGains[jj] * mOneBlockAttack);
1005 float& gain = transformer.NthWindow(ii).mGains[jj];
1006 if (gain < minimum)
1007 gain = minimum;
1008 else
1009 // We can stop now, our attack curve is intersecting
1010 // the release curve of some window previously processed.
1011 break;
1012 }
1013 }
1014
1015 // Now, release. We need only look one window ahead. This part will
1016 // be visited again when we examine the next window, and
1017 // carry the decay further.
1018 {
1019 auto pNextGain = transformer.NthWindow(mCenter - 1).mGains.data();
1020 auto pThisGain = transformer.NthWindow(mCenter).mGains.data();
1021 for (auto nn = mSettings.SpectrumSize(); nn--;)
1022 {
1023 *pNextGain = std::max(
1024 *pNextGain,
1025 std::max(mNoiseAttenFactor, *pThisGain++ * mOneBlockRelease));
1026 ++pNextGain;
1027 }
1028 }
1029 }
1030
1031 if (transformer.QueueIsFull())
1032 {
1033 auto& record = transformer.NthWindow(historyLen - 1); // end of the queue
1034 const auto last = mSettings.SpectrumSize() - 1;
1035
1037 // Apply frequency smoothing to output gain
1038 // Gains are not less than mNoiseAttenFactor
1039 ApplyFreqSmoothing(record.mGains);
1040
1041 // Apply gain to FFT
1042 {
1043 const float* pGain = &record.mGains[1];
1044 float* pReal = &record.mRealFFTs[1];
1045 float* pImag = &record.mImagFFTs[1];
1046 auto nn = mSettings.SpectrumSize() - 2;
1048 {
1049 for (; nn--;)
1050 {
1051 // Subtract the gain we would otherwise apply from 1, and
1052 // negate that to flip the phase.
1053 const double gain = *pGain++ - 1.0;
1054 *pReal++ *= gain;
1055 *pImag++ *= gain;
1056 }
1057 record.mRealFFTs[0] *= (record.mGains[0] - 1.0);
1058 // The Fs/2 component is stored as the imaginary part of the DC
1059 // component
1060 record.mImagFFTs[0] *= (record.mGains[last] - 1.0);
1061 }
1062 else
1063 {
1064 for (; nn--;)
1065 {
1066 const double gain = *pGain++;
1067 *pReal++ *= gain;
1068 *pImag++ *= gain;
1069 }
1070 record.mRealFFTs[0] *= record.mGains[0];
1071 // The Fs/2 component is stored as the imaginary part of the DC
1072 // component
1073 record.mImagFFTs[0] *= record.mGains[last];
1074 }
1075 }
1076 }
1077}
@ NRC_LEAVE_RESIDUE
@ NRC_ISOLATE_NOISE
bool Classify(MyTransformer &transformer, unsigned nWindows, int band)
void ApplyFreqSmoothing(FloatVector &gains)
size_t CurrentQueueSize() const
How many windows in the queue have been filled?

References SpectrumTransformer::CurrentQueueSize(), MyTransformer::MyWindow::mGains, NoiseReductionBase::mSettings, NRC_ISOLATE_NOISE, NRC_LEAVE_RESIDUE, MyTransformer::NthWindow(), and SpectrumTransformer::QueueIsFull().

Here is the call graph for this function:

Member Data Documentation

◆ mBinHigh

size_t NoiseReductionBase::Worker::mBinHigh

Definition at line 268 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mBinLow

size_t NoiseReductionBase::Worker::mBinLow

Definition at line 267 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mCenter

unsigned NoiseReductionBase::Worker::mCenter

Definition at line 280 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mDoProfile

const bool NoiseReductionBase::Worker::mDoProfile

Definition at line 258 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mEffect

NoiseReductionBase& NoiseReductionBase::Worker::mEffect

Definition at line 260 of file NoiseReductionBase.cpp.

◆ mFreqSmoothingBins

const size_t NoiseReductionBase::Worker::mFreqSmoothingBins

Definition at line 265 of file NoiseReductionBase.cpp.

◆ mFreqSmoothingScratch

FloatVector NoiseReductionBase::Worker::mFreqSmoothingScratch

Definition at line 264 of file NoiseReductionBase.cpp.

◆ mHistoryLen

unsigned NoiseReductionBase::Worker::mHistoryLen

Definition at line 281 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mLen

sampleCount NoiseReductionBase::Worker::mLen = 0

Definition at line 285 of file NoiseReductionBase.cpp.

◆ mMethod

const int NoiseReductionBase::Worker::mMethod

Definition at line 271 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mNewSensitivity

const double NoiseReductionBase::Worker::mNewSensitivity

Definition at line 272 of file NoiseReductionBase.cpp.

◆ mNoiseAttenFactor

float NoiseReductionBase::Worker::mNoiseAttenFactor

Definition at line 276 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mNoiseReductionChoice

const int NoiseReductionBase::Worker::mNoiseReductionChoice

Definition at line 270 of file NoiseReductionBase.cpp.

◆ mNWindowsToExamine

unsigned NoiseReductionBase::Worker::mNWindowsToExamine

Definition at line 279 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mOldSensitivityFactor

float NoiseReductionBase::Worker::mOldSensitivityFactor

Definition at line 277 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mOneBlockAttack

float NoiseReductionBase::Worker::mOneBlockAttack

Definition at line 274 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mOneBlockRelease

float NoiseReductionBase::Worker::mOneBlockRelease

Definition at line 275 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mProgressTrackCount

unsigned NoiseReductionBase::Worker::mProgressTrackCount = 0

Definition at line 284 of file NoiseReductionBase.cpp.

◆ mProgressWindowCount

sampleCount NoiseReductionBase::Worker::mProgressWindowCount = 0

Definition at line 286 of file NoiseReductionBase.cpp.

◆ mSettings

const Settings& NoiseReductionBase::Worker::mSettings

Definition at line 261 of file NoiseReductionBase.cpp.

Referenced by Worker().

◆ mStatistics

Statistics& NoiseReductionBase::Worker::mStatistics

Definition at line 262 of file NoiseReductionBase.cpp.

Referenced by Worker().


The documentation for this class was generated from the following file: