add "force mono audio" option and fix flags not be

ing set after a dispatch reset
This commit is contained in:
tildearrow 2022-02-04 17:04:36 -05:00
parent 16f497fcf1
commit a93a9c19f3
6 changed files with 22 additions and 3 deletions

View file

@ -88,7 +88,7 @@ void DivDispatchContainer::clear() {
prevSample[1]=temp[1];*/
}
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, bool pal) {
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, unsigned int flags) {
if (dispatch!=NULL) return;
bb[0]=blip_new(32768);
@ -170,7 +170,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
dispatch=new DivPlatformDummy;
break;
}
dispatch->init(eng,chanCount,gotRate,pal);
dispatch->init(eng,chanCount,gotRate,flags);
}
void DivDispatchContainer::quit() {

View file

@ -5993,6 +5993,7 @@ bool DivEngine::initAudioBackend() {
}
lowQuality=getConfInt("audioQuality",0);
forceMono=getConfInt("forceMono",0);
switch (audioEngine) {
case DIV_AUDIO_JACK:

View file

@ -116,7 +116,7 @@ struct DivDispatchContainer {
void acquire(size_t offset, size_t count);
void fillBuf(size_t runtotal, size_t size);
void clear();
void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, bool pal);
void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, unsigned int flags);
void quit();
DivDispatchContainer():
dispatch(NULL),
@ -148,6 +148,7 @@ class DivEngine {
bool metronome;
bool exporting;
bool halted;
bool forceMono;
int ticks, curRow, curOrder, remainingLoops, nextSpeed, divider;
int cycles, clockDrift;
int changeOrd, changePos, totalSeconds, totalTicks, totalTicksR, totalCmds, lastCmds, cmdsPerSecond, globalPitch;
@ -568,6 +569,7 @@ class DivEngine {
metronome(false),
exporting(false),
halted(false),
forceMono(false),
ticks(0),
curRow(0),
curOrder(0),

View file

@ -1192,5 +1192,12 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
memcpy(oscBuf[0],out[0],size*sizeof(float));
memcpy(oscBuf[1],out[1],size*sizeof(float));
oscSize=size;
if (forceMono) {
for (size_t i=0; i<size; i++) {
out[0][i]=(out[0][i]+out[1][i])*0.5;
out[1][i]=out[0][i];
}
}
isBusy.unlock();
}