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