From bc126ce1b776b00d7a00d01175736275be616eaa Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 9 May 2022 14:56:42 -0700 Subject: [PATCH] volume: implement custom value function --- app/node/audio/volume/volume.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/app/node/audio/volume/volume.cpp b/app/node/audio/volume/volume.cpp index e0e05b6a4..a12a939e1 100644 --- a/app/node/audio/volume/volume.cpp +++ b/app/node/audio/volume/volume.cpp @@ -63,14 +63,27 @@ QString VolumeNode::Description() const void VolumeNode::Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const { - return ValueInternal(kOpMultiply, - kPairSampleNumber, - kSamplesInput, - value[kSamplesInput], - kVolumeInput, - value[kVolumeInput], - globals, - table); + Q_UNUSED(globals) + + // Create a sample job + SampleBuffer buffer = value[kSamplesInput].toSamples(); + + if (buffer.is_allocated()) { + // If the input is static, we can just do it now which will be faster + if (IsInputStatic(kVolumeInput)) { + auto volume = value[kVolumeInput].toDouble(); + + if (!qFuzzyCompare(volume, 1.0)) { + buffer.transform_volume(volume); + } + + table->Push(NodeValue::kSamples, QVariant::fromValue(buffer), this); + } else { + // Requires job + SampleJob job(kSamplesInput, value); + table->Push(NodeValue::kSamples, QVariant::fromValue(job), this); + } + } } void VolumeNode::ProcessSamples(const NodeValueRow &values, const SampleBuffer &input, SampleBuffer &output, int index) const