tomwalters@277: // Copyright 2010, Thomas Walters tomwalters@268: // tomwalters@268: // AIM-C: A C++ implementation of the Auditory Image Model tomwalters@268: // http://www.acousticscale.org/AIMC tomwalters@268: // tomwalters@268: // This program is free software: you can redistribute it and/or modify tomwalters@268: // it under the terms of the GNU General Public License as published by tomwalters@268: // the Free Software Foundation, either version 3 of the License, or tomwalters@268: // (at your option) any later version. tomwalters@268: // tomwalters@268: // This program is distributed in the hope that it will be useful, tomwalters@268: // but WITHOUT ANY WARRANTY; without even the implied warranty of tomwalters@268: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tomwalters@268: // GNU General Public License for more details. tomwalters@268: // tomwalters@268: // You should have received a copy of the GNU General Public License tomwalters@268: // along with this program. If not, see . tomwalters@268: tomwalters@273: %module aimc tomwalters@273: %include "std_string.i" tomwalters@268: %{ tomwalters@268: #include "Support/Common.h" tomwalters@268: #include "Support/Module.h" tomwalters@268: #include "Support/Parameters.h" tomwalters@268: #include "Support/SignalBank.h" tomwalters@268: #include "Modules/Features/ModuleGaussians.h" tomwalters@277: #include "Modules/BMM/ModuleGammatone.h" tomwalters@268: %} tomwalters@268: tomwalters@268: namespace aimc { tomwalters@268: class Parameters { tomwalters@268: public: tomwalters@268: Parameters(); tomwalters@268: ~Parameters(); tomwalters@268: bool Load(const char *sParamFilename); tomwalters@268: bool Save(const char *sParamFilename); tomwalters@273: std::string WriteString(); tomwalters@268: bool Merge(const char *sParamFilename); tomwalters@273: const char* DefaultString(const char *sName, const char *val); tomwalters@273: int DefaultInt(const char *sName, int val); tomwalters@273: unsigned int DefaultUInt(const char *sName, unsigned int val); tomwalters@273: float DefaultFloat(const char *sName, float val); tomwalters@273: bool DefaultBool(const char *sName, bool val); tomwalters@268: void SetString(const char *sName, const char *val); tomwalters@268: void SetInt(const char *sName, int val); tomwalters@268: void SetUInt(const char *sName, unsigned int val); tomwalters@268: void SetFloat(const char *sName, float val); tomwalters@268: void SetBool(const char *sName, bool val); tomwalters@268: const char *GetString(const char *sName); tomwalters@268: int GetInt(const char *sName); tomwalters@268: unsigned int GetUInt(const char *sName); tomwalters@268: float GetFloat(const char *sName); tomwalters@268: bool GetBool(const char *sName); tomwalters@268: bool IsSet(const char *sName); tomwalters@268: bool Parse(const char *sCmd); tomwalters@268: bool Delete(const char *sName); tomwalters@268: static const unsigned int MaxParamNameLength = 128; tomwalters@268: }; tomwalters@268: tomwalters@268: class SignalBank { tomwalters@268: public: tomwalters@273: SignalBank(); tomwalters@273: ~SignalBank(); tomwalters@273: bool Initialize(int channel_count, int signal_length, float sample_rate); tomwalters@273: bool Initialize(const SignalBank &input); tomwalters@273: bool Validate() const; tomwalters@273: const vector &operator[](int channel) const; tomwalters@273: float sample(int channel, int index) const; tomwalters@273: void set_sample(int channel, int index, float value); tomwalters@273: float sample_rate() const; tomwalters@273: int buffer_length() const; tomwalters@273: int start_time() const; tomwalters@273: void set_start_time(int start_time); tomwalters@273: float get_centre_frequency(int i) const; tomwalters@273: void set_centre_frequency(int i, float cf); tomwalters@273: bool initialized() const; tomwalters@273: int channel_count() const; tomwalters@268: }; tomwalters@268: tomwalters@268: class Module { tomwalters@268: public: tomwalters@268: explicit Module(Parameters *parameters); tomwalters@268: virtual ~Module(); tomwalters@268: bool Initialize(const SignalBank &input); tomwalters@268: bool initialized() const; tomwalters@268: bool AddTarget(Module* target_module); tomwalters@268: bool DeleteTarget(Module* target_module); tomwalters@268: void DeleteAllTargets(); tomwalters@268: virtual void Process(const SignalBank &input) = 0; tomwalters@268: virtual void Reset() = 0; tomwalters@268: const SignalBank* GetOutputBank() const; tomwalters@268: private: tomwalters@268: DISALLOW_COPY_AND_ASSIGN(Module); tomwalters@268: }; tomwalters@268: tomwalters@268: class ModuleGaussians : public Module tomwalters@268: { tomwalters@268: public: tomwalters@268: ModuleGaussians(Parameters *pParam); tomwalters@268: virtual ~ModuleGaussians(); tomwalters@268: virtual void Process(const SignalBank &input); tomwalters@268: void Reset(); tomwalters@268: }; tomwalters@277: tomwalters@277: class ModuleGammatone : public Module tomwalters@277: { tomwalters@277: public: tomwalters@277: ModuleGammatone(Parameters *pParam); tomwalters@277: virtual ~ModuleGammatone(); tomwalters@277: virtual void Process(const SignalBank &input); tomwalters@277: void Reset(); tomwalters@277: }; tomwalters@268: } // namespace aimc tomwalters@268: