13
0

some new headers

git-svn-id: svn://localhost/ardour2/branches/3.0@8522 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-01-17 17:53:19 +00:00
parent 2a8629d11c
commit c1c14e229e
4 changed files with 244 additions and 0 deletions

View File

@ -0,0 +1,77 @@
/*
Copyright (C) 2011 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __libardour_pannable_h__
#define __libardour_pannable_h__
#include <string>
#include <boost/shared_ptr.hpp>
#include "evoral/Parameter.hpp"
#include "ardour/automatable.h"
#include "ardour/session_handle.h"
namespace ARDOUR {
class Session;
class AutomationControl;
struct Pannable : public Automatable, public SessionHandleRef {
Pannable (Session& s);
boost::shared_ptr<AutomationControl> pan_azimuth_control;
boost::shared_ptr<AutomationControl> pan_elevation_control;
boost::shared_ptr<AutomationControl> pan_width_control;
boost::shared_ptr<AutomationControl> pan_frontback_control;
boost::shared_ptr<AutomationControl> pan_lfe_control;
Session& session() { return _session; }
void set_automation_state (AutoState);
AutoState automation_state() const { return _auto_state; }
PBD::Signal1<void, AutoState> automation_state_changed;
void set_automation_style (AutoStyle m);
AutoStyle automation_style() const { return _auto_style; }
PBD::Signal0<void> automation_style_changed;
bool automation_playback() const {
return (_auto_state & Play) || ((_auto_state & Touch) && !touching());
}
bool automation_write () const {
return ((_auto_state & Write) || ((_auto_state & Touch) && touching()));
}
void start_touch (double when);
void stop_touch (bool mark, double when);
bool touching() const { return g_atomic_int_get (&_touching); }
bool writing() const { return _auto_state == Write; }
bool touch_enabled() const { return _auto_state == Touch; }
protected:
AutoState _auto_state;
AutoStyle _auto_style;
gint _touching;
};
} // namespace
#endif /* __libardour_pannable_h__ */

View File

@ -0,0 +1,45 @@
#ifndef __ardour_panner_manager_h__
#define __ardour_panner_manager_h__
#include <dlfcn.h>
#include "ardour/panner.h"
#include "ardour/session_handle.h"
namespace ARDOUR {
struct PannerInfo {
PanPluginDescriptor descriptor;
void* module;
PannerInfo (PanPluginDescriptor& d, void* handle)
: descriptor (d)
, module (handle)
{}
~PannerInfo () {
dlclose (module);
}
};
class PannerManager : public ARDOUR::SessionHandlePtr
{
public:
~PannerManager ();
static PannerManager& instance ();
void discover_panners ();
std::list<PannerInfo*> panner_info;
PannerInfo* select_panner (ChanCount in, ChanCount out);
private:
PannerManager();
static PannerManager* _instance;
PannerInfo* get_descriptor (std::string path);
int panner_discover (std::string path);
};
} // namespace
#endif /* __ardour_panner_manager_h__ */

View File

@ -0,0 +1,39 @@
/*
Copyright (C) 2011 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ardour_panner_search_path_h__
#define __ardour_panner_search_path_h__
#include "pbd/search_path.h"
namespace ARDOUR {
/**
* return a SearchPath containing directories in which to look for
* panner plugins.
*
* If ARDOUR_PANNER_PATH is defined then the SearchPath returned
* will contain only those directories specified in it, otherwise it will
* contain the user and system directories which may contain control
* surface plugins.
*/
PBD::SearchPath panner_search_path ();
} // namespace ARDOUR
#endif /* __ardour_panner_search_path_h__ */

View File

@ -0,0 +1,83 @@
/*
Copyright (C) 2004-2011 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ardour_panner_shell_h__
#define __ardour_panner_shell_h__
#include <cmath>
#include <cassert>
#include <vector>
#include <string>
#include <iostream>
#include <boost/noncopyable.hpp>
#include "pbd/cartesian.h"
#include "ardour/types.h"
#include "ardour/session_object.h"
namespace ARDOUR {
class Session;
class Panner;
class BufferSet;
class AudioBuffer;
class Speakers;
class Pannable;
/** Class to manage panning by instantiating and controlling
* the appropriate specific PannerBase objects for a given
* in/out configuration.
*/
class PannerShell : public SessionObject
{
public:
PannerShell (std::string name, Session&, boost::shared_ptr<Pannable>);
virtual ~PannerShell ();
std::string describe_parameter (Evoral::Parameter param);
bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) const { return true; };
void configure_io (ChanCount in, ChanCount out);
/// The fundamental Panner function
void run (BufferSet& src, BufferSet& dest, framepos_t start_frame, framepos_t end_frames, pframes_t nframes);
XMLNode& get_state (void);
XMLNode& state (bool full);
int set_state (const XMLNode&, int version);
PBD::Signal0<void> Changed; /* panner and/or outputs count changed */
boost::shared_ptr<Panner> panner() const { return _panner; }
boost::shared_ptr<Pannable> pannable() const { return _pannable; }
private:
void distribute_no_automation (BufferSet& src, BufferSet& dest, pframes_t nframes, gain_t gain_coeff);
boost::shared_ptr<Panner> _panner;
boost::shared_ptr<Pannable> _pannable;
static float current_automation_version_number;
};
} // namespace ARDOUR
#endif /* __ardour_panner_shell_h__ */