From c03bd6049a635ae42c0ca2cc3bc88fc1f489b477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Nusser?= Date: Tue, 17 Jan 2017 14:06:53 +0100 Subject: Make DrumkitCreator clean up the created files in the destructor. --- test/drumkit_creator.h | 153 +++++++++++++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 67 deletions(-) (limited to 'test/drumkit_creator.h') 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 #include -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 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 audiofiles; + }; + + struct InstrumentData + { + std::string name; + std::string filename; + std::vector sample_data; + }; + + struct DrumkitData + { + std::string name; + std::size_t number_of_channels; + std::vector instruments; + std::vector 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 created_files; + std::vector created_directories; + + bool is_valid(const DrumkitData& data); + + std::string createTemporaryDirectory(const std::string& name); + std::vector 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 sample_data; -}; - -struct DrumkitData -{ - std::string name; - std::size_t number_of_channels; - std::vector instruments; - std::vector 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 -- cgit v1.2.3