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

Function compute_stft_complex_normalized

src/models/demucs/frontend.cpp:90–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88}
89
90void compute_stft_complex_normalized(
91 std::vector<float> & framed,
92 std::vector<std::complex<float>> & spectrum,
93 const std::vector<float> & signal,
94 const std::vector<float> & window,
95 int64_t batch,
96 int64_t samples,
97 int64_t frames,
98 int64_t n_fft,
99 const std::vector<int32_t> & frame_indices,
100 size_t fft_threads) {
101 const int64_t freq_bins = (n_fft / 2) + 1;
102 framed.resize(static_cast<size_t>(batch * frames * n_fft));
103#ifdef _OPENMP
104 #pragma omp parallel for if(batch * frames >= 8)
105#endif
106 for (int64_t b = 0; b < batch; ++b) {
107 const float * src = signal.data() + static_cast<size_t>(b * samples);
108 for (int64_t frame_index = 0; frame_index < frames; ++frame_index) {
109 float * frame = framed.data() + static_cast<size_t>((b * frames + frame_index) * n_fft);
110 const int32_t * mapping = frame_indices.data() + static_cast<size_t>(frame_index * n_fft);
111 for (int64_t i = 0; i < n_fft; ++i) {
112 frame[i] = src[mapping[i]] * window[static_cast<size_t>(i)];
113 }
114 }
115 }
116
117 engine::audio::TensorShape shape_in{
118 static_cast<size_t>(batch),
119 static_cast<size_t>(frames),
120 static_cast<size_t>(n_fft),
121 };
122 engine::audio::TensorStrideBytes stride_in{
123 static_cast<std::ptrdiff_t>(frames * n_fft * static_cast<int64_t>(sizeof(float))),
124 static_cast<std::ptrdiff_t>(n_fft * static_cast<int64_t>(sizeof(float))),
125 static_cast<std::ptrdiff_t>(sizeof(float)),
126 };
127 engine::audio::TensorStrideBytes stride_out{
128 static_cast<std::ptrdiff_t>(frames * freq_bins * static_cast<int64_t>(sizeof(std::complex<float>))),
129 static_cast<std::ptrdiff_t>(freq_bins * static_cast<int64_t>(sizeof(std::complex<float>))),
130 static_cast<std::ptrdiff_t>(sizeof(std::complex<float>)),
131 };
132
133 spectrum.resize(static_cast<size_t>(batch * frames * freq_bins));
134 engine::audio::real_fft_forward(
135 shape_in,
136 stride_in,
137 stride_out,
138 2,
139 framed.data(),
140 spectrum.data(),
141 1.0f / std::sqrt(static_cast<float>(n_fft)),
142 fft_threads);
143}
144
145std::pair<float, float> normalize_in_place_with_stats(
146 std::vector<float> & values,

Callers 1

prepare_chunkMethod · 0.85

Calls 3

real_fft_forwardFunction · 0.85
resizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected