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