tracktion-engine 3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications

« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_PropertyStorage.cpp
Go to the documentation of this file.
1 /*
2 ,--. ,--. ,--. ,--.
3 ,-' '-.,--.--.,--,--.,---.| |,-.,-' '-.`--' ,---. ,--,--, Copyright 2024
4 '-. .-'| .--' ,-. | .--'| /'-. .-',--.| .-. || \ Tracktion Software
5 | | | | \ '-' \ `--.| \ \ | | | |' '-' '| || | Corporation
6 `---' `--' `--`--'`---'`--'`--' `---' `--' `---' `--''--' www.tracktion.com
7
8 Tracktion Engine uses a GPL/commercial licence - see LICENCE.md for details.
9*/
10
11namespace tracktion { inline namespace engine
12{
13
14juce::StringRef PropertyStorage::settingToString (SettingID setting)
15{
16 switch (setting)
17 {
18 case SettingID::audio_device_setup: return "audio_device_setup";
19 case SettingID::audiosettings: return "audiosettings";
20 case SettingID::addAntiDenormalNoise: return "addAntiDenormalNoiseXXX"; // This setting is obsolete (hopefully)
21 case SettingID::autoFreeze: return "autoFreeze";
22 case SettingID::autoTempoMatch: return "AutoTempoMatch";
23 case SettingID::autoTempoDetect: return "AutoTempoDetect";
24 case SettingID::automapVst: return "AutomapVst";
25 case SettingID::automapNative: return "AutomapNative";
26 case SettingID::automapGuids1: return "AutomapGuids1";
27 case SettingID::automapGuids2: return "AutomapGuids2";
28 case SettingID::cacheSizeSamples: return "cacheSizeSamples";
29 case SettingID::clickTrackMidiNoteBig: return "clickTrackMidiNoteBig";
30 case SettingID::clickTrackMidiNoteLittle: return "clickTrackMidiNoteLittle";
31 case SettingID::clickTrackSampleSmall: return "clickTrackSampleSmall";
32 case SettingID::clickTrackSampleBig: return "clickTrackSampleBig";
33 case SettingID::crossfadeBlock: return "crossfadeBlock";
34 case SettingID::compCrossfadeMs: return "compCrossfadeMs";
35 case SettingID::countInMode: return "countInMode";
36 case SettingID::customMidiControllers: return "customMidiControllers";
37 case SettingID::deadMansPedal: return "deadMansPedal";
38 case SettingID::cpu: return "cpu";
39 case SettingID::defaultMidiOutDevice: return "defaultMidiDevice";
40 case SettingID::defaultWaveOutDevice: return "defaultWaveDevice";
41 case SettingID::defaultMidiInDevice: return "defaultMidiInDevice";
42 case SettingID::defaultWaveInDevice: return "defaultWaveInDevice";
43 case SettingID::externControlIn: return "externControlIn";
44 case SettingID::externControlOut: return "externControlOut";
45 case SettingID::externControlNum: return "externControlNum";
46 case SettingID::externControlMain: return "externControlMain";
47 case SettingID::externControlShowSelection: return "externControlShowSelection";
48 case SettingID::externControlShowClipSlotSelection: return "externControlShowClipSlotSelection";
49 case SettingID::externControlSelectionColour: return "externControlSelectionColour";
50 case SettingID::externControlEnable: return "externControlEnable";
51 case SettingID::externOscInputPort: return "externOscInputPort";
52 case SettingID::externOscOutputPort: return "externOscOutputPort";
53 case SettingID::externOscOutputAddr: return "externOscOutputAddr";
54 case SettingID::filterControlMappingPresets: return "FilterControlMappingPresets";
55 case SettingID::filterGui: return "filterGui";
56 case SettingID::findExamples: return "findExamples";
57 case SettingID::fitClipsToRegion: return "fitClipsToRegion";
58 case SettingID::freezePoint: return "freezePoint";
59 case SettingID::hasEnabledMidiDefaultDevs: return "hasEnabledMidiDefaultDevs";
60 case SettingID::knownPluginList: return "knownPluginList";
61 case SettingID::knownPluginList64: return "knownPluginList64";
62 case SettingID::lameEncoder: return "lameEncoder";
63 case SettingID::lastClickTrackLevel: return "lastClickTrackLevel";
64 case SettingID::lastEditRender: return "lastEditRender";
65 case SettingID::lowLatencyBuffer: return "lowLatencyBuffer";
66 case SettingID::glideLength: return "glideLength";
67 case SettingID::grooveTemplates: return "GrooveTemplates";
68 case SettingID::MCUoneTouchRecord: return "MCUoneTouchRecord";
69 case SettingID::midiin: return "midiin";
70 case SettingID::midiout: return "midiout";
71 case SettingID::midiEditorOctaves: return "midiEditorOctaves";
72 case SettingID::midiProgramManager: return "MidiProgramManager";
73 case SettingID::maxLatency: return "maxLatency";
74 case SettingID::newMarker: return "newMarker";
75 case SettingID::numThreadsForPluginScanning: return "numThreadsForPluginScanning";
76 case SettingID::projectList: return "projectList";
77 case SettingID::projects: return "projects";
78 case SettingID::recentProjects: return "recentProjects";
79 case SettingID::renameClipRenamesSource: return "renameClipRenamesSource";
80 case SettingID::renameMode: return "renameMode";
81 case SettingID::renderRecentFilesList: return "renderRecentFilesList";
82 case SettingID::safeRecord: return "safeRecord";
83 case SettingID::resetCursorOnPlay: return "resetCursorOnPlay";
84 case SettingID::retrospectiveRecord: return "retrospectiveRecord";
85 case SettingID::reWireEnabled: return "ReWireEnabled";
86 case SettingID::simplifyAfterRecording: return "simplifyAfterRecording";
87 case SettingID::sendControllerOffMessages: return "sendControllerOffMessages";
88 case SettingID::tempDirectory: return "tempDirectory";
89 case SettingID::snapCursor: return "snapCursor";
90 case SettingID::trackExpansionMode: return "trackExpansionMode";
91 case SettingID::use64Bit: return "use64Bit";
92 case SettingID::xFade: return "xFade";
93 case SettingID::xtCount: return "xtCount";
94 case SettingID::xtIndices: return "xtIndices";
95 case SettingID::virtualmididevices: return "virtualmididevices";
96 case SettingID::virtualmidiin: return "virtualmidiin";
97 case SettingID::midiScanIntervalSeconds: return "midiScanIntervalSeconds";
98 case SettingID::useSeparateProcessForScanning: return "useSeparateProcessForScanning";
99 case SettingID::useRealtime: return "useRealtime";
100 case SettingID::wavein: return "wavein";
101 case SettingID::waveout: return "waveout";
102 case SettingID::windowsDoubleClick: return "windowsDoubleClick";
103
104 case SettingID::renderFormat: return "renderFormat";
105 case SettingID::trackRenderSampRate: return "trackRenderSampRate";
106 case SettingID::trackRenderBits: return "trackRenderBits";
107 case SettingID::bypassFilters: return "bypassFilters";
108 case SettingID::markedRegion: return "markedRegion";
109 case SettingID::editClipRenderSampRate: return "editClipRenderSampRate";
110 case SettingID::editClipRenderBits: return "editClipRenderBits";
111 case SettingID::editClipRenderDither: return "editClipRenderDither";
112 case SettingID::editClipRealtime: return "editClipRealtime";
113 case SettingID::editClipRenderStereo: return "editClipRenderStereo";
114 case SettingID::editClipRenderNormalise: return "editClipRenderNormalise";
115 case SettingID::editClipRenderRMS: return "editClipRenderRMS";
116 case SettingID::editClipRenderRMSLevelDb: return "editClipRenderRMSLevelDb";
117 case SettingID::editClipRenderPeakLevelDb: return "editClipRenderPeakLevelDb";
118 case SettingID::editClipPassThroughFilters: return "editClipPassThroughFilters";
119 case SettingID::exportFormat: return "exportFormat";
120 case SettingID::renderOnlySelectedClips: return "renderOnlySelectedClips";
121 case SettingID::renderOnlyMarked: return "renderOnlyMarked";
122 case SettingID::renderNormalise: return "renderNormalise";
123 case SettingID::renderRMS: return "renderRMS";
124 case SettingID::renderRMSLevelDb: return "renderRMSLevelDb";
125 case SettingID::renderPeakLevelDb: return "renderPeakLevelDb";
126 case SettingID::renderTrimSilence: return "renderTrimSilence";
127 case SettingID::renderSampRate: return "renderSampRate";
128 case SettingID::renderStereo: return "renderStereo";
129 case SettingID::renderBits: return "renderBits";
130 case SettingID::renderDither: return "renderDither";
131 case SettingID::quality: return "quality";
132 case SettingID::addId3Info: return "addId3Info";
133 case SettingID::realtime: return "realtime";
134 case SettingID::passThroughFilters: return "passThroughFilters";
135 case SettingID::invalid: return "invalid";
136 case SettingID::addAcidMetadata: return "addAcidMetadata";
137 }
138 return {};
139}
140
141//==============================================================================
142juce::File PropertyStorage::getAppCacheFolder()
143{
144 return getAppPrefsFolder();
145}
146
147juce::File PropertyStorage::getAppPrefsFolder()
148{
150
151 if (! f.isDirectory())
152 f.createDirectory();
153
154 return f;
155}
156
157juce::String PropertyStorage::getUserName()
158{
160}
161
162juce::PropertiesFile& PropertyStorage::getPropertiesFile()
163{
164 if (propertiesFile == nullptr)
165 {
166 auto file = getAppPrefsFolder().getChildFile ("Settings.xml");
167
169 options.millisecondsBeforeSaving = 2000;
170 options.storageFormat = juce::PropertiesFile::storeAsXML;
171
172 propertiesFile = std::make_unique<juce::PropertiesFile> (file, options);
173 }
174
175 return *propertiesFile;
176}
177
178//==============================================================================
179void PropertyStorage::removeProperty (SettingID setting)
180{
181 getPropertiesFile().removeValue (PropertyStorage::settingToString (setting));
182}
183
184juce::var PropertyStorage::getProperty (SettingID setting, const juce::var& defaultValue)
185{
186 return getPropertiesFile().getValue (PropertyStorage::settingToString (setting), defaultValue);
187}
188
189void PropertyStorage::setProperty (SettingID setting, const juce::var& value)
190{
191 getPropertiesFile().setValue (PropertyStorage::settingToString (setting), value);
192}
193
194std::unique_ptr<juce::XmlElement> PropertyStorage::getXmlProperty (SettingID setting)
195{
196 return std::unique_ptr<juce::XmlElement> (getPropertiesFile().getXmlValue (PropertyStorage::settingToString (setting)));
197}
198
199void PropertyStorage::setXmlProperty (SettingID setting, const juce::XmlElement& xml)
200{
201 getPropertiesFile().setValue (PropertyStorage::settingToString (setting), &xml);
202}
203
204//==============================================================================
205void PropertyStorage::removePropertyItem (SettingID setting, juce::StringRef item)
206{
207 getPropertiesFile().removeValue (PropertyStorage::settingToString (setting) + "_" + item);
208}
209
210juce::var PropertyStorage::getPropertyItem (SettingID setting, juce::StringRef item, const juce::var& defaultValue)
211{
212 return getPropertiesFile().getValue (PropertyStorage::settingToString (setting) + "_" + item, defaultValue);
213}
214
215void PropertyStorage::setPropertyItem (SettingID setting, juce::StringRef item, const juce::var& value)
216{
217 getPropertiesFile().setValue (PropertyStorage::settingToString (setting) + "_" + item, value);
218}
219
220std::unique_ptr<juce::XmlElement> PropertyStorage::getXmlPropertyItem (SettingID setting, juce::StringRef item)
221{
222 return std::unique_ptr<juce::XmlElement> (getPropertiesFile().getXmlValue (PropertyStorage::settingToString (setting) + "_" + item));
223}
224
225void PropertyStorage::setXmlPropertyItem (SettingID setting, juce::StringRef item, const juce::XmlElement& xml)
226{
227 getPropertiesFile().setValue (PropertyStorage::settingToString (setting) + "_" + item, &xml);
228}
229
230//==============================================================================
231juce::File PropertyStorage::getDefaultLoadSaveDirectory (juce::StringRef)
232{
234}
235
236void PropertyStorage::setDefaultLoadSaveDirectory (juce::StringRef, const juce::File&)
237{
238}
239
240juce::File PropertyStorage::getDefaultLoadSaveDirectory (ProjectItem::Category)
241{
243}
244
245}} // namespace tracktion { inline namespace engine
File getChildFile(StringRef relativeOrAbsolutePath) const
userApplicationDataDirectory
static File JUCE_CALLTYPE getSpecialLocation(const SpecialLocationType type)
Result createDirectory() const
String getValue(StringRef keyName, const String &defaultReturnValue=String()) const noexcept
void setValue(StringRef keyName, const var &value)
void removeValue(StringRef keyName)
static String getFullUserName()
T is_pointer_v
SettingID
A list of settings the engine will get and set.