1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

New library for math...

... note the swap of target_link_libraries lines in src/CMakeLists.txt,
needed to build at least on macOS, becuase FFT.h must be looked up first in
lib-math, not in lib-src/twolame

Also making a dependency cycle of SampleFormat and Dither!  But we will tolerate
that within one small library.
This commit is contained in:
Paul Licameli 2021-07-03 14:54:29 -04:00
parent 749a0575b6
commit f52dfd3ac3
58 changed files with 131 additions and 133 deletions

View File

@ -58,33 +58,6 @@
// until proper public headers are created for the stuff in here.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Supported sample formats
// ----------------------------------------------------------------------------
enum sampleFormat : unsigned
{
//! The increasing sequence of these enum values must correspond to the increasing data type width
//! These values persist in saved project files, so must not be changed in later program versions
int16Sample = 0x00020001,
int24Sample = 0x00040001,
floatSample = 0x0004000F,
//! Two synonyms for previous values that might change if more values were added
narrowestSampleFormat = int16Sample,
widestSampleFormat = floatSample,
};
// ----------------------------------------------------------------------------
// Provide the number of bytes a specific sample will take
// ----------------------------------------------------------------------------
#define SAMPLE_SIZE(SampleFormat) (SampleFormat >> 16)
// ----------------------------------------------------------------------------
// Generic pointer to sample data
// ----------------------------------------------------------------------------
typedef char *samplePtr;
typedef const char *constSamplePtr;
// ----------------------------------------------------------------------------
// The type for plugin IDs
// ----------------------------------------------------------------------------

View File

@ -11,6 +11,7 @@ set( LIBRARIES
lib-basic-ui
lib-exceptions
lib-preferences
lib-math
)
if ( ${_OPT}has_networking )

View File

@ -0,0 +1,31 @@
#[[
A library of mathematical utilities and manipulation of samples
]]#
set( SOURCES
Dither.cpp
Dither.h
FFT.cpp
FFT.h
InterpolateAudio.cpp
InterpolateAudio.h
Matrix.cpp
Matrix.h
RealFFTf.cpp
RealFFTf.h
SampleCount.cpp
SampleCount.h
SampleFormat.cpp
SampleFormat.h
Spectrum.cpp
Spectrum.h
float_cast.h
)
set( LIBRARIES
lib-preferences-interface
PRIVATE
wxBase
)
audacity_library( lib-math "${SOURCES}" "${LIBRARIES}"
"" ""
)

View File

@ -10,7 +10,7 @@
#ifndef __AUDACITY_DITHER_H__
#define __AUDACITY_DITHER_H__
#include "audacity/Types.h" // for samplePtr
#include "SampleFormat.h"
template< typename Enum > class EnumSetting;
@ -19,13 +19,14 @@ template< typename Enum > class EnumSetting;
enum DitherType : unsigned {
none = 0, rectangle = 1, triangle = 2, shaped = 3 };
class Dither
class MATH_API Dither
{
public:
static DitherType FastDitherChoice();
static DitherType BestDitherChoice();
static AUDACITY_DLL_API EnumSetting< DitherType > FastSetting, BestSetting;
static EnumSetting< DitherType > FastSetting;
static EnumSetting< DitherType > BestSetting;
/// Default constructor
Dither();

View File

@ -39,7 +39,6 @@
* 9: Gaussian(a=4.5)
*/
#include "FFT.h"
#include "Internat.h"

View File

@ -63,6 +63,7 @@ class TranslatableString;
* input array, and that NumSamples must be a power of two.
*/
MATH_API
void PowerSpectrum(size_t NumSamples, const float *In, float *Out);
/*
@ -72,7 +73,7 @@ void PowerSpectrum(size_t NumSamples, const float *In, float *Out);
* NumSamples must be a power of two.
*/
AUDACITY_DLL_API
MATH_API
void RealFFT(size_t NumSamples,
const float *RealIn, float *RealOut, float *ImagOut);
@ -81,7 +82,7 @@ void RealFFT(size_t NumSamples,
* so the output is purely real. NumSamples must be a power of
* two.
*/
AUDACITY_DLL_API
MATH_API
void InverseRealFFT(size_t NumSamples,
const float *RealIn, const float *ImagIn, float *RealOut);
@ -91,7 +92,7 @@ void InverseRealFFT(size_t NumSamples,
* inverse transform as well.
*/
AUDACITY_DLL_API
MATH_API
void FFT(size_t NumSamples,
bool InverseTransform,
const float *RealIn, const float *ImagIn, float *RealOut, float *ImagOut);
@ -120,7 +121,7 @@ enum eWindowFunctions
eWinFuncCount
};
AUDACITY_DLL_API
MATH_API
void WindowFunc(int whichFunction, size_t NumSamples, float *data);
/*
@ -129,7 +130,7 @@ void WindowFunc(int whichFunction, size_t NumSamples, float *data);
* otherwise about (NumSamples - 1) / 2
* All functions have 0 in data[0] except Rectangular, Hamming and Gaussians
*/
AUDACITY_DLL_API
MATH_API
void NewWindowFunc(int whichFunction, size_t NumSamples, bool extraSample, float *data);
/*
@ -139,21 +140,21 @@ void NewWindowFunc(int whichFunction, size_t NumSamples, bool extraSample, float
* otherwise about (NumSamples - 1) / 2
* All functions have 0 in data[0] except Rectangular, Hamming and Gaussians
*/
AUDACITY_DLL_API
MATH_API
void DerivativeOfWindowFunc(int whichFunction, size_t NumSamples, bool extraSample, float *data);
/*
* Returns the name of the windowing function (for UI display)
*/
AUDACITY_DLL_API const TranslatableString WindowFuncName(int whichFunction);
MATH_API const TranslatableString WindowFuncName(int whichFunction);
/*
* Returns the number of windowing functions supported
*/
AUDACITY_DLL_API int NumWindowFuncs();
MATH_API int NumWindowFuncs();
void DeinitFFT();
MATH_API void DeinitFFT();
#endif

View File

@ -25,7 +25,6 @@
#ifndef __AUDACITY_INTERPOLATE_AUDIO__
#define __AUDACITY_INTERPOLATE_AUDIO__
#include <cstddef>
// See top of file for a description of the algorithm. Interpolates
@ -36,7 +35,7 @@
// side (6x the number of bad samples on either side is great). However,
// it will work with less data, and with the bad samples on one end or
// the other.
void AUDACITY_DLL_API InterpolateAudio(float *buffer, size_t len,
void MATH_API InterpolateAudio(float *buffer, size_t len,
size_t firstBad, size_t numBad);
#endif // __AUDACITY_INTERPOLATE_AUDIO__

View File

@ -36,11 +36,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "RealFFTf.h"
#include <vector>
#include <stdlib.h>
#include <stdio.h>

View File

@ -1,10 +1,6 @@
#ifndef __realfftf_h
#define __realfftf_h
#include "MemoryX.h"
using fft_type = float;
@ -17,7 +13,7 @@ struct FFTParam {
#endif
};
struct AUDACITY_DLL_API FFTDeleter{
struct MATH_API FFTDeleter{
void operator () (FFTParam *p) const;
};
@ -25,11 +21,11 @@ using HFFT = std::unique_ptr<
FFTParam, FFTDeleter
>;
AUDACITY_DLL_API HFFT GetFFT(size_t);
AUDACITY_DLL_API void RealFFTf(fft_type *, const FFTParam *);
AUDACITY_DLL_API void InverseRealFFTf(fft_type *, const FFTParam *);
AUDACITY_DLL_API void ReorderToTime(const FFTParam *hFFT, const fft_type *buffer, fft_type *TimeOut);
AUDACITY_DLL_API void ReorderToFreq(const FFTParam *hFFT, const fft_type *buffer,
MATH_API HFFT GetFFT(size_t);
MATH_API void RealFFTf(fft_type *, const FFTParam *);
MATH_API void InverseRealFFTf(fft_type *, const FFTParam *);
MATH_API void ReorderToTime(const FFTParam *hFFT, const fft_type *buffer, fft_type *TimeOut);
MATH_API void ReorderToFreq(const FFTParam *hFFT, const fft_type *buffer,
fft_type *RealOut, fft_type *ImagOut);
#endif

View File

@ -14,7 +14,7 @@
//! Positions or offsets within audio files need a wide type
/*! This type disallows implicit interconversions with narrower types */
class AUDACITY_DLL_API sampleCount
class MATH_API sampleCount
{
public:
using type = long long;
@ -128,7 +128,7 @@ inline sampleCount operator % (sampleCount a, sampleCount b)
// hiding the casts
// ----------------------------------------------------------------------------
AUDACITY_DLL_API
MATH_API
size_t limitSampleBufferSize( size_t bufferSize, sampleCount limit );
#endif

View File

@ -35,6 +35,7 @@
*//*******************************************************************/
#include "SampleFormat.h"
#include "Dither.h" // CYCLE
#include <wx/intl.h>
#include <math.h>

View File

@ -11,32 +11,43 @@
#ifndef __AUDACITY_SAMPLE_FORMAT__
#define __AUDACITY_SAMPLE_FORMAT__
#include "MemoryX.h"
#include <wx/defs.h>
#include "audacity/Types.h"
#include "Dither.h"
#include <cstdlib>
//
// Definitions / Meta-Information
//
enum DitherType : unsigned;
//! These global variables are assigned at application startup or after change of preferences.
extern AUDACITY_DLL_API DitherType gLowQualityDither, gHighQualityDither;
extern MATH_API DitherType gLowQualityDither, gHighQualityDither;
#if 0
// Moved to audacity/types.h
typedef enum {
// ----------------------------------------------------------------------------
// Supported sample formats
// ----------------------------------------------------------------------------
enum sampleFormat : unsigned
{
//! The increasing sequence of these enum values must correspond to the increasing data type width
//! These values persist in saved project files, so must not be changed in later program versions
int16Sample = 0x00020001,
int24Sample = 0x00040001,
floatSample = 0x0004000F
} sampleFormat;
floatSample = 0x0004000F,
/** \brief Return the size (in memory) of one sample (bytes) */
#define SAMPLE_SIZE(SampleFormat) ( size_t{ (SampleFormat) >> 16 } )
#endif
//! Two synonyms for previous values that might change if more values were added
narrowestSampleFormat = int16Sample,
widestSampleFormat = floatSample,
};
// ----------------------------------------------------------------------------
// Provide the number of bytes a specific sample will take
// ----------------------------------------------------------------------------
#define SAMPLE_SIZE(SampleFormat) (SampleFormat >> 16)
// ----------------------------------------------------------------------------
// Generic pointer to sample data
// ----------------------------------------------------------------------------
using samplePtr = char *;
using constSamplePtr = const char *;
// Used to determine how to fill in empty areas of audio.
typedef enum {
@ -48,7 +59,8 @@ typedef enum {
#define SAMPLE_SIZE_DISK(SampleFormat) (((SampleFormat) == int24Sample) ? \
size_t{ 3 } : SAMPLE_SIZE(SampleFormat) )
AUDACITY_DLL_API TranslatableString GetSampleFormatStr(sampleFormat format);
class TranslatableString;
MATH_API TranslatableString GetSampleFormatStr(sampleFormat format);
//
// Allocating/Freeing Samples
@ -128,7 +140,7 @@ private:
// Copying, Converting and Clearing Samples
//
AUDACITY_DLL_API
MATH_API
//! Copy samples from any format into the widest format, which is 32 bit float, with no dithering
/*!
@param src address of source samples
@ -141,7 +153,7 @@ AUDACITY_DLL_API
void SamplesToFloats(constSamplePtr src, sampleFormat srcFormat,
float *dst, size_t len, size_t srcStride = 1, size_t dstStride = 1);
AUDACITY_DLL_API
MATH_API
//! Copy samples from any format to any other format; apply dithering only if narrowing the format
/*!
@copydetails SamplesToFloats()
@ -153,11 +165,11 @@ void CopySamples(constSamplePtr src, sampleFormat srcFormat,
DitherType ditherType = gHighQualityDither, //!< default is loaded from a global variable
unsigned int srcStride=1, unsigned int dstStride=1);
AUDACITY_DLL_API
MATH_API
void ClearSamples(samplePtr buffer, sampleFormat format,
size_t start, size_t len);
AUDACITY_DLL_API
MATH_API
void ReverseSamples(samplePtr buffer, sampleFormat format,
int start, int len);
@ -166,7 +178,7 @@ void ReverseSamples(samplePtr buffer, sampleFormat format,
// are set in preferences.
//
AUDACITY_DLL_API
MATH_API
void InitDitherers();
// These are so commonly done for processing samples in floating point form in memory,

View File

@ -21,7 +21,7 @@
calculates windowSize/2 frequency samples
*/
AUDACITY_DLL_API
MATH_API
bool ComputeSpectrum(const float * data, size_t width, size_t windowSize,
double rate, float *out, bool autocorrelation,
int windowFunc = eWinFuncHann);

View File

@ -35,8 +35,6 @@
** long int lrint (double x) ;
*/
/* The presence of the required functions are detected during the configure
** process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in
** the config.h file.

View File

@ -129,14 +129,10 @@ list( APPEND SOURCES
DeviceManager.h
Diags.cpp
Diags.h
Dither.cpp
Dither.h
Envelope.cpp
Envelope.h
EnvelopeEditor.cpp
EnvelopeEditor.h
FFT.cpp
FFT.h
FFmpeg.cpp
FFmpeg.h
FileException.cpp
@ -157,8 +153,6 @@ list( APPEND SOURCES
HitTestResult.h
ImageManipulation.cpp
ImageManipulation.h
InterpolateAudio.cpp
InterpolateAudio.h
KeyboardCapture.cpp
KeyboardCapture.h
LabelDialog.cpp
@ -175,8 +169,6 @@ list( APPEND SOURCES
LyricsWindow.cpp
LyricsWindow.h
MacroMagic.h
Matrix.cpp
Matrix.h
Menus.cpp
Menus.h
Mix.cpp
@ -232,10 +224,6 @@ list( APPEND SOURCES
ProjectWindow.h
ProjectWindowBase.cpp
ProjectWindowBase.h
RealFFTf.cpp
RealFFTf.h
RealFFTf48x.cpp
RealFFTf48x.h
RefreshCode.h
Registrar.h
Registry.cpp
@ -246,10 +234,6 @@ list( APPEND SOURCES
RingBuffer.h
SampleBlock.cpp
SampleBlock.h
SampleCount.cpp
SampleCount.h
SampleFormat.cpp
SampleFormat.h
Screenshot.cpp
Screenshot.h
SelectUtilities.cpp
@ -272,8 +256,6 @@ list( APPEND SOURCES
Snap.h
SoundActivatedRecord.cpp
SoundActivatedRecord.h
Spectrum.cpp
Spectrum.h
SpectrumAnalyst.cpp
SpectrumAnalyst.h
SplashDialog.cpp
@ -334,7 +316,6 @@ list( APPEND SOURCES
WrappedType.h
ZoomInfo.cpp
ZoomInfo.h
float_cast.h
wxFileNameWrapper.h
# Commands
@ -1354,8 +1335,8 @@ target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} )
target_compile_options( ${TARGET} PRIVATE ${OPTIONS} )
target_include_directories( ${TARGET} PRIVATE ${INCLUDES} )
target_link_options( ${TARGET} PRIVATE ${LDFLAGS} )
target_link_libraries( ${TARGET} ${LIBRARIES} )
target_link_libraries( ${TARGET} PUBLIC ${AUDACITY_LIBRARIES} )
target_link_libraries( ${TARGET} ${LIBRARIES} )
if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" AND NOT CCACHE_PROGRAM )
if( ${_OPT}use_pch )

View File

@ -153,6 +153,7 @@ extern "C" {
#include "Prefs.h"
#include "Identifier.h"
#include "SampleFormat.h"
class wxDynamicLibrary;

View File

@ -13,8 +13,8 @@
#include "audacity/Types.h"
#include "Identifier.h"
#include "SampleFormat.h"
//#include <mutex>
#include <memory>

View File

@ -20,6 +20,7 @@
#ifndef __AUDACITY_MIX__
#define __AUDACITY_MIX__
#include "audacity/Types.h"
#include "SampleFormat.h"
#include <vector>

View File

@ -26,6 +26,7 @@
#include "RingBuffer.h"
#include "Dither.h"
RingBuffer::RingBuffer(sampleFormat format, size_t size)
: mFormat{ format }

View File

@ -9,7 +9,7 @@ SampleBlock.h
#ifndef __AUDACITY_SAMPLE_BLOCK__
#define __AUDACITY_SAMPLE_BLOCK__
#include "audacity/Types.h"
#include "SampleFormat.h"
#include <functional>
#include <memory>

View File

@ -12,7 +12,7 @@
#define __AUDACITY_DEMO_COMMAND__
#include "AudacityCommand.h"
#include "../SampleFormat.h"
#include "SampleFormat.h"
class ShuttleGui;

View File

@ -38,7 +38,7 @@ the pitch without changing the tempo.
#include "../PitchName.h"
#include "../Shuttle.h"
#include "../ShuttleGui.h"
#include "../Spectrum.h"
#include "Spectrum.h"
#include "../WaveTrack.h"
#include "../widgets/valnum.h"
#include "TimeWarper.h"

View File

@ -42,7 +42,7 @@
#include "../Shuttle.h"
#include "../ShuttleGui.h"
#include "../Theme.h"
#include "../float_cast.h"
#include "float_cast.h"
#include "../widgets/Ruler.h"
#include "../WaveTrack.h"

View File

@ -27,8 +27,9 @@ class wxWindow;
#include "ConfigInterface.h"
#include "EffectInterface.h"
#include "PluginInterface.h"
#include "../SampleCount.h"
#include "SampleCount.h"
#include "../SelectedRegion.h"
#include "../Track.h"

View File

@ -94,7 +94,7 @@
#include "../FileNames.h"
#include "../Envelope.h"
#include "../EnvelopeEditor.h"
#include "../FFT.h"
#include "FFT.h"
#include "Prefs.h"
#include "../Project.h"
#include "../Theme.h"
@ -106,7 +106,7 @@
#include "../widgets/AudacityTextEntryDialog.h"
#include "../xml/XMLFileReader.h"
#include "../AllThemeResources.h"
#include "../float_cast.h"
#include "float_cast.h"
#if wxUSE_ACCESSIBILITY
#include "../widgets/WindowAccessible.h"

View File

@ -18,7 +18,7 @@
#include <wx/setup.h> // for wxUSE_* macros
#include "Effect.h"
#include "../RealFFTf.h"
#include "RealFFTf.h"
// Flags to specialise the UI
const int kEqOptionGraphic =1;

View File

@ -46,7 +46,7 @@
#include "../ShuttleGui.h"
#include "../widgets/HelpSystem.h"
#include "Prefs.h"
#include "../RealFFTf.h"
#include "RealFFTf.h"
#include "../WaveTrack.h"
#include "../widgets/AudacityMessageBox.h"

View File

@ -28,7 +28,7 @@
#include "../Shuttle.h"
#include "../ShuttleGui.h"
#include "../FFT.h"
#include "FFT.h"
#include "../widgets/valnum.h"
#include "../widgets/AudacityMessageBox.h"
#include "Prefs.h"

View File

@ -28,7 +28,7 @@ the audio, rather than actually finding the clicks.
#include <wx/intl.h>
#include "../InterpolateAudio.h"
#include "InterpolateAudio.h"
#include "../WaveTrack.h"
#include "../widgets/AudacityMessageBox.h"

View File

@ -27,7 +27,7 @@
#include "VSTEffect.h"
#include "../../ModuleManager.h"
#include "../../SampleCount.h"
#include "SampleCount.h"
#include "../../widgets/ProgressDialog.h"

View File

@ -16,7 +16,7 @@
#include "ModuleInterface.h"
#include "PluginInterface.h"
#include "../../SampleFormat.h"
#include "SampleFormat.h"
#include "../../xml/XMLTagHandler.h"
class wxSizerItem;

View File

@ -19,7 +19,7 @@
#if USE_AUDIO_UNITS
#include "AudioUnitEffect.h"
#include "../../ModuleManager.h"
#include "../../SampleCount.h"
#include "SampleCount.h"
#include <wx/defs.h>
#include <wx/base64.h>

View File

@ -23,7 +23,7 @@ class NumericTextCtrl;
#include "PluginInterface.h"
#include "ladspa.h"
#include "../../SampleFormat.h"
#include "SampleFormat.h"
#define LADSPAEFFECTS_VERSION wxT("1.0.0.0")
/* i18n-hint: abbreviates "Linux Audio Developer's Simple Plugin API"

View File

@ -38,7 +38,7 @@ class wxArrayString;
#include <suil/suil.h>
#include "../../ShuttleGui.h"
#include "../../SampleFormat.h"
#include "SampleFormat.h"
#include "LoadLV2.h"
#include "NativeWindow.h"

View File

@ -15,7 +15,7 @@
#include <vector>
#include <wx/filename.h> // member variable
#include "Identifier.h"
#include "../SampleFormat.h"
#include "SampleFormat.h"
#include "../widgets/wxPanelWrapper.h" // to inherit
#include "../FileNames.h" // for FileTypes

View File

@ -35,7 +35,7 @@
#include "../ShuttleGui.h"
#include "../Tags.h"
#include "../Track.h"
#include "../float_cast.h"
#include "float_cast.h"
#include "../widgets/FileHistory.h"
#include "../widgets/AudacityMessageBox.h"
#include "../widgets/ProgressDialog.h"

View File

@ -29,7 +29,7 @@ and libvorbis examples, Monty <monty@xiph.org>
#include "FLAC++/encoder.h"
#include "../float_cast.h"
#include "float_cast.h"
#include "../ProjectSettings.h"
#include "../Mix.h"
#include "Prefs.h"

View File

@ -80,7 +80,7 @@
#include <wx/window.h>
#include "../FileNames.h"
#include "../float_cast.h"
#include "float_cast.h"
#include "../Mix.h"
#include "Prefs.h"
#include "../ProjectSettings.h"

View File

@ -24,6 +24,7 @@
#include "sndfile.h"
#include "Dither.h"
#include "../FileFormats.h"
#include "../Mix.h"
#include "Prefs.h"

View File

@ -51,6 +51,7 @@ but little else.
#include "audacity/Types.h"
#include "Identifier.h"
#include "Internat.h"
#include "SampleFormat.h"
#include "wxArrayStringEx.h"
class AudacityProject;

View File

@ -22,7 +22,7 @@ measurements in subbands or in the entire signal band.
#include <cstdlib>
#include <wx/defs.h>
#include "../FFT.h"
#include "FFT.h"
SpecPowerCalculation::SpecPowerCalculation(size_t sigLen)
: mSigLen(sigLen)

View File

@ -12,7 +12,7 @@
#define __AUDACITY_SPECPOWERMETER_H_
#include <cstddef>
#include "../SampleFormat.h"
#include "SampleFormat.h"
class SpecPowerCalculation
{

View File

@ -24,7 +24,7 @@
#include <wx/textctrl.h>
#include "../AudioIOBase.h"
#include "../Dither.h"
#include "Dither.h"
#include "Prefs.h"
#include "../Resample.h"
#include "../ShuttleGui.h"

View File

@ -13,6 +13,7 @@
#include <audacity/Types.h>
#include "Prefs.h" // for EnumSetting
#include "SampleFormat.h"
class IntSetting;

View File

@ -21,7 +21,7 @@ Paul Licameli
#include <algorithm>
#include "../FFT.h"
#include "FFT.h"
#include "Prefs.h"
#include <cmath>

View File

@ -12,8 +12,8 @@ Paul Licameli
#define __AUDACITY_SPECTROGRAM_SETTINGS__
#include "Prefs.h"
#include "../SampleFormat.h"
#include "../RealFFTf.h"
#include "SampleFormat.h"
#include "RealFFTf.h"
#undef SPECTRAL_SELECTION_GLOBAL_SWITCH

View File

@ -23,7 +23,7 @@
#include <wx/checkbox.h>
#include <wx/textctrl.h>
#include "../FFT.h"
#include "FFT.h"
#include "../Project.h"
#include "../ShuttleGui.h"

View File

@ -12,7 +12,7 @@ Paul Licameli
#define __AUDACITY_SAMPLE_HANDLE__
#include "../../../../UIHandle.h"
#include "../../../../SampleCount.h"
#include "SampleCount.h"
class wxMouseEvent;
class wxMouseState;

View File

@ -13,7 +13,7 @@ Paul Licameli split from class WaveTrack
#include "../../../ui/CommonTrackView.h"
#include "../../../../ClientData.h"
#include "../../../../SampleCount.h"
#include "SampleCount.h"
namespace WaveTrackViewConstants{ enum Display : int; }
struct WaveTrackSubViewType;

View File

@ -21,7 +21,7 @@
#include <wx/defs.h>
#include <wx/timer.h> // member variable
#include "../SampleFormat.h"
#include "SampleFormat.h"
#include "Prefs.h"
#include "MeterPanelBase.h" // to inherit
#include "Ruler.h" // member variable

View File

@ -168,7 +168,7 @@ different formats.
#include "NumericTextCtrl.h"
#include "../SampleCount.h"
#include "SampleCount.h"
#include "../AllThemeResources.h"
#include "../AColor.h"
#include "../KeyboardCapture.h"

View File

@ -35,6 +35,7 @@
#include <wx/filename.h>
#include "FileNames.h"
#include "SampleFormat.h"
// Length check. Is in part about not supplying malicious strings to file functions.
bool XMLValueChecker::IsGoodString(const wxString & str)