Browse Source

fix SampleRateConverter::process calls

tags/v0.4.0
Andrew Belt 8 years ago
parent
commit
f38d921649
4 changed files with 15 additions and 13 deletions
  1. +5
    -4
      src/Braids.cpp
  2. +2
    -2
      src/Clouds.cpp
  3. +2
    -2
      src/Elements.cpp
  4. +6
    -5
      src/Rings.cpp

+ 5
- 4
src/Braids.cpp View File

@@ -30,7 +30,7 @@ struct Braids : Module {

braids::MacroOscillator *osc;
SampleRateConverter<1> src;
DoubleRingBuffer<float, 256> outputBuffer;
DoubleRingBuffer<Frame<1>, 256> outputBuffer;
bool lastTrig = false;

Braids();
@@ -87,9 +87,9 @@ void Braids::step() {
osc->Render(sync_buffer, render_buffer, 24);

// Sample rate convert
float in[24];
Frame<1> in[24];
for (int i = 0; i < 24; i++) {
in[i] = render_buffer[i] / 32768.0;
in[i].samples[0] = render_buffer[i] / 32768.0;
}
src.setRatio(gSampleRate / 96000.0);

@@ -101,7 +101,8 @@ void Braids::step() {

// Output
if (!outputBuffer.empty()) {
setf(outputs[OUT_OUTPUT], 5.0 * outputBuffer.shift());
Frame<1> f = outputBuffer.shift();
setf(outputs[OUT_OUTPUT], 5.0 * f.samples[0]);
}
}



+ 2
- 2
src/Clouds.cpp View File

@@ -95,7 +95,7 @@ void Clouds::step() {
Frame<2> inputFrames[32];
int inLen = inputBuffer.size();
int outLen = 32;
inputSrc.process((const float*) inputBuffer.startData(), &inLen, (float*) inputFrames, &outLen);
inputSrc.process(inputBuffer.startData(), &inLen, inputFrames, &outLen);
inputBuffer.startIncr(inLen);

// We might not fill all of the input buffer if there is a deficiency, but this cannot be avoided due to imprecisions between the input and output SRC.
@@ -140,7 +140,7 @@ void Clouds::step() {
outputSrc.setRatio(gSampleRate / 32000.0);
int inLen = 32;
int outLen = outputBuffer.capacity();
outputSrc.process((const float*) outputFrames, &inLen, (float*) outputBuffer.endData(), &outLen);
outputSrc.process(outputFrames, &inLen, outputBuffer.endData(), &outLen);
outputBuffer.endIncr(outLen);
}



+ 2
- 2
src/Elements.cpp View File

@@ -121,7 +121,7 @@ void Elements::step() {
Frame<2> inputFrames[16];
int inLen = inputBuffer.size();
int outLen = 16;
inputSrc.process((float*) inputBuffer.startData(), &inLen, (float*) inputFrames, &outLen);
inputSrc.process(inputBuffer.startData(), &inLen, inputFrames, &outLen);
inputBuffer.startIncr(inLen);

for (int i = 0; i < outLen; i++) {
@@ -171,7 +171,7 @@ void Elements::step() {
outputSrc.setRatio(gSampleRate / 32000.0);
int inLen = 16;
int outLen = outputBuffer.capacity();
outputSrc.process((float*) outputFrames, &inLen, (float*) outputBuffer.endData(), &outLen);
outputSrc.process(outputFrames, &inLen, outputBuffer.endData(), &outLen);
outputBuffer.endIncr(outLen);
}



+ 6
- 5
src/Rings.cpp View File

@@ -44,7 +44,7 @@ struct Rings : Module {

SampleRateConverter<1> inputSrc;
SampleRateConverter<2> outputSrc;
DoubleRingBuffer<float, 256> inputBuffer;
DoubleRingBuffer<Frame<1>, 256> inputBuffer;
DoubleRingBuffer<Frame<2>, 256> outputBuffer;

uint16_t reverb_buffer[32768] = {};
@@ -82,8 +82,9 @@ void Rings::step() {
// "Normalized to a pulse/burst generator that reacts to note changes on the V/OCT input."
// Get input
if (!inputBuffer.full()) {
float inputFrame = getf(inputs[IN_INPUT]) / 5.0;
inputBuffer.push(inputFrame);
Frame<1> f;
f.samples[0] = getf(inputs[IN_INPUT]) / 5.0;
inputBuffer.push(f);
}

if (!strum) {
@@ -98,7 +99,7 @@ void Rings::step() {
inputSrc.setRatio(48000.0 / gSampleRate);
int inLen = inputBuffer.size();
int outLen = 24;
inputSrc.process(inputBuffer.startData(), &inLen, (float*) in, &outLen);
inputSrc.process(inputBuffer.startData(), &inLen, (Frame<1>*) in, &outLen);
inputBuffer.startIncr(inLen);
}

@@ -172,7 +173,7 @@ void Rings::step() {
outputSrc.setRatio(gSampleRate / 48000.0);
int inLen = 24;
int outLen = outputBuffer.capacity();
outputSrc.process((const float*) outputFrames, &inLen, (float*) outputBuffer.endData(), &outLen);
outputSrc.process(outputFrames, &inLen, outputBuffer.endData(), &outLen);
outputBuffer.endIncr(outLen);
}
}


Loading…
Cancel
Save