Add volume_gain_db option to TensorsToAudioCalculator.
PiperOrigin-RevId: 515150234
This commit is contained in:
		
							parent
							
								
									253a5b477e
								
							
						
					
					
						commit
						2fb62e4c29
					
				| 
						 | 
					@ -141,6 +141,7 @@ class TensorsToAudioCalculator : public Node {
 | 
				
			||||||
  int overlapping_samples_ = -1;
 | 
					  int overlapping_samples_ = -1;
 | 
				
			||||||
  int step_samples_ = -1;
 | 
					  int step_samples_ = -1;
 | 
				
			||||||
  Options::DftTensorFormat dft_tensor_format_;
 | 
					  Options::DftTensorFormat dft_tensor_format_;
 | 
				
			||||||
 | 
					  double gain_ = 1.0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
absl::Status TensorsToAudioCalculator::Open(CalculatorContext* cc) {
 | 
					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();
 | 
					    step_samples_ = options.num_samples() - options.num_overlapping_samples();
 | 
				
			||||||
    prev_fft_output_.resize(fft_size_);
 | 
					    prev_fft_output_.resize(fft_size_);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (options.has_volume_gain_db()) {
 | 
				
			||||||
 | 
					    gain_ = pow(10, options.volume_gain_db() / 20.0);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return absl::OkStatus();
 | 
					  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(), fft_output_.end(), inv_fft_window_.begin(),
 | 
				
			||||||
      fft_output_.begin(),
 | 
					      fft_output_.begin(),
 | 
				
			||||||
      [this](float a, float b) { return a * b * inverse_fft_size_; });
 | 
					      [this](float a, float b) { return a * b * inverse_fft_size_; });
 | 
				
			||||||
 | 
					  Matrix matrix;
 | 
				
			||||||
  if (step_samples_ > 0) {
 | 
					  if (step_samples_ > 0) {
 | 
				
			||||||
    Matrix matrix = Eigen::Map<Matrix>(fft_output_.data(), 1, step_samples_);
 | 
					    matrix = Eigen::Map<Matrix>(fft_output_.data(), 1, step_samples_);
 | 
				
			||||||
    matrix.leftCols(overlapping_samples_) += Eigen::Map<Matrix>(
 | 
					    matrix.leftCols(overlapping_samples_) += Eigen::Map<Matrix>(
 | 
				
			||||||
        prev_fft_output_.data() + step_samples_, 1, overlapping_samples_);
 | 
					        prev_fft_output_.data() + step_samples_, 1, overlapping_samples_);
 | 
				
			||||||
    prev_fft_output_.swap(fft_output_);
 | 
					    prev_fft_output_.swap(fft_output_);
 | 
				
			||||||
    kAudioOut(cc).Send(std::move(matrix));
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    Matrix matrix =
 | 
					    matrix = Eigen::Map<Matrix>(fft_output_.data(), 1, fft_output_.size());
 | 
				
			||||||
        Eigen::Map<Matrix>(fft_output_.data(), 1, fft_output_.size());
 | 
					 | 
				
			||||||
    kAudioOut(cc).Send(std::move(matrix));
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (gain_ != 1.0) {
 | 
				
			||||||
 | 
					    matrix *= gain_;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  kAudioOut(cc).Send(std::move(matrix));
 | 
				
			||||||
  return absl::OkStatus();
 | 
					  return absl::OkStatus();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,4 +45,8 @@ message TensorsToAudioCalculatorOptions {
 | 
				
			||||||
    WITH_DC_AND_NYQUIST = 3;
 | 
					    WITH_DC_AND_NYQUIST = 3;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  optional DftTensorFormat dft_tensor_format = 11 [default = WITH_NYQUIST];
 | 
					  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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user