From 2fb62e4c295d083e14d3ead9313862431615d681 Mon Sep 17 00:00:00 2001 From: MediaPipe Team Date: Wed, 8 Mar 2023 14:55:16 -0800 Subject: [PATCH] Add volume_gain_db option to TensorsToAudioCalculator. PiperOrigin-RevId: 515150234 --- .../tensor/tensors_to_audio_calculator.cc | 16 +++++++++++----- .../tensor/tensors_to_audio_calculator.proto | 4 ++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/mediapipe/calculators/tensor/tensors_to_audio_calculator.cc b/mediapipe/calculators/tensor/tensors_to_audio_calculator.cc index fda6c869..2589b73f 100644 --- a/mediapipe/calculators/tensor/tensors_to_audio_calculator.cc +++ b/mediapipe/calculators/tensor/tensors_to_audio_calculator.cc @@ -141,6 +141,7 @@ class TensorsToAudioCalculator : public Node { int overlapping_samples_ = -1; int step_samples_ = -1; Options::DftTensorFormat dft_tensor_format_; + double gain_ = 1.0; }; absl::Status TensorsToAudioCalculator::Open(CalculatorContext* cc) { @@ -178,6 +179,9 @@ absl::Status TensorsToAudioCalculator::Open(CalculatorContext* cc) { step_samples_ = options.num_samples() - options.num_overlapping_samples(); prev_fft_output_.resize(fft_size_); } + if (options.has_volume_gain_db()) { + gain_ = pow(10, options.volume_gain_db() / 20.0); + } return absl::OkStatus(); } @@ -227,17 +231,19 @@ absl::Status TensorsToAudioCalculator::Process(CalculatorContext* cc) { fft_output_.begin(), fft_output_.end(), inv_fft_window_.begin(), fft_output_.begin(), [this](float a, float b) { return a * b * inverse_fft_size_; }); + Matrix matrix; if (step_samples_ > 0) { - Matrix matrix = Eigen::Map(fft_output_.data(), 1, step_samples_); + matrix = Eigen::Map(fft_output_.data(), 1, step_samples_); matrix.leftCols(overlapping_samples_) += Eigen::Map( prev_fft_output_.data() + step_samples_, 1, overlapping_samples_); prev_fft_output_.swap(fft_output_); - kAudioOut(cc).Send(std::move(matrix)); } else { - Matrix matrix = - Eigen::Map(fft_output_.data(), 1, fft_output_.size()); - kAudioOut(cc).Send(std::move(matrix)); + matrix = Eigen::Map(fft_output_.data(), 1, fft_output_.size()); } + if (gain_ != 1.0) { + matrix *= gain_; + } + kAudioOut(cc).Send(std::move(matrix)); return absl::OkStatus(); } diff --git a/mediapipe/calculators/tensor/tensors_to_audio_calculator.proto b/mediapipe/calculators/tensor/tensors_to_audio_calculator.proto index 7fb770f0..3e46525d 100644 --- a/mediapipe/calculators/tensor/tensors_to_audio_calculator.proto +++ b/mediapipe/calculators/tensor/tensors_to_audio_calculator.proto @@ -45,4 +45,8 @@ message TensorsToAudioCalculatorOptions { WITH_DC_AND_NYQUIST = 3; } optional DftTensorFormat dft_tensor_format = 11 [default = WITH_NYQUIST]; + + // The volume gain, measured in dB. + // Scale the output audio amplitude by 10^(volume_gain_db/20). + optional double volume_gain_db = 12; }