From fd4c35d46a63b22795e526d1e0375a9b2d6d441c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 13 Jan 2020 08:34:37 +0100 Subject: Add rubberband Lua bindings to process ardour regions --- libs/ardour/ardour/lua_api.h | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'libs/ardour/ardour') diff --git a/libs/ardour/ardour/lua_api.h b/libs/ardour/ardour/lua_api.h index bed9db5aa2..4d3bd38080 100644 --- a/libs/ardour/ardour/lua_api.h +++ b/libs/ardour/ardour/lua_api.h @@ -22,12 +22,15 @@ #include #include #include +#include +#include #include #include "evoral/Note.h" #include "ardour/libardour_visibility.h" +#include "ardour/audioregion.h" #include "ardour/midi_model.h" #include "ardour/processor.h" #include "ardour/session.h" @@ -306,6 +309,48 @@ namespace ARDOUR { namespace LuaAPI { }; + class Rubberband : public Readable , public boost::enable_shared_from_this + { + public: + Rubberband (boost::shared_ptr, bool percussive); + ~Rubberband (); + bool set_strech_and_pitch (double stretch_ratio, double pitch_ratio); + bool set_mapping (luabridge::LuaRef tbl); + boost::shared_ptr process (luabridge::LuaRef cb); + boost::shared_ptr readable (); + + /* readable API */ + samplecnt_t readable_length () const { return _read_len; } + uint32_t n_channels () const { return _n_channels; } + samplecnt_t read (Sample*, samplepos_t pos, samplecnt_t cnt, int channel) const; + + private: + Rubberband (Rubberband const&); // no copy construction + bool read_region (bool study); + bool retrieve (float**); + void cleanup (bool abort); + boost::shared_ptr finalize (); + + boost::shared_ptr _region; + + uint32_t _n_channels; + samplecnt_t _read_len; + samplecnt_t _read_start; + samplecnt_t _read_offset; + + std::vector > _asrc; + + RubberBand::RubberBandStretcher _rbs; + std::map _mapping; + + double _stretch_ratio; + double _pitch_ratio; + + luabridge::LuaRef* _cb; + boost::shared_ptr _self; + static const samplecnt_t _bufsize; + }; + boost::shared_ptr > new_noteptr (uint8_t, Temporal::Beats, Temporal::Beats, uint8_t, uint8_t); -- cgit v1.2.3