Internal change
PiperOrigin-RevId: 544663494
This commit is contained in:
		
							parent
							
								
									6c7aa8a0d6
								
							
						
					
					
						commit
						422556c4a3
					
				| 
						 | 
					@ -210,6 +210,23 @@ REGISTER_CALCULATOR(SpectrogramCalculator);
 | 
				
			||||||
// Factor to convert ln(SQUARED_MAGNITUDE) to deciBels = 10.0/ln(10.0).
 | 
					// Factor to convert ln(SQUARED_MAGNITUDE) to deciBels = 10.0/ln(10.0).
 | 
				
			||||||
const float SpectrogramCalculator::kLnSquaredMagnitudeToDb = 4.342944819032518;
 | 
					const float SpectrogramCalculator::kLnSquaredMagnitudeToDb = 4.342944819032518;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace {
 | 
				
			||||||
 | 
					std::unique_ptr<audio_dsp::WindowFunction> MakeWindowFun(
 | 
				
			||||||
 | 
					    const SpectrogramCalculatorOptions::WindowType window_type) {
 | 
				
			||||||
 | 
					  switch (window_type) {
 | 
				
			||||||
 | 
					    // The cosine window and square root of Hann are equivalent.
 | 
				
			||||||
 | 
					    case SpectrogramCalculatorOptions::COSINE:
 | 
				
			||||||
 | 
					    case SpectrogramCalculatorOptions::SQRT_HANN:
 | 
				
			||||||
 | 
					      return std::make_unique<audio_dsp::CosineWindow>();
 | 
				
			||||||
 | 
					    case SpectrogramCalculatorOptions::HANN:
 | 
				
			||||||
 | 
					      return std::make_unique<audio_dsp::HannWindow>();
 | 
				
			||||||
 | 
					    case SpectrogramCalculatorOptions::HAMMING:
 | 
				
			||||||
 | 
					      return std::make_unique<audio_dsp::HammingWindow>();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return nullptr;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}  // namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
absl::Status SpectrogramCalculator::Open(CalculatorContext* cc) {
 | 
					absl::Status SpectrogramCalculator::Open(CalculatorContext* cc) {
 | 
				
			||||||
  SpectrogramCalculatorOptions spectrogram_options =
 | 
					  SpectrogramCalculatorOptions spectrogram_options =
 | 
				
			||||||
      cc->Options<SpectrogramCalculatorOptions>();
 | 
					      cc->Options<SpectrogramCalculatorOptions>();
 | 
				
			||||||
| 
						 | 
					@ -266,28 +283,14 @@ absl::Status SpectrogramCalculator::Open(CalculatorContext* cc) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  output_scale_ = spectrogram_options.output_scale();
 | 
					  output_scale_ = spectrogram_options.output_scale();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::vector<double> window;
 | 
					  auto window_fun = MakeWindowFun(spectrogram_options.window_type());
 | 
				
			||||||
  switch (spectrogram_options.window_type()) {
 | 
					  if (window_fun == nullptr) {
 | 
				
			||||||
    case SpectrogramCalculatorOptions::COSINE:
 | 
					    return absl::Status(absl::StatusCode::kInvalidArgument,
 | 
				
			||||||
      audio_dsp::CosineWindow().GetPeriodicSamples(frame_duration_samples_,
 | 
					                        absl::StrCat("Invalid window type ",
 | 
				
			||||||
                                                   &window);
 | 
					                                     spectrogram_options.window_type()));
 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    case SpectrogramCalculatorOptions::HANN:
 | 
					 | 
				
			||||||
      audio_dsp::HannWindow().GetPeriodicSamples(frame_duration_samples_,
 | 
					 | 
				
			||||||
                                                 &window);
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    case SpectrogramCalculatorOptions::HAMMING:
 | 
					 | 
				
			||||||
      audio_dsp::HammingWindow().GetPeriodicSamples(frame_duration_samples_,
 | 
					 | 
				
			||||||
                                                    &window);
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    case SpectrogramCalculatorOptions::SQRT_HANN: {
 | 
					 | 
				
			||||||
      audio_dsp::HannWindow().GetPeriodicSamples(frame_duration_samples_,
 | 
					 | 
				
			||||||
                                                 &window);
 | 
					 | 
				
			||||||
      absl::c_transform(window, window.begin(),
 | 
					 | 
				
			||||||
                        [](double x) { return std::sqrt(x); });
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  std::vector<double> window;
 | 
				
			||||||
 | 
					  window_fun->GetPeriodicSamples(frame_duration_samples_, &window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Propagate settings down to the actual Spectrogram object.
 | 
					  // Propagate settings down to the actual Spectrogram object.
 | 
				
			||||||
  spectrogram_generators_.clear();
 | 
					  spectrogram_generators_.clear();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ message SpectrogramCalculatorOptions {
 | 
				
			||||||
    HANN = 0;
 | 
					    HANN = 0;
 | 
				
			||||||
    HAMMING = 1;
 | 
					    HAMMING = 1;
 | 
				
			||||||
    COSINE = 2;
 | 
					    COSINE = 2;
 | 
				
			||||||
    SQRT_HANN = 4;
 | 
					    SQRT_HANN = 4;  // Alias of COSINE.
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  optional WindowType window_type = 6 [default = HANN];
 | 
					  optional WindowType window_type = 6 [default = HANN];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user