tomwalters@268: // Copyright 2008-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@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@268: } // namespace aimc
tomwalters@268: