From 958160aa545e3d91b2a4f1a367817e73d298e8a9 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 10 Aug 2023 19:12:38 +1000 Subject: Use the libspeexdsp resampler AFAICT it runs a little slower? but it's fixed point, and has much better understood audio characteristics. --- src/codecs/opus.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'src/codecs/opus.cpp') diff --git a/src/codecs/opus.cpp b/src/codecs/opus.cpp index 70ec9e45..c0727c6b 100644 --- a/src/codecs/opus.cpp +++ b/src/codecs/opus.cpp @@ -122,35 +122,24 @@ auto XiphOpusDecoder::OpenStream(std::shared_ptr input) return cpp::fail(Error::kMalformedData); } - num_channels_ = std::min(2, op_channel_count(opus_, -1)); - return OutputFormat{ - .num_channels = num_channels_, + .num_channels = 2, .sample_rate_hz = 48000, }; } auto XiphOpusDecoder::DecodeTo(cpp::span output) -> cpp::result { - cpp::span staging_buffer{ - reinterpret_cast(output.subspan(output.size() / 2).data()), - output.size_bytes() / 2}; - - int samples_written = - op_read_stereo(opus_, staging_buffer.data(), staging_buffer.size()); + int samples_written = op_read_stereo(opus_, output.data(), output.size()); if (samples_written < 0) { ESP_LOGE(kTag, "read failed %i", samples_written); return cpp::fail(Error::kMalformedData); } - samples_written *= num_channels_; - for (int i = 0; i < samples_written; i++) { - output[i] = sample::FromSigned(staging_buffer[i], 16); - } - + samples_written *= 2; // Fixed to stereo return OutputInfo{ - .samples_written = static_cast(samples_written / 2), + .samples_written = static_cast(samples_written), .is_stream_finished = samples_written == 0, }; } -- cgit v1.2.3