Uncomment resampling

This commit is contained in:
badaix 2020-02-10 21:45:05 +01:00
parent d77d4dadd5
commit 689f550049
2 changed files with 50 additions and 48 deletions

View file

@ -36,9 +36,9 @@ Stream::Stream(const SampleFormat& sampleFormat)
miniBuffer_.setSize(20); miniBuffer_.setSize(20);
// cardBuffer_.setSize(50); // cardBuffer_.setSize(50);
input_rate_ = format_.rate; // input_rate_ = format_.rate;
format_.rate = 48000; // format_.rate = 48000;
output_rate_ = static_cast<double>(format_.rate); // output_rate_ = static_cast<double>(format_.rate);
/* /*
48000 x 48000 x
------- = ----- ------- = -----
@ -46,16 +46,16 @@ Stream::Stream(const SampleFormat& sampleFormat)
x = 1,000016667 / (1,000016667 - 1) x = 1,000016667 / (1,000016667 - 1)
*/ */
// setRealSampleRate(format_.rate); setRealSampleRate(format_.rate);
soxr_error_t error; // soxr_error_t error;
soxr_io_spec_t iospec = soxr_io_spec(SOXR_INT16_I, SOXR_INT16_I); // soxr_io_spec_t iospec = soxr_io_spec(SOXR_INT16_I, SOXR_INT16_I);
soxr_quality_spec_t q_spec = soxr_quality_spec(SOXR_HQ, 0); // soxr_quality_spec_t q_spec = soxr_quality_spec(SOXR_HQ, 0);
soxr_ = soxr_create(static_cast<double>(input_rate_), static_cast<double>(format_.rate), format_.channels, &error, &iospec, &q_spec, NULL); // soxr_ = soxr_create(static_cast<double>(input_rate_), static_cast<double>(format_.rate), format_.channels, &error, &iospec, &q_spec, NULL);
if (error) // if (error)
{ // {
LOG(ERROR) << "Error soxr_create: " << error << "\n"; // LOG(ERROR) << "Error soxr_create: " << error << "\n";
} // }
} }
@ -89,39 +89,41 @@ void Stream::addChunk(msg::PcmChunk* chunk)
while (chunks_.size() * chunk->duration<cs::msec>().count() > 10000) while (chunks_.size() * chunk->duration<cs::msec>().count() > 10000)
chunks_.pop(); chunks_.pop();
if (std::abs(input_rate_ - output_rate_) <= 0.0000001) chunks_.push(shared_ptr<msg::PcmChunk>(chunk));
{ // LOG(DEBUG) << "new chunk: " << chunk->duration<cs::msec>().count() << ", Chunks: " << chunks_.size() << "\n";
chunks_.push(shared_ptr<msg::PcmChunk>(chunk));
}
else
{
size_t idone;
size_t odone;
auto out = new msg::PcmChunk(format_, 0);
out->timestamp = chunk->timestamp;
out->payloadSize = ceil(chunk->payloadSize * static_cast<double>(output_rate_) / static_cast<double>(input_rate_));
out->payload = (char*)malloc(out->payloadSize);
soxr_io_spec_t iospec = soxr_io_spec(SOXR_INT16_I, SOXR_INT16_I); // if (std::abs(input_rate_ - output_rate_) <= 0.0000001)
soxr_quality_spec_t q_spec = soxr_quality_spec(SOXR_HQ, 0); // {
// auto error = soxr_oneshot(static_cast<double>(input_rate_), output_rate_, format_.channels, chunk->payload, chunk->getFrameCount(), &idone, // chunks_.push(shared_ptr<msg::PcmChunk>(chunk));
// out->payload, out->payloadSize, &odone, &iospec, &q_spec, nullptr); // }
auto error = soxr_process(soxr_, chunk->payload, chunk->getFrameCount(), &idone, out->payload, out->getFrameCount(), &odone); // else
if (error) // {
{ // size_t idone;
LOG(ERROR) << "Error soxr_process: " << error << "\n"; // size_t odone;
delete out; // auto out = new msg::PcmChunk(format_, 0);
} // out->timestamp = chunk->timestamp;
else // out->payloadSize = ceil(chunk->payloadSize * static_cast<double>(output_rate_) / static_cast<double>(input_rate_));
{ // out->payload = (char*)malloc(out->payloadSize);
out->payloadSize = odone * out->format.frameSize;
LOG(TRACE) << "Resample idone: " << idone << "/" << chunk->getFrameCount() << ", odone: " << odone << "/" // soxr_io_spec_t iospec = soxr_io_spec(SOXR_INT16_I, SOXR_INT16_I);
<< out->payloadSize / out->format.frameSize << "\n"; // soxr_quality_spec_t q_spec = soxr_quality_spec(SOXR_HQ, 0);
chunks_.push(shared_ptr<msg::PcmChunk>(out)); // // auto error = soxr_oneshot(static_cast<double>(input_rate_), output_rate_, format_.channels, chunk->payload, chunk->getFrameCount(), &idone,
} // // out->payload, out->payloadSize, &odone, &iospec, &q_spec, nullptr);
delete chunk; // auto error = soxr_process(soxr_, chunk->payload, chunk->getFrameCount(), &idone, out->payload, out->getFrameCount(), &odone);
} // if (error)
LOG(TRACE) << "new chunk: " << chunk->duration<cs::msec>().count() << ", Chunks: " << chunks_.size() << "\n"; // {
// LOG(ERROR) << "Error soxr_process: " << error << "\n";
// delete out;
// }
// else
// {
// out->payloadSize = odone * out->format.frameSize;
// LOG(TRACE) << "Resample idone: " << idone << "/" << chunk->getFrameCount() << ", odone: " << odone << "/"
// << out->payloadSize / out->format.frameSize << "\n";
// chunks_.push(shared_ptr<msg::PcmChunk>(out));
// }
// delete chunk;
// }
} }

View file

@ -26,7 +26,7 @@
#include "message/pcm_chunk.hpp" #include "message/pcm_chunk.hpp"
#include <deque> #include <deque>
#include <memory> #include <memory>
#include <soxr.h> // #include <soxr.h>
/// Time synchronized audio stream /// Time synchronized audio stream
@ -84,9 +84,9 @@ private:
unsigned long playedFrames_; unsigned long playedFrames_;
long correctAfterXFrames_; long correctAfterXFrames_;
chronos::msec bufferMs_; chronos::msec bufferMs_;
size_t input_rate_; // size_t input_rate_;
double output_rate_; // double output_rate_;
soxr_t soxr_; // soxr_t soxr_;
}; };