MCPcopy Create free account
hub / github.com/aethersdr/AetherSDR / processStereoToMono

Method processStereoToMono

src/core/Resampler.cpp:51–79  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51QByteArray Resampler::processStereoToMono(const float* stereoIn, int numStereoFrames)
52{
53 if (numStereoFrames <= 0) return {};
54
55 if (numStereoFrames > m_maxBlockSamples) {
56 QByteArray result;
57 for (int offset = 0; offset < numStereoFrames; offset += m_maxBlockSamples)
58 result.append(processStereoToMono(stereoIn + offset * 2, std::min(numStereoFrames - offset, m_maxBlockSamples)));
59 return result;
60 }
61
62 // Downmix stereo → mono
63 m_inBuf.resize(numStereoFrames);
64 for (int i = 0; i < numStereoFrames; ++i)
65 m_inBuf[i] = (stereoIn[2 * i] + stereoIn[2 * i + 1]) * 0.5;
66
67 // Resample
68 double* outPtr = nullptr;
69 int outLen = m_resampler->process(m_inBuf.data(), numStereoFrames, outPtr);
70
71 if (outLen <= 0 || !outPtr) return {};
72
73 // Convert double → float32 mono
74 QByteArray result(outLen * static_cast<int>(sizeof(float)), Qt::Uninitialized);
75 auto* dst = reinterpret_cast<float*>(result.data());
76 for (int i = 0; i < outLen; ++i)
77 dst[i] = static_cast<float>(outPtr[i]);
78 return result;
79}
80
81QByteArray Resampler::processMonoToStereo(const float* monoIn, int numSamples)
82{

Callers 5

processMethod · 0.80
feedTxAudioMethod · 0.80
feedRxAudioMethod · 0.80
processMethod · 0.80
processMethod · 0.80

Calls 2

processMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected