swan: Add command to change internal speaker loudness
This commit is contained in:
parent
b59fc1e8f5
commit
c93dc6f4f3
|
@ -20,6 +20,11 @@ it has 4 wavetable channels. some of them have additional capabilities:
|
||||||
- `13xx`: **setup sweep amount.** channel 3 only.
|
- `13xx`: **setup sweep amount.** channel 3 only.
|
||||||
- `00` to `7F` for 0 to 127.
|
- `00` to `7F` for 0 to 127.
|
||||||
- `80` to `FF` for -128 to -1.
|
- `80` to `FF` for -128 to -1.
|
||||||
|
- `20xx`: **set internal speaker loudness.**
|
||||||
|
- 0-1: 100% (default).
|
||||||
|
- 2-3: 200%.
|
||||||
|
- 4-7: 400%.
|
||||||
|
- 8: 800%.
|
||||||
|
|
||||||
## info
|
## info
|
||||||
|
|
||||||
|
|
|
@ -171,8 +171,9 @@ enum DivDispatchCmds {
|
||||||
DIV_CMD_X1_010_AUTO_ENVELOPE,
|
DIV_CMD_X1_010_AUTO_ENVELOPE,
|
||||||
DIV_CMD_X1_010_SAMPLE_BANK_SLOT,
|
DIV_CMD_X1_010_SAMPLE_BANK_SLOT,
|
||||||
|
|
||||||
DIV_CMD_WS_SWEEP_TIME,
|
DIV_CMD_WS_SWEEP_TIME, // (time)
|
||||||
DIV_CMD_WS_SWEEP_AMOUNT,
|
DIV_CMD_WS_SWEEP_AMOUNT, // (value)
|
||||||
|
DIV_CMD_WS_GLOBAL_SPEAKER_VOLUME, // (multiplier)
|
||||||
|
|
||||||
DIV_CMD_N163_WAVE_POSITION,
|
DIV_CMD_N163_WAVE_POSITION,
|
||||||
DIV_CMD_N163_WAVE_LENGTH,
|
DIV_CMD_N163_WAVE_LENGTH,
|
||||||
|
|
|
@ -421,6 +421,17 @@ int DivPlatformSwan::dispatch(DivCommand c) {
|
||||||
rWrite(0x0c,c.value&0xff);
|
rWrite(0x0c,c.value&0xff);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case DIV_CMD_WS_GLOBAL_SPEAKER_VOLUME:
|
||||||
|
if (c.value <= 1) {
|
||||||
|
rWrite(0x11,0x09|(3<<1));
|
||||||
|
} else if (c.value <= 3) {
|
||||||
|
rWrite(0x11,0x09|(2<<1));
|
||||||
|
} else if (c.value <= 7) {
|
||||||
|
rWrite(0x11,0x09|(1<<1));
|
||||||
|
} else {
|
||||||
|
rWrite(0x11,0x09|(0<<1));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case DIV_CMD_NOTE_PORTA: {
|
case DIV_CMD_NOTE_PORTA: {
|
||||||
int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta);
|
int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta);
|
||||||
bool return2=false;
|
bool return2=false;
|
||||||
|
@ -631,7 +642,7 @@ void DivPlatformSwan::setFlags(const DivConfig& flags) {
|
||||||
chipClock=3072000;
|
chipClock=3072000;
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/128;
|
rate=chipClock/128;
|
||||||
stereo=flags.getBool("stereo",false);
|
stereo=flags.getBool("stereo",true);
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
oscBuf[i]->setRate(rate);
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,6 +170,7 @@ const char* cmdName[]={
|
||||||
|
|
||||||
"WS_SWEEP_TIME",
|
"WS_SWEEP_TIME",
|
||||||
"WS_SWEEP_AMOUNT",
|
"WS_SWEEP_AMOUNT",
|
||||||
|
"WS_GLOBAL_SPEAKER_VOLUME",
|
||||||
|
|
||||||
"N163_WAVE_POSITION",
|
"N163_WAVE_POSITION",
|
||||||
"N163_WAVE_LENGTH",
|
"N163_WAVE_LENGTH",
|
||||||
|
|
|
@ -1389,6 +1389,9 @@ void DivEngine::registerSystems() {
|
||||||
{0x12, {DIV_CMD_WS_SWEEP_TIME, _("12xx: Setup sweep period (0: disabled; 1-20: enabled/period)")}},
|
{0x12, {DIV_CMD_WS_SWEEP_TIME, _("12xx: Setup sweep period (0: disabled; 1-20: enabled/period)")}},
|
||||||
{0x13, {DIV_CMD_WS_SWEEP_AMOUNT, _("13xx: Set sweep amount")}},
|
{0x13, {DIV_CMD_WS_SWEEP_AMOUNT, _("13xx: Set sweep amount")}},
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, _("17xx: Toggle PCM mode (LEGACY)")}},
|
{0x17, {DIV_CMD_SAMPLE_MODE, _("17xx: Toggle PCM mode (LEGACY)")}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{0x20, {DIV_CMD_WS_GLOBAL_SPEAKER_VOLUME, _("20xx: Set internal speaker loudness (0-1: 100%, 2-3: 200%, 4-7: 400%, 8: 800%)")}},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue