From 88a9e434f5cc77f2c2628b60e341896554f88895 Mon Sep 17 00:00:00 2001 From: James Crook Date: Mon, 18 May 2015 21:58:04 +0100 Subject: [PATCH 1/5] 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 -------------------- From 26707aabfa0b0626c32f2d1bb6101e541c2c2a8d Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Tue, 19 May 2015 01:49:00 +0100 Subject: [PATCH 2/5] Return to gray highlighting for Spectrogram. --- src/TrackArtist.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 71baa707a..1453ba4e8 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -1804,7 +1804,7 @@ static float sumFreqValues( // Helper function to decide on which color set to use. // dashCount counts both dashes and the spaces between them. AColor::ColorGradientChoice ChooseColorSet( float bin0, float bin1, float selBinLo, - float selBinCenter, float selBinHi, int dashCount ) + float selBinCenter, float selBinHi, int dashCount, bool isSpectral ) { if ( (selBinCenter >= 0) && (bin0 <= selBinCenter) && (selBinCenter < bin1) ) return AColor::ColorGradientEdge; @@ -1816,7 +1816,12 @@ AColor::ColorGradientChoice ChooseColorSet( float bin0, float bin1, float selBin else if ( (selBinLo < 0 || selBinLo < bin1) && (selBinHi < 0 || selBinHi > bin0) ) - return AColor::ColorGradientTimeAndFrequencySelected; + if (isSpectral) { + return AColor::ColorGradientTimeAndFrequencySelected; + } + else { + return AColor::ColorGradientTimeSelected; + } else return AColor::ColorGradientTimeSelected; } @@ -2110,7 +2115,9 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache, // If we are in the time selected range, then we may use a differnt color set. if (ssel0 <= w0 && w1 < ssel1) { - selected = ChooseColorSet( bin0, bin1, selBinLo, selBinCenter, selBinHi, x/DASH_LENGTH ); + bool isSpectral = ((track->GetDisplay() == WaveTrack::SpectralSelectionDisplay) || + (track->GetDisplay() == WaveTrack::SpectralSelectionLogDisplay)); + selected = ChooseColorSet( bin0, bin1, selBinLo, selBinCenter, selBinHi, x/DASH_LENGTH, isSpectral ); } @@ -2222,7 +2229,9 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache, // If we are in the time selected range, then we may use a differnt color set. if (ssel0 <= w0 && w1 < ssel1) { - selected = ChooseColorSet( bin0, bin1, selBinLo, selBinCenter, selBinHi, x/DASH_LENGTH ); + bool isSpectral = ((track->GetDisplay() == WaveTrack::SpectralSelectionDisplay) || + (track->GetDisplay() == WaveTrack::SpectralSelectionLogDisplay)); + selected = ChooseColorSet( bin0, bin1, selBinLo, selBinCenter, selBinHi, x/DASH_LENGTH, isSpectral ); } if(!usePxCache) { From d1994e702e63189980bbee8750ed4571eb7108ef Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Tue, 19 May 2015 02:57:08 +0100 Subject: [PATCH 3/5] Remove spectral selection edges when not in spectral selection. --- src/TrackArtist.cpp | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/TrackArtist.cpp b/src/TrackArtist.cpp index 1453ba4e8..fa080fed8 100644 --- a/src/TrackArtist.cpp +++ b/src/TrackArtist.cpp @@ -1806,28 +1806,22 @@ static float sumFreqValues( AColor::ColorGradientChoice ChooseColorSet( float bin0, float bin1, float selBinLo, float selBinCenter, float selBinHi, int dashCount, bool isSpectral ) { - if ( (selBinCenter >= 0) && (bin0 <= selBinCenter) && (selBinCenter < bin1) ) + if (!isSpectral) + return AColor::ColorGradientTimeSelected; + if ((selBinCenter >= 0) && (bin0 <= selBinCenter) && + (selBinCenter < bin1)) return AColor::ColorGradientEdge; - else if ( - (0 == dashCount % 2) && - (((selBinLo >= 0) && (bin0 <= selBinLo) && ( selBinLo < bin1)) || - ((selBinHi >= 0) && (bin0 <= selBinHi) && ( selBinHi < bin1)) ) ) + if ((0 == dashCount % 2) && + (((selBinLo >= 0) && (bin0 <= selBinLo) && ( selBinLo < bin1)) || + ((selBinHi >= 0) && (bin0 <= selBinHi) && ( selBinHi < bin1)))) return AColor::ColorGradientEdge; - else if ( - (selBinLo < 0 || selBinLo < bin1) && - (selBinHi < 0 || selBinHi > bin0) ) - if (isSpectral) { - return AColor::ColorGradientTimeAndFrequencySelected; - } - else { - return AColor::ColorGradientTimeSelected; - } - else + if ((selBinLo < 0 || selBinLo < bin1) && (selBinHi < 0 || selBinHi > bin0)) + return AColor::ColorGradientTimeAndFrequencySelected; + return AColor::ColorGradientTimeSelected; } - void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache, WaveClip *clip, wxDC & dc, From a9bc6d2f5390bb2f4564bb592e1a7e55076f871c Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 30 May 2015 12:12:52 +0100 Subject: [PATCH 4/5] Further fix for bug 957. Tool Tip was missing space between "Spectral" and "Selection" when selected language updated. --- src/toolbars/SpectralSelectionBar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/toolbars/SpectralSelectionBar.cpp b/src/toolbars/SpectralSelectionBar.cpp index 83f579a48..ae6167e44 100644 --- a/src/toolbars/SpectralSelectionBar.cpp +++ b/src/toolbars/SpectralSelectionBar.cpp @@ -198,7 +198,7 @@ void SpectralSelectionBar::UpdatePrefs() } // Set label to pull in language change - SetLabel(_("SpectralSelection")); + SetLabel(_("Spectral Selection")); // Give base class a chance ToolBar::UpdatePrefs(); From 2593331399ba5e63af6262024dbc268dfbb9c2e0 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Sat, 30 May 2015 16:51:10 +0100 Subject: [PATCH 5/5] Update TrackPanel.cpp Update access keys for Spectral Selection --- src/TrackPanel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 83a384f40..9835d4854 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -723,9 +723,9 @@ void TrackPanel::BuildMenus(void) /* 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")); + mWaveTrackMenu->Append(OnSpectralSelID, _("S&pectral Selection")); /* i18n-hint: short form of 'logarithm'*/ - mWaveTrackMenu->Append(OnSpectralSelLogID, _("Spectral Selection l&og(f)")); + mWaveTrackMenu->Append(OnSpectralSelLogID, _("Spectral Selection lo&g(f)")); mWaveTrackMenu->Append(OnPitchID, _("Pitc&h (EAC)")); mWaveTrackMenu->AppendSeparator();