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

Function overlap_add_planar_chunk

src/framework/audio/chunking.cpp:400–445  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

398 std::vector<float> window(static_cast<size_t>(chunk_samples), 1.0F);
399 const int64_t rising = chunk_samples / 2;
400 const int64_t falling = chunk_samples - rising;
401 for (int64_t i = 0; i < rising; ++i) {
402 window[static_cast<size_t>(i)] = static_cast<float>(i + 1);
403 }
404 for (int64_t i = 0; i < falling; ++i) {
405 window[static_cast<size_t>(rising + i)] = static_cast<float>(falling - i);
406 }
407 const float max_value = *std::max_element(window.begin(), window.end());
408 for (float & value : window) {
409 value /= max_value;
410 }
411 return window;
412}
413
414std::vector<float> make_linear_fade_window(int64_t chunk_samples, int64_t fade_samples) {
415 require_positive(chunk_samples, "chunk samples");
416 if (fade_samples < 0 || fade_samples * 2 > chunk_samples) {
417 throw std::runtime_error("Audio chunker fade_samples is invalid");
418 }
419 std::vector<float> window(static_cast<size_t>(chunk_samples), 1.0F);
420 if (fade_samples <= 0) {
421 return window;
422 }
423 for (int64_t i = 0; i < fade_samples; ++i) {
424 const float alpha = fade_samples == 1
425 ? 1.0F
426 : static_cast<float>(i) / static_cast<float>(fade_samples - 1);
427 window[static_cast<size_t>(i)] = alpha;
428 window[static_cast<size_t>(chunk_samples - fade_samples + i)] = 1.0F - alpha;
429 }
430 return window;
431}
432
433void copy_interleaved_chunk_to_planar(
434 std::vector<float> & output_planar,
435 const std::vector<float> & input_interleaved,
436 int64_t channels,
437 int64_t input_frames,
438 const AudioChunkSpan & span,
439 const AudioChunkSpec & spec) {
440 validate_copy_shape(input_interleaved, channels, input_frames, output_planar, spec);
441 std::fill(output_planar.begin(), output_planar.end(), 0.0F);
442 const bool reflect = should_reflect_pad(span, spec);
443#ifdef _OPENMP
444 #pragma omp parallel for if(channels >= 2)
445#endif
446 for (int64_t ch = 0; ch < channels; ++ch) {
447 float * dst = output_planar.data() + static_cast<size_t>(ch * spec.chunk_samples);
448 for (int64_t i = 0; i < spec.chunk_samples; ++i) {

Callers 4

runMethod · 0.85
runMethod · 0.85

Calls 4

planar_indexFunction · 0.85
weight_indexFunction · 0.85
require_positiveFunction · 0.70
sizeMethod · 0.45