mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-03 09:29:30 +02:00
Dither.cpp and SampleFormat.cpp have fewer dependencies...
... Notably they longer depend indirectly on AudioIO.cpp (via QualityPrefs) This frees nine files from dependency cycles
This commit is contained in:
parent
d68db39b5c
commit
82f4948360
@ -37,6 +37,9 @@ and get deterministic behaviour.
|
|||||||
|
|
||||||
#include "Dither.h"
|
#include "Dither.h"
|
||||||
|
|
||||||
|
#include "Internat.h"
|
||||||
|
#include "Prefs.h"
|
||||||
|
|
||||||
// Erik de Castro Lopo's header file that
|
// Erik de Castro Lopo's header file that
|
||||||
// makes sure that we have lrint and lrintf
|
// makes sure that we have lrint and lrintf
|
||||||
// (Note: this file should be included first)
|
// (Note: this file should be included first)
|
||||||
@ -393,3 +396,50 @@ inline float Dither::ShapedDither(float sample)
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const EnumValueSymbol choicesDither[] = {
|
||||||
|
{ XO("None") },
|
||||||
|
{ XO("Rectangle") },
|
||||||
|
{ XO("Triangle") },
|
||||||
|
{ XO("Shaped") },
|
||||||
|
};
|
||||||
|
static const size_t nChoicesDither = WXSIZEOF( choicesDither );
|
||||||
|
static const int intChoicesDither[] = {
|
||||||
|
(int) DitherType::none,
|
||||||
|
(int) DitherType::rectangle,
|
||||||
|
(int) DitherType::triangle,
|
||||||
|
(int) DitherType::shaped,
|
||||||
|
};
|
||||||
|
static_assert(
|
||||||
|
nChoicesDither == WXSIZEOF( intChoicesDither ),
|
||||||
|
"size mismatch"
|
||||||
|
);
|
||||||
|
|
||||||
|
static const size_t defaultFastDither = 0; // none
|
||||||
|
|
||||||
|
EnumSetting Dither::FastSetting{
|
||||||
|
wxT("Quality/DitherAlgorithmChoice"),
|
||||||
|
choicesDither, nChoicesDither, defaultFastDither,
|
||||||
|
intChoicesDither,
|
||||||
|
wxT("Quality/DitherAlgorithm")
|
||||||
|
};
|
||||||
|
|
||||||
|
static const size_t defaultBestDither = 3; // shaped
|
||||||
|
|
||||||
|
EnumSetting Dither::BestSetting{
|
||||||
|
wxT("Quality/HQDitherAlgorithmChoice"),
|
||||||
|
choicesDither, nChoicesDither, defaultBestDither,
|
||||||
|
|
||||||
|
intChoicesDither,
|
||||||
|
wxT("Quality/HQDitherAlgorithm")
|
||||||
|
};
|
||||||
|
|
||||||
|
DitherType Dither::FastDitherChoice()
|
||||||
|
{
|
||||||
|
return (DitherType) FastSetting.ReadInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
DitherType Dither::BestDitherChoice()
|
||||||
|
{
|
||||||
|
return (DitherType) BestSetting.ReadInt();
|
||||||
|
}
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
#ifndef __AUDACITY_DITHER_H__
|
#ifndef __AUDACITY_DITHER_H__
|
||||||
#define __AUDACITY_DITHER_H__
|
#define __AUDACITY_DITHER_H__
|
||||||
|
|
||||||
#include "SampleFormat.h"
|
#include "audacity/Types.h" // for samplePtr
|
||||||
|
|
||||||
|
class EnumSetting;
|
||||||
|
|
||||||
|
|
||||||
/// These ditherers are currently available:
|
/// These ditherers are currently available:
|
||||||
@ -20,6 +22,11 @@ enum DitherType : unsigned {
|
|||||||
class Dither
|
class Dither
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static DitherType FastDitherChoice();
|
||||||
|
static DitherType BestDitherChoice();
|
||||||
|
|
||||||
|
static EnumSetting FastSetting, BestSetting;
|
||||||
|
|
||||||
/// Default constructor
|
/// Default constructor
|
||||||
Dither();
|
Dither();
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
#include "Prefs.h"
|
#include "Prefs.h"
|
||||||
#include "Dither.h"
|
#include "Dither.h"
|
||||||
#include "prefs/QualityPrefs.h"
|
#include "Internat.h"
|
||||||
|
|
||||||
static DitherType gLowQualityDither = DitherType::none;
|
static DitherType gLowQualityDither = DitherType::none;
|
||||||
static DitherType gHighQualityDither = DitherType::none;
|
static DitherType gHighQualityDither = DitherType::none;
|
||||||
@ -53,8 +53,8 @@ static Dither gDitherAlgorithm;
|
|||||||
void InitDitherers()
|
void InitDitherers()
|
||||||
{
|
{
|
||||||
// Read dither preferences
|
// Read dither preferences
|
||||||
gLowQualityDither = QualityPrefs::FastDitherChoice();
|
gLowQualityDither = Dither::FastDitherChoice();
|
||||||
gHighQualityDither = QualityPrefs::BestDitherChoice();
|
gHighQualityDither = Dither::BestDitherChoice();
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxChar *GetSampleFormatStr(sampleFormat format)
|
const wxChar *GetSampleFormatStr(sampleFormat format)
|
||||||
|
@ -55,44 +55,6 @@ static EnumSetting formatSetting{
|
|||||||
wxT("/SamplingRate/DefaultProjectSampleFormat"),
|
wxT("/SamplingRate/DefaultProjectSampleFormat"),
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////
|
|
||||||
static const EnumValueSymbol choicesDither[] = {
|
|
||||||
{ XO("None") },
|
|
||||||
{ XO("Rectangle") },
|
|
||||||
{ XO("Triangle") },
|
|
||||||
{ XO("Shaped") },
|
|
||||||
};
|
|
||||||
static const size_t nChoicesDither = WXSIZEOF( choicesDither );
|
|
||||||
static const int intChoicesDither[] = {
|
|
||||||
(int) DitherType::none,
|
|
||||||
(int) DitherType::rectangle,
|
|
||||||
(int) DitherType::triangle,
|
|
||||||
(int) DitherType::shaped,
|
|
||||||
};
|
|
||||||
static_assert(
|
|
||||||
nChoicesDither == WXSIZEOF( intChoicesDither ),
|
|
||||||
"size mismatch"
|
|
||||||
);
|
|
||||||
|
|
||||||
static const size_t defaultFastDither = 0; // none
|
|
||||||
|
|
||||||
static EnumSetting fastDitherSetting{
|
|
||||||
wxT("Quality/DitherAlgorithmChoice"),
|
|
||||||
choicesDither, nChoicesDither, defaultFastDither,
|
|
||||||
intChoicesDither,
|
|
||||||
wxT("Quality/DitherAlgorithm")
|
|
||||||
};
|
|
||||||
|
|
||||||
static const size_t defaultBestDither = 3; // shaped
|
|
||||||
|
|
||||||
static EnumSetting bestDitherSetting{
|
|
||||||
wxT("Quality/HQDitherAlgorithmChoice"),
|
|
||||||
choicesDither, nChoicesDither, defaultBestDither,
|
|
||||||
|
|
||||||
intChoicesDither,
|
|
||||||
wxT("Quality/HQDitherAlgorithm")
|
|
||||||
};
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
BEGIN_EVENT_TABLE(QualityPrefs, PrefsPanel)
|
BEGIN_EVENT_TABLE(QualityPrefs, PrefsPanel)
|
||||||
EVT_CHOICE(ID_SAMPLE_RATE_CHOICE, QualityPrefs::OnSampleRateChoice)
|
EVT_CHOICE(ID_SAMPLE_RATE_CHOICE, QualityPrefs::OnSampleRateChoice)
|
||||||
@ -225,7 +187,7 @@ void QualityPrefs::PopulateOrExchange(ShuttleGui & S)
|
|||||||
|
|
||||||
/* i18n-hint: technical term for randomization to reduce undesirable resampling artifacts */
|
/* i18n-hint: technical term for randomization to reduce undesirable resampling artifacts */
|
||||||
S.TieChoice(_("&Dither:"),
|
S.TieChoice(_("&Dither:"),
|
||||||
fastDitherSetting);
|
Dither::FastSetting);
|
||||||
}
|
}
|
||||||
S.EndMultiColumn();
|
S.EndMultiColumn();
|
||||||
}
|
}
|
||||||
@ -240,7 +202,7 @@ void QualityPrefs::PopulateOrExchange(ShuttleGui & S)
|
|||||||
|
|
||||||
/* i18n-hint: technical term for randomization to reduce undesirable resampling artifacts */
|
/* i18n-hint: technical term for randomization to reduce undesirable resampling artifacts */
|
||||||
S.TieChoice(_("Dit&her:"),
|
S.TieChoice(_("Dit&her:"),
|
||||||
bestDitherSetting);
|
Dither::BestSetting);
|
||||||
}
|
}
|
||||||
S.EndMultiColumn();
|
S.EndMultiColumn();
|
||||||
}
|
}
|
||||||
@ -287,13 +249,3 @@ sampleFormat QualityPrefs::SampleFormatChoice()
|
|||||||
return (sampleFormat)formatSetting.ReadInt();
|
return (sampleFormat)formatSetting.ReadInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
DitherType QualityPrefs::FastDitherChoice()
|
|
||||||
{
|
|
||||||
return (DitherType) fastDitherSetting.ReadInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
DitherType QualityPrefs::BestDitherChoice()
|
|
||||||
{
|
|
||||||
return (DitherType) bestDitherSetting.ReadInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -41,9 +41,6 @@ class QualityPrefs final : public PrefsPanel
|
|||||||
|
|
||||||
static sampleFormat SampleFormatChoice();
|
static sampleFormat SampleFormatChoice();
|
||||||
|
|
||||||
static DitherType FastDitherChoice();
|
|
||||||
static DitherType BestDitherChoice();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Populate();
|
void Populate();
|
||||||
void GetNamesAndLabels();
|
void GetNamesAndLabels();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user