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

Function ensure_workspace

src/framework/audio/istft_graph.cpp:50–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48};
49
50void ensure_workspace(
51 Workspace & workspace,
52 const WorkspaceConfig & config,
53 int64_t freq_bins,
54 const std::vector<float> & window,
55 const char * label) {
56 const int64_t pad = (config.n_fft - config.hop_length) / 2;
57 const int64_t output_size = (config.frames - 1) * config.hop_length + config.n_fft;
58 const int64_t samples = output_size - 2 * pad;
59 require(samples > 0, label);
60 if (workspace.frames == config.frames &&
61 workspace.freq_bins == freq_bins &&
62 workspace.n_fft == config.n_fft &&
63 workspace.output_size == output_size &&
64 workspace.window == window) {
65 return;
66 }
67
68 workspace.frames = config.frames;
69 workspace.freq_bins = freq_bins;
70 workspace.n_fft = config.n_fft;
71 workspace.output_size = output_size;
72 workspace.window = window;
73 workspace.spectrum.resize(static_cast<size_t>(config.frames * freq_bins));
74 workspace.framed.resize(static_cast<size_t>(config.frames * config.n_fft));
75 workspace.folded.resize(static_cast<size_t>(output_size));
76 workspace.envelope.assign(static_cast<size_t>(output_size), 0.0F);
77 workspace.audio.resize(static_cast<size_t>(samples));
78 for (int64_t frame = 0; frame < config.frames; ++frame) {
79 const int64_t start = frame * config.hop_length;
80 for (int64_t i = 0; i < config.n_fft; ++i) {
81 const float w = window[static_cast<size_t>(i)];
82 workspace.envelope[static_cast<size_t>(start + i)] += w * w;
83 }
84 }
85}
86
87template <typename Timing>
88void finish_istft_from_spectrum(

Callers 2

computeMethod · 0.85

Calls 3

assignMethod · 0.80
requireFunction · 0.70
resizeMethod · 0.45

Tested by

no test coverage detected