- added mix

- redesigned multi buffer
This commit is contained in:
2025-11-06 22:16:59 +01:00
parent bc013ff352
commit 8310d46176
7 changed files with 285 additions and 25 deletions
+45 -15
View File
@@ -33,16 +33,20 @@ namespace dsp {
template <typename T>
class BufferMulti
{
Buffer<T> m_buffer;
size_t m_numChannels;
Buffer<T> *m_buffer;
uint m_numChannels;
size_t m_capacity;
public:
BufferMulti(size_t numChannels, size_t capacity)
: m_buffer(capacity*numChannels)
: m_buffer(new Buffer<T>[numChannels])
, m_numChannels(numChannels)
, m_capacity(capacity)
{
for (int c=0; c < numChannels; c++)
{
m_buffer[c].resize(capacity);
}
}
Buffer<T> & buffer()
@@ -52,7 +56,10 @@ class BufferMulti
void reset()
{
m_buffer.reset();
for (int c=0; c < m_numChannels; c++)
{
m_buffer[c].reset();
}
}
size_t capacity()
@@ -77,58 +84,81 @@ class BufferMulti
BufferMulti & operator ++()
{
++m_buffer;
for (int c=0; c < m_numChannels; c++)
{
++(m_buffer[c]);
}
return *this;
}
BufferMulti & operator +=(int i)
{
m_buffer += i;
for (int c=0; c < m_numChannels; c++)
{
m_buffer[c] += i;
}
return *this;
}
BufferMulti & operator --()
{
--m_buffer;
for (int c=0; c < m_numChannels; c++)
{
--(m_buffer[c]);
}
return *this;
}
BufferMulti & operator -=(int i)
{
m_buffer -= i;
for (int c=0; c < m_numChannels; c++)
{
m_buffer[c] -= i;
}
return *this;
}
BufferMulti & operator =(T value)
BufferMulti & operator = (const T& value)
{
for (uint c=0; c < m_numChannels; c++)
{
this->at(c)[0] = value;
m_buffer[c][0] = value;
}
return *this;
}
dsp::Buffer<T> quer(int offset=0)
{
return Buffer<T>(m_buffer, offset, m_capacity);
Buffer<T> querBuffer(numChannels());
for (int c=0; c < m_numChannels; c++)
{
querBuffer[c] = m_buffer[c][offset];
}
return querBuffer;
}
const dsp::Buffer<T> quer(int offset=0) const
{
return Buffer<T>(m_buffer, offset, m_capacity);
Buffer<T> querBuffer(numChannels());
for (int c=0; c < m_numChannels; c++)
{
querBuffer[c] = m_buffer[c][offset];
}
return querBuffer;
}
protected:
Buffer<T> at(uint channel)
{
return Buffer<T>(m_buffer, channel*m_capacity);
return m_buffer[channel];
}
const Buffer<T> at(uint channel) const
{
return Buffer<T>(m_buffer, channel*m_capacity);
return m_buffer[channel];
}
protected:
};
}