Resampler.cpp 846 B

12345678910111213141516171819202122232425262728
  1. /*
  2. * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "Resampler.h"
  7. #include "Buffer.h"
  8. #include "Sample.h"
  9. namespace Audio {
  10. ErrorOr<NonnullRefPtr<LegacyBuffer>> resample_buffer(ResampleHelper<double>& resampler, LegacyBuffer const& to_resample)
  11. {
  12. Vector<Sample> resampled;
  13. resampled.ensure_capacity(to_resample.sample_count() * ceil_div(resampler.source(), resampler.target()));
  14. for (size_t i = 0; i < static_cast<size_t>(to_resample.sample_count()); ++i) {
  15. auto sample = to_resample.samples()[i];
  16. resampler.process_sample(sample.left, sample.right);
  17. while (resampler.read_sample(sample.left, sample.right))
  18. resampled.append(sample);
  19. }
  20. return LegacyBuffer::create_with_samples(move(resampled));
  21. }
  22. }