diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index d55ff42e6..1a78c98dd 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -1953,8 +1953,11 @@ bool AudioIO::AllocateBuffers( 1, std::max( mPlaybackSamplesToCopy, mPlaybackQueueMinimum ), false, - mRate, floatSample, false); - mPlaybackMixers[i]->ApplyTrackGains(false); + mRate, floatSample, + false, // low quality dithering and resampling + nullptr, + false // don't apply track gains + ); } } diff --git a/src/Mix.cpp b/src/Mix.cpp index 2941e0650..c86613e5a 100644 --- a/src/Mix.cpp +++ b/src/Mix.cpp @@ -240,9 +240,11 @@ Mixer::Mixer(const WaveTrackConstArray &inputTracks, double startTime, double stopTime, unsigned numOutChannels, size_t outBufferSize, bool outInterleaved, double outRate, sampleFormat outFormat, - bool highQuality, MixerSpec *mixerSpec) + bool highQuality, MixerSpec *mixerSpec, bool applyTrackGains) : mNumInputTracks { inputTracks.size() } + , mApplyTrackGains{ applyTrackGains } + // This is the number of samples grabbed in one go from a track // and placed in a queue, when mixing with resampling. // (Should we use WaveTrack::GetBestBlockSize instead?) @@ -252,6 +254,9 @@ Mixer::Mixer(const WaveTrackConstArray &inputTracks, , mNumChannels{ numOutChannels } , mGains{ mNumChannels } + , mFormat{ outFormat } + , mRate{ outRate } + , mMayThrow{ mayThrow } { mHighQuality = highQuality; @@ -270,10 +275,7 @@ Mixer::Mixer(const WaveTrackConstArray &inputTracks, mTime = startTime; mBufferSize = outBufferSize; mInterleaved = outInterleaved; - mRate = outRate; mSpeed = 1.0; - mFormat = outFormat; - mApplyTrackGains = true; if( mixerSpec && mixerSpec->GetNumChannels() == mNumChannels && mixerSpec->GetNumTracks() == mNumInputTracks ) mMixerSpec = mixerSpec; @@ -351,11 +353,6 @@ void Mixer::MakeResamplers() mResample[i] = std::make_unique(mHighQuality, mMinFactor[i], mMaxFactor[i]); } -void Mixer::ApplyTrackGains(bool apply) -{ - mApplyTrackGains = apply; -} - void Mixer::Clear() { for (unsigned int c = 0; c < mNumBuffers; c++) { diff --git a/src/Mix.h b/src/Mix.h index ab4e5193e..e5cdffbca 100644 --- a/src/Mix.h +++ b/src/Mix.h @@ -106,16 +106,11 @@ class AUDACITY_DLL_API Mixer { double startTime, double stopTime, unsigned numOutChannels, size_t outBufferSize, bool outInterleaved, double outRate, sampleFormat outFormat, - bool highQuality = true, MixerSpec *mixerSpec = NULL); + bool highQuality = true, MixerSpec *mixerSpec = nullptr, + bool applytTrackGains = true); virtual ~ Mixer(); - // - // Setup - // - - void ApplyTrackGains(bool apply = true); // True by default - // // Processing // @@ -165,18 +160,18 @@ class AUDACITY_DLL_API Mixer { private: // Input - size_t mNumInputTracks; + const size_t mNumInputTracks; ArrayOf mInputTrack; bool mbVariableRates; const BoundedEnvelope *mEnvelope; ArrayOf mSamplePos; - bool mApplyTrackGains; + const bool mApplyTrackGains; Doubles mEnvValues; double mT0; // Start time double mT1; // Stop time (none if mT0==mT1) double mTime; // Current time (renamed from mT to mTime for consistency with AudioIO - mT represented warped time there) ArrayOf> mResample; - size_t mQueueMaxLen; + const size_t mQueueMaxLen; FloatBuffers mSampleQueue; ArrayOf mQueueStart; ArrayOf mQueueLen; @@ -185,21 +180,21 @@ class AUDACITY_DLL_API Mixer { // Output size_t mMaxOut; - unsigned mNumChannels; + const unsigned mNumChannels; Floats mGains; unsigned mNumBuffers; size_t mBufferSize; size_t mInterleavedBufferSize; - sampleFormat mFormat; + const sampleFormat mFormat; bool mInterleaved; ArrayOf mBuffer, mTemp; Floats mFloatBuffer; - double mRate; + const double mRate; double mSpeed; bool mHighQuality; std::vector mMinFactor, mMaxFactor; - bool mMayThrow; + const bool mMayThrow; }; #endif