summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/server/LV2Node.cpp14
-rw-r--r--src/server/LV2Node.hpp6
-rw-r--r--src/server/NodeImpl.cpp1
-rw-r--r--src/server/NodeImpl.hpp8
-rw-r--r--src/server/internals/Delay.cpp8
5 files changed, 22 insertions, 15 deletions
diff --git a/src/server/LV2Node.cpp b/src/server/LV2Node.cpp
index 23e64df6..3d1e4a52 100644
--- a/src/server/LV2Node.cpp
+++ b/src/server/LV2Node.cpp
@@ -31,6 +31,7 @@
#include "ingen/shared/URIs.hpp"
#include "AudioBuffer.hpp"
+#include "Driver.hpp"
#include "Engine.hpp"
#include "InputPort.hpp"
#include "LV2Node.hpp"
@@ -68,10 +69,13 @@ LV2Node::~LV2Node()
}
SharedPtr<LilvInstance>
-LV2Node::make_instance(Shared::URIs& uris, uint32_t voice, bool preparing)
+LV2Node::make_instance(Shared::URIs& uris,
+ SampleRate rate,
+ uint32_t voice,
+ bool preparing)
{
LilvInstance* inst = lilv_plugin_instantiate(
- _lv2_plugin->lilv_plugin(), _srate, _features->array());
+ _lv2_plugin->lilv_plugin(), rate, _features->array());
if (!inst) {
Raul::error(Raul::fmt("Failed to instantiate <%1%>\n")
@@ -142,10 +146,11 @@ LV2Node::prepare_poly(BufferFactory& bufs, uint32_t poly)
if (_polyphony == poly)
return true;
+ const SampleRate rate = bufs.engine().driver()->sample_rate();
assert(!_prepared_instances);
_prepared_instances = new Instances(poly, *_instances, SharedPtr<void>());
for (uint32_t i = _polyphony; i < _prepared_instances->size(); ++i) {
- SharedPtr<LilvInstance> inst = make_instance(bufs.uris(), i, true);
+ SharedPtr<LilvInstance> inst = make_instance(bufs.uris(), rate, i, true);
if (!inst) {
return false;
}
@@ -370,9 +375,10 @@ LV2Node::instantiate(BufferFactory& bufs)
_features = info->world().lv2_features().lv2_features(&info->world(), this);
// Actually create plugin instances and port buffers.
+ const SampleRate rate = bufs.engine().driver()->sample_rate();
_instances = new Instances(_polyphony, SharedPtr<void>());
for (uint32_t i = 0; i < _polyphony; ++i) {
- _instances->at(i) = make_instance(bufs.uris(), i, false);
+ _instances->at(i) = make_instance(bufs.uris(), rate, i, false);
if (!_instances->at(i)) {
return false;
}
diff --git a/src/server/LV2Node.hpp b/src/server/LV2Node.hpp
index b588de78..60d412c8 100644
--- a/src/server/LV2Node.hpp
+++ b/src/server/LV2Node.hpp
@@ -65,8 +65,10 @@ public:
SampleCount offset);
protected:
- SharedPtr<LilvInstance> make_instance(
- Shared::URIs& uris, uint32_t voice, bool preparing);
+ SharedPtr<LilvInstance> make_instance(Shared::URIs& uris,
+ SampleRate rate,
+ uint32_t voice,
+ bool preparing);
inline LilvInstance* instance(uint32_t voice) {
return (LilvInstance*)(*_instances)[voice].get();
diff --git a/src/server/NodeImpl.cpp b/src/server/NodeImpl.cpp
index b6b3b564..39affd63 100644
--- a/src/server/NodeImpl.cpp
+++ b/src/server/NodeImpl.cpp
@@ -43,7 +43,6 @@ NodeImpl::NodeImpl(PluginImpl* plugin,
, _ports(NULL)
, _context(Context::AUDIO)
, _polyphony((polyphonic && parent) ? parent->internal_poly() : 1)
- , _srate(srate)
, _input_ready(1)
, _process_lock(0)
, _n_inputs_ready(0)
diff --git a/src/server/NodeImpl.hpp b/src/server/NodeImpl.hpp
index f97c6d90..995450f3 100644
--- a/src/server/NodeImpl.hpp
+++ b/src/server/NodeImpl.hpp
@@ -183,10 +183,9 @@ public:
/** The Patch this Node belongs to. */
inline PatchImpl* parent_patch() const { return (PatchImpl*)_parent; }
- Context::ID context() const { return _context; }
- SampleRate sample_rate() const { return _srate; }
- uint32_t num_ports() const { return _ports ? _ports->size() : 0; }
- virtual uint32_t polyphony() const { return _polyphony; }
+ Context::ID context() const { return _context; }
+ uint32_t num_ports() const { return _ports ? _ports->size() : 0; }
+ virtual uint32_t polyphony() const { return _polyphony; }
/** Used by the process order finding algorithm (ie during connections) */
bool traversed() const { return _traversed; }
@@ -197,7 +196,6 @@ protected:
Raul::Array<PortImpl*>* _ports; ///< Access in audio thread only
Context::ID _context; ///< Context this node runs in
uint32_t _polyphony;
- SampleRate _srate;
Raul::Semaphore _input_ready; ///< Parallelism: input ready signal
Raul::AtomicInt _process_lock; ///< Parallelism: Waiting on inputs 'lock'
Raul::AtomicInt _n_inputs_ready; ///< Parallelism: # input ready signals this cycle
diff --git a/src/server/internals/Delay.cpp b/src/server/internals/Delay.cpp
index f825ffa5..d7cbcfb9 100644
--- a/src/server/internals/Delay.cpp
+++ b/src/server/internals/Delay.cpp
@@ -25,14 +25,15 @@
#include "raul/log.hpp"
#include "raul/midi_events.h"
-#include "internals/Delay.hpp"
#include "AudioBuffer.hpp"
#include "Driver.hpp"
+#include "Engine.hpp"
#include "InputPort.hpp"
#include "InternalPlugin.hpp"
#include "OutputPort.hpp"
#include "PatchImpl.hpp"
#include "ProcessContext.hpp"
+#include "internals/Delay.hpp"
#include "util.hpp"
#define LOG(s) s << "[DelayNode] "
@@ -104,7 +105,8 @@ void
DelayNode::activate(BufferFactory& bufs)
{
NodeImpl::activate(bufs);
- const SampleCount min_size = MAX_DELAY_SECONDS * _srate;
+ const SampleRate rate = bufs.engine().driver()->sample_rate();
+ const SampleCount min_size = MAX_DELAY_SECONDS * rate;
// Smallest power of two larger than min_size
SampleCount size = 1;
@@ -154,7 +156,7 @@ DelayNode::process(ProcessContext& context)
float* const out = out_buf->data();
const float delay_time = delay_buf->data()[0];
const uint32_t buffer_mask = plugin_data->_buffer_mask;
- const unsigned int sample_rate = plugin_data->_srate;
+ const SampleRate sample_rate = context.engine().driver()->sample_rate();
float delay_samples = plugin_data->_delay_samples;
int64_t write_phase = plugin_data->_write_phase;
const uint32_t sample_count = context.nframes();