- refactored

- BufferMulti numChannels is template parameter
This commit is contained in:
2025-11-09 13:20:16 +01:00
parent 01d644b76e
commit 681290c9ae
13 changed files with 318 additions and 221 deletions
+19 -51
View File
@@ -27,23 +27,22 @@
#define DSP_BUFFER_MULTI_H
#include "buffer.hpp"
#include <array>
namespace dsp {
template <typename T>
template <typename T, uint numCh>
class BufferMulti
{
Buffer<T> *m_buffer;
uint m_numChannels;
size_t m_capacity;
public:
BufferMulti(size_t numChannels, size_t capacity)
: m_buffer(new Buffer<T>[numChannels])
, m_numChannels(numChannels)
BufferMulti(size_t capacity)
: m_buffer(new Buffer<T>[numCh])
, m_capacity(capacity)
{
for (int c=0; c < numChannels; c++)
for (int c=0; c < numCh; c++)
{
m_buffer[c].resize(capacity);
}
@@ -56,7 +55,7 @@ class BufferMulti
void reset()
{
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
m_buffer[c].reset();
}
@@ -69,7 +68,7 @@ class BufferMulti
size_t numChannels()
{
return m_numChannels;
return numCh;
}
Buffer<T> operator[](uint channel)
@@ -84,7 +83,7 @@ class BufferMulti
BufferMulti & operator ++()
{
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
++(m_buffer[c]);
}
@@ -93,7 +92,7 @@ class BufferMulti
BufferMulti & operator +=(int i)
{
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
m_buffer[c] += i;
}
@@ -102,7 +101,7 @@ class BufferMulti
BufferMulti & operator --()
{
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
--(m_buffer[c]);
}
@@ -111,68 +110,37 @@ class BufferMulti
BufferMulti & operator -=(int i)
{
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
m_buffer[c] -= i;
}
return *this;
}
BufferMulti & operator = (const T& value)
BufferMulti & operator =(const T& value)
{
for (uint c=0; c < m_numChannels; c++)
for (uint c=0; c < numCh; c++)
{
m_buffer[c][0] = value;
}
return *this;
}
dsp::Buffer<T> quer(int offset=0)
void quer(T *out, int offset=0) const
{
Buffer<T> querBuffer(numChannels());
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
querBuffer[c] = m_buffer[c][offset];
out[c] = m_buffer[c][offset];
}
return querBuffer;
}
const dsp::Buffer<T> quer(int offset=0) const
void quer(T *out, const int *offsets) const
{
Buffer<T> querBuffer(numChannels());
for (int c=0; c < m_numChannels; c++)
for (int c=0; c < numCh; c++)
{
querBuffer[c] = m_buffer[c][offset];
out[c] = m_buffer[c][offsets[c]];
}
return querBuffer;
}
dsp::Buffer<T> quer(std::initializer_list<int> offsets)
{
Buffer<T> querBuffer(offsets.size());
uint ch = 0;
for (int offset: offsets)
{
querBuffer[ch] = m_buffer[ch][offset];
ch++;
}
return querBuffer;
}
const dsp::Buffer<T> quer(std::initializer_list<int> offsets) const
{
Buffer<T> querBuffer(offsets.size());
uint ch = 0;
for (int offset: offsets)
{
querBuffer[ch] = m_buffer[ch][offset];
ch++;
}
return querBuffer;
}
Buffer<T> at(uint channel)
{