renderer: updated audio to work with minor node overhaul

This commit is contained in:
itsmattkc
2020-06-12 03:28:43 +10:00
parent a6a5c113ca
commit e2e8a6859c
10 changed files with 111 additions and 74 deletions
+19 -6
View File
@@ -62,29 +62,42 @@ QString PanNode::Description() const
NodeValueTable PanNode::Value(NodeValueDatabase &value) const
{
// Create a sample job
SampleJob job(samples_input_);
SampleJob job(samples_input_, value);
job.InsertValue(panning_input_, value);
// Push it to our table
NodeValueTable table = value.Merge();
if (!qIsNull(job.GetValue(samples_input_).data().toDouble())) {
table.Push(NodeParam::kSampleJob, QVariant::fromValue(job), this);
if (job.HasSamples()) {
float pan_volume = job.GetValue(panning_input_).data().toFloat();
if (panning_input_->is_static()) {
if (!qIsNull(pan_volume) && job.samples()->audio_params().channel_count() == 2) {
if (pan_volume > 0) {
job.samples()->transform_volume_for_channel(0, 1.0f - pan_volume);
} else {
job.samples()->transform_volume_for_channel(1, 1.0f + pan_volume);
}
}
table.Push(NodeParam::kSamples, QVariant::fromValue(job.samples()), this);
} else {
table.Push(NodeParam::kSampleJob, QVariant::fromValue(job), this);
}
}
return table;
}
void PanNode::ProcessSamples(NodeValueDatabase &values, const AudioParams &params, const SampleBufferPtr input, SampleBufferPtr output, int index) const
void PanNode::ProcessSamples(NodeValueDatabase &values, const SampleBufferPtr input, SampleBufferPtr output, int index) const
{
if (params.channel_count() != 2) {
if (input->audio_params().channel_count() != 2) {
// This node currently only works for stereo audio
return;
}
float pan_val = values[panning_input_].Get(NodeParam::kFloat).toFloat();
for (int i=0;i<params.channel_count();i++) {
for (int i=0;i<input->audio_params().channel_count();i++) {
output->data()[i][index] = input->data()[i][index];
}
+1 -1
View File
@@ -39,7 +39,7 @@ public:
virtual NodeValueTable Value(NodeValueDatabase &value) const override;
virtual void ProcessSamples(NodeValueDatabase &values, const AudioParams& params, const SampleBufferPtr input, SampleBufferPtr output, int index) const override;
virtual void ProcessSamples(NodeValueDatabase &values, const SampleBufferPtr input, SampleBufferPtr output, int index) const override;
virtual void Retranslate() override;
+15 -5
View File
@@ -60,23 +60,33 @@ QString VolumeNode::Description() const
NodeValueTable VolumeNode::Value(NodeValueDatabase &value) const
{
SampleJob job(samples_input_);
SampleJob job(samples_input_, value);
job.InsertValue(volume_input_, value);
NodeValueTable table = value.Merge();
if (qFuzzyCompare(job.GetValue(volume_input_).data().toDouble(), 1.0)) {
table.Push(NodeParam::kSampleJob, QVariant::fromValue(job), this);
if (job.HasSamples()) {
float volume_val = job.GetValue(volume_input_).data().toFloat();
if (volume_input_->is_static()) {
// Volume never changes so we can make some performance optimizations here
if (!qFuzzyCompare(volume_val, 1.0f)) {
job.samples()->transform_volume(volume_val);
}
table.Push(NodeParam::kSamples, QVariant::fromValue(job.samples()), this);
} else {
table.Push(NodeParam::kSampleJob, QVariant::fromValue(job), this);
}
}
return table;
}
void VolumeNode::ProcessSamples(NodeValueDatabase &values, const AudioParams& params, const SampleBufferPtr input, SampleBufferPtr output, int index) const
void VolumeNode::ProcessSamples(NodeValueDatabase &values, const SampleBufferPtr input, SampleBufferPtr output, int index) const
{
float volume_val = values[volume_input_].Get(NodeParam::kFloat).toFloat();
for (int i=0;i<params.channel_count();i++) {
for (int i=0;i<output->audio_params().channel_count();i++) {
output->data()[i][index] = input->data()[i][index] * volume_val;
}
}
+1 -1
View File
@@ -39,7 +39,7 @@ public:
virtual NodeValueTable Value(NodeValueDatabase &value) const override;
virtual void ProcessSamples(NodeValueDatabase &values, const AudioParams& params, const SampleBufferPtr input, SampleBufferPtr output, int index) const override;
virtual void ProcessSamples(NodeValueDatabase &values, const SampleBufferPtr input, SampleBufferPtr output, int index) const override;
virtual void Retranslate() override;