mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 21:15:11 +00:00
AY: add stereo separation slider
This commit is contained in:
parent
5c2c80ce22
commit
9685a5c0d8
5 changed files with 16 additions and 4 deletions
|
@ -115,8 +115,8 @@ void DivPlatformAY8910::acquire(short* bufL, short* bufR, size_t start, size_t l
|
||||||
ay->sound_stream_update(ayBuf,len);
|
ay->sound_stream_update(ayBuf,len);
|
||||||
if (stereo) {
|
if (stereo) {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
bufL[i+start]=ayBuf[0][i]+ayBuf[1][i];
|
bufL[i+start]=ayBuf[0][i]+ayBuf[1][i]+((ayBuf[2][i]*stereoSep)>>8);
|
||||||
bufR[i+start]=ayBuf[1][i]+ayBuf[2][i];
|
bufR[i+start]=((ayBuf[0][i]*stereoSep)>>8)+ayBuf[1][i]+ayBuf[2][i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
|
@ -659,6 +659,7 @@ void DivPlatformAY8910::setFlags(unsigned int flags) {
|
||||||
ay->device_reset();
|
ay->device_reset();
|
||||||
|
|
||||||
stereo=(flags>>6)&1;
|
stereo=(flags>>6)&1;
|
||||||
|
stereoSep=(flags>>8)&255;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivPlatformAY8910::init(DivEngine* p, int channels, int sugRate, unsigned int flags) {
|
int DivPlatformAY8910::init(DivEngine* p, int channels, int sugRate, unsigned int flags) {
|
||||||
|
|
|
@ -66,6 +66,7 @@ class DivPlatformAY8910: public DivDispatch {
|
||||||
int dacPos;
|
int dacPos;
|
||||||
int dacSample;
|
int dacSample;
|
||||||
unsigned char sampleBank;
|
unsigned char sampleBank;
|
||||||
|
unsigned char stereoSep;
|
||||||
|
|
||||||
int delay;
|
int delay;
|
||||||
|
|
||||||
|
|
|
@ -99,8 +99,8 @@ void DivPlatformAY8930::acquire(short* bufL, short* bufR, size_t start, size_t l
|
||||||
ay->sound_stream_update(ayBuf,len);
|
ay->sound_stream_update(ayBuf,len);
|
||||||
if (stereo) {
|
if (stereo) {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
bufL[i+start]=ayBuf[0][i]+ayBuf[1][i];
|
bufL[i+start]=ayBuf[0][i]+ayBuf[1][i]+((ayBuf[2][i]*stereoSep)>>8);
|
||||||
bufR[i+start]=ayBuf[1][i]+ayBuf[2][i];
|
bufR[i+start]=((ayBuf[0][i]*stereoSep)>>8)+ayBuf[1][i]+ayBuf[2][i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
|
@ -609,6 +609,7 @@ void DivPlatformAY8930::setFlags(unsigned int flags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
stereo=(flags>>6)&1;
|
stereo=(flags>>6)&1;
|
||||||
|
stereoSep=(flags>>8)&255;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivPlatformAY8930::init(DivEngine* p, int channels, int sugRate, unsigned int flags) {
|
int DivPlatformAY8930::init(DivEngine* p, int channels, int sugRate, unsigned int flags) {
|
||||||
|
|
|
@ -66,6 +66,7 @@ class DivPlatformAY8930: public DivDispatch {
|
||||||
DivDispatchOscBuffer* oscBuf[3];
|
DivDispatchOscBuffer* oscBuf[3];
|
||||||
unsigned char regPool[32];
|
unsigned char regPool[32];
|
||||||
unsigned char ayNoiseAnd, ayNoiseOr;
|
unsigned char ayNoiseAnd, ayNoiseOr;
|
||||||
|
unsigned char stereoSep;
|
||||||
bool bank;
|
bool bank;
|
||||||
|
|
||||||
int delay;
|
int delay;
|
||||||
|
|
|
@ -358,6 +358,14 @@ void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool
|
||||||
if (ImGui::Checkbox("Stereo##_AY_STEREO",&stereo)) {
|
if (ImGui::Checkbox("Stereo##_AY_STEREO",&stereo)) {
|
||||||
copyOfFlags=(flags&(~0x40))|(stereo?0x40:0);
|
copyOfFlags=(flags&(~0x40))|(stereo?0x40:0);
|
||||||
}
|
}
|
||||||
|
if (stereo) {
|
||||||
|
int sep=256-((flags>>8)&255);
|
||||||
|
if (CWSliderInt("Separation",&sep,1,256)) {
|
||||||
|
if (sep<1) sep=1;
|
||||||
|
if (sep>256) sep=256;
|
||||||
|
copyOfFlags=(flags&(~0xff00))|((256-sep)<<8);
|
||||||
|
}
|
||||||
|
}
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
bool clockSel=flags&0x80;
|
bool clockSel=flags&0x80;
|
||||||
ImGui::BeginDisabled((type==DIV_SYSTEM_AY8910) && ((flags&0x30)!=16));
|
ImGui::BeginDisabled((type==DIV_SYSTEM_AY8910) && ((flags&0x30)!=16));
|
||||||
|
|
Loading…
Reference in a new issue