MCPcopy Create free account
hub / github.com/0xShug0/audio.cpp / reconstruct

Method reconstruct

src/models/miocodec/audio_pipeline.cpp:290–347  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

288 execution_context_(&execution_context) {}
289
290std::vector<float> MioCodecWaveformReconstructor::reconstruct(
291 const MioCodecWaveHead & head,
292 const std::vector<float> & window) {
293 const auto threads = static_cast<size_t>(std::max(1, execution_context_->config().threads));
294 if (execution_context_->backend_type() != engine::core::BackendType::Cuda) {
295 if (host_istft_ == nullptr || host_istft_frames_ != head.frames) {
296 host_istft_ = std::make_unique<engine::audio::HostLogMagnitudePhaseISTFT>(
297 engine::audio::HostLogMagnitudePhaseISTFTConfig{
298 head.frames,
299 assets_->config.n_fft,
300 assets_->config.hop_length,
301 assets_->config.n_fft + 2,
302 threads,
303 });
304 host_istft_frames_ = head.frames;
305 engine::debug::timing_log_scalar("miocodec.istft.workspace_rebuilt", true);
306 } else {
307 engine::debug::timing_log_scalar("miocodec.istft.workspace_rebuilt", false);
308 }
309 const auto result = host_istft_->compute(head.values, window);
310 engine::debug::timing_log_scalar("miocodec.istft.spectrum_ms", result.timing.spectrum_ms);
311 engine::debug::timing_log_scalar("miocodec.istft.framed_clear_ms", result.timing.framed_clear_ms);
312 engine::debug::timing_log_scalar("miocodec.istft.fft_inverse_ms", result.timing.fft_inverse_ms);
313 engine::debug::timing_log_scalar("miocodec.istft.fold_clear_ms", result.timing.fold_clear_ms);
314 engine::debug::timing_log_scalar("miocodec.istft.overlap_add_ms", result.timing.overlap_add_ms);
315 engine::debug::timing_log_scalar("miocodec.istft.normalize_ms", result.timing.normalize_ms);
316 engine::debug::timing_log_scalar("miocodec.istft.total_ms", result.timing.total_ms);
317 return result.audio;
318 }
319 if (cuda_istft_ == nullptr || cuda_istft_frames_ != head.frames) {
320 const auto runtime_build_start = Clock::now();
321 cuda_istft_ = std::make_unique<engine::audio::CudaLogMagnitudePhaseISTFT>(
322 engine::audio::CudaLogMagnitudePhaseISTFTConfig{
323 head.frames,
324 assets_->config.n_fft,
325 assets_->config.hop_length,
326 assets_->config.n_fft + 2,
327 execution_context_->config().device,
328 });
329 cuda_istft_frames_ = head.frames;
330 engine::debug::timing_log_scalar("miocodec.istft.runtime_rebuilt", true);
331 engine::debug::timing_log_scalar(
332 "miocodec.istft.runtime_build_ms",
333 engine::debug::elapsed_ms(runtime_build_start));
334 } else {
335 engine::debug::timing_log_scalar("miocodec.istft.runtime_rebuilt", false);
336 engine::debug::timing_log_scalar("miocodec.istft.runtime_build_ms", 0.0);
337 }
338 const auto result = cuda_istft_->compute(head.values, window);
339 engine::debug::timing_log_scalar("miocodec.istft.input_upload_ms", result.timing.input_upload_ms);
340 engine::debug::timing_log_scalar("miocodec.istft.spectrum_kernel_ms", result.timing.spectrum_kernel_ms);
341 engine::debug::timing_log_scalar("miocodec.istft.fft_inverse_ms", result.timing.fft_inverse_ms);
342 engine::debug::timing_log_scalar("miocodec.istft.overlap_add_ms", result.timing.overlap_add_ms);
343 engine::debug::timing_log_scalar("miocodec.istft.normalize_ms", result.timing.normalize_ms);
344 engine::debug::timing_log_scalar("miocodec.istft.audio_read_ms", result.timing.audio_read_ms);
345 engine::debug::timing_log_scalar("miocodec.istft.total_ms", result.timing.total_ms);
346 return result.audio;
347}

Callers 2

runMethod · 0.80
runMethod · 0.80

Calls 5

maxFunction · 0.85
timing_log_scalarFunction · 0.50
elapsed_msFunction · 0.50
backend_typeMethod · 0.45
computeMethod · 0.45

Tested by

no test coverage detected