mixer: per-chp peak meters, fix almost every ui issue:
- fix wrong verticaltext clipping - fix verticaltext overflow centering - add hscroll to mixer
This commit is contained in:
parent
76b29fa31c
commit
2108cffec2
4 changed files with 62 additions and 11 deletions
|
|
@ -698,6 +698,8 @@ class DivEngine {
|
|||
int lastNBIns, lastNBOuts, lastNBSize;
|
||||
std::atomic<size_t> processTime;
|
||||
|
||||
float chipPeak[DIV_MAX_CHIPS][DIV_MAX_OUTPUTS];
|
||||
|
||||
void runExportThread();
|
||||
void nextBuf(float** in, float** out, int inChans, int outChans, unsigned int size);
|
||||
DivInstrument* getIns(int index, DivInstrumentType fallbackType=DIV_INS_FM);
|
||||
|
|
@ -1542,6 +1544,7 @@ class DivEngine {
|
|||
memset(walked,0,8192);
|
||||
memset(oscBuf,0,DIV_MAX_OUTPUTS*(sizeof(float*)));
|
||||
memset(exportChannelMask,1,DIV_MAX_CHANS*sizeof(bool));
|
||||
memset(chipPeak,0,DIV_MAX_CHIPS*DIV_MAX_OUTPUTS*sizeof(float));
|
||||
|
||||
for (int i=0; i<DIV_MAX_CHIP_DEFS; i++) {
|
||||
sysFileMapFur[i]=DIV_SYSTEM_NULL;
|
||||
|
|
|
|||
|
|
@ -2706,6 +2706,36 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
|
|||
}
|
||||
oscSize=size;
|
||||
|
||||
// get per-chip peaks
|
||||
float decay=2.f*size/got.rate;
|
||||
for (int i=0; i<song.systemLen; i++) {
|
||||
DivDispatch* disp=disCont[i].dispatch;
|
||||
for (int j=0; j<disp->getOutputCount(); j++) {
|
||||
chipPeak[i][j]*=1.0-decay;
|
||||
float peak=chipPeak[i][j];
|
||||
for (unsigned int k=0; k<size; k++) {
|
||||
float out=disCont[i].bbOut[j][k]*song.systemVol[i]*disp->getPostAmp()/32768.0f; // TODO: PARSE PANNING, FRONT/REAR AND PATCHBAY
|
||||
// switch (j) {
|
||||
// case 0:
|
||||
// out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]);
|
||||
// break;
|
||||
// case 1:
|
||||
// out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]);
|
||||
// break;
|
||||
// case 2:
|
||||
// out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]);
|
||||
// break;
|
||||
// case 3:
|
||||
// out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]);
|
||||
// break;
|
||||
// default: break;
|
||||
// }
|
||||
if (out>peak) peak=out;
|
||||
}
|
||||
chipPeak[i][j]+=(peak-chipPeak[i][j])*0.9;
|
||||
}
|
||||
}
|
||||
|
||||
// force mono audio (if enabled)
|
||||
if (forceMono && outChans>1) {
|
||||
for (size_t i=0; i<size; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue