#include <iostream>
#include <sigc++/signal.h>
-#include <midi++/controllable.h>
+#include <pbd/stateful.h>
+#include <pbd/controllable.h>
#include <ardour/types.h>
-#include <ardour/stateful.h>
#include <ardour/curve.h>
using std::istream;
/* the basic panner API */
- virtual void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, jack_nframes_t nframes) = 0;
+ virtual void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, nframes_t nframes) = 0;
virtual void distribute_automated (Sample* src, Sample** obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers) = 0;
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers) = 0;
/* automation */
- virtual void snapshot (jack_nframes_t now) = 0;
- virtual void transport_stopped (jack_nframes_t frame) = 0;
+ virtual void snapshot (nframes_t now) = 0;
+ virtual void transport_stopped (nframes_t frame) = 0;
virtual void set_automation_state (AutoState) = 0;
virtual void set_automation_style (AutoStyle) = 0;
- /* MIDI control */
-
- struct MIDIControl : public MIDI::Controllable {
- MIDIControl (StreamPanner&, MIDI::Port *);
- void set_value (float);
- void send_feedback (gain_t);
- MIDI::byte* write_feedback (MIDI::byte* buf, int32_t& bufsize, gain_t val, bool force = false);
-
- pan_t (*midi_to_pan)(double val);
- double (*pan_to_midi)(pan_t p);
-
- StreamPanner& sp;
- bool setting;
- gain_t last_written;
- };
-
- MIDIControl& midi_control() { return _midi_control; }
- void reset_midi_control (MIDI::Port *, bool);
+ PBD::Controllable& control() { return _control; }
/* XXX this is wrong. for multi-dimensional panners, there
must surely be more than 1 automation curve.
virtual Curve& automation() = 0;
-
- virtual int load (istream&, string path, uint32_t&) = 0;
-
- virtual int save (ostream&) const = 0;
-
sigc::signal<void> Changed; /* for position */
sigc::signal<void> StateChanged; /* for mute */
int set_state (const XMLNode&);
virtual XMLNode& state (bool full_state) = 0;
-
+
Panner & get_parent() { return parent; }
+ /* old school automation loading */
+
+ virtual int load (istream&, string path, uint32_t&) = 0;
+
protected:
friend class Panner;
Panner& parent;
float effective_z;
bool _muted;
- MIDIControl _midi_control;
- void add_state (XMLNode&);
- bool get_midi_node_info (XMLNode * node, MIDI::eventType & ev, MIDI::channel_t & chan, MIDI::byte & additional);
- bool set_midi_node_info (XMLNode * node, MIDI::eventType ev, MIDI::channel_t chan, MIDI::byte additional);
+ struct PanControllable : public PBD::Controllable {
+ PanControllable (std::string name, StreamPanner& p) : Controllable (name), panner (p) {}
+
+ StreamPanner& panner;
+
+ void set_value (float);
+ float get_value (void) const;
+ bool can_send_feedback() const;
+ };
+ PanControllable _control;
+
+ void add_state (XMLNode&);
virtual void update () = 0;
};
and a type name. See EqualPowerStereoPanner as an example.
*/
- void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, jack_nframes_t nframes);
+ void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, nframes_t nframes);
- int load (istream&, string path, uint32_t&);
- int save (ostream&) const;
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void set_automation_state (AutoState);
void set_automation_style (AutoStyle);
Curve& automation() { return _automation; }
+ /* old school automation loading */
+
+ int load (istream&, string path, uint32_t&);
+
protected:
float left;
float right;
~EqualPowerStereoPanner ();
void distribute_automated (Sample* src, Sample** obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers);
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers);
void get_current_coefficients (pan_t*) const;
void get_desired_coefficients (pan_t*) const;
Multi2dPanner (Panner& parent);
~Multi2dPanner ();
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void set_automation_state (AutoState);
void set_automation_style (AutoStyle);
Curve& automation() { return _automation; }
- void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, jack_nframes_t nframes);
+ void distribute (Sample* src, Sample** obufs, gain_t gain_coeff, nframes_t nframes);
void distribute_automated (Sample* src, Sample** obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers);
-
- int load (istream&, string path, uint32_t&);
- int save (ostream&) const;
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers);
static StreamPanner* factory (Panner&);
static string name;
XMLNode& get_state (void);
int set_state (const XMLNode&);
+ /* old school automation loading */
+
+ int load (istream&, string path, uint32_t&);
+
private:
Curve _automation;
void update ();
Panner (string name, Session&);
virtual ~Panner ();
- void set_name (string);
-
bool bypassed() const { return _bypassed; }
void set_bypassed (bool yn);
void clear ();
void reset (uint32_t noutputs, uint32_t npans);
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void clear_automation ();
AutoStyle automation_style() const;
bool touching() const;
- int load ();
- int save () const;
-
XMLNode& get_state (void);
XMLNode& state (bool full);
int set_state (const XMLNode&);
std::vector<Output> outputs;
Session& session() const { return _session; }
- void reset_midi_control (MIDI::Port *, bool);
- void send_all_midi_feedback ();
- MIDI::byte* write_midi_feedback (MIDI::byte*, int32_t& bufsize);
-
enum LinkDirection {
SameDirection,
OppositeDirection
void set_position (float x, StreamPanner& orig);
void set_position (float x, float y, StreamPanner& orig);
void set_position (float x, float y, float z, StreamPanner& orig);
-
+
+ /* old school automation */
+
+ int load ();
+
private:
- string automation_path;
Session& _session;
uint32_t current_outs;
bool _linked;
LinkDirection _link_direction;
static float current_automation_version_number;
+
+ /* old school automation handling */
+
+ std::string automation_path;
+ void set_name (std::string);
};
-}; /* namespace ARDOUR */
+} // namespace ARDOUR
#endif /*__ardour_panner_h__ */