34 assert(std::size(out) == std::size(in) * 2);
36 auto out_it = std::begin(out);
37 for (
const std::byte &value : in) {
38 if constexpr (std::endian::native != std::endian::little) {
40 *out_it++ = std::byte{0};
42 *out_it++ = std::byte{0};
51 std::vector<std::byte> &data = *sound.data;
53 std::vector<std::byte> tmp;
54 if (sound.bits_per_sample == 16) {
59 tmp.resize(std::size(data) *
sizeof(int16_t));
61 sound.bits_per_sample = 16;
65 uint align = sound.channels * sound.bits_per_sample / 8;
66 data.resize(
Align(std::size(tmp) * play_rate / sound.rate, align));
68 soxr_error_t error = soxr_oneshot(sound.rate, play_rate, sound.channels,
69 std::data(tmp), std::size(tmp) / align,
nullptr,
70 std::data(data), std::size(data) / align,
nullptr,
71 &this->io, &this->quality, &this->runtime);
73 if (error !=
nullptr) {
75 Debug(misc, 0,
"Failed to resample: {}", soxr_strerror(error));
78 sound.rate = play_rate;