2011-08-20 14:40:44 +00:00
|
|
|
#ifdef NALL_DSP_INTERNAL_HPP
|
|
|
|
|
|
|
|
struct Buffer {
|
2015-11-21 07:36:48 +00:00
|
|
|
Buffer() {
|
|
|
|
}
|
|
|
|
|
|
|
|
~Buffer() {
|
|
|
|
setChannels(0);
|
|
|
|
}
|
2011-08-20 14:40:44 +00:00
|
|
|
|
2015-11-21 07:36:48 +00:00
|
|
|
auto setChannels(uint channels) -> void {
|
2013-03-15 13:11:33 +00:00
|
|
|
if(sample) {
|
2015-11-21 07:36:48 +00:00
|
|
|
for(auto c : range(this->channels)) {
|
2013-03-15 13:11:33 +00:00
|
|
|
if(sample[c]) delete[] sample[c];
|
|
|
|
}
|
|
|
|
delete[] sample;
|
2011-09-16 11:44:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
this->channels = channels;
|
|
|
|
if(channels == 0) return;
|
|
|
|
|
|
|
|
sample = new double*[channels];
|
2015-11-21 07:36:48 +00:00
|
|
|
for(auto c : range(channels)) {
|
2011-09-16 11:44:07 +00:00
|
|
|
sample[c] = new double[65536]();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-21 07:36:48 +00:00
|
|
|
inline auto read(uint channel, int offset = 0) -> double& {
|
|
|
|
return sample[channel][(uint16)(rdoffset + offset)];
|
2011-08-20 14:40:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-21 07:36:48 +00:00
|
|
|
inline auto write(uint channel, int offset = 0) -> double& {
|
|
|
|
return sample[channel][(uint16)(wroffset + offset)];
|
2011-08-20 14:40:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-21 07:36:48 +00:00
|
|
|
inline auto clear() -> void {
|
|
|
|
for(auto c : range(channels)) {
|
|
|
|
for(auto n : range(65536)) {
|
2011-09-16 11:44:07 +00:00
|
|
|
sample[c][n] = 0;
|
|
|
|
}
|
2011-08-20 14:40:44 +00:00
|
|
|
}
|
|
|
|
rdoffset = 0;
|
|
|
|
wroffset = 0;
|
|
|
|
}
|
|
|
|
|
2015-11-21 07:36:48 +00:00
|
|
|
double** sample = nullptr;
|
|
|
|
uint16 rdoffset = 0;
|
|
|
|
uint16 wroffset = 0;
|
|
|
|
uint channels = 0;
|
2011-08-20 14:40:44 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|