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

Function separate_runtime_chunk

src/models/roformer/runtime.cpp:892–940  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

890 #pragma omp parallel for collapse(2) if(channels * freq_bins >= 512)
891#endif
892 for (int64_t ch = 0; ch < channels; ++ch) {
893 for (int64_t freq = 0; freq < freq_bins; ++freq) {
894 for (int64_t frame_index = 0; frame_index < frames; ++frame_index) {
895 const size_t src = static_cast<size_t>((((ch * freq_bins) + freq) * frames + frame_index) * 2);
896 spectrum[static_cast<size_t>(((ch * freq_bins) + freq) * frames + frame_index)] = {
897 complex_spec[src],
898 complex_spec[src + 1],
899 };
900 }
901 }
902 }
903
904 engine::audio::TensorShape output_shape{
905 static_cast<size_t>(channels),
906 static_cast<size_t>(config.n_fft),
907 static_cast<size_t>(frames),
908 };
909 engine::audio::TensorStrideBytes input_strides{
910 static_cast<std::ptrdiff_t>(freq_bins * frames * static_cast<int64_t>(sizeof(std::complex<float>))),
911 static_cast<std::ptrdiff_t>(frames * static_cast<int64_t>(sizeof(std::complex<float>))),
912 static_cast<std::ptrdiff_t>(sizeof(std::complex<float>)),
913 };
914 engine::audio::TensorStrideBytes output_strides{
915 static_cast<std::ptrdiff_t>(config.n_fft * frames * static_cast<int64_t>(sizeof(float))),
916 static_cast<std::ptrdiff_t>(frames * static_cast<int64_t>(sizeof(float))),
917 static_cast<std::ptrdiff_t>(sizeof(float)),
918 };
919
920 std::vector<float> framed(static_cast<size_t>(channels * config.n_fft * frames), 0.0f);
921 engine::audio::real_fft_inverse(
922 output_shape,
923 input_strides,
924 output_strides,
925 1,
926 spectrum.data(),
927 framed.data(),
928 1.0f / static_cast<float>(config.n_fft),
929 threads);
930
931 const int64_t pad = config.center ? config.n_fft / 2 : 0;
932 const int64_t padded_samples = samples + 2 * pad;
933 const int64_t usable_window = std::min<int64_t>(config.win_length, config.n_fft);
934 const int64_t window_offset = (config.n_fft - config.win_length) / 2;
935 std::vector<float> window_sq(static_cast<size_t>(usable_window), 0.0f);
936#ifdef _OPENMP
937 #pragma omp parallel for if(usable_window >= 256)
938#endif
939 for (int64_t i = 0; i < usable_window; ++i) {
940 const float w = window[static_cast<size_t>(i)];
941 window_sq[static_cast<size_t>(i)] = w * w;
942 }
943

Callers 1

runtime.cppFile · 0.85

Calls 8

compute_roformer_stftFunction · 0.85
build_band_featuresFunction · 0.85
apply_masks_to_stftFunction · 0.85
compute_roformer_istftFunction · 0.85
timing_log_scalarFunction · 0.50
elapsed_msFunction · 0.50
runMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected