diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index 8862a5270..d6c1b6748 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -294,27 +294,28 @@ writing audio. #include "AudacityApp.h" #include "AudioIO.h" -#include "WaveTrack.h" - -#ifdef EXPERIMENTAL_MIDI_OUT -#define MIDI_SLEEP 10 /* milliseconds */ -#define ROUND(x) (int) ((x)+0.5) -//#include -#include "portmidi.h" -#include "../src/common/pa_util.h" -#include "NoteTrack.h" -#endif - #include "Mix.h" +#include "MixerBoard.h" #include "Resample.h" #include "RingBuffer.h" #include "Prefs.h" #include "Project.h" -#include "toolbars/ControlToolBar.h" +#include "WaveTrack.h" +#include "toolbars/ControlToolBar.h" #include "widgets/Meter.h" + #include "../Experimental.h" +#ifdef EXPERIMENTAL_MIDI_OUT + #define MIDI_SLEEP 10 /* milliseconds */ + #define ROUND(x) (int) ((x)+0.5) + //#include + #include "portmidi.h" + #include "../src/common/pa_util.h" + #include "NoteTrack.h" +#endif + #define NO_STABLE_INDICATOR -1000000000 #define LOWER_BOUND 0.0 #define UPPER_BOUND 1.0 @@ -1414,6 +1415,11 @@ void AudioIO::SetMeters(Meter *inputMeter, Meter *outputMeter) if (mOutputMeter) mOutputMeter->Reset(mRate, true); + AudacityProject* pProj = GetActiveProject(); + MixerBoard* pMixerBoard = pProj->GetMixerBoard(); + if (pMixerBoard) + pMixerBoard->ResetMeters(true); + mUpdateMeters = true; } @@ -1648,6 +1654,11 @@ void AudioIO::StopStream() if (mOutputMeter) mOutputMeter->Reset(mRate, false); + AudacityProject* pProj = GetActiveProject(); + MixerBoard* pMixerBoard = pProj->GetMixerBoard(); + if (pMixerBoard) + pMixerBoard->ResetMeters(false); + if (mListener && mNumCaptureChannels > 0) mListener->OnAudioIOStopRecording(); diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index 5390855ff..5ae90426e 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -334,10 +334,10 @@ void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/) mProject->TP_PushState(_("Moved pan slider"), _("Pan"), true /* consolidate */); } -void MixerTrackCluster::ResetMeter() +void MixerTrackCluster::ResetMeter(const bool bResetClipping) { if (mLeftTrack) - mMeter->Reset(mLeftTrack->GetRate(), true); + mMeter->Reset(mLeftTrack->GetRate(), bResetClipping); } @@ -410,7 +410,7 @@ void MixerTrackCluster::UpdateMeter(const double t0, const double t1) if ((t0 < 0.0) || (t1 < 0.0) || (t0 >= t1) || // bad time value or nothing to show ((mMixerBoard->HasSolo() || mTrack->GetMute()) && !mTrack->GetSolo())) { - this->ResetMeter(); + this->ResetMeter(false); return; } @@ -1033,7 +1033,7 @@ void MixerBoard::ResizeTrackClusters() mMixerTrackClusters[nClusterIndex]->HandleResize(); } -void MixerBoard::ResetMeters() +void MixerBoard::ResetMeters(const bool bResetClipping) { mPrevT1 = 0.0; @@ -1041,7 +1041,7 @@ void MixerBoard::ResetMeters() return; for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++) - mMixerTrackClusters[i]->ResetMeter(); + mMixerTrackClusters[i]->ResetMeter(bResetClipping); } void MixerBoard::UpdateName(const Track* pTrack) diff --git a/src/MixerBoard.h b/src/MixerBoard.h index f5a9ff64c..4823925db 100644 --- a/src/MixerBoard.h +++ b/src/MixerBoard.h @@ -80,7 +80,7 @@ public: void HandleSliderGain(const bool bWantPushState = false); void HandleSliderPan(const bool bWantPushState = false); - void ResetMeter(); + void ResetMeter(const bool bResetClipping); // These are used by TrackPanel for synchronizing control states. void UpdateForStateChange(); // Update the controls that can be affected by state change. @@ -214,7 +214,7 @@ public: void RefreshTrackClusters(bool bEraseBackground = true); void ResizeTrackClusters(); - void ResetMeters(); + void ResetMeters(const bool bResetClipping); void UpdateName(const Track* pTrack); void UpdateMute(const Track* pTrack = NULL); // NULL means update for all tracks. diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index e39b174d7..25c2e3271 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -909,7 +909,7 @@ void TrackPanel::OnTimer() } if (pMixerBoard) - pMixerBoard->ResetMeters(); + pMixerBoard->ResetMeters(false); } // Next, check to see if we were playing or recording diff --git a/src/toolbars/MeterToolBar.cpp b/src/toolbars/MeterToolBar.cpp index 09e95118a..93e2341bc 100644 --- a/src/toolbars/MeterToolBar.cpp +++ b/src/toolbars/MeterToolBar.cpp @@ -97,14 +97,6 @@ void MeterToolBar::Populate() mSizer->Add( mRecordMeter, wxGBPosition( 0, 1 ), wxDefaultSpan, wxEXPAND ); RegenerateTooltips(); - -#if defined(THIS_PROBABY_SHOULD_NOT_BE_DONE_HERE) - // If AudioIO changes the meters while it's currently busy, then crashes are - // very likely. - if (gAudioIO && !gAudioIO->IsBusy()) { - gAudioIO->SetMeters(mRecordMeter, mPlayMeter); - } -#endif } void MeterToolBar::UpdatePrefs() @@ -136,14 +128,6 @@ bool MeterToolBar::DestroyChildren() mPlayMeter = NULL; mRecordMeter = NULL; -#if defined(THIS_PROBABY_SHOULD_NOT_BE_DONE_HERE) - // If AudioIO changes the meters while it's currently busy, then crashes are - // very likely...especially in this case. - if (gAudioIO && !gAudioIO->IsBusy()) { - gAudioIO->SetMeters(NULL, NULL); - } -#endif - return ToolBar::DestroyChildren(); } diff --git a/src/widgets/Meter.h b/src/widgets/Meter.h index 7729bcbd8..a3ccd5f60 100644 --- a/src/widgets/Meter.h +++ b/src/widgets/Meter.h @@ -37,7 +37,7 @@ struct MeterBar { double peakHoldTime; wxRect rClip; bool clipping; - bool isclipping; + bool isclipping; //ANSWER-ME: What's the diff between these bools?! "clipping" vs "isclipping" is not clear. int tailPeakCount; float peakPeakHold; };