58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
#include <string>
|
|
#include "NodeBase.hpp"
|
|
#include "FlowDef.hpp"
|
|
#include <mxl/flow.h>
|
|
#include <mxl/time.h>
|
|
|
|
namespace dmf {
|
|
class GainDbNode: public dmf::NodeBase {
|
|
void run() override {
|
|
if (!config().contains("audio_in_flow_id") || !config().contains("audio_out_flow_id")) {
|
|
log("no audio connected to in or out");
|
|
return;
|
|
}
|
|
const std::string in_flow_id = config().at("audio_in_flow_id").at("id").get<std::string>();
|
|
dmf::AudioFlowInfo in_flow_info = dmf::read_audio_flow_info(domain(), in_flow_id);
|
|
int gain = 0;
|
|
if (config().contains("gain")) {
|
|
gain = config().at("gain").get<int>();
|
|
}
|
|
// create writer
|
|
int sample_rate = in_flow_info.sample_rate;
|
|
const std::string out_flow_id = config().at("audio_out_flow_id").at("id").get<std::string>();
|
|
std::string flow_def = dmf::make_audio_flow_def(
|
|
out_flow_id,
|
|
node_id(),
|
|
sample_rate,
|
|
in_flow_info.channels,
|
|
32,
|
|
sample_rate,
|
|
in_flow_info.samples_per_grain
|
|
);
|
|
mxlFlowWriter writer{};
|
|
mxlFlowConfigInfo cfg{};
|
|
bool created = false;
|
|
mxlStatus st = mxlCreateFlowWriter(instance(), flow_def.c_str(), nullptr, &writer, &cfg, &created);
|
|
if (st != MXL_STATUS_OK) {
|
|
log("audio mxlCreateFlowWriter failed (%s) — continuing without audio", dmf::mxl_status_str(st));
|
|
} else {
|
|
log("audio channels=%u buffer=%u samples",
|
|
cfg.continuous.channelCount, cfg.continuous.bufferLength);
|
|
}
|
|
|
|
const mxlRational rate = {sample_rate, 1};
|
|
uint64_t index = mxlGetCurrentIndex(&rate);
|
|
while (dmf::g_running.load(std::memory_order_relaxed)) {
|
|
mxlMutableBufferSlice slice{};
|
|
uint8_t* buf = nullptr;
|
|
|
|
}
|
|
mxlReleaseFlowWriter(instance(), writer);
|
|
}
|
|
};
|
|
}
|
|
|
|
int main() {
|
|
dmf::GainDbNode node;
|
|
return node.execute();
|
|
} |