| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | #include "AudioPipeline.h"#include <type_traits>  // for remove_extent_t#include <utility>      // for move#include "AudioTransform.h"   // for AudioTransform#include "BellLogger.h"       // for AbstractLogger, BELL_LOG#include "TransformConfig.h"  // for TransformConfigusing namespace bell;AudioPipeline::AudioPipeline(){    // this->headroomGainTransform = std::make_shared<Gain>(Channels::LEFT_RIGHT);    // this->transforms.push_back(this->headroomGainTransform);};void AudioPipeline::addTransform(std::shared_ptr<AudioTransform> transform) {  transforms.push_back(transform);  recalculateHeadroom();}void AudioPipeline::recalculateHeadroom() {  float headroom = 0.0f;  // Find largest headroom required by any transform down the chain, and apply it  for (auto transform : transforms) {    if (headroom < transform->calculateHeadroom()) {      headroom = transform->calculateHeadroom();    }  }  // headroomGainTransform->configure(-headroom);}void AudioPipeline::volumeUpdated(int volume) {  BELL_LOG(debug, "AudioPipeline", "Requested");  std::scoped_lock lock(this->accessMutex);  for (auto transform : transforms) {    transform->config->currentVolume = volume;    transform->reconfigure();  }  BELL_LOG(debug, "AudioPipeline", "Volume applied, DSP reconfigured");}std::unique_ptr<StreamInfo> AudioPipeline::process(    std::unique_ptr<StreamInfo> data) {  std::scoped_lock lock(this->accessMutex);  for (auto& transform : transforms) {    data = transform->process(std::move(data));  }  return data;}
 |