Skip to content

Commit dd4053b

Browse files
committed
Consolidate how update methods are called.
Directly passing references to the affected members is easier to read in the main UpdateFrameAudioData() method.
1 parent 7598917 commit dd4053b

File tree

2 files changed

+18
-26
lines changed

2 files changed

+18
-26
lines changed

src/libprojectM/Audio/PCM.cpp

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,12 @@ void PCM::Add(int16_t const* const samples, uint32_t channels, size_t const coun
5151
void PCM::UpdateFrameAudioData(double secondsSinceLastFrame, uint32_t frame)
5252
{
5353
// 1. Copy audio data from input buffer
54-
CopyNewWaveformData();
54+
CopyNewWaveformData(m_inputBufferL, m_waveformL);
55+
CopyNewWaveformData(m_inputBufferR, m_waveformR);
5556

5657
// 2. Update spectrum analyzer data for both channels
57-
UpdateFftChannel(0);
58-
UpdateFftChannel(1);
58+
UpdateSpectrum(m_waveformL, m_spectrumL);
59+
UpdateSpectrum(m_waveformR, m_spectrumR);
5960

6061
// 3. Align waveforms
6162
m_alignL.Align(m_waveformL);
@@ -91,43 +92,32 @@ auto PCM::GetFrameAudioData() const -> FrameAudioData
9192
return data;
9293
}
9394

94-
void PCM::UpdateFftChannel(size_t const channel)
95+
void PCM::UpdateSpectrum(const WaveformBuffer& waveformData, SpectrumBuffer& spectrumData)
9596
{
96-
assert(channel == 0 || channel == 1);
97-
9897
std::vector<float> waveformSamples(AudioBufferSamples);
9998
std::vector<float> spectrumValues;
10099

101-
auto const& from = channel == 0 ? m_waveformL : m_waveformR;
102-
auto& spectrum = channel == 0 ? m_spectrumL : m_spectrumR;
103-
104100
size_t oldI{0};
105101
for (size_t i = 0; i < AudioBufferSamples; i++)
106102
{
107103
// Damp the input into the FFT a bit, to reduce high-frequency noise:
108-
waveformSamples[i] = 0.5f * (from[i] + from[oldI]);
104+
waveformSamples[i] = 0.5f * (waveformData[i] + waveformData[oldI]);
109105
oldI = i;
110106
}
111107

112108
m_fft.TimeToFrequencyDomain(waveformSamples, spectrumValues);
113109

114-
std::copy(spectrumValues.begin(), spectrumValues.end(), spectrum.begin());
110+
std::copy(spectrumValues.begin(), spectrumValues.end(), spectrumData.begin());
115111
}
116112

117-
void PCM::CopyNewWaveformData()
113+
void PCM::CopyNewWaveformData(const WaveformBuffer& source, WaveformBuffer& destination)
118114
{
119-
const auto& copyChannel =
120-
[](size_t start, const std::array<float, AudioBufferSamples>& inputSamples, std::array<float, AudioBufferSamples>& outputSamples)
121-
{
122-
for (size_t i = 0; i < AudioBufferSamples; i++)
123-
{
124-
outputSamples[i] = inputSamples[(start + i) % AudioBufferSamples];
125-
}
126-
};
127-
128115
auto const bufferStartIndex = m_start.load();
129-
copyChannel(bufferStartIndex, m_inputBufferL, m_waveformL);
130-
copyChannel(bufferStartIndex, m_inputBufferR, m_waveformR);
116+
117+
for (size_t i = 0; i < AudioBufferSamples; i++)
118+
{
119+
destination[i] = source[(bufferStartIndex + i) % AudioBufferSamples];
120+
}
131121
}
132122

133123

src/libprojectM/Audio/PCM.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,15 @@ class PROJECTM_EXPORT PCM
7979
typename SampleType>
8080
void AddToBuffer(const SampleType* samples, uint32_t channel, size_t sampleCount);
8181

82-
// Updates FFT data
83-
void UpdateFftChannel(size_t channel);
82+
/**
83+
* Updates FFT data
84+
*/
85+
void UpdateSpectrum(const WaveformBuffer& waveformData, SpectrumBuffer& spectrumData);
8486

8587
/**
8688
* Copies data out of the circular input buffer into the per-frame waveform buffer.
8789
*/
88-
void CopyNewWaveformData();
90+
void CopyNewWaveformData(const WaveformBuffer& source, WaveformBuffer& destination);
8991

9092
// External input buffer
9193
WaveformBuffer m_inputBufferL{0.f}; //!< Circular buffer for left-channel PCM data.

0 commit comments

Comments
 (0)