Files
ppsspp/Core/HW/SasReverb.h
T
Henrik Rydgård 5402579a44 sceSas: correct the reverb presets
The reverb presets came from nocash's PS1 table. Six of the nine are
identical on the PSP, but three are not.

Also correct our linear interpolation expression: we were close but
our formula can produce an off by 1 at times.
2026-09-09 10:48:53 -06:00

56 lines
1.7 KiB
C++

// Copyright (c) 2015- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#pragma once
struct SasReverbData;
class SasReverb {
public:
SasReverb();
~SasReverb();
void SetPreset(int preset);
// sceSasRevParam's delay and feedback, both 0..127. Only the Echo and Delay presets use
// them; the hardware recomputes most of their parameters from these.
void SetParams(int delay, int feedback);
int GetPreset() { return preset_; }
static const char *GetPresetName(int preset);
// Input should be a mixdown of all the channels that have reverb enabled, at 22khz.
// Output is written back at 44khz.
void ProcessReverb(int16_t *output, const int16_t *input, size_t inputSize, int volLeft, int volRight);
private:
enum {
BUFSIZE = 0x20000,
};
// Copies the current preset into data_, then patches it for Echo/Delay. Called whenever the
// preset or the parameters change.
void ApplyParams();
int16_t *workspace_;
// The preset in effect, as a mutable copy: Echo and Delay are partly computed at runtime.
SasReverbData *data_;
int preset_;
int pos_;
int delay_ = 0;
int feedback_ = 0;
};