Skip to content

Commit 7b1ba68

Browse files
committed
fixed reverse rotation
1 parent 66d08e8 commit 7b1ba68

3 files changed

Lines changed: 17 additions & 11 deletions

File tree

include/Kaixo/SpectralRotator/Processing/Resampler.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ namespace Kaixo::Processing {
2626
void reset() { index(0); }
2727
void index(std::int64_t i) { playindex = i; lastinserted = i; finished = false; }
2828

29+
// ------------------------------------------------
30+
31+
bool reverse = false;
32+
2933
// ------------------------------------------------
3034

3135
struct {

source/Kaixo/SpectralRotator/Processing/Resampler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace Kaixo::Processing {
2222
// ------------------------------------------------
2323

2424
const auto get = [&](std::int64_t index) -> AudioFrame {
25-
if (index >= 0 && index < in.size()) return in[index];
25+
if (index >= 0 && index < in.size()) return reverse ? in[in.size() - index - 1] : in[index];
2626
finished = true;
2727
return {};
2828
};

source/Kaixo/SpectralRotator/Processing/Rotator.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ namespace Kaixo::Processing {
4747

4848
// ------------------------------------------------
4949

50-
m_EstimatedSteps = bufferSize * 3 + resultSize;
50+
m_EstimatedSteps = buffer.size() * 5 - 1;
5151

5252
// ------------------------------------------------
5353

54-
return rotateOnce(buffer, direction, originalBuffer);
54+
return rotateOnce(buffer, direction);
5555

5656
// ------------------------------------------------
5757

@@ -80,7 +80,7 @@ namespace Kaixo::Processing {
8080

8181
// ------------------------------------------------
8282

83-
bool usingOriginal = false; // originalBuffer.size() != 0;
83+
bool usingOriginal = originalBuffer.size() != 0;
8484
const std::size_t bufferSize = (usingOriginal ? originalBuffer.size() : buffer.size());
8585
const std::size_t resultSize = 2 * bufferSize - 1;
8686

@@ -97,28 +97,30 @@ namespace Kaixo::Processing {
9797
AudioBufferResampler resampler{};
9898
resampler.samplerate.in = buffer.sampleRate;
9999
resampler.samplerate.out = originalBuffer.sampleRate;
100+
resampler.reverse = reverseInput;
100101
auto get = [&](std::size_t index) {
101102
if (usingOriginal && buffer.sampleRate != originalBuffer.sampleRate) {
102103
return resampler.generate(buffer);
103104
} else {
104-
return Stereo{ buffer[index].l, buffer[index].r };
105+
auto i = reverseInput ? buffer.size() - index - 1 : index;
106+
return Stereo{ buffer[i].l, buffer[i].r };
105107
}
106108
};
107109

108110
Stereo sumInput{};
109111
for (std::size_t i = 0; i < bufferSize; ++i) {
110-
auto index = reverseInput ? bufferSize - i - 1 : i;
111112
auto out = get(i);
112-
result.l[index] = out.l;
113-
result.r[index] = out.r;
113+
result.l[i] = out.l;
114+
result.r[i] = out.r;
114115

115116
if (i != 0) {
116-
result.l[resultSize - index] = out.l;
117-
result.r[resultSize - index] = out.r;
117+
result.l[resultSize - i] = out.l;
118+
result.r[resultSize - i] = out.r;
118119
}
119120

120121
if (usingOriginal) { // When using original we want to maintain power of the original buffer
121-
auto level = Math::Fast::abs(Stereo{ originalBuffer[i].l, originalBuffer[i].r });
122+
auto index = reverseInput ? bufferSize - i - 1 : i;
123+
auto level = Math::Fast::abs(Stereo{ originalBuffer[index].l, originalBuffer[index].r });
122124
sumInput += level * level;
123125
} else {
124126
auto level = Math::Fast::abs(out);

0 commit comments

Comments
 (0)