annotate base/Preferences.h @ 1288:5ef9b4d4bbdb 3.0-integration

Filter out Xing/LAME info frames, rather than letting them go to the mp3 decoder as if they were audio frames. Fixes the 1152-sample zero pad at start of some decoded mp3 files (distinct from decoder delay). The logic here is based on the madplay code.
author Chris Cannam
date Thu, 24 Nov 2016 13:32:04 +0000
parents ba16388b937d
children ff9697592bef
rev   line source
Chris@136 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@136 2
Chris@136 3 /*
Chris@136 4 Sonic Visualiser
Chris@136 5 An audio file viewer and annotation editor.
Chris@136 6 Centre for Digital Music, Queen Mary, University of London.
Chris@202 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@136 8
Chris@136 9 This program is free software; you can redistribute it and/or
Chris@136 10 modify it under the terms of the GNU General Public License as
Chris@136 11 published by the Free Software Foundation; either version 2 of the
Chris@136 12 License, or (at your option) any later version. See the file
Chris@136 13 COPYING included with this distribution for more information.
Chris@136 14 */
Chris@136 15
Chris@136 16 #ifndef _PREFERENCES_H_
Chris@136 17 #define _PREFERENCES_H_
Chris@136 18
Chris@136 19 #include "PropertyContainer.h"
Chris@136 20
Chris@140 21 #include "Window.h"
Chris@140 22
Chris@136 23 class Preferences : public PropertyContainer
Chris@136 24 {
Chris@136 25 Q_OBJECT
Chris@136 26
Chris@136 27 public:
Chris@156 28 static Preferences *getInstance();
Chris@136 29
Chris@136 30 virtual PropertyList getProperties() const;
Chris@136 31 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@136 32 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@245 33 virtual int getPropertyRangeAndValue(const PropertyName &, int *, int *, int *) const;
Chris@136 34 virtual QString getPropertyValueLabel(const PropertyName &, int value) const;
Chris@136 35 virtual QString getPropertyContainerName() const;
Chris@136 36 virtual QString getPropertyContainerIconName() const;
Chris@136 37
Chris@246 38 enum SpectrogramSmoothing {
Chris@246 39 NoSpectrogramSmoothing,
Chris@246 40 SpectrogramInterpolated,
Chris@246 41 SpectrogramZeroPadded,
Chris@246 42 SpectrogramZeroPaddedAndInterpolated
Chris@246 43 };
Chris@246 44
Chris@553 45 enum SpectrogramXSmoothing {
Chris@553 46 NoSpectrogramXSmoothing,
Chris@553 47 SpectrogramXInterpolated
Chris@553 48 };
Chris@553 49
Chris@246 50 SpectrogramSmoothing getSpectrogramSmoothing() const { return m_spectrogramSmoothing; }
Chris@553 51 SpectrogramXSmoothing getSpectrogramXSmoothing() const { return m_spectrogramXSmoothing; }
Chris@1038 52 double getTuningFrequency() const { return m_tuningFrequency; }
Chris@140 53 WindowType getWindowType() const { return m_windowType; }
Chris@164 54 int getResampleQuality() const { return m_resampleQuality; }
Chris@136 55
Chris@1225 56 bool getRunPluginsInProcess() const { return m_runPluginsInProcess; }
Chris@1225 57
Chris@138 58 //!!! harmonise with PaneStack
Chris@138 59 enum PropertyBoxLayout {
Chris@138 60 VerticallyStacked,
Chris@138 61 Layered
Chris@138 62 };
Chris@138 63 PropertyBoxLayout getPropertyBoxLayout() const { return m_propertyBoxLayout; }
Chris@138 64
Chris@354 65 int getViewFontSize() const { return m_viewFontSize; }
Chris@354 66
Chris@277 67 bool getOmitTempsFromRecentFiles() const { return m_omitRecentTemps; }
Chris@277 68
Chris@297 69 QString getTemporaryDirectoryRoot() const { return m_tempDirRoot; }
Chris@297 70
Chris@919 71 /// If we should always resample audio to the same rate, return it; otherwise (the normal case) return 0
Chris@1047 72 sv_samplerate_t getFixedSampleRate() const { return m_fixedSampleRate; }
Chris@919 73
Chris@919 74 /// True if we should resample second or subsequent audio file to match first audio file's rate
Chris@297 75 bool getResampleOnLoad() const { return m_resampleOnLoad; }
Chris@297 76
Chris@921 77 /// True if audio files should be loaded with normalisation (max == 1)
Chris@921 78 bool getNormaliseAudio() const { return m_normaliseAudio; }
Chris@921 79
Chris@297 80 enum BackgroundMode {
Chris@297 81 BackgroundFromTheme,
Chris@297 82 DarkBackground,
Chris@297 83 LightBackground
Chris@297 84 };
Chris@297 85 BackgroundMode getBackgroundMode() const { return m_backgroundMode; }
Chris@297 86
Chris@612 87 enum TimeToTextMode {
Chris@612 88 TimeToTextMs,
Chris@612 89 TimeToTextUs,
Chris@612 90 TimeToText24Frame,
Chris@612 91 TimeToText25Frame,
Chris@612 92 TimeToText30Frame,
Chris@612 93 TimeToText50Frame,
Chris@612 94 TimeToText60Frame
Chris@612 95 };
Chris@612 96 TimeToTextMode getTimeToTextMode() const { return m_timeToTextMode; }
Chris@612 97
Chris@1031 98 bool getShowHMS() const { return m_showHMS; }
Chris@1031 99
Chris@892 100 int getOctaveOfMiddleC() const {
Chris@892 101 // weed out unsupported octaves
Chris@892 102 return getOctaveOfMiddleCInSystem(getSystemWithMiddleCInOctave(m_octave));
Chris@892 103 }
Chris@892 104 int getOctaveOfLowestMIDINote() const {
Chris@892 105 return getOctaveOfMiddleC() - 5;
Chris@892 106 }
Chris@892 107
Chris@372 108 bool getShowSplash() const { return m_showSplash; }
Chris@372 109
Chris@136 110 public slots:
Chris@136 111 virtual void setProperty(const PropertyName &, int);
Chris@136 112
Chris@246 113 void setSpectrogramSmoothing(SpectrogramSmoothing smoothing);
Chris@553 114 void setSpectrogramXSmoothing(SpectrogramXSmoothing smoothing);
Chris@1038 115 void setTuningFrequency(double freq);
Chris@138 116 void setPropertyBoxLayout(PropertyBoxLayout layout);
Chris@140 117 void setWindowType(WindowType type);
Chris@164 118 void setResampleQuality(int quality);
Chris@1225 119 void setRunPluginsInProcess(bool r);
Chris@277 120 void setOmitTempsFromRecentFiles(bool omit);
Chris@297 121 void setTemporaryDirectoryRoot(QString tempDirRoot);
Chris@1047 122 void setFixedSampleRate(sv_samplerate_t);
Chris@297 123 void setResampleOnLoad(bool);
Chris@921 124 void setNormaliseAudio(bool);
Chris@297 125 void setBackgroundMode(BackgroundMode mode);
Chris@612 126 void setTimeToTextMode(TimeToTextMode mode);
Chris@1031 127 void setShowHMS(bool show);
Chris@892 128 void setOctaveOfMiddleC(int oct);
Chris@354 129 void setViewFontSize(int size);
Chris@372 130 void setShowSplash(bool);
Chris@136 131
Chris@136 132 private:
Chris@145 133 Preferences(); // may throw DirectoryCreationFailed
Chris@145 134 virtual ~Preferences();
Chris@136 135
Chris@136 136 static Preferences *m_instance;
Chris@136 137
Chris@892 138 // We don't support arbitrary octaves in the gui, because we want
Chris@892 139 // to be able to label what the octave system comes from. These
Chris@892 140 // are the ones we support. (But we save and load as octave
Chris@892 141 // numbers, so as not to make the prefs format really confusing)
Chris@892 142 enum OctaveNumberingSystem {
Chris@892 143 C0_Centre,
Chris@892 144 C3_Logic,
Chris@892 145 C4_ASA,
Chris@892 146 C5_Sonar
Chris@892 147 };
Chris@892 148 static int getOctaveOfMiddleCInSystem(OctaveNumberingSystem s);
Chris@892 149 static OctaveNumberingSystem getSystemWithMiddleCInOctave(int o);
Chris@892 150
Chris@246 151 SpectrogramSmoothing m_spectrogramSmoothing;
Chris@553 152 SpectrogramXSmoothing m_spectrogramXSmoothing;
Chris@1038 153 double m_tuningFrequency;
Chris@138 154 PropertyBoxLayout m_propertyBoxLayout;
Chris@140 155 WindowType m_windowType;
Chris@164 156 int m_resampleQuality;
Chris@1225 157 bool m_runPluginsInProcess;
Chris@277 158 bool m_omitRecentTemps;
Chris@297 159 QString m_tempDirRoot;
Chris@1047 160 sv_samplerate_t m_fixedSampleRate;
Chris@297 161 bool m_resampleOnLoad;
Chris@921 162 bool m_normaliseAudio;
Chris@354 163 int m_viewFontSize;
Chris@297 164 BackgroundMode m_backgroundMode;
Chris@612 165 TimeToTextMode m_timeToTextMode;
Chris@1031 166 bool m_showHMS;
Chris@892 167 int m_octave;
Chris@372 168 bool m_showSplash;
Chris@136 169 };
Chris@136 170
Chris@136 171 #endif