X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Faudio_unit.h;h=d82425765d9a7d9afc63598c34934791d342fbe2;hb=1bd4c5b3a212460eed1773f6b049d18c89625565;hp=51ef00c5921946e2f0f8417a23193626f5abdb74;hpb=58b71b15d85fc23eb377bb629ba31811c20d0c32;p=ardour.git diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index 51ef00c592..d82425765d 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -21,36 +21,97 @@ #ifndef __ardour_audio_unit_h__ #define __ardour_audio_unit_h__ +#include + #include +#include +#include +#include #include #include -struct ComponentDescription; +class CAComponent; +class CAAudioUnit; +class CAComponentDescription; +struct AudioBufferList; namespace ARDOUR { +class AudioEngine; +class Session; + class AUPlugin : public ARDOUR::Plugin { public: - AUPlugin (AudioEngine& engine, Session& session) : Plugin(engine, session) {}; - virtual ~AUPlugin () {}; + AUPlugin (AudioEngine& engine, Session& session, CAComponent* comp); + virtual ~AUPlugin (); + + uint32_t unique_id () const; + const char * label () const; + const char * name () const { return _info->name.c_str(); } + const char * maker () const; + uint32_t parameter_count () const; + float default_value (uint32_t port); + nframes_t latency () const; + void set_parameter (uint32_t which, float val); + float get_parameter (uint32_t which) const; + + int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const; + uint32_t nth_parameter (uint32_t which, bool& ok) const; + void activate (); + void deactivate (); + void set_block_size (nframes_t nframes); + + int connect_and_run (vector& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset); + std::set automatable() const; + string describe_parameter (uint32_t); + string state_node_name () const { return "audiounit"; } + void print_parameter (uint32_t, char*, uint32_t len) const; + + bool parameter_is_audio (uint32_t) const; + bool parameter_is_control (uint32_t) const; + bool parameter_is_input (uint32_t) const; + bool parameter_is_output (uint32_t) const; + + XMLNode& get_state(); + int set_state(const XMLNode& node); + + bool save_preset (string name); + bool load_preset (const string preset_label); + std::vector get_presets (); + + bool has_editor () const; + + CAAudioUnit* get_au () { return unit; } + CAComponent* get_comp () { return comp; } + + private: + CAComponent* comp; + CAAudioUnit* unit; + + AudioBufferList* in_list; + AudioBufferList* out_list; + + std::vector > parameter_map; }; +typedef boost::shared_ptr AUPluginPtr; + class AUPluginInfo : public PluginInfo { - public: - typedef boost::shared_ptr CompDescPtr; - + public: AUPluginInfo () { }; - ~AUPluginInfo () { }; + ~AUPluginInfo (); - CompDescPtr desc; + CAComponentDescription* desc; static PluginInfoList discover (); + PluginPtr load (Session& session); private: - static std::string get_name (ComponentDescription&); + static std::string get_name (CAComponentDescription&); + void setup_nchannels (CAComponentDescription&); }; typedef boost::shared_ptr AUPluginInfoPtr; @@ -58,4 +119,3 @@ typedef boost::shared_ptr AUPluginInfoPtr; } // namespace ARDOUR #endif // __ardour_audio_unit_h__ -