summaryrefslogtreecommitdiff
path: root/test/drumkit_creator.h
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2017-01-17 14:06:53 +0100
committerAndré Nusser <andre.nusser@googlemail.com>2017-01-17 14:27:25 +0100
commitc03bd6049a635ae42c0ca2cc3bc88fc1f489b477 (patch)
tree9dc136410b1fcbdaa255c7fc79202cd36794c04c /test/drumkit_creator.h
parentb328df4dea35d4d4c1713bd3fb6bda48d30b9e1b (diff)
Make DrumkitCreator clean up the created files in the destructor.
Diffstat (limited to 'test/drumkit_creator.h')
-rw-r--r--test/drumkit_creator.h153
1 files changed, 86 insertions, 67 deletions
diff --git a/test/drumkit_creator.h b/test/drumkit_creator.h
index 93a6f36..7c63e6a 100644
--- a/test/drumkit_creator.h
+++ b/test/drumkit_creator.h
@@ -30,72 +30,91 @@
#include <vector>
#include <cstdint>
-namespace drumkit_creator
+class DrumkitCreator
{
-
-using Sample = uint16_t;
-
-//! If is_random is true then this overrules the sample member. If is_random
-//! is false however, every sample is chosen as the one in the member variable.
-struct WavInfo
-{
- const std::string filename;
- const std::size_t length;
-
- const bool is_random;
- const Sample sample;
-
- WavInfo(const std::string& filename, std::size_t length)
- : filename(filename), length(length), is_random(true), sample(0) {}
-
- WavInfo(const std::string& filename, std::size_t length, Sample sample)
- : filename(filename), length(length), is_random(false), sample(sample) {}
-};
-
-struct Audiofile
-{
- WavInfo* wav_info;
- std::size_t filechannel;
-};
-
-struct SampleData
-{
- std::string name;
- // Vector of non-owning pointers and therefore it is raw.
- std::vector<Audiofile> audiofiles;
+public:
+ using Sample = uint16_t;
+
+ //! If is_random is true then this overrules the sample member. If is_random
+ //! is false however, every sample is chosen as the one in the member variable.
+ struct WavInfo
+ {
+ const std::string filename;
+ const std::size_t length;
+
+ const bool is_random;
+ const Sample sample;
+
+ WavInfo(const std::string& filename, std::size_t length)
+ : filename(filename), length(length), is_random(true), sample(0) {}
+
+ WavInfo(const std::string& filename, std::size_t length, Sample sample)
+ : filename(filename), length(length), is_random(false), sample(sample) {}
+ };
+
+ struct Audiofile
+ {
+ WavInfo* wav_info;
+ std::size_t filechannel;
+ };
+
+ struct SampleData
+ {
+ std::string name;
+ // Vector of non-owning pointers and therefore it is raw.
+ std::vector<Audiofile> audiofiles;
+ };
+
+ struct InstrumentData
+ {
+ std::string name;
+ std::string filename;
+ std::vector<SampleData> sample_data;
+ };
+
+ struct DrumkitData
+ {
+ std::string name;
+ std::size_t number_of_channels;
+ std::vector<InstrumentData> instruments;
+ std::vector<WavInfo> wav_infos;
+ };
+
+ DrumkitCreator() = default;
+
+ //! This destructor removes all the created temporary files and directories.
+ ~DrumkitCreator();
+
+ //! Creates a drumkit from data in the temporary directory of the OS and
+ //! returns its filename.
+ std::string create(const DrumkitData& data);
+
+ //! Creates a single wav file
+ void createWav(const WavInfo& wav_info, std::size_t number_of_channels, const std::string& dir);
+
+ //! Those functions create some special wav files, drumkits, and midimaps
+ //@{
+ std::string createStdKit(const std::string& name);
+ std::string createSmallKit(const std::string& name);
+ std::string createHugeKit(const std::string& name);
+
+ std::string createSingleChannelWav(const std::string& name);
+ std::string createMultiChannelWav(const std::string& name);
+ std::string create0000Wav(const std::string& name);
+
+ std::string createStdMidimap(const std::string& name);
+ //@}
+
+private:
+ std::vector<std::string> created_files;
+ std::vector<std::string> created_directories;
+
+ bool is_valid(const DrumkitData& data);
+
+ std::string createTemporaryDirectory(const std::string& name);
+ std::vector<Sample> createData(const WavInfo& wav_info,
+ std::size_t number_of_channels);
+ void createInstrument(const InstrumentData& data, std::size_t number_of_channels,
+ const std::string& dir);
+ std::string createDrumkitFile(const DrumkitData& data, const std::string& dir);
};
-
-struct InstrumentData
-{
- std::string name;
- std::string filename;
- std::vector<SampleData> sample_data;
-};
-
-struct DrumkitData
-{
- std::string name;
- std::size_t number_of_channels;
- std::vector<InstrumentData> instruments;
- std::vector<WavInfo> wav_infos;
-};
-
-//! Creates a drumkit from data in the temporary directory of the OS and
-//! returns its filename.
-std::string create(const DrumkitData& data);
-
-//! Creates a single wav file
-void createWav(const WavInfo& wav_info, std::size_t number_of_channels, const std::string& dir);
-
-//! Those functions create some special wav files, drumkits, and midimaps
-std::string createStdKit(const std::string& name);
-std::string createSmallKit(const std::string& name);
-std::string createHugeKit(const std::string& name);
-
-std::string createSingleChannelWav(const std::string& name);
-std::string createMultiChannelWav(const std::string& name);
-std::string create0000Wav(const std::string& name);
-
-std::string createStdMidimap(const std::string& name);
-
-} // end drumkit_creator