mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Created a global structure to hold spectrogram preferences...
Don't read "/Spectrum/" preferences anywhere but in SpectrumPrefs.cpp. Don't store global values in TrackArtist. Possibly some day, there will be other instances of SpectrogramSettings so we can have independent per-track settings.
This commit is contained in:
parent
38f24a42ef
commit
952a22c8b1
@ -173,6 +173,7 @@ audio tracks.
|
||||
#include "LabelTrack.h"
|
||||
#include "TimeTrack.h"
|
||||
#include "Prefs.h"
|
||||
#include "prefs/SpectrumPrefs.h"
|
||||
#include "Sequence.h"
|
||||
#include "Spectrum.h"
|
||||
#include "ViewInfo.h"
|
||||
@ -270,14 +271,6 @@ TrackArtist::TrackArtist()
|
||||
|
||||
SetColours();
|
||||
vruler = new Ruler();
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
fftYGridOld=true;
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
fftFindNotesOld=false;
|
||||
#endif
|
||||
}
|
||||
|
||||
TrackArtist::~TrackArtist()
|
||||
@ -811,14 +804,14 @@ void TrackArtist::UpdateVRuler(Track *t, wxRect & r)
|
||||
|
||||
int maxFreq = GetSpectrumMaxFreq(freq);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
maxFreq/=(mFftSkipPoints+1);
|
||||
maxFreq/=(fftSkipPoints+1);
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
if(maxFreq > freq)
|
||||
maxFreq = freq;
|
||||
|
||||
int minFreq = GetSpectrumMinFreq(0);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
minFreq/=(mFftSkipPoints+1);
|
||||
minFreq/=(fftSkipPoints+1);
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
if(minFreq < 0)
|
||||
minFreq = 0;
|
||||
@ -857,14 +850,14 @@ void TrackArtist::UpdateVRuler(Track *t, wxRect & r)
|
||||
|
||||
int maxFreq = GetSpectrumLogMaxFreq(freq);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
maxFreq/=(mFftSkipPoints+1);
|
||||
maxFreq/=(fftSkipPoints+1);
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
if(maxFreq > freq)
|
||||
maxFreq = freq;
|
||||
|
||||
int minFreq = GetSpectrumLogMinFreq(freq/1000.0);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
minFreq/=(mFftSkipPoints+1);
|
||||
minFreq/=(fftSkipPoints+1);
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
if(minFreq < 1)
|
||||
minFreq = 1;
|
||||
@ -1936,9 +1929,16 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
}
|
||||
#endif
|
||||
|
||||
int range = gPrefs->Read(wxT("/Spectrum/Range"), 80L);
|
||||
int gain = gPrefs->Read(wxT("/Spectrum/Gain"), 20L);
|
||||
|
||||
const SpectrogramSettings &settings = SpectrogramSettings::defaults();
|
||||
const bool &isGrayscale = settings.isGrayscale;
|
||||
const int &range = settings.range;
|
||||
const int &gain = settings.gain;
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
const bool &fftFindNotes = settings.fftFindNotes;
|
||||
const bool &findNotesMinA = settings.findNotesMinA;
|
||||
const bool &numberOfMaxima = settings.numberOfMaxima;
|
||||
const bool &findNotesQuantize = settings.findNotesQuantize;
|
||||
#endif
|
||||
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
|
||||
@ -1959,7 +1959,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
t0, pps, autocorrelation);
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
int fftSkipPoints = gPrefs->Read(wxT("/Spectrum/FFTSkipPoints"), 0L);
|
||||
int fftSkipPoints = SpectrogramSettings::defaults().fftSkipPoints;
|
||||
int fftSkipPoints1 = fftSkipPoints + 1;
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
|
||||
@ -2009,8 +2009,8 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
for (int y = 0; y < mid.height; y++) {
|
||||
float n = (float(y) / mid.height*scale2 - lmin2) * 12;
|
||||
float n2 = (float(y + 1) / mid.height*scale2 - lmin2) * 12;
|
||||
float f = float(minFreq) / (mFftSkipPoints + 1)*powf(2.0f, n / 12.0f + lmin2);
|
||||
float f2 = float(minFreq) / (mFftSkipPoints + 1)*powf(2.0f, n2 / 12.0f + lmin2);
|
||||
float f = float(minFreq) / (fftSkipPoints + 1)*powf(2.0f, n / 12.0f + lmin2);
|
||||
float f2 = float(minFreq) / (fftSkipPoints + 1)*powf(2.0f, n2 / 12.0f + lmin2);
|
||||
n = logf(f / 440) / log2 * 12;
|
||||
n2 = logf(f2 / 440) / log2 * 12;
|
||||
if (floor(n) < floor(n2))
|
||||
@ -2024,13 +2024,13 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
&& gain == clip->mSpecPxCache->gain
|
||||
&& range == clip->mSpecPxCache->range
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
&& mFftYGrid==fftYGridOld
|
||||
&& fftYGrid==fftYGridOld
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
&& mFftFindNotes==fftFindNotesOld
|
||||
&& mFindNotesMinA==findNotesMinAOld
|
||||
&& mNumberOfMaxima==findNotesNOld
|
||||
&& mFindNotesQuantize==findNotesQuantizeOld
|
||||
&& fftFindNotes==fftFindNotesOld
|
||||
&& findNotesMinA==findNotesMinAOld
|
||||
&& numberOfMaxima==findNotesNOld
|
||||
&& findNotesQuantize==findNotesQuantizeOld
|
||||
#endif
|
||||
) {
|
||||
// cache is up to date
|
||||
@ -2042,17 +2042,17 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
clip->mSpecPxCache->gain = gain;
|
||||
clip->mSpecPxCache->range = range;
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
fftFindNotesOld=mFftFindNotes;
|
||||
findNotesMinAOld=mFindNotesMinA;
|
||||
findNotesNOld=mNumberOfMaxima;
|
||||
findNotesQuantizeOld=mFindNotesQuantize;
|
||||
fftFindNotesOld = fftFindNotes;
|
||||
findNotesMinAOld = findNotesMinA;
|
||||
findNotesNOld = numberOfMaxima;
|
||||
findNotesQuantizeOld = findNotesQuantize;
|
||||
#endif
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
const float
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
lmins = logf(float(minFreq) / (mFftSkipPoints + 1)),
|
||||
lmaxs = logf(float(maxFreq) / (mFftSkipPoints + 1)),
|
||||
lmins = logf(float(minFreq) / (fftSkipPoints + 1)),
|
||||
lmaxs = logf(float(maxFreq) / (fftSkipPoints + 1)),
|
||||
#else //!EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
lmins = lmin,
|
||||
lmaxs = lmax,
|
||||
@ -2065,7 +2065,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
float maxima0[128], maxima1[128];
|
||||
const float
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
f2bin = half / (rate / 2.0f / (mFftSkipPoints + 1)),
|
||||
f2bin = half / (rate / 2.0f / (fftSkipPoints + 1)),
|
||||
#else //!EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
f2bin = half / (rate / 2.0f),
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
@ -2092,7 +2092,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
else {
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
int maximas=0;
|
||||
if (!usePxCache && mFftFindNotes) {
|
||||
if (!usePxCache && fftFindNotes) {
|
||||
for (int i = maxTableSize-1; i >= 0; i--)
|
||||
indexes[i]=-1;
|
||||
|
||||
@ -2111,7 +2111,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
int index=indexes[i];
|
||||
if (index >= 0) {
|
||||
float freqi=freq[x0+index];
|
||||
if (freqi < mFindNotesMinA)
|
||||
if (freqi < findNotesMinA)
|
||||
break;
|
||||
|
||||
bool ok=true;
|
||||
@ -2125,7 +2125,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
}
|
||||
if (ok) {
|
||||
maxima[maximas++] = index;
|
||||
if (maximas >= mNumberOfMaxima)
|
||||
if (maximas >= numberOfMaxima)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2138,7 +2138,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
for (int i=0; i < maximas; i++) {
|
||||
int index=maxima[i];
|
||||
float f = float(index)*bin2f;
|
||||
if (mFindNotesQuantize)
|
||||
if (findNotesQuantize)
|
||||
{ f = expf(int(log(f/440)/log2*12-0.5)/12.0f*log2)*440;
|
||||
maxima[i] = f*f2bin;
|
||||
}
|
||||
@ -2172,7 +2172,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
float value;
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
if (mFftFindNotes) {
|
||||
if (fftFindNotes) {
|
||||
if (it < maximas) {
|
||||
float i0=maxima0[it];
|
||||
if (yy >= i0)
|
||||
@ -2182,7 +2182,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
float i1=maxima1[it];
|
||||
if (yy+1 <= i1) {
|
||||
value=sumFreqValues(freq, x0, bin0, bin1);
|
||||
if (value < mFindNotesMinA)
|
||||
if (value < findNotesMinA)
|
||||
value = minColor;
|
||||
else
|
||||
value = (value + gain + range) / (double)range;
|
||||
@ -2253,7 +2253,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
unsigned char rv, gv, bv;
|
||||
const float value =
|
||||
clip->mSpecPxCache->values[x * mid.height + yy];
|
||||
GetColorGradient(value, selected, mIsGrayscale, &rv, &gv, &bv);
|
||||
GetColorGradient(value, selected, isGrayscale, &rv, &gv, &bv);
|
||||
int px = ((mid.height - 1 - yy) * mid.width + x) * 3;
|
||||
data[px++] = rv;
|
||||
data[px++] = gv;
|
||||
@ -2293,10 +2293,10 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &cache,
|
||||
yy2 = yy2_base;
|
||||
|
||||
unsigned char rv, gv, bv;
|
||||
GetColorGradient(value, selected, mIsGrayscale, &rv, &gv, &bv);
|
||||
GetColorGradient(value, selected, isGrayscale, &rv, &gv, &bv);
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
if (mFftYGrid && yGrid[yy]) {
|
||||
if (fftYGrid && yGrid[yy]) {
|
||||
rv /= 1.1f;
|
||||
gv /= 1.1f;
|
||||
bv /= 1.1f;
|
||||
@ -3043,99 +3043,74 @@ void TrackArtist::UpdatePrefs()
|
||||
mdBrange = gPrefs->Read(wxT("/GUI/EnvdBRange"), mdBrange);
|
||||
mShowClipping = gPrefs->Read(wxT("/GUI/ShowClipping"), mShowClipping);
|
||||
|
||||
// mMaxFreq should have the same default as in SpectrumPrefs.
|
||||
mMaxFreq = gPrefs->Read(wxT("/Spectrum/MaxFreq"), 8000L);
|
||||
mMinFreq = gPrefs->Read(wxT("/Spectrum/MinFreq"), -1);
|
||||
mLogMaxFreq = gPrefs->Read(wxT("/SpectrumLog/MaxFreq"), -1);
|
||||
if( mLogMaxFreq < 0 )
|
||||
mLogMaxFreq = mMaxFreq;
|
||||
mLogMinFreq = gPrefs->Read(wxT("/SpectrumLog/MinFreq"), -1);
|
||||
if( mLogMinFreq < 0 )
|
||||
mLogMinFreq = mMinFreq;
|
||||
if (mLogMinFreq < 1)
|
||||
mLogMinFreq = 1;
|
||||
|
||||
mWindowSize = gPrefs->Read(wxT("/Spectrum/FFTSize"), 256);
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
mZeroPaddingFactor = gPrefs->Read(wxT("/Spectrum/ZeroPaddingFactor"), 1);
|
||||
#endif
|
||||
mIsGrayscale = (gPrefs->Read(wxT("/Spectrum/Grayscale"), 0L) != 0);
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
mFftYGrid = (gPrefs->Read(wxT("/Spectrum/FFTYGrid"), 0L) != 0);
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
mFftFindNotes = (gPrefs->Read(wxT("/Spectrum/FFTFindNotes"), 0L) != 0);
|
||||
mFindNotesMinA = gPrefs->Read(wxT("/Spectrum/FindNotesMinA"), -30.0);
|
||||
mNumberOfMaxima = gPrefs->Read(wxT("/Spectrum/FindNotesN"), 5L);
|
||||
mFindNotesQuantize = (gPrefs->Read(wxT("/Spectrum/FindNotesQuantize"), 0L) != 0);
|
||||
#endif //EXPERIMENTAL_FIND_NOTES
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
mFftSkipPoints = gPrefs->Read(wxT("/Spectrum/FFTSkipPoints"), 0L);
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
|
||||
gPrefs->Flush();
|
||||
}
|
||||
|
||||
// Get various preference values
|
||||
int TrackArtist::GetSpectrumMinFreq(int deffreq)
|
||||
{
|
||||
return mMinFreq < 0 ? deffreq : mMinFreq;
|
||||
const int &minFreq = SpectrogramSettings::defaults().minFreq;
|
||||
return minFreq < 0 ? deffreq : minFreq;
|
||||
}
|
||||
|
||||
int TrackArtist::GetSpectrumMaxFreq(int deffreq)
|
||||
{
|
||||
return mMaxFreq < 0 ? deffreq : mMaxFreq;
|
||||
const int &maxFreq = SpectrogramSettings::defaults().maxFreq;
|
||||
return maxFreq < 0 ? deffreq : maxFreq;
|
||||
}
|
||||
|
||||
int TrackArtist::GetSpectrumLogMinFreq(int deffreq)
|
||||
{
|
||||
return mLogMinFreq < 0 ? deffreq : mLogMinFreq;
|
||||
const int &logMinFreq = SpectrogramSettings::defaults().logMinFreq;
|
||||
return logMinFreq < 0 ? deffreq : logMinFreq;
|
||||
}
|
||||
|
||||
int TrackArtist::GetSpectrumLogMaxFreq(int deffreq)
|
||||
{
|
||||
return mLogMaxFreq < 0 ? deffreq : mLogMaxFreq;
|
||||
const int &logMaxFreq = SpectrogramSettings::defaults().logMaxFreq;
|
||||
return logMaxFreq < 0 ? deffreq : logMaxFreq;
|
||||
}
|
||||
|
||||
int TrackArtist::GetSpectrumWindowSize(bool includeZeroPadding)
|
||||
{
|
||||
includeZeroPadding;
|
||||
const int &windowSize = SpectrogramSettings::defaults().windowSize;
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
if (includeZeroPadding)
|
||||
return mWindowSize * mZeroPaddingFactor;
|
||||
if (includeZeroPadding) {
|
||||
const int &zeroPaddingFactor = SpectrogramSettings::defaults().zeroPaddingFactor;
|
||||
return windowSize * zeroPaddingFactor;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return mWindowSize;
|
||||
return windowSize;
|
||||
}
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
int TrackArtist::GetSpectrumFftSkipPoints()
|
||||
{
|
||||
return mFftSkipPoints;
|
||||
return SpectrogramSettings::defaults().fftSkipPoints;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set various preference values
|
||||
void TrackArtist::SetSpectrumMinFreq(int freq)
|
||||
{
|
||||
mMinFreq = freq;
|
||||
SpectrogramSettings::defaults().minFreq = freq;
|
||||
}
|
||||
|
||||
void TrackArtist::SetSpectrumMaxFreq(int freq)
|
||||
{
|
||||
mMaxFreq = freq;
|
||||
SpectrogramSettings::defaults().maxFreq = freq;
|
||||
}
|
||||
|
||||
void TrackArtist::SetSpectrumLogMinFreq(int freq)
|
||||
{
|
||||
mLogMinFreq = freq;
|
||||
SpectrogramSettings::defaults().logMinFreq = freq;
|
||||
}
|
||||
|
||||
void TrackArtist::SetSpectrumLogMaxFreq(int freq)
|
||||
{
|
||||
mLogMaxFreq = freq;
|
||||
SpectrogramSettings::defaults().logMaxFreq = freq;
|
||||
}
|
||||
|
||||
// Draws the sync-lock bitmap, tiled; always draws stationary relative to the DC
|
||||
|
@ -173,32 +173,8 @@ class AUDACITY_DLL_API TrackArtist {
|
||||
// Preference values
|
||||
float mdBrange; // "/GUI/EnvdBRange"
|
||||
long mShowClipping; // "/GUI/ShowClipping"
|
||||
int mLogMaxFreq; // "/SpectrumLog/MaxFreq"
|
||||
int mLogMinFreq; // "/SpectrumLog/MinFreq"
|
||||
int mMaxFreq; // "/Spectrum/MaxFreq"
|
||||
int mMinFreq; // "/Spectrum/MinFreq"
|
||||
int mWindowSize; // "/Spectrum/FFTSize"
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
int mZeroPaddingFactor; // "/Spectrum/ZeroPaddingFactor"
|
||||
#endif
|
||||
bool mIsGrayscale; // "/Spectrum/Grayscale"
|
||||
bool mbShowTrackNameInWaveform; // "/GUI/ShowTrackNameInWaveform"
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
int mFftSkipPoints; // "/Spectrum/FFTSkipPoints"
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
bool mFftYGrid; // "/Spectrum/FFTYGrid"
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
bool mFftFindNotes; // "/Spectrum/FFTFindNotes"
|
||||
float mFindNotesMinA; // "/Spectrum/FindNotesMinA"
|
||||
int mNumberOfMaxima; // "/Spectrum/FindNotesN"
|
||||
bool mFindNotesQuantize; // "/Spectrum/FindNotesQuantize")
|
||||
#endif //EXPERIMENTAL_FIND_NOTES
|
||||
|
||||
int mInsetLeft;
|
||||
int mInsetTop;
|
||||
int mInsetRight;
|
||||
|
@ -214,6 +214,8 @@ is time to refresh some aspect of the screen.
|
||||
|
||||
#include "ondemand/ODManager.h"
|
||||
|
||||
#include "prefs/SpectrumPrefs.h"
|
||||
|
||||
#include "toolbars/ControlToolBar.h"
|
||||
#include "toolbars/ToolManager.h"
|
||||
#include "toolbars/ToolsToolBar.h"
|
||||
@ -3045,8 +3047,7 @@ void TrackPanel::StartSnappingFreqSelection (WaveTrack *pTrack)
|
||||
|
||||
while(windowSize > effectiveLength)
|
||||
windowSize >>= 1;
|
||||
int windowType;
|
||||
gPrefs->Read(wxT("/Spectrum/WindowType"), &windowType, 3);
|
||||
const int windowType = SpectrogramSettings::defaults().windowType;
|
||||
mFrequencySnapper->Calculate(
|
||||
SpectrumAnalyst::Spectrum, windowType, windowSize, rate,
|
||||
&frequencySnappingData[0], length);
|
||||
@ -4722,7 +4723,7 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
||||
// Always spectrogram, never pitch view, pass true
|
||||
windowSize = mTrackArtist->GetSpectrumWindowSize(true);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
fftSkipPoints = mTrackArtist->GetSpectrumFftSkipPoints();
|
||||
fftSkipPoints = SpectrogramSettings::defaults().fftSkipPoints;
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
binSize = rate / windowSize;
|
||||
minBins = wxMin(10, windowSize/2); //minimum 10 freq bins, unless there are less
|
||||
@ -4739,7 +4740,7 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
||||
// Always spectrogram, never pitch view, pass true
|
||||
windowSize = mTrackArtist->GetSpectrumWindowSize(true);
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
fftSkipPoints = mTrackArtist->GetSpectrumFftSkipPoints();
|
||||
fftSkipPoints = SpectrogramSettings::defaults().fftSkipPoints;
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
binSize = rate / windowSize;
|
||||
minBins = wxMin(10, windowSize/2); //minimum 10 freq bins, unless there are less
|
||||
|
@ -39,6 +39,8 @@ drawing). Cache's the Spectrogram frequency samples.
|
||||
#include "Resample.h"
|
||||
#include "Project.h"
|
||||
|
||||
#include "prefs/SpectrumPrefs.h"
|
||||
|
||||
#include <wx/listimpl.cpp>
|
||||
WX_DEFINE_LIST(WaveClipList);
|
||||
|
||||
@ -904,16 +906,21 @@ bool WaveClip::GetSpectrogram(WaveTrackCache &waveTrackCache,
|
||||
double t0, double pixelsPerSecond,
|
||||
bool autocorrelation)
|
||||
{
|
||||
int frequencyGain = gPrefs->Read(wxT("/Spectrum/FrequencyGain"), 0L);
|
||||
int windowType;
|
||||
int windowSize = gPrefs->Read(wxT("/Spectrum/FFTSize"), 256);
|
||||
const SpectrogramSettings &settings = SpectrogramSettings::defaults();
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
int fftSkipPoints = gPrefs->Read(wxT("/Spectrum/FFTSkipPoints"), 0L);
|
||||
int fftSkipPoints = settings.fftSkipPoints;
|
||||
int fftSkipPoints1 = fftSkipPoints + 1;
|
||||
#endif //EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
const int zeroPaddingFactor =
|
||||
autocorrelation ? 1 : gPrefs->Read(wxT("/Spectrum/ZeroPaddingFactor"), 1);
|
||||
gPrefs->Read(wxT("/Spectrum/WindowType"), &windowType, 3);
|
||||
|
||||
const int &frequencyGain = settings.frequencyGain;
|
||||
const int &windowSize = settings.windowSize;
|
||||
const int &windowType = settings.windowType;
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
const int &zeroPaddingFactor = autocorrelation ? 1 : settings.zeroPaddingFactor;
|
||||
#else
|
||||
const int zeroPaddingFactor = 1;
|
||||
#endif
|
||||
|
||||
// FFT length may be longer than the window of samples that affect results
|
||||
// because of zero padding done for increased frequency resolution
|
||||
|
@ -15,6 +15,7 @@
|
||||
*//*******************************************************************/
|
||||
|
||||
#include "../Audacity.h"
|
||||
#include "SpectrumPrefs.h"
|
||||
|
||||
#include <wx/defs.h>
|
||||
#include <wx/intl.h>
|
||||
@ -23,7 +24,6 @@
|
||||
#include "../Prefs.h"
|
||||
#include "../Project.h"
|
||||
#include "../ShuttleGui.h"
|
||||
#include "SpectrumPrefs.h"
|
||||
#include "../FFT.h"
|
||||
|
||||
SpectrumPrefs::SpectrumPrefs(wxWindow * parent)
|
||||
@ -352,10 +352,12 @@ bool SpectrumPrefs::Apply()
|
||||
ShuttleGui S(this, eIsSavingToPrefs);
|
||||
PopulateOrExchange(S);
|
||||
|
||||
SpectrogramSettings::defaults().UpdatePrefs();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SpectrumPrefs::OnWindowSize(wxCommandEvent &event)
|
||||
void SpectrumPrefs::OnWindowSize(wxCommandEvent &)
|
||||
{
|
||||
wxChoice *const pWindowSizeControl =
|
||||
static_cast<wxChoice*>(wxWindow::FindWindowById(ID_WINDOW_SIZE, this));
|
||||
@ -366,3 +368,61 @@ void SpectrumPrefs::OnWindowSize(wxCommandEvent &event)
|
||||
BEGIN_EVENT_TABLE(SpectrumPrefs, PrefsPanel)
|
||||
EVT_CHOICE(ID_WINDOW_SIZE, SpectrumPrefs::OnWindowSize)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
SpectrogramSettings::SpectrogramSettings()
|
||||
{
|
||||
UpdatePrefs();
|
||||
}
|
||||
|
||||
SpectrogramSettings& SpectrogramSettings::defaults()
|
||||
{
|
||||
static SpectrogramSettings instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void SpectrogramSettings::UpdatePrefs()
|
||||
{
|
||||
minFreq = gPrefs->Read(wxT("/Spectrum/MinFreq"), -1L);
|
||||
maxFreq = gPrefs->Read(wxT("/Spectrum/MaxFreq"), 8000L);
|
||||
|
||||
// These preferences are not written anywhere in the program as of now,
|
||||
// but I keep this legacy here. Who knows, someone might edit prefs files
|
||||
// directly. PRL
|
||||
logMaxFreq = gPrefs->Read(wxT("/SpectrumLog/MaxFreq"), -1);
|
||||
if (logMaxFreq < 0)
|
||||
logMaxFreq = maxFreq;
|
||||
logMinFreq = gPrefs->Read(wxT("/SpectrumLog/MinFreq"), -1);
|
||||
if (logMinFreq < 0)
|
||||
logMinFreq = minFreq;
|
||||
if (logMinFreq < 1)
|
||||
logMinFreq = 1;
|
||||
|
||||
range = gPrefs->Read(wxT("/Spectrum/Range"), 80L);
|
||||
gain = gPrefs->Read(wxT("/Spectrum/Gain"), 20L);
|
||||
frequencyGain = gPrefs->Read(wxT("/Spectrum/FrequencyGain"), 0L);
|
||||
|
||||
windowSize = gPrefs->Read(wxT("/Spectrum/FFTSize"), 256);
|
||||
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
zeroPaddingFactor = gPrefs->Read(wxT("/Spectrum/ZeroPaddingFactor"), 1);
|
||||
#endif
|
||||
|
||||
gPrefs->Read(wxT("/Spectrum/WindowType"), &windowType, 3);
|
||||
|
||||
isGrayscale = (gPrefs->Read(wxT("/Spectrum/Grayscale"), 0L) != 0);
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
fftSkipPoints = gPrefs->Read(wxT("/Spectrum/FFTSkipPoints"), 0L);
|
||||
#endif
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
fftYGrid = (gPrefs->Read(wxT("/Spectrum/FFTYGrid"), 0L) != 0);
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
fftFindNotes = (gPrefs->Read(wxT("/Spectrum/FFTFindNotes"), 0L) != 0);
|
||||
findNotesMinA = gPrefs->Read(wxT("/Spectrum/FindNotesMinA"), -30.0);
|
||||
numberOfMaxima = gPrefs->Read(wxT("/Spectrum/FindNotesN"), 5L);
|
||||
findNotesQuantize = (gPrefs->Read(wxT("/Spectrum/FindNotesQuantize"), 0L) != 0);
|
||||
#endif //EXPERIMENTAL_FIND_NOTES
|
||||
}
|
||||
|
@ -71,4 +71,46 @@ class SpectrumPrefs:public PrefsPanel
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
struct SpectrogramSettings
|
||||
{
|
||||
static SpectrogramSettings &defaults();
|
||||
SpectrogramSettings();
|
||||
|
||||
void UpdatePrefs();
|
||||
|
||||
int minFreq;
|
||||
int maxFreq;
|
||||
|
||||
int logMinFreq;
|
||||
int logMaxFreq;
|
||||
|
||||
int range;
|
||||
int gain;
|
||||
int frequencyGain;
|
||||
|
||||
int windowType;
|
||||
int windowSize;
|
||||
#ifdef EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
|
||||
int zeroPaddingFactor;
|
||||
#endif
|
||||
|
||||
bool isGrayscale;
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_SKIP_POINTS
|
||||
int fftSkipPoints;
|
||||
#endif
|
||||
|
||||
#ifdef EXPERIMENTAL_FFT_Y_GRID
|
||||
bool fftYGrid;
|
||||
#endif //EXPERIMENTAL_FFT_Y_GRID
|
||||
|
||||
#ifdef EXPERIMENTAL_FIND_NOTES
|
||||
bool fftFindNotes;
|
||||
bool findNotesMinA;
|
||||
bool numberOfMaxima;
|
||||
bool findNotesQuantize;
|
||||
#endif //EXPERIMENTAL_FIND_NOTES
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user