From 88a9e434f5cc77f2c2628b60e341896554f88895 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 18 May 2015 21:58:04 +0100 Subject: [PATCH] Select Spectral Edit from Track DropDown --- src/Menus.cpp | 6 +++++- src/TrackArtist.cpp | 16 ++++++++++++++-- src/TrackPanel.cpp | 31 +++++++++++++++++++++++-------- src/WaveTrack.h | 6 ++++++ src/effects/nyquist/Nyquist.cpp | 2 ++ src/prefs/TracksPrefs.cpp | 7 ++++++- 6 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 65f3fe65c..7cb732e17 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -4756,7 +4756,11 @@ void AudacityProject::DoNextPeakFrequency(bool up) WaveTrack *const wt = static_cast(t); const int display = wt->GetDisplay(); if (display == WaveTrack::SpectrumDisplay || - display == WaveTrack::SpectrumLogDisplay) { + display == WaveTrack::SpectrumLogDisplay || + display == WaveTrack::SpectralSelectionDisplay || + display == WaveTrack::SpectralSelectionLogDisplay + + ) { pTrack = wt; break; } diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 7fce99fd0..71baa707a 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -438,6 +438,12 @@ void TrackArtist::DrawTrack(const Track * t, case WaveTrack::SpectrumLogDisplay: DrawSpectrum(wt, dc, r, viewInfo, false, true); break; + case WaveTrack::SpectralSelectionDisplay: + DrawSpectrum(wt, dc, r, viewInfo, false, false); + break; + case WaveTrack::SpectralSelectionLogDisplay: + DrawSpectrum(wt, dc, r, viewInfo, false, true); + break; case WaveTrack::PitchDisplay: DrawSpectrum(wt, dc, r, viewInfo, true, false); break; @@ -763,7 +769,10 @@ void TrackArtist::UpdateVRuler(Track *t, wxRect & r) vruler->SetLabelEdges(true); vruler->SetLog(false); } - else if (display == WaveTrack::SpectrumDisplay) { + else if ( + (display == WaveTrack::SpectrumDisplay) || + (display == WaveTrack::SpectralSelectionDisplay) ) + { // Spectrum if (r.height < 60) @@ -806,7 +815,10 @@ void TrackArtist::UpdateVRuler(Track *t, wxRect & r) } vruler->SetLog(false); } - else if (display == WaveTrack::SpectrumLogDisplay) { + else if ( + (display == WaveTrack::SpectrumLogDisplay) || + (display == WaveTrack::SpectralSelectionLogDisplay) ) + { // SpectrumLog if (r.height < 10) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 9a769419b..83a384f40 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -322,6 +322,8 @@ enum { OnWaveformDBID, OnSpectrumID, OnSpectrumLogID, + OnSpectralSelID, + OnSpectralSelLogID, OnPitchID, OnSplitStereoID, @@ -720,6 +722,11 @@ void TrackPanel::BuildMenus(void) mWaveTrackMenu->Append(OnSpectrumID, _("&Spectrogram")); /* i18n-hint: short form of 'logarithm'*/ mWaveTrackMenu->Append(OnSpectrumLogID, _("Spectrogram l&og(f)")); + /* i18n-hint: Spectral Selection is spectrogram with ability to select frequencies too'*/ + mWaveTrackMenu->Append(OnSpectralSelID, _("Spectral Selection")); + /* i18n-hint: short form of 'logarithm'*/ + mWaveTrackMenu->Append(OnSpectralSelLogID, _("Spectral Selection l&og(f)")); + mWaveTrackMenu->Append(OnPitchID, _("Pitc&h (EAC)")); mWaveTrackMenu->AppendSeparator(); mWaveTrackMenu->AppendRadioItem(OnChannelMonoID, _("&Mono")); @@ -1721,8 +1728,7 @@ void TrackPanel::SetCursorAndTipWhenInLabel( Track * t, { if (event.m_x >= GetVRulerOffset() && (t->GetKind() == Track::Wave) && - (((WaveTrack *) t)->GetDisplay() <= WaveTrack::SpectrumDisplay || - ((WaveTrack *) t)->GetDisplay() <= WaveTrack::SpectrumLogDisplay)) + ( ((WaveTrack *) t)->GetDisplay() <= WaveTrack::SpectralSelectionLogDisplay) ) { *ppTip = _("Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region."); SetCursor(event.ShiftDown()? *mZoomOutCursor : *mZoomInCursor); @@ -1796,15 +1802,17 @@ void TrackPanel::SetCursorAndTipWhenInLabelTrack( LabelTrack * pLT, namespace { +// This returns true if we're a spectral editing track. inline bool isSpectrogramTrack(const Track *pTrack, bool *pLogf = NULL) { if (pTrack && pTrack->GetKind() == Track::Wave) { const int display = static_cast(pTrack)->GetDisplay(); - const bool logF = (display == WaveTrack::SpectrumLogDisplay); + const bool logF = (display == WaveTrack::SpectrumLogDisplay) || + (display == WaveTrack::SpectralSelectionLogDisplay); if (pLogf) *pLogf = logF; - return logF || (display == WaveTrack::SpectrumDisplay); + return (display == WaveTrack::SpectralSelectionLogDisplay) || (display == WaveTrack::SpectralSelectionDisplay); } else { if (pLogf) @@ -3083,7 +3091,9 @@ void TrackPanel::ExtendFreqSelection(int mouseYCoordinate, int trackTopEdge, const WaveTrack* wt = mFreqSelTrack; const int display = wt->GetDisplay(); - const bool logF = display == WaveTrack::SpectrumLogDisplay; + const bool logF = (display == WaveTrack::SpectrumLogDisplay) || + (display == WaveTrack::SpectralSelectionLogDisplay) + ; const double rate = wt->GetRate(); const double frequency = PositionToFrequency(true, mouseYCoordinate, @@ -4566,7 +4576,7 @@ void TrackPanel::HandleVZoomClick( wxMouseEvent & event ) // don't do anything if track is not wave or Spectrum/log Spectrum if (((mCapturedTrack->GetKind() == Track::Wave) && - (((WaveTrack*)mCapturedTrack)->GetDisplay() <= WaveTrack::SpectrumLogDisplay)) + (((WaveTrack*)mCapturedTrack)->GetDisplay() <= WaveTrack::SpectralSelectionLogDisplay)) #ifdef USE_MIDI || mCapturedTrack->GetKind() == Track::Note #endif @@ -4655,8 +4665,11 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event ) int fftSkipPoints=0; #endif //EXPERIMENTAL_FFT_SKIP_POINTS double rate = ((WaveTrack *)track)->GetRate(); - spectrum = ((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumDisplay; - spectrumLog=(((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumLogDisplay); + spectrum = (((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumDisplay) || + (((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectralSelectionDisplay) ; + spectrumLog=(((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectrumLogDisplay) || + (((WaveTrack *) track)->GetDisplay() == WaveTrack::SpectralSelectionLogDisplay) + ; if(spectrum) { min = mTrackArtist->GetSpectrumMinFreq(0); if(min < 0) @@ -8457,6 +8470,8 @@ void TrackPanel::OnTrackMenu(Track *t) display != WaveTrack::WaveformDBDisplay); theMenu->Enable(OnSpectrumID, display != WaveTrack::SpectrumDisplay); theMenu->Enable(OnSpectrumLogID, display != WaveTrack::SpectrumLogDisplay); + theMenu->Enable(OnSpectralSelID, display != WaveTrack::SpectralSelectionDisplay); + theMenu->Enable(OnSpectralSelLogID, display != WaveTrack::SpectralSelectionLogDisplay); theMenu->Enable(OnPitchID, display != WaveTrack::PitchDisplay); WaveTrack * track = (WaveTrack *)t; diff --git a/src/WaveTrack.h b/src/WaveTrack.h index 2c1af3054..8aa43d58e 100644 --- a/src/WaveTrack.h +++ b/src/WaveTrack.h @@ -409,6 +409,8 @@ class AUDACITY_DLL_API WaveTrack: public Track { WaveformDBDisplay, SpectrumDisplay, SpectrumLogDisplay, + SpectralSelectionDisplay, + SpectralSelectionLogDisplay, PitchDisplay, NoDisplay // Preview track has no display } WaveTrackDisplay; @@ -417,6 +419,10 @@ class AUDACITY_DLL_API WaveTrack: public Track { if(mDisplay<2) mLastDisplay=mDisplay; // remember last display mode for wave and wavedb so they can remap mDisplay = display; + if( mDisplay == SpectralSelectionDisplay ){ + } + if( mDisplay == SpectralSelectionLogDisplay ){ + } } int GetDisplay() const {return mDisplay;} int GetLastDisplay() {return mLastDisplay;} diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index cbc26b029..1d91ea46a 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -780,6 +780,8 @@ bool NyquistEffect::ProcessOne() case WaveTrack::WaveformDBDisplay: view = wxT("\"Waveform (dB)\""); break; case WaveTrack::SpectrumDisplay: view = wxT("\"Spectrogram\""); break; case WaveTrack::SpectrumLogDisplay: view = wxT("\"Spectrogram log(f)\""); break; + case WaveTrack::SpectralSelectionDisplay: view = wxT("\"Spectral Selection\""); break; + case WaveTrack::SpectralSelectionLogDisplay: view = wxT("\"Spectral Selection log(f)\""); break; case WaveTrack::PitchDisplay: view = wxT("\"Pitch (EAC)\""); break; default: view = wxT("NIL"); break; } diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index 763a70eea..2b480bc20 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -48,17 +48,22 @@ void TracksPrefs::Populate() mSoloChoices.Add(_("None")); - // Keep the same order as in TrackPanel.cpp menu: OnWaveformID, OnWaveformDBID, OnSpectrumID, OnSpectrumLogID, OnPitchID + // Keep the same order as in TrackPanel.cpp menu: OnWaveformID, OnWaveformDBID, OnSpectrumID, OnSpectrumLogID, + // OnSpectralSelID, OnSpectralSelLogID, OnPitchID mViewCodes.Add(0); mViewCodes.Add(1); mViewCodes.Add(2); mViewCodes.Add(3); mViewCodes.Add(4); + mViewCodes.Add(5); + mViewCodes.Add(6); mViewChoices.Add(_("Waveform")); mViewChoices.Add(_("Waveform (dB)")); mViewChoices.Add(_("Spectrogram")); mViewChoices.Add(_("Spectrogram log(f)")); + mViewChoices.Add(_("Spectral Selection")); + mViewChoices.Add(_("Spectrogram Selection log(f)")); mViewChoices.Add(_("Pitch (EAC)")); //------------------------- Main section --------------------