some new headers
git-svn-id: svn://localhost/ardour2/branches/3.0@8522 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
2a8629d11c
commit
c1c14e229e
77
libs/ardour/ardour/pannable.h
Normal file
77
libs/ardour/ardour/pannable.h
Normal 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__ */
|
45
libs/ardour/ardour/panner_manager.h
Normal file
45
libs/ardour/ardour/panner_manager.h
Normal 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__ */
|
39
libs/ardour/ardour/panner_search_path.h
Normal file
39
libs/ardour/ardour/panner_search_path.h
Normal 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__ */
|
83
libs/ardour/ardour/panner_shell.h
Normal file
83
libs/ardour/ardour/panner_shell.h
Normal 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__ */
|
Loading…
Reference in New Issue
Block a user