transpose gadget; fixed Testron parameter stride (d'oh!)
parent
60310bf6f1
commit
cc5ef1534d
2
notes
2
notes
|
@ -91,7 +91,7 @@ TODO {
|
|||
gadgets and bundled things {
|
||||
(the simple things:)
|
||||
- gain and panning gadget
|
||||
note transpose
|
||||
- note transpose
|
||||
volume meter
|
||||
|
||||
Polyplexer (splits a single command input into several monophonic outputs and keeps track of individual notes between them)
|
||||
|
|
|
@ -79,7 +79,7 @@ void TestSynth::process() {
|
|||
} else if (n < -1 && id == noteId) { // note off
|
||||
tvol = 0.0;
|
||||
}
|
||||
mi += 5 + cp->data[mi+4];
|
||||
mi += 5 + cp->data[mi+4]*2;
|
||||
}
|
||||
|
||||
size_t ts = audioEngine->curTickSize();
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
#include "transpose.h"
|
||||
using Xybrid::Gadgets::Transpose;
|
||||
using namespace Xybrid::Data;
|
||||
|
||||
#include "data/porttypes.h"
|
||||
|
||||
#include "config/pluginregistry.h"
|
||||
using namespace Xybrid::Config;
|
||||
|
||||
#include "audio/audioengine.h"
|
||||
using namespace Xybrid::Audio;
|
||||
|
||||
#include "ui/patchboard/nodeobject.h"
|
||||
#include "ui/gadgets/knobgadget.h"
|
||||
using namespace Xybrid::UI;
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include <QCborMap>
|
||||
|
||||
namespace {
|
||||
bool _ = PluginRegistry::enqueueRegistration([] {
|
||||
auto i = std::make_shared<PluginInfo>();
|
||||
i->id = "gadget:transpose";
|
||||
i->displayName = "Transpose";
|
||||
i->category = "Gadget";
|
||||
//i->hidden = true;
|
||||
i->createInstance = []{ return std::make_shared<Transpose>(); };
|
||||
PluginRegistry::registerPlugin(i);
|
||||
//inf = i;
|
||||
});
|
||||
}
|
||||
|
||||
Transpose::Transpose() {
|
||||
|
||||
}
|
||||
|
||||
void Transpose::init() {
|
||||
addPort(Port::Input, Port::Command, 0);
|
||||
addPort(Port::Output, Port::Command, 0);
|
||||
}
|
||||
|
||||
void Transpose::process() {
|
||||
int off = amount.load();
|
||||
|
||||
auto in = std::static_pointer_cast<CommandPort>(port(Port::Input, Port::Command, 0));
|
||||
auto out = std::static_pointer_cast<CommandPort>(port(Port::Output, Port::Command, 0));
|
||||
in->pull();
|
||||
out->pull();
|
||||
|
||||
out->data = reinterpret_cast<uint8_t*>(audioEngine->tickAlloc(in->dataSize));
|
||||
out->dataSize = in->dataSize;
|
||||
memcpy(out->data, in->data, in->dataSize); // precopy
|
||||
|
||||
size_t mi = 0;
|
||||
while (out->dataSize >= mi+5) {
|
||||
int16_t& n = reinterpret_cast<int16_t&>(out->data[mi+2]);
|
||||
if (n > -1) {
|
||||
int nn = n;
|
||||
nn += off;
|
||||
if (nn < 0 || nn > 32767) nn = -1;
|
||||
n = static_cast<int16_t>(nn);
|
||||
}
|
||||
mi += 5 + out->data[mi+4]*2;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Transpose::saveData(QCborMap& m) {
|
||||
m.insert(QString("amount"), QCborValue(amount));
|
||||
}
|
||||
|
||||
void Transpose::loadData(QCborMap& m) {
|
||||
amount = static_cast<int>(m.value("amount").toInteger(0));
|
||||
}
|
||||
|
||||
void Transpose::onGadgetCreated() {
|
||||
if (!obj) return;
|
||||
|
||||
//obj->showName = false;
|
||||
//obj->canRename = false;
|
||||
obj->showPluginName = false;
|
||||
obj->setGadgetSize(12*2+32, 64);
|
||||
|
||||
{
|
||||
auto k = new KnobGadget(obj->contents);
|
||||
k->setPos(12, 16);
|
||||
k->min = -24;
|
||||
k->max = 24;
|
||||
k->step = 1;
|
||||
k->bind(amount);
|
||||
|
||||
k->setLabel("Transpose");
|
||||
//k->fText = [](double d) { return QString("%1dB").arg(d); };
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
|
||||
#include "data/node.h"
|
||||
|
||||
namespace Xybrid::Gadgets {
|
||||
class Transpose : public Data::Node {
|
||||
std::atomic<int> amount = 0;
|
||||
public:
|
||||
Transpose();
|
||||
~Transpose() override = default;
|
||||
|
||||
void init() override;
|
||||
//void reset() override;
|
||||
void process() override;
|
||||
|
||||
//void onRename() override;
|
||||
|
||||
void saveData(QCborMap&) override;
|
||||
void loadData(QCborMap&) override;
|
||||
|
||||
//void onUnparent(std::shared_ptr<Data::Graph>) override;
|
||||
//void onParent(std::shared_ptr<Data::Graph>) override;
|
||||
|
||||
void onGadgetCreated() override;
|
||||
|
||||
//void drawCustomChrome(QPainter*, const QStyleOptionGraphicsItem*) override;
|
||||
};
|
||||
}
|
|
@ -57,7 +57,8 @@ SOURCES += \
|
|||
gadgets/testsynth.cpp \
|
||||
util/keys.cpp \
|
||||
ui/gadgets/knobgadget.cpp \
|
||||
gadgets/gainbalance.cpp
|
||||
gadgets/gainbalance.cpp \
|
||||
gadgets/transpose.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainwindow.h \
|
||||
|
@ -90,7 +91,8 @@ HEADERS += \
|
|||
util/keys.h \
|
||||
ui/gadgets/knobgadget.h \
|
||||
gadgets/gainbalance.h \
|
||||
util/pattern.h
|
||||
util/pattern.h \
|
||||
gadgets/transpose.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
|
Loading…
Reference in New Issue