* This is equivalent to the following lua code
* @code
* function (processor, param_id)
- * local plugininsert = processor:to_insert ()
- * local plugin = plugininsert:plugin(0)
+ * local plugininsert = processor:to_insert ()
+ * local plugin = plugininsert:plugin(0)
* local _, t = plugin:get_parameter_descriptor(param_id, ARDOUR.ParameterDescriptor ())
* local ctrl = Evoral.Parameter (ARDOUR.AutomationType.PluginAutomation, 0, param_id)
* local ac = pi:automation_control (ctrl, false)
* end
* @endcode
*
- * Example usage: get 3rd input parameter of first plugin on the given route
+ * Example usage: get the third input parameter of first plugin on the given route
* (Ardour starts counting at zero).
* @code
* local al, cl, pd = ARDOUR.LuaAPI.plugin_automation (route:nth_plugin (0), 3)
/* special processors */
boost::shared_ptr<InternalSend> monitor_send() const { return _monitor_send; }
+ /** the signal processorat at end of the processing chain which produces output */
boost::shared_ptr<Delivery> main_outs() const { return _main_outs; }
boost::shared_ptr<InternalReturn> internal_return() const { return _intreturn; }
boost::shared_ptr<MonitorProcessor> monitor_control() const { return _monitor_control; }
std::string new_audio_source_path_for_embedded (const std::string& existing_path);
std::string new_audio_source_path (const std::string&, uint32_t nchans, uint32_t chan, bool destructive, bool take_required);
std::string new_midi_source_path (const std::string&);
+ /** create a new track or bus from a template (XML path)
+ * @param how_many how many tracks or busses to create
+ * @param template_path path to xml template file
+ * @param name name (prefix) of the route to create
+ * @param pd Playlist disposition
+ * @return list of newly created routes
+ */
RouteList new_route_from_template (uint32_t how_many, const std::string& template_path, const std::string& name, PlaylistDisposition pd = NewPlaylist);
RouteList new_route_from_template (uint32_t how_many, XMLNode&, const std::string& name, PlaylistDisposition pd = NewPlaylist);
std::vector<std::string> get_paths_for_new_sources (bool allow_replacing, const std::string& import_file_path, uint32_t channels);
};
int save_as (SaveAs&);
+ /** save session
+ * @param snapshot_name name of the session (use an empty string for the current name)
+ * @param pending save a 'recovery', not full state (default: false)
+ * @param switch_to_snapshot switch to given snapshot after saving (default: false)
+ * @param template_only save a session template (default: false)
+ * @return zero on success
+ */
int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false, bool template_only = false);
int restore_state (std::string snapshot_name);
int save_template (std::string template_name, bool replace_existing = false);
virtual void freeze_me (InterThreadInfo&) = 0;
virtual void unfreeze () = 0;
- /** @return true if the track can be bounced, or false otherwise.
+ /** Test if the track can be bounced with the given settings.
+ * If sends/inserts/returns are present in the signal path or the given track
+ * has no audio outputs bouncing is not possible.
+ *
+ * @param endpoint the processor to tap the signal off (or nil for the top)
+ * @param include_endpoint include the given processor in the bounced audio.
+ * @return true if the track can be bounced, or false otherwise.
*/
virtual bool bounceable (boost::shared_ptr<Processor> endpoint, bool include_endpoint) const = 0;
virtual boost::shared_ptr<Region> bounce (InterThreadInfo&) = 0;
- virtual boost::shared_ptr<Region> bounce_range (framepos_t start, framepos_t end, InterThreadInfo&,
+
+ /** Bounce the given range to a new audio region.
+ * @param start start time (in samples)
+ * @param end end time (in samples)
+ * @param itt asynchronous progress report and cancel
+ * @param endpoint the processor to tap the signal off (or nil for the top)
+ * @param include_endpoint include the given processor in the bounced audio.
+ * @return a new audio region (or nil in case of error)
+ */
+ virtual boost::shared_ptr<Region> bounce_range (framepos_t start, framepos_t end, InterThreadInfo& itt,
boost::shared_ptr<Processor> endpoint, bool include_endpoint) = 0;
virtual int export_stuff (BufferSet& bufs, framepos_t start_frame, framecnt_t nframes,
boost::shared_ptr<Processor> endpoint, bool include_endpoint, bool for_export, bool for_freeze) = 0;
inline bool owns_buffer() const { return _owns_buf; }
+ /** set event data (e.g. midi data)
+ * @param size number of bytes
+ * @param buf raw 8bit data
+ * @param own set to true if the buffer owns the data (copy, allocate/free) or false to reference previously allocated data.
+ */
inline void set_buffer(uint32_t size, uint8_t* buf, bool own) {
if (_owns_buf) {
free(_buf);