mirror of https://github.com/bsnes-emu/bsnes.git
52 lines
1022 B
C++
52 lines
1022 B
C++
|
#ifdef NALL_DSP_INTERNAL_HPP
|
||
|
|
||
|
struct Buffer {
|
||
|
double **sample;
|
||
|
uint16_t rdoffset;
|
||
|
uint16_t wroffset;
|
||
|
unsigned channels;
|
||
|
|
||
|
void setChannels(unsigned channels) {
|
||
|
for(unsigned c = 0; c < this->channels; c++) {
|
||
|
if(sample[c]) delete[] sample[c];
|
||
|
}
|
||
|
if(sample) delete[] sample;
|
||
|
|
||
|
this->channels = channels;
|
||
|
if(channels == 0) return;
|
||
|
|
||
|
sample = new double*[channels];
|
||
|
for(unsigned c = 0; c < channels; c++) {
|
||
|
sample[c] = new double[65536]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
inline double& read(unsigned channel, signed offset = 0) {
|
||
|
return sample[channel][(uint16_t)(rdoffset + offset)];
|
||
|
}
|
||
|
|
||
|
inline double& write(unsigned channel, signed offset = 0) {
|
||
|
return sample[channel][(uint16_t)(wroffset + offset)];
|
||
|
}
|
||
|
|
||
|
inline void clear() {
|
||
|
for(unsigned c = 0; c < channels; c++) {
|
||
|
for(unsigned n = 0; n < 65536; n++) {
|
||
|
sample[c][n] = 0;
|
||
|
}
|
||
|
}
|
||
|
rdoffset = 0;
|
||
|
wroffset = 0;
|
||
|
}
|
||
|
|
||
|
Buffer() {
|
||
|
channels = 0;
|
||
|
}
|
||
|
|
||
|
~Buffer() {
|
||
|
setChannels(0);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif
|