Vital
Loading...
Searching...
No Matches
load_save.h
Go to the documentation of this file.
1#pragma once
2
3#include "JuceHeader.h"
4#include "json/json.h"
5
6#include <map>
7#include <set>
8#include <string>
9
10using json = nlohmann::json;
11
12namespace vital {
13 class StringLayout;
14}
15
16class MidiManager;
17class SynthBase;
18
29class LoadSave {
30public:
35 public:
37
45 static int compareElements(File a, File b) {
46 return a.getFullPathName().toLowerCase().compareNatural(b.getFullPathName().toLowerCase());
47 }
48
49 private:
50 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FileSorterAscending)
51 };
52
68
70 static const int kMaxCommentLength = 500;
71
73 static const std::string kUserDirectoryName;
74 static const std::string kPresetFolderName;
75 static const std::string kWavetableFolderName;
76 static const std::string kSkinFolderName;
77 static const std::string kSampleFolderName;
78 static const std::string kLfoFolderName;
79 static const std::string kAdditionalWavetableFoldersName;
80 static const std::string kAdditionalSampleFoldersName;
81
88 static void convertBufferToPcm(json& data, const std::string& field);
89
96 static void convertPcmToFloatBuffer(json& data, const std::string& field);
97
107 static json stateToJson(SynthBase* synth, const CriticalSection& critical_section);
108
117 static void loadControls(SynthBase* synth, const json& data);
118
127 static void loadModulations(SynthBase* synth, const json& modulations);
128
135 static void loadSample(SynthBase* synth, const json& sample);
136
143 static void loadWavetables(SynthBase* synth, const json& wavetables);
144
151 static void loadLfos(SynthBase* synth, const json& lfos);
152
159 static void loadSaveState(std::map<std::string, String>& save_info, json data);
160
166 static void initSaveInfo(std::map<std::string, String>& save_info);
167
176 static json updateFromOldVersion(json state);
177
186 static bool jsonToState(SynthBase* synth, std::map<std::string, String>& save_info, json state);
187
194 static String getAuthorFromFile(const File& file);
195
202 static String getStyleFromFile(const File& file);
203
210 static std::string getAuthor(json file);
211
218 static std::string getLicense(json state);
219
225 static File getConfigFile();
226
232 static void writeCrashLog(String crash_log);
233
239 static void writeErrorLog(String error_log);
240
246 static json getConfigJson();
247
253 static File getFavoritesFile();
254
260 static File getDefaultSkin();
261
267 static json getFavoritesJson();
268
274 static void addFavorite(const File& new_favorite);
275
281 static void removeFavorite(const File& old_favorite);
282
288 static std::set<std::string> getFavorites();
289
295 static bool hasDataDirectory();
296
302 static File getAvailablePacksFile();
303
309 static json getAvailablePacks();
310
316 static File getInstalledPacksFile();
317
323 static json getInstalledPacks();
324
330 static void saveInstalledPacks(const json& packs);
331
337 static void markPackInstalled(int id);
338
344 static void markPackInstalled(const std::string& name);
345
351 static void saveDataDirectory(const File& data_directory);
352
358 static bool isInstalled();
359
365 static bool wasUpgraded();
366
372 static bool isExpired();
373
379 static bool doesExpire();
380
386 static int getDaysToExpire();
387
393 static bool shouldCheckForUpdates();
394
400 static bool shouldWorkOffline();
401
407 static std::string getLoadedSkin();
408
414 static bool shouldAnimateWidgets();
415
421 static bool displayHzFrequency();
422
428 static bool authenticated();
429
435 static int getOversamplingAmount();
436
442 static float loadWindowSize();
443
449 static String loadVersion();
450
456 static String loadContentVersion();
457
463 static void saveJsonToConfig(json config_state);
464
470 static void saveJsonToFavorites(json favorites_json);
471
477 static void saveAuthor(std::string author);
478
484 static void savePreferredTTWTLanguage(std::string language);
485
491 static void saveLayoutConfig(vital::StringLayout* layout);
492
496 static void saveVersionConfig();
497
503 static void saveContentVersion(std::string version);
504
510 static void saveUpdateCheckConfig(bool check_for_updates);
511
517 static void saveWorkOffline(bool work_offline);
518
524 static void saveLoadedSkin(const std::string& name);
525
531 static void saveAnimateWidgets(bool animate_widgets);
532
538 static void saveDisplayHzFrequency(bool display_hz);
539
545 static void saveAuthenticated(bool authenticated);
546
552 static void saveWindowSize(float window_size);
553
559 static void saveMidiMapConfig(MidiManager* midi_manager);
560
567 static void loadConfig(MidiManager* midi_manager, vital::StringLayout* layout = nullptr);
568
574 static std::wstring getComputerKeyboardLayout();
575
581 static std::string getPreferredTTWTLanguage();
582
588 static std::string getAuthor();
589
595 static std::pair<wchar_t, wchar_t> getComputerKeyboardOctaveControls();
596
603 static void saveAdditionalFolders(const std::string& name, std::vector<std::string> folders);
604
611 static std::vector<std::string> getAdditionalFolders(const std::string& name);
612
618 static File getDataDirectory();
619
626 static std::vector<File> getDirectories(const String& folder_name);
627
633 static std::vector<File> getPresetDirectories();
634
640 static std::vector<File> getWavetableDirectories();
641
647 static std::vector<File> getSkinDirectories();
648
654 static std::vector<File> getSampleDirectories();
655
661 static std::vector<File> getLfoDirectories();
662
668 static File getUserDirectory();
669
675 static File getUserPresetDirectory();
676
682 static File getUserWavetableDirectory();
683
689 static File getUserSkinDirectory();
690
696 static File getUserSampleDirectory();
697
703 static File getUserLfoDirectory();
704
712 static void getAllFilesOfTypeInDirectories(Array<File>& files, const String& extensions,
713 const std::vector<File>& directories);
714
720 static void getAllPresets(Array<File>& presets);
721
727 static void getAllWavetables(Array<File>& wavetables);
728
734 static void getAllSkins(Array<File>& skins);
735
741 static void getAllLfos(Array<File>& lfos);
742
748 static void getAllSamples(Array<File>& samples);
749
755 static void getAllUserPresets(Array<File>& presets);
756
762 static void getAllUserWavetables(Array<File>& wavetables);
763
769 static void getAllUserLfos(Array<File>& lfos);
770
776 static void getAllUserSamples(Array<File>& samples);
777
785 static int compareFeatureVersionStrings(String a, String b);
786
794 static int compareVersionStrings(String a, String b);
795
808 static File getShiftedFile(const String directory_name, const String& extensions,
809 const std::string& additional_folders_name, const File& current_file, int shift);
810
811private:
812 LoadSave() { }
813};
A helper class for sorting files in ascending order based on their names.
Definition load_save.h:34
FileSorterAscending()
Definition load_save.h:36
static int compareElements(File a, File b)
Compares two files by their full path names in a case-insensitive, natural order.
Definition load_save.h:45
A utility class for loading and saving configuration, preset, and state data for the Vital synthesize...
Definition load_save.h:29
static void saveWindowSize(float window_size)
Saves the window size scaling factor.
Definition load_save.cpp:1324
static const std::string kPresetFolderName
Definition load_save.h:74
static void saveJsonToConfig(json config_state)
Saves a given JSON object to the configuration file.
Definition load_save.cpp:1245
static std::vector< File > getSkinDirectories()
Gets directories that should contain skins.
Definition load_save.cpp:1772
static std::string getLoadedSkin()
Retrieves the currently loaded skin name.
Definition load_save.cpp:1572
static void getAllUserLfos(Array< File > &lfos)
Retrieves all user LFO shapes (from data and user directories).
Definition load_save.cpp:1871
static void getAllWavetables(Array< File > &wavetables)
Retrieves all wavetables from wavetable directories.
Definition load_save.cpp:1839
static const std::string kSkinFolderName
Definition load_save.h:76
static String getStyleFromFile(const File &file)
Extracts the style from a given preset file.
Definition load_save.cpp:1078
static File getAvailablePacksFile()
Retrieves the file listing available packs.
Definition load_save.cpp:1428
static void getAllSamples(Array< File > &samples)
Retrieves all samples (wav files) from sample directories.
Definition load_save.cpp:1851
static void saveAuthor(std::string author)
Saves the provided author name to the config.
Definition load_save.cpp:1261
static std::vector< File > getPresetDirectories()
Gets directories that should contain presets.
Definition load_save.cpp:1764
static float loadWindowSize()
Loads the saved window size scaling factor.
Definition load_save.cpp:1617
static void saveAdditionalFolders(const std::string &name, std::vector< std::string > folders)
Saves additional folder paths for presets, wavetables, or samples.
Definition load_save.cpp:1695
static const std::string kSampleFolderName
Definition load_save.h:77
PresetStyle
Enumeration of preset styles that categorize sounds.
Definition load_save.h:56
@ kNumPresetStyles
Definition load_save.h:66
@ kLead
Definition load_save.h:58
@ kPercussion
Definition load_save.h:61
@ kPad
Definition load_save.h:60
@ kExperimental
Definition load_save.h:63
@ kTemplate
Definition load_save.h:65
@ kSequence
Definition load_save.h:62
@ kBass
Definition load_save.h:57
@ kSfx
Definition load_save.h:64
@ kKeys
Definition load_save.h:59
static void markPackInstalled(int id)
Marks a pack as installed by ID in the packs file.
Definition load_save.cpp:1494
static bool shouldAnimateWidgets()
Determines if widget animations are enabled.
Definition load_save.cpp:1581
static String loadContentVersion()
Loads the saved content version string.
Definition load_save.cpp:1638
static std::pair< wchar_t, wchar_t > getComputerKeyboardOctaveControls()
Retrieves the keys used for octave shifts on the computer keyboard layout.
Definition load_save.cpp:1680
static const std::string kAdditionalWavetableFoldersName
Definition load_save.h:79
static File getUserDirectory()
Retrieves the user directory inside the data directory.
Definition load_save.cpp:1784
static bool shouldWorkOffline()
Checks if Vital should operate in offline mode.
Definition load_save.cpp:1563
static void writeCrashLog(String crash_log)
Writes a crash log to a file in the data directory.
Definition load_save.cpp:1132
static File getUserPresetDirectory()
Retrieves the user's preset directory.
Definition load_save.cpp:1791
static bool isInstalled()
Checks if Vital is fully installed (data directory present).
Definition load_save.cpp:1515
static File getDataDirectory()
Gets the current data directory from the config.
Definition load_save.cpp:1718
static void getAllFilesOfTypeInDirectories(Array< File > &files, const String &extensions, const std::vector< File > &directories)
Scans a set of directories for files matching certain extensions.
Definition load_save.cpp:1826
static void getAllUserPresets(Array< File > &presets)
Retrieves all user presets (from data and user directories).
Definition load_save.cpp:1855
static void saveContentVersion(std::string version)
Saves the current content version to the config file.
Definition load_save.cpp:1281
static void saveInstalledPacks(const json &packs)
Saves the given JSON pack configuration to the installed packs file.
Definition load_save.cpp:1486
static std::vector< File > getLfoDirectories()
Gets directories that should contain LFO shapes.
Definition load_save.cpp:1780
static String loadVersion()
Loads the saved synth version string.
Definition load_save.cpp:1628
static std::vector< std::string > getAdditionalFolders(const std::string &name)
Retrieves a list of additional folder paths for a given category.
Definition load_save.cpp:1705
static void saveMidiMapConfig(MidiManager *midi_manager)
Saves MIDI mapping configuration.
Definition load_save.cpp:1358
static void loadControls(SynthBase *synth, const json &data)
Loads controls from the given JSON data into a SynthBase instance.
Definition load_save.cpp:137
static void convertPcmToFloatBuffer(json &data, const std::string &field)
Converts a PCM buffer field in JSON to a float buffer in base64.
Definition load_save.cpp:61
static void saveUpdateCheckConfig(bool check_for_updates)
Saves the user's preference regarding update checks.
Definition load_save.cpp:1288
static bool doesExpire()
Checks if this build of Vital includes an expiration mechanism.
Definition load_save.cpp:1533
static void saveJsonToFavorites(json favorites_json)
Saves a JSON object of favorites to the favorites file.
Definition load_save.cpp:1253
static void saveVersionConfig()
Saves the current synth version to the config file.
Definition load_save.cpp:1274
static void loadLfos(SynthBase *synth, const json &lfos)
Loads LFO states (line shapes) from a JSON array into a SynthBase.
Definition load_save.cpp:201
static bool displayHzFrequency()
Determines if frequencies should be displayed in Hz.
Definition load_save.cpp:1590
static void saveLayoutConfig(vital::StringLayout *layout)
Saves layout configuration (keyboard layout and octave controls).
Definition load_save.cpp:1330
static File getUserWavetableDirectory()
Retrieves the user's wavetable directory.
Definition load_save.cpp:1798
static void addFavorite(const File &new_favorite)
Adds a new favorite preset or item to the favorites file.
Definition load_save.cpp:1219
static void saveAnimateWidgets(bool animate_widgets)
Saves the widget animation preference.
Definition load_save.cpp:1306
static void getAllPresets(Array< File > &presets)
Retrieves all preset files from preset directories.
Definition load_save.cpp:1835
static void savePreferredTTWTLanguage(std::string language)
Saves a preferred Text-To-Wavetable (TTWT) language to the config.
Definition load_save.cpp:1268
static File getInstalledPacksFile()
Retrieves the file that stores information about installed packs.
Definition load_save.cpp:1457
static void initSaveInfo(std::map< std::string, String > &save_info)
Initializes save_info with default values for preset information.
Definition load_save.cpp:243
static void getAllSkins(Array< File > &skins)
Retrieves all skins from skin directories.
Definition load_save.cpp:1843
static File getUserSkinDirectory()
Retrieves the user's skin directory.
Definition load_save.cpp:1805
static File getShiftedFile(const String directory_name, const String &extensions, const std::string &additional_folders_name, const File &current_file, int shift)
Given a directory name and extensions, returns a file shifted by some offset from the current file.
Definition load_save.cpp:1921
static int getOversamplingAmount()
Retrieves the current oversampling amount.
Definition load_save.cpp:1608
static json stateToJson(SynthBase *synth, const CriticalSection &critical_section)
Converts the state of a given SynthBase to JSON.
Definition load_save.cpp:78
static std::string getLicense(json state)
Extracts the license information from a JSON state, if present.
Definition load_save.cpp:1107
static std::string getPreferredTTWTLanguage()
Returns the preferred Text-To-Wavetable language, if set.
Definition load_save.cpp:1661
static void loadModulations(SynthBase *synth, const json &modulations)
Loads modulation connections from JSON data into a SynthBase instance.
Definition load_save.cpp:154
static bool jsonToState(SynthBase *synth, std::map< std::string, String > &save_info, json state)
Loads a JSON state into the given SynthBase, applying older version updates if necessary.
Definition load_save.cpp:1011
static json getInstalledPacks()
Returns a JSON list of installed packs.
Definition load_save.cpp:1470
static json getFavoritesJson()
Parses and returns the favorites JSON data.
Definition load_save.cpp:1203
static void removeFavorite(const File &old_favorite)
Removes a favorite item from the favorites.
Definition load_save.cpp:1225
static json updateFromOldVersion(json state)
Updates a JSON state from an older version of Vital's format to the current version.
Definition load_save.cpp:253
static json getAvailablePacks()
Parses and returns JSON data about available packs.
Definition load_save.cpp:1441
static void saveAuthenticated(bool authenticated)
Saves the user's authentication status.
Definition load_save.cpp:1318
static File getConfigFile()
Retrieves the main configuration file path for Vital.
Definition load_save.cpp:1113
static const std::string kLfoFolderName
Definition load_save.h:78
static bool authenticated()
Checks if the user is authenticated.
Definition load_save.cpp:1599
static void saveDataDirectory(const File &data_directory)
Saves the given directory as the data directory in the configuration.
Definition load_save.cpp:1508
static std::vector< File > getDirectories(const String &folder_name)
Retrieves directories of a given folder name under the data directory structure.
Definition load_save.cpp:1745
static bool isExpired()
Checks if this build of Vital has expired.
Definition load_save.cpp:1529
static void getAllUserWavetables(Array< File > &wavetables)
Retrieves all user wavetables (from data and user directories).
Definition load_save.cpp:1863
static bool shouldCheckForUpdates()
Checks if Vital should perform update checks.
Definition load_save.cpp:1554
static int compareVersionStrings(String a, String b)
Compares two version strings.
Definition load_save.cpp:1895
static void loadConfig(MidiManager *midi_manager, vital::StringLayout *layout=nullptr)
Loads configuration data into a MidiManager and optional StringLayout.
Definition load_save.cpp:1386
static std::string getAuthor()
Retrieves the saved author name from the config.
Definition load_save.cpp:1671
static int getDaysToExpire()
Returns the number of days remaining until expiration.
Definition load_save.cpp:1541
static void convertBufferToPcm(json &data, const std::string &field)
Converts a float buffer field in JSON to PCM format in base64.
Definition load_save.cpp:44
static std::vector< File > getWavetableDirectories()
Gets directories that should contain wavetables.
Definition load_save.cpp:1768
static void loadSaveState(std::map< std::string, String > &save_info, json data)
Extracts and stores basic preset info (name, author, comments, style, macros) from JSON data.
Definition load_save.cpp:211
static void saveDisplayHzFrequency(bool display_hz)
Saves the preference to display frequency in Hz.
Definition load_save.cpp:1312
static std::vector< File > getSampleDirectories()
Gets directories that should contain samples.
Definition load_save.cpp:1776
static File getDefaultSkin()
Retrieves the file specifying the default skin.
Definition load_save.cpp:1168
static const std::string kAdditionalSampleFoldersName
Definition load_save.h:80
static void writeErrorLog(String error_log)
Appends an error message to an error log file.
Definition load_save.cpp:1140
static void getAllLfos(Array< File > &lfos)
Retrieves all LFO shapes from LFO directories.
Definition load_save.cpp:1847
static String getAuthorFromFile(const File &file)
Extracts the author's name from a given preset file.
Definition load_save.cpp:1039
static const std::string kWavetableFolderName
Definition load_save.h:75
static bool hasDataDirectory()
Checks if a data directory is properly configured (exists and has packs.json).
Definition load_save.cpp:1417
static File getUserSampleDirectory()
Retrieves the user's sample directory.
Definition load_save.cpp:1812
static std::wstring getComputerKeyboardLayout()
Retrieves the saved computer keyboard layout for playing notes.
Definition load_save.cpp:1648
static int compareFeatureVersionStrings(String a, String b)
Compares two feature version strings (ignoring patch-level differences).
Definition load_save.cpp:1887
static File getUserLfoDirectory()
Retrieves the user's LFO directory.
Definition load_save.cpp:1819
static void loadWavetables(SynthBase *synth, const json &wavetables)
Loads wavetable configurations into a SynthBase from a JSON array.
Definition load_save.cpp:188
static json getConfigJson()
Parses and returns the main configuration JSON.
Definition load_save.cpp:1187
static File getFavoritesFile()
Retrieves the file storing the user's favorites.
Definition load_save.cpp:1149
static void saveLoadedSkin(const std::string &name)
Saves the currently loaded skin name to the config.
Definition load_save.cpp:1300
static const std::string kUserDirectoryName
Various folder and directory name constants.
Definition load_save.h:73
static const int kMaxCommentLength
Maximum length of preset comments.
Definition load_save.h:70
static bool wasUpgraded()
Checks if Vital was upgraded from a previous version.
Definition load_save.cpp:1519
static void getAllUserSamples(Array< File > &samples)
Retrieves all user samples (from data and user directories).
Definition load_save.cpp:1879
static void saveWorkOffline(bool work_offline)
Saves the user's preference for working offline.
Definition load_save.cpp:1294
static void loadSample(SynthBase *synth, const json &sample)
Loads a sample configuration into the SynthBase from a JSON object.
Definition load_save.cpp:182
static std::set< std::string > getFavorites()
Retrieves all favorites as a set of string paths.
Definition load_save.cpp:1235
The MidiManager class handles all incoming MIDI messages and directs them to the synthesizer engine.
Definition midi_manager.h:44
A base class providing foundational functionality for the Vital synthesizer’s engine,...
Definition synth_base.h:42
Manages a keyboard layout mapping for a computer keyboard used as a MIDI input device.
Definition synth_types.h:134
nlohmann::json json
Definition line_generator.h:7
Contains classes and functions used within the Vital synthesizer framework.