// e_volumes[0]->set_context_device(1, line_in, 0,
// MB87078_TYPE_MASK_RIGHT);
e_volumes[1]->set_context_device(0, cdrom, 0,
- MB87078_TYPE_MASK_LEFT, SIG_TOWNS_CDROM_MUTE_L,
+ MB87078_TYPE_SET_LEFT, SIG_TOWNS_CDROM_MUTE_L,
0xffffffff,
0xffffffff,
false
);
e_volumes[1]->set_context_device(1, cdrom, 0,
- MB87078_TYPE_MASK_RIGHT, SIG_TOWNS_CDROM_MUTE_R,
+ MB87078_TYPE_SET_RIGHT, SIG_TOWNS_CDROM_MUTE_R,
0xffffffff,
0xffffffff,
false
switch(channels[ch].channelmask & 3) {
case 0: // NONE
break;
- case MB87078_TYPE_MASK_LEFT: //
- left = vol + left;
+ case MB87078_TYPE_SET_LEFT: //
+ left = channels[ch].extvalue + vol;
break;
- case MB87078_TYPE_MASK_RIGHT: //
- right = vol + right;
+ case MB87078_TYPE_SET_RIGHT: //
+ right = channels[ch].extvalue + vol;
break;
- case MB87078_TYPE_MASK_CENTER: //
- right = vol + right;
- left = vol + left;
+ case MB87078_TYPE_SET_CENTER: //
+ left = channels[ch].extvalue + vol;
+ right = left;
break;
}
channels[ch].dev->set_volume(channels[ch].devch, left, right);
void MB87078::set_volume_per_channel(int ch, int db)
{
if((ch >= 0) && (ch < 4)) {
+ int bak_db = channels[ch].extvalue;
channels[ch].extvalue = db;
- set_volume_internal(ch, channels[ch].intvalue, true);
+ if(bak_db != db) {
+ set_volume_internal(ch, channels[ch].intvalue, true);
+ }
}
}
#include "device.h"
-#define MB87078_TYPE_MASK_LEFT 0x01
-#define MB87078_TYPE_MASK_RIGHT 0x02
-#define MB87078_TYPE_MASK_CENTER (MB87078_TYPE_MASK_LEFT | MB87078_TYPE_MASK_RIGHT)
+#define MB87078_TYPE_SET_LEFT 0x01
+#define MB87078_TYPE_SET_RIGHT 0x02
+#define MB87078_TYPE_SET_CENTER (MB87078_TYPE_SET_LEFT | MB87078_TYPE_SET_RIGHT)
class MB87078 : public DEVICE {
protected: