Fix noise issue in Reaper (and possibly other VST hosts) caused by calls with buffer lengths > 512 bytes.
This commit is contained in:
parent
a1b70cebc4
commit
d1824927f5
2 changed files with 11 additions and 1 deletions
|
@ -1498,6 +1498,8 @@ void Handler::WriteReg( Bit32u addr, Bit8u val ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Handler::Generate( Bitu samples, Bit32s* buffer ) {
|
void Handler::Generate( Bitu samples, Bit32s* buffer ) {
|
||||||
|
// Not sure why this is here, possibly limited length of LUT etc?
|
||||||
|
// Limiting calls to 512 bytes at a time in HiOPL.
|
||||||
if ( GCC_UNLIKELY(samples > 512) )
|
if ( GCC_UNLIKELY(samples > 512) )
|
||||||
samples = 512;
|
samples = 512;
|
||||||
if ( !chip.opl3Active ) {
|
if ( !chip.opl3Active ) {
|
||||||
|
|
|
@ -50,7 +50,15 @@ void Hiopl::SetEmulator(Emulator emulator) {
|
||||||
void Hiopl::Generate(int length, float* buffer) {
|
void Hiopl::Generate(int length, float* buffer) {
|
||||||
intermediateBufIdx = (intermediateBufIdx + 1) % INTERMEDIATE_BUF_N;
|
intermediateBufIdx = (intermediateBufIdx + 1) % INTERMEDIATE_BUF_N;
|
||||||
Bit32s *iBuf = intermediateBuf[intermediateBufIdx];
|
Bit32s *iBuf = intermediateBuf[intermediateBufIdx];
|
||||||
adlib->Generate(length, iBuf);
|
int fullCalls = length / 512; // the emulator is limited to 512 bytes per call
|
||||||
|
int c = 0;
|
||||||
|
for (; c < fullCalls; c++) {
|
||||||
|
adlib->Generate(512, iBuf + (c * 512));
|
||||||
|
}
|
||||||
|
// final (or only) call
|
||||||
|
if (length % 512 > 0) {
|
||||||
|
adlib->Generate(length % 512, iBuf + (c * 512));
|
||||||
|
}
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
// Magic divisor taken from ZDoom wrapper for DOSBox emulator, line 892
|
// Magic divisor taken from ZDoom wrapper for DOSBox emulator, line 892
|
||||||
// https://github.com/rheit/zdoom/blob/master/src/oplsynth/dosbox/opl.cpp
|
// https://github.com/rheit/zdoom/blob/master/src/oplsynth/dosbox/opl.cpp
|
||||||
|
|
Loading…
Reference in a new issue