new dispatch, part 1
This commit is contained in:
parent
3e0dcbb0ae
commit
a29f36a5df
|
@ -80,8 +80,11 @@
|
||||||
#include "song.h"
|
#include "song.h"
|
||||||
|
|
||||||
void DivDispatchContainer::setRates(double gotRate) {
|
void DivDispatchContainer::setRates(double gotRate) {
|
||||||
blip_set_rates(bb[0],dispatch->rate,gotRate);
|
int outs=dispatch->getOutputCount();
|
||||||
blip_set_rates(bb[1],dispatch->rate,gotRate);
|
|
||||||
|
for (int i=0; i<outs; i++) {
|
||||||
|
blip_set_rates(bb[i],dispatch->rate,gotRate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivDispatchContainer::setQuality(bool lowQual) {
|
void DivDispatchContainer::setQuality(bool lowQual) {
|
||||||
|
@ -90,73 +93,68 @@ void DivDispatchContainer::setQuality(bool lowQual) {
|
||||||
|
|
||||||
void DivDispatchContainer::acquire(size_t offset, size_t count) {
|
void DivDispatchContainer::acquire(size_t offset, size_t count) {
|
||||||
int outs=dispatch->getOutputCount();
|
int outs=dispatch->getOutputCount();
|
||||||
for (int i=0; i<outs; i++) {
|
for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
|
||||||
bbInMapped[i]=&bbIn[i][offset];
|
if (i>=outs) {
|
||||||
|
bbInMapped[i]=NULL;
|
||||||
|
} else {
|
||||||
|
bbInMapped[i]=&bbIn[i][offset];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dispatch->acquire(bbInMapped,count);
|
dispatch->acquire(bbInMapped,count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivDispatchContainer::flush(size_t count) {
|
void DivDispatchContainer::flush(size_t count) {
|
||||||
blip_read_samples(bb[0],bbOut[0],count,0);
|
int outs=dispatch->getOutputCount();
|
||||||
|
|
||||||
if (dispatch->isStereo()) {
|
for (int i=0; i<outs; i++) {
|
||||||
blip_read_samples(bb[1],bbOut[1],count,0);
|
blip_read_samples(bb[i],bbOut[i],count,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size) {
|
void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size) {
|
||||||
|
int outs=dispatch->getOutputCount();
|
||||||
if (dcOffCompensation && runtotal>0) {
|
if (dcOffCompensation && runtotal>0) {
|
||||||
dcOffCompensation=false;
|
dcOffCompensation=false;
|
||||||
prevSample[0]=bbIn[0][0];
|
for (int i=0; i<outs; i++) {
|
||||||
if (dispatch->isStereo()) prevSample[1]=bbIn[1][0];
|
prevSample[i]=bbIn[i][0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (lowQuality) {
|
if (lowQuality) {
|
||||||
for (size_t i=0; i<runtotal; i++) {
|
for (int i=0; i<outs; i++) {
|
||||||
temp[0]=bbIn[0][i];
|
for (size_t j=0; j<runtotal; j++) {
|
||||||
blip_add_delta_fast(bb[0],i,temp[0]-prevSample[0]);
|
temp[i]=bbIn[i][j];
|
||||||
prevSample[0]=temp[0];
|
blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
|
||||||
}
|
prevSample[i]=temp[i];
|
||||||
|
}
|
||||||
if (dispatch->isStereo()) for (size_t i=0; i<runtotal; i++) {
|
|
||||||
temp[1]=bbIn[1][i];
|
|
||||||
blip_add_delta_fast(bb[1],i,temp[1]-prevSample[1]);
|
|
||||||
prevSample[1]=temp[1];
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (size_t i=0; i<runtotal; i++) {
|
for (int i=0; i<outs; i++) {
|
||||||
temp[0]=bbIn[0][i];
|
for (size_t j=0; j<runtotal; j++) {
|
||||||
blip_add_delta(bb[0],i,temp[0]-prevSample[0]);
|
temp[i]=bbIn[i][j];
|
||||||
prevSample[0]=temp[0];
|
blip_add_delta(bb[i],j,temp[i]-prevSample[i]);
|
||||||
}
|
prevSample[i]=temp[i];
|
||||||
|
}
|
||||||
if (dispatch->isStereo()) for (size_t i=0; i<runtotal; i++) {
|
|
||||||
temp[1]=bbIn[1][i];
|
|
||||||
blip_add_delta(bb[1],i,temp[1]-prevSample[1]);
|
|
||||||
prevSample[1]=temp[1];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
blip_end_frame(bb[0],runtotal);
|
for (int i=0; i<outs; i++) {
|
||||||
blip_read_samples(bb[0],bbOut[0]+offset,size,0);
|
blip_end_frame(bb[i],runtotal);
|
||||||
|
blip_read_samples(bb[i],bbOut[i]+offset,size,0);
|
||||||
|
}
|
||||||
/*if (totalRead<(int)size && totalRead>0) {
|
/*if (totalRead<(int)size && totalRead>0) {
|
||||||
for (size_t i=totalRead; i<size; i++) {
|
for (size_t i=totalRead; i<size; i++) {
|
||||||
bbOut[0][i]=bbOut[0][totalRead-1];//bbOut[0][totalRead];
|
bbOut[0][i]=bbOut[0][totalRead-1];//bbOut[0][totalRead];
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if (dispatch->isStereo()) {
|
|
||||||
blip_end_frame(bb[1],runtotal);
|
|
||||||
blip_read_samples(bb[1],bbOut[1]+offset,size,0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivDispatchContainer::clear() {
|
void DivDispatchContainer::clear() {
|
||||||
blip_clear(bb[0]);
|
for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
|
||||||
blip_clear(bb[1]);
|
if (bb[i]!=NULL) blip_clear(bb[i]);
|
||||||
temp[0]=0;
|
temp[i]=0;
|
||||||
temp[1]=0;
|
prevSample[i]=0;
|
||||||
prevSample[0]=0;
|
}
|
||||||
prevSample[1]=0;
|
|
||||||
if (dispatch->getDCOffRequired()) {
|
if (dispatch->getDCOffRequired()) {
|
||||||
dcOffCompensation=true;
|
dcOffCompensation=true;
|
||||||
}
|
}
|
||||||
|
@ -463,8 +461,8 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
|
||||||
|
|
||||||
bbIn[i]=new short[bbInLen];
|
bbIn[i]=new short[bbInLen];
|
||||||
bbOut[i]=new short[bbInLen];
|
bbOut[i]=new short[bbInLen];
|
||||||
memset(bbIn,0,bbInLen*sizeof(short));
|
memset(bbIn[i],0,bbInLen*sizeof(short));
|
||||||
memset(bbOut,0,bbInLen*sizeof(short));
|
memset(bbOut[i],0,bbInLen*sizeof(short));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -897,11 +897,7 @@ void DivEngine::runExportThread() {
|
||||||
for (int i=0; i<song.systemLen; i++) {
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
sf[i]=NULL;
|
sf[i]=NULL;
|
||||||
si[i].samplerate=got.rate;
|
si[i].samplerate=got.rate;
|
||||||
if (disCont[i].dispatch->isStereo()) {
|
si[i].channels=disCont[i].dispatch->getOutputCount();
|
||||||
si[i].channels=2;
|
|
||||||
} else {
|
|
||||||
si[i].channels=1;
|
|
||||||
}
|
|
||||||
si[i].format=SF_FORMAT_WAV|SF_FORMAT_PCM_16;
|
si[i].format=SF_FORMAT_WAV|SF_FORMAT_PCM_16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -944,11 +940,12 @@ void DivEngine::runExportThread() {
|
||||||
if (isFadingOut) {
|
if (isFadingOut) {
|
||||||
double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples));
|
double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples));
|
||||||
for (int i=0; i<song.systemLen; i++) {
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
if (!disCont[i].dispatch->isStereo()) {
|
for (int k=0; k<si[i].channels; k++) {
|
||||||
sysBuf[i][j]=(double)disCont[i].bbOut[0][j]*mul;
|
if (disCont[i].bbOut[k]==NULL) {
|
||||||
} else {
|
sysBuf[i][k+(j*si[i].channels)]=0;
|
||||||
sysBuf[i][j<<1]=(double)disCont[i].bbOut[0][j]*mul;
|
} else {
|
||||||
sysBuf[i][1+(j<<1)]=(double)disCont[i].bbOut[1][j]*mul;
|
sysBuf[i][k+(j*si[i].channels)]=(double)disCont[i].bbOut[k][j]*mul;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (++curFadeOutSample>=fadeOutSamples) {
|
if (++curFadeOutSample>=fadeOutSamples) {
|
||||||
|
@ -957,11 +954,12 @@ void DivEngine::runExportThread() {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i=0; i<song.systemLen; i++) {
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
if (!disCont[i].dispatch->isStereo()) {
|
for (int k=0; k<si[i].channels; k++) {
|
||||||
sysBuf[i][j]=disCont[i].bbOut[0][j];
|
if (disCont[i].bbOut[k]==NULL) {
|
||||||
} else {
|
sysBuf[i][k+(j*si[i].channels)]=0;
|
||||||
sysBuf[i][j<<1]=disCont[i].bbOut[0][j];
|
} else {
|
||||||
sysBuf[i][1+(j<<1)]=disCont[i].bbOut[1][j];
|
sysBuf[i][k+(j*si[i].channels)]=disCont[i].bbOut[k][j];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lastLoopPos>-1 && j>=lastLoopPos && totalLoops>=exportLoopCount) {
|
if (lastLoopPos>-1 && j>=lastLoopPos && totalLoops>=exportLoopCount) {
|
||||||
|
@ -1904,10 +1902,11 @@ String DivEngine::getPlaybackDebugInfo() {
|
||||||
"speed1: %d\n"
|
"speed1: %d\n"
|
||||||
"speed2: %d\n"
|
"speed2: %d\n"
|
||||||
"tempoAccum: %d\n"
|
"tempoAccum: %d\n"
|
||||||
"totalProcessed: %d\n",
|
"totalProcessed: %d\n"
|
||||||
|
"bufferPos: %d\n",
|
||||||
curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift,
|
curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift,
|
||||||
changeOrd,changePos,totalSeconds,totalTicks,totalTicksR,totalCmds,lastCmds,cmdsPerSecond,globalPitch,
|
changeOrd,changePos,totalSeconds,totalTicks,totalTicksR,totalCmds,lastCmds,cmdsPerSecond,globalPitch,
|
||||||
(int)extValue,(int)speed1,(int)speed2,(int)tempoAccum,(int)totalProcessed
|
(int)extValue,(int)speed1,(int)speed2,(int)tempoAccum,(int)totalProcessed,(int)bufferPos
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4311,6 +4310,10 @@ bool DivEngine::init() {
|
||||||
if (!haveAudio) {
|
if (!haveAudio) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
if (output==NULL) {
|
||||||
|
logE("output is NULL!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!output->setRun(true)) {
|
if (!output->setRun(true)) {
|
||||||
logE("error while activating!");
|
logE("error while activating!");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -195,12 +195,12 @@ struct DivDispatchContainer {
|
||||||
lastAvail(0),
|
lastAvail(0),
|
||||||
lowQuality(false),
|
lowQuality(false),
|
||||||
dcOffCompensation(false) {
|
dcOffCompensation(false) {
|
||||||
memset(bb,0,DIV_MAX_OUTPUTS*sizeof(void*));
|
memset(bb,0,DIV_MAX_OUTPUTS*sizeof(blip_buffer_t*));
|
||||||
memset(temp,0,DIV_MAX_OUTPUTS*sizeof(int));
|
memset(temp,0,DIV_MAX_OUTPUTS*sizeof(int));
|
||||||
memset(prevSample,0,DIV_MAX_OUTPUTS*sizeof(int));
|
memset(prevSample,0,DIV_MAX_OUTPUTS*sizeof(int));
|
||||||
memset(bbIn,0,DIV_MAX_OUTPUTS*sizeof(void*));
|
memset(bbIn,0,DIV_MAX_OUTPUTS*sizeof(short*));
|
||||||
memset(bbInMapped,0,DIV_MAX_OUTPUTS*sizeof(void*));
|
memset(bbInMapped,0,DIV_MAX_OUTPUTS*sizeof(short*));
|
||||||
memset(bbOut,0,DIV_MAX_OUTPUTS*sizeof(void*));
|
memset(bbOut,0,DIV_MAX_OUTPUTS*sizeof(short*));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -356,6 +356,7 @@ class DivEngine {
|
||||||
int softLockCount;
|
int softLockCount;
|
||||||
int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, totalLoops, lastLoopPos, exportLoopCount, nextSpeed, elapsedBars, elapsedBeats;
|
int subticks, ticks, curRow, curOrder, prevRow, prevOrder, remainingLoops, totalLoops, lastLoopPos, exportLoopCount, nextSpeed, elapsedBars, elapsedBeats;
|
||||||
size_t curSubSongIndex;
|
size_t curSubSongIndex;
|
||||||
|
size_t bufferPos;
|
||||||
double divider;
|
double divider;
|
||||||
int cycles;
|
int cycles;
|
||||||
double clockDrift;
|
double clockDrift;
|
||||||
|
@ -905,6 +906,9 @@ class DivEngine {
|
||||||
// set metronome volume (1.0 = 100%)
|
// set metronome volume (1.0 = 100%)
|
||||||
void setMetronomeVol(float vol);
|
void setMetronomeVol(float vol);
|
||||||
|
|
||||||
|
// get buffer position
|
||||||
|
int getBufferPos();
|
||||||
|
|
||||||
// halt now
|
// halt now
|
||||||
void halt();
|
void halt();
|
||||||
|
|
||||||
|
@ -1073,6 +1077,7 @@ class DivEngine {
|
||||||
elapsedBars(0),
|
elapsedBars(0),
|
||||||
elapsedBeats(0),
|
elapsedBeats(0),
|
||||||
curSubSongIndex(0),
|
curSubSongIndex(0),
|
||||||
|
bufferPos(0),
|
||||||
divider(60),
|
divider(60),
|
||||||
cycles(0),
|
cycles(0),
|
||||||
clockDrift(0),
|
clockDrift(0),
|
||||||
|
|
|
@ -50,10 +50,10 @@ const char** DivPlatformArcade::getRegisterSheet() {
|
||||||
return regCheatSheetOPM;
|
return regCheatSheetOPM;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformArcade::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformArcade::acquire_nuked(short** buf, size_t len) {
|
||||||
static int o[2];
|
static int o[2];
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
if (!writes.empty() && !fm.write_busy) {
|
if (!writes.empty() && !fm.write_busy) {
|
||||||
QueuedWrite& w=writes.front();
|
QueuedWrite& w=writes.front();
|
||||||
|
@ -89,12 +89,12 @@ void DivPlatformArcade::acquire_nuked(short* bufL, short* bufR, size_t start, si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformArcade::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
ymfm::ym2151::fm_engine* fme=fm_ymfm->debug_engine();
|
ymfm::ym2151::fm_engine* fme=fm_ymfm->debug_engine();
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1) {
|
if (--delay<1) {
|
||||||
|
@ -128,9 +128,9 @@ void DivPlatformArcade::acquire_ymfm(short* bufL, short* bufR, size_t start, siz
|
||||||
|
|
||||||
void DivPlatformArcade::acquire(short** buf, size_t len) {
|
void DivPlatformArcade::acquire(short** buf, size_t len) {
|
||||||
if (useYMFM) {
|
if (useYMFM) {
|
||||||
acquire_ymfm(buf[0],buf[1],0,len);
|
acquire_ymfm(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_nuked(buf[0],buf[1],0,len);
|
acquire_nuked(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,8 @@ class DivPlatformArcade: public DivPlatformOPM {
|
||||||
int octave(int freq);
|
int octave(int freq);
|
||||||
int toFreq(int freq);
|
int toFreq(int freq);
|
||||||
|
|
||||||
void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_nuked(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
|
@ -55,13 +55,13 @@ const char** DivPlatformFDS::getRegisterSheet() {
|
||||||
return regCheatSheetFDS;
|
return regCheatSheetFDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformFDS::acquire_puNES(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformFDS::acquire_puNES(short* buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
extcl_apu_tick_FDS(fds);
|
extcl_apu_tick_FDS(fds);
|
||||||
int sample=isMuted[0]?0:fds->snd.main.output;
|
int sample=isMuted[0]?0:fds->snd.main.output;
|
||||||
if (sample>32767) sample=32767;
|
if (sample>32767) sample=32767;
|
||||||
if (sample<-32768) sample=-32768;
|
if (sample<-32768) sample=-32768;
|
||||||
buf[0][i]=sample;
|
buf[i]=sample;
|
||||||
if (++writeOscBuf>=32) {
|
if (++writeOscBuf>=32) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf->data[oscBuf->needle++]=sample<<1;
|
oscBuf->data[oscBuf->needle++]=sample<<1;
|
||||||
|
@ -69,15 +69,15 @@ void DivPlatformFDS::acquire_puNES(short* bufL, short* bufR, size_t start, size_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformFDS::acquire_NSFPlay(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformFDS::acquire_NSFPlay(short* buf, size_t len) {
|
||||||
int out[2];
|
int out[2];
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
fds_NP->Tick(1);
|
fds_NP->Tick(1);
|
||||||
fds_NP->Render(out);
|
fds_NP->Render(out);
|
||||||
int sample=isMuted[0]?0:(out[0]<<1);
|
int sample=isMuted[0]?0:(out[0]<<1);
|
||||||
if (sample>32767) sample=32767;
|
if (sample>32767) sample=32767;
|
||||||
if (sample<-32768) sample=-32768;
|
if (sample<-32768) sample=-32768;
|
||||||
buf[0][i]=sample;
|
buf[i]=sample;
|
||||||
if (++writeOscBuf>=32) {
|
if (++writeOscBuf>=32) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf->data[oscBuf->needle++]=sample<<1;
|
oscBuf->data[oscBuf->needle++]=sample<<1;
|
||||||
|
@ -95,9 +95,9 @@ void DivPlatformFDS::doWrite(unsigned short addr, unsigned char data) {
|
||||||
|
|
||||||
void DivPlatformFDS::acquire(short** buf, size_t len) {
|
void DivPlatformFDS::acquire(short** buf, size_t len) {
|
||||||
if (useNP) {
|
if (useNP) {
|
||||||
acquire_NSFPlay(bufL,bufR,start,len);
|
acquire_NSFPlay(buf[0],len);
|
||||||
} else {
|
} else {
|
||||||
acquire_puNES(bufL,bufR,start,len);
|
acquire_puNES(buf[0],len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,8 +62,8 @@ class DivPlatformFDS: public DivDispatch {
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
||||||
void doWrite(unsigned short addr, unsigned char data);
|
void doWrite(unsigned short addr, unsigned char data);
|
||||||
void acquire_puNES(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_puNES(short* buf, size_t len);
|
||||||
void acquire_NSFPlay(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_NSFPlay(short* buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -60,7 +60,7 @@ void DivPlatformGA20::acquire(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if ((--delay)<=0) {
|
if ((--delay)<=0) {
|
||||||
delay=MAX(0,delay);
|
delay=MAX(0,delay);
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
|
|
|
@ -62,7 +62,7 @@ const char** DivPlatformGB::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGB::acquire(short** buf, size_t len) {
|
void DivPlatformGB::acquire(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
QueuedWrite& w=writes.front();
|
QueuedWrite& w=writes.front();
|
||||||
GB_apu_write(gb,w.addr,w.val);
|
GB_apu_write(gb,w.addr,w.val);
|
||||||
|
|
|
@ -132,11 +132,11 @@ void DivPlatformGenesis::processDAC(int iRate) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGenesis::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformGenesis::acquire_nuked(short** buf, size_t len) {
|
||||||
static short o[2];
|
static short o[2];
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
processDAC(rate);
|
processDAC(rate);
|
||||||
|
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
|
@ -191,12 +191,12 @@ void DivPlatformGenesis::acquire_nuked(short* bufL, short* bufR, size_t start, s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGenesis::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
ymfm::ym2612::fm_engine* fme=fm_ymfm->debug_engine();
|
ymfm::ym2612::fm_engine* fme=fm_ymfm->debug_engine();
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
processDAC(rate);
|
processDAC(rate);
|
||||||
|
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
|
@ -249,9 +249,9 @@ void DivPlatformGenesis::acquire_ymfm(short* bufL, short* bufR, size_t start, si
|
||||||
|
|
||||||
void DivPlatformGenesis::acquire(short** buf, size_t len) {
|
void DivPlatformGenesis::acquire(short** buf, size_t len) {
|
||||||
if (useYMFM) {
|
if (useYMFM) {
|
||||||
acquire_ymfm(bufL,bufR,start,len);
|
acquire_ymfm(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_nuked(bufL,bufR,start,len);
|
acquire_nuked(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ class DivPlatformGenesis: public DivPlatformOPN {
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
||||||
inline void processDAC(int iRate);
|
inline void processDAC(int iRate);
|
||||||
void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_nuked(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
|
@ -55,7 +55,7 @@ inline void DivPlatformK007232::chWrite(unsigned char ch, unsigned int addr, uns
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformK007232::acquire(short** buf, size_t len) {
|
void DivPlatformK007232::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if ((--delay)<=0) {
|
if ((--delay)<=0) {
|
||||||
delay=MAX(0,delay);
|
delay=MAX(0,delay);
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
|
|
|
@ -131,7 +131,7 @@ const char** DivPlatformLynx::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformLynx::acquire(short** buf, size_t len) {
|
void DivPlatformLynx::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
if (chan[i].pcm && chan[i].sample>=0 && chan[i].sample<parent->song.sampleLen) {
|
if (chan[i].pcm && chan[i].sample>=0 && chan[i].sample<parent->song.sampleLen) {
|
||||||
chan[i].sampleAccum-=chan[i].sampleFreq;
|
chan[i].sampleAccum-=chan[i].sampleFreq;
|
||||||
|
@ -156,7 +156,7 @@ void DivPlatformLynx::acquire(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mikey->sampleAudio( bufL + h, bufR + h, 1, oscBuf );
|
mikey->sampleAudio(buf[0]+h,buf[1]+h,1,oscBuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ const char** DivPlatformMMC5::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformMMC5::acquire(short** buf, size_t len) {
|
void DivPlatformMMC5::acquire(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (dacSample!=-1) {
|
if (dacSample!=-1) {
|
||||||
dacPeriod+=dacRate;
|
dacPeriod+=dacRate;
|
||||||
if (dacPeriod>=rate) {
|
if (dacPeriod>=rate) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ const char** DivPlatformMSM5232::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformMSM5232::acquire(short** buf, size_t len) {
|
void DivPlatformMSM5232::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
msm->write(w.addr,w.val);
|
msm->write(w.addr,w.val);
|
||||||
|
|
|
@ -35,7 +35,7 @@ void DivPlatformMSM6258::acquire(short** buf, size_t len) {
|
||||||
&msmOut,
|
&msmOut,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (--msmClockCount<0) {
|
if (--msmClockCount<0) {
|
||||||
if (--msmDividerCount<=0) {
|
if (--msmDividerCount<=0) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ u8 DivPlatformMSM6295::read_byte(u32 address) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformMSM6295::acquire(short** buf, size_t len) {
|
void DivPlatformMSM6295::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (delay<=0) {
|
if (delay<=0) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
QueuedWrite& w=writes.front();
|
QueuedWrite& w=writes.front();
|
||||||
|
|
|
@ -109,7 +109,7 @@ const char** DivPlatformN163::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformN163::acquire(short** buf, size_t len) {
|
void DivPlatformN163::acquire(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
n163.tick();
|
n163.tick();
|
||||||
int out=(n163.out()<<6)*2; // scale to 16 bit
|
int out=(n163.out()<<6)*2; // scale to 16 bit
|
||||||
if (out>32767) out=32767;
|
if (out>32767) out=32767;
|
||||||
|
|
|
@ -171,11 +171,11 @@ void DivPlatformNamcoWSG::acquire(short** buf, size_t len) {
|
||||||
regPool[w.addr&0x3f]=w.val;
|
regPool[w.addr&0x3f]=w.val;
|
||||||
writes.pop();
|
writes.pop();
|
||||||
}
|
}
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
short* buf[2]={
|
short* bufC[2]={
|
||||||
bufL+h, bufR+h
|
buf[0]+h, buf[1]+h
|
||||||
};
|
};
|
||||||
namco->sound_stream_update(buf,1);
|
namco->sound_stream_update(bufC,1);
|
||||||
for (int i=0; i<chans; i++) {
|
for (int i=0; i<chans; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=namco->m_channel_list[i].last_out*chans;
|
oscBuf[i]->data[oscBuf[i]->needle++]=namco->m_channel_list[i].last_out*chans;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,8 @@ void DivPlatformNES::doWrite(unsigned short addr, unsigned char data) {
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformNES::acquire_puNES(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformNES::acquire_puNES(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
doPCM;
|
doPCM;
|
||||||
|
|
||||||
apu_tick(nes,NULL);
|
apu_tick(nes,NULL);
|
||||||
|
@ -124,10 +124,10 @@ void DivPlatformNES::acquire_puNES(short* bufL, short* bufR, size_t start, size_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformNES::acquire_NSFPlay(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformNES::acquire_NSFPlay(short** buf, size_t len) {
|
||||||
int out1[2];
|
int out1[2];
|
||||||
int out2[2];
|
int out2[2];
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
doPCM;
|
doPCM;
|
||||||
|
|
||||||
nes1_NP->Tick(1);
|
nes1_NP->Tick(1);
|
||||||
|
@ -153,9 +153,9 @@ void DivPlatformNES::acquire_NSFPlay(short* bufL, short* bufR, size_t start, siz
|
||||||
|
|
||||||
void DivPlatformNES::acquire(short** buf, size_t len) {
|
void DivPlatformNES::acquire(short** buf, size_t len) {
|
||||||
if (useNP) {
|
if (useNP) {
|
||||||
acquire_NSFPlay(bufL,bufR,start,len);
|
acquire_NSFPlay(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_puNES(bufL,bufR,start,len);
|
acquire_puNES(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,8 +68,8 @@ class DivPlatformNES: public DivDispatch {
|
||||||
|
|
||||||
void doWrite(unsigned short addr, unsigned char data);
|
void doWrite(unsigned short addr, unsigned char data);
|
||||||
unsigned char calcDPCMRate(int inRate);
|
unsigned char calcDPCMRate(int inRate);
|
||||||
void acquire_puNES(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_puNES(short** buf, size_t len);
|
||||||
void acquire_NSFPlay(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_NSFPlay(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -159,12 +159,12 @@ const int orderedOpsL[4]={
|
||||||
#define ADDR_FREQH 0xb0
|
#define ADDR_FREQH 0xb0
|
||||||
#define ADDR_LR_FB_ALG 0xc0
|
#define ADDR_LR_FB_ALG 0xc0
|
||||||
|
|
||||||
void DivPlatformOPL::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformOPL::acquire_nuked(short** buf, size_t len) {
|
||||||
static short o[2];
|
static short o[2];
|
||||||
static int os[2];
|
static int os[2];
|
||||||
static ymfm::ymfm_output<2> aOut;
|
static ymfm::ymfm_output<2> aOut;
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty() && --delay<0) {
|
if (!writes.empty() && --delay<0) {
|
||||||
delay=1;
|
delay=1;
|
||||||
|
@ -264,9 +264,9 @@ void DivPlatformOPL::acquire_nuked(short* bufL, short* bufR, size_t start, size_
|
||||||
|
|
||||||
void DivPlatformOPL::acquire(short** buf, size_t len) {
|
void DivPlatformOPL::acquire(short** buf, size_t len) {
|
||||||
//if (useYMFM) {
|
//if (useYMFM) {
|
||||||
// acquire_ymfm(bufL,bufR,start,len);
|
// acquire_ymfm(buf,len);
|
||||||
//} else {
|
//} else {
|
||||||
acquire_nuked(bufL,bufR,start,len);
|
acquire_nuked(buf,len);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,8 +104,8 @@ class DivPlatformOPL: public DivDispatch {
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
||||||
void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_nuked(short** buf, size_t len);
|
||||||
//void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
//void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -39,11 +39,11 @@ const unsigned char visMapOPLL[9]={
|
||||||
6, 7, 8, 3, 4, 5, 0, 1, 2
|
6, 7, 8, 3, 4, 5, 0, 1, 2
|
||||||
};
|
};
|
||||||
|
|
||||||
void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformOPLL::acquire_nuked(short** buf, size_t len) {
|
||||||
static int o[2];
|
static int o[2];
|
||||||
static int os;
|
static int os;
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os=0;
|
os=0;
|
||||||
for (int i=0; i<9; i++) {
|
for (int i=0; i<9; i++) {
|
||||||
if (!writes.empty() && --delay<0) {
|
if (!writes.empty() && --delay<0) {
|
||||||
|
@ -87,11 +87,11 @@ void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformOPLL::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformOPLL::acquire_ymfm(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformOPLL::acquire(short** buf, size_t len) {
|
void DivPlatformOPLL::acquire(short** buf, size_t len) {
|
||||||
acquire_nuked(bufL,bufR,start,len);
|
acquire_nuked(buf,len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformOPLL::tick(bool sysTick) {
|
void DivPlatformOPLL::tick(bool sysTick) {
|
||||||
|
|
|
@ -77,8 +77,8 @@ class DivPlatformOPLL: public DivDispatch {
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
||||||
void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_nuked(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -54,7 +54,7 @@ const char** DivPlatformPCE::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPCE::acquire(short** buf, size_t len) {
|
void DivPlatformPCE::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
// PCM part
|
// PCM part
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
if (chan[i].pcm && chan[i].dacSample!=-1) {
|
if (chan[i].pcm && chan[i].dacSample!=-1) {
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
void DivPlatformPCMDAC::acquire(short** buf, size_t len) {
|
void DivPlatformPCMDAC::acquire(short** buf, size_t len) {
|
||||||
const int depthScale=(15-outDepth);
|
const int depthScale=(15-outDepth);
|
||||||
int output=0;
|
int output=0;
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (!chan[0].active || isMuted) {
|
if (!chan[0].active || isMuted) {
|
||||||
buf[0][h]=0;
|
buf[0][h]=0;
|
||||||
buf[1][h]=0;
|
buf[1][h]=0;
|
||||||
|
|
|
@ -193,9 +193,9 @@ const char** DivPlatformPCSpeaker::getRegisterSheet() {
|
||||||
const float cut=0.05;
|
const float cut=0.05;
|
||||||
const float reso=0.06;
|
const float reso=0.06;
|
||||||
|
|
||||||
void DivPlatformPCSpeaker::acquire_unfilt(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformPCSpeaker::acquire_unfilt(short** buf, size_t len) {
|
||||||
int out=0;
|
int out=0;
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (on) {
|
if (on) {
|
||||||
pos-=PCSPKR_DIVIDER;
|
pos-=PCSPKR_DIVIDER;
|
||||||
if (pos>freq) pos=freq;
|
if (pos>freq) pos=freq;
|
||||||
|
@ -216,8 +216,8 @@ void DivPlatformPCSpeaker::acquire_unfilt(short* bufL, short* bufR, size_t start
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPCSpeaker::acquire_cone(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformPCSpeaker::acquire_cone(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (on) {
|
if (on) {
|
||||||
pos-=PCSPKR_DIVIDER;
|
pos-=PCSPKR_DIVIDER;
|
||||||
if (pos>freq) pos=freq;
|
if (pos>freq) pos=freq;
|
||||||
|
@ -243,8 +243,8 @@ void DivPlatformPCSpeaker::acquire_cone(short* bufL, short* bufR, size_t start,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPCSpeaker::acquire_piezo(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformPCSpeaker::acquire_piezo(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (on) {
|
if (on) {
|
||||||
pos-=PCSPKR_DIVIDER;
|
pos-=PCSPKR_DIVIDER;
|
||||||
if (pos>freq) pos=freq;
|
if (pos>freq) pos=freq;
|
||||||
|
@ -274,7 +274,7 @@ void DivPlatformPCSpeaker::beepFreq(int freq, int delay) {
|
||||||
realQueueLock.lock();
|
realQueueLock.lock();
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
double addition=1000000000.0*(double)delay/(double)rate;
|
double addition=1000000000.0*(double)delay/parent->getAudioDescGot().rate;
|
||||||
addition+=1500000000.0*((double)parent->getAudioDescGot().bufsize/parent->getAudioDescGot().rate);
|
addition+=1500000000.0*((double)parent->getAudioDescGot().bufsize/parent->getAudioDescGot().rate);
|
||||||
if (clock_gettime(CLOCK_MONOTONIC,&ts)<0) {
|
if (clock_gettime(CLOCK_MONOTONIC,&ts)<0) {
|
||||||
ts.tv_sec=0;
|
ts.tv_sec=0;
|
||||||
|
@ -294,14 +294,14 @@ void DivPlatformPCSpeaker::beepFreq(int freq, int delay) {
|
||||||
realOutCond.notify_one();
|
realOutCond.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPCSpeaker::acquire_real(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformPCSpeaker::acquire_real(short** buf, size_t len) {
|
||||||
int out=0;
|
int out=0;
|
||||||
if (lastOn!=on || lastFreq!=freq) {
|
if (lastOn!=on || lastFreq!=freq) {
|
||||||
lastOn=on;
|
lastOn=on;
|
||||||
lastFreq=freq;
|
lastFreq=freq;
|
||||||
beepFreq((on && !isMuted[0])?freq:0,start);
|
beepFreq((on && !isMuted[0])?freq:0,parent->getBufferPos());
|
||||||
}
|
}
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (on) {
|
if (on) {
|
||||||
pos-=PCSPKR_DIVIDER;
|
pos-=PCSPKR_DIVIDER;
|
||||||
if (pos>freq) pos=freq;
|
if (pos>freq) pos=freq;
|
||||||
|
@ -324,16 +324,16 @@ void DivPlatformPCSpeaker::acquire_real(short* bufL, short* bufR, size_t start,
|
||||||
void DivPlatformPCSpeaker::acquire(short** buf, size_t len) {
|
void DivPlatformPCSpeaker::acquire(short** buf, size_t len) {
|
||||||
switch (speakerType) {
|
switch (speakerType) {
|
||||||
case 0:
|
case 0:
|
||||||
acquire_unfilt(bufL,bufR,start,len);
|
acquire_unfilt(buf,len);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
acquire_cone(bufL,bufR,start,len);
|
acquire_cone(buf,len);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
acquire_piezo(bufL,bufR,start,len);
|
acquire_piezo(buf,len);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
acquire_real(bufL,bufR,start,len);
|
acquire_real(buf,len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,10 +61,10 @@ class DivPlatformPCSpeaker: public DivDispatch {
|
||||||
|
|
||||||
void beepFreq(int freq, int delay=0);
|
void beepFreq(int freq, int delay=0);
|
||||||
|
|
||||||
void acquire_unfilt(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_unfilt(short** buf, size_t len);
|
||||||
void acquire_cone(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_cone(short** buf, size_t len);
|
||||||
void acquire_piezo(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_piezo(short** buf, size_t len);
|
||||||
void acquire_real(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_real(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void pcSpeakerThread();
|
void pcSpeakerThread();
|
||||||
|
|
|
@ -62,7 +62,7 @@ void DivPlatformPET::acquire(short** buf, size_t len) {
|
||||||
if (!hwSROutput) {
|
if (!hwSROutput) {
|
||||||
reload+=regPool[9]*512;
|
reload+=regPool[9]*512;
|
||||||
}
|
}
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (SAMP_DIVIDER>chan[0].cnt) {
|
if (SAMP_DIVIDER>chan[0].cnt) {
|
||||||
chan[0].out=(chan[0].sreg&1)*32767;
|
chan[0].out=(chan[0].sreg&1)*32767;
|
||||||
chan[0].sreg=(chan[0].sreg>>1)|((chan[0].sreg&1)<<7);
|
chan[0].sreg=(chan[0].sreg>>1)|((chan[0].sreg&1)<<7);
|
||||||
|
@ -78,7 +78,7 @@ void DivPlatformPET::acquire(short** buf, size_t len) {
|
||||||
if (!hwSROutput) regPool[12]=chan[0].out?0xe0:0xc0;
|
if (!hwSROutput) regPool[12]=chan[0].out?0xe0:0xc0;
|
||||||
} else {
|
} else {
|
||||||
chan[0].out=0;
|
chan[0].out=0;
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
buf[0][h]=0;
|
buf[0][h]=0;
|
||||||
buf[1][h]=0;
|
buf[1][h]=0;
|
||||||
oscBuf->data[oscBuf->needle++]=0;
|
oscBuf->data[oscBuf->needle++]=0;
|
||||||
|
|
|
@ -88,7 +88,7 @@ void DivPlatformPokeMini::rWrite(unsigned char addr, unsigned char val) {
|
||||||
|
|
||||||
void DivPlatformPokeMini::acquire(short** buf, size_t len) {
|
void DivPlatformPokeMini::acquire(short** buf, size_t len) {
|
||||||
int out=0;
|
int out=0;
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
for (int j=0; j<PCSPKR_DIVIDER; j++) {
|
for (int j=0; j<PCSPKR_DIVIDER; j++) {
|
||||||
elapsedMain++;
|
elapsedMain++;
|
||||||
if (on) {
|
if (on) {
|
||||||
|
|
|
@ -66,14 +66,14 @@ const char** DivPlatformPOKEY::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformPOKEY::acquire(short** buf, size_t len) {
|
void DivPlatformPOKEY::acquire(short** buf, size_t len) {
|
||||||
if (useAltASAP) {
|
if (useAltASAP) {
|
||||||
acquireASAP(bufL, start, len);
|
acquireASAP(buf[0],len);
|
||||||
} else {
|
} else {
|
||||||
acquireMZ(bufL, start, len);
|
acquireMZ(buf[0],len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPOKEY::acquireMZ(short* buf, size_t start, size_t len) {
|
void DivPlatformPOKEY::acquireMZ(short* buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
Update_pokey_sound_mz(&pokey,w.addr,w.val,0);
|
Update_pokey_sound_mz(&pokey,w.addr,w.val,0);
|
||||||
|
@ -93,14 +93,14 @@ void DivPlatformPOKEY::acquireMZ(short* buf, size_t start, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformPOKEY::acquireASAP(short* buf, size_t start, size_t len) {
|
void DivPlatformPOKEY::acquireASAP(short* buf, size_t len) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
altASAP.write(w.addr, w.val);
|
altASAP.write(w.addr, w.val);
|
||||||
writes.pop();
|
writes.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (++oscBufDelay>=2) {
|
if (++oscBufDelay>=2) {
|
||||||
oscBufDelay=0;
|
oscBufDelay=0;
|
||||||
buf[h]=altASAP.sampleAudio(oscBuf);
|
buf[h]=altASAP.sampleAudio(oscBuf);
|
||||||
|
|
|
@ -59,8 +59,8 @@ class DivPlatformPOKEY: public DivDispatch {
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
void acquireMZ(short* buf, size_t start, size_t len);
|
void acquireMZ(short* buf, size_t len);
|
||||||
void acquireASAP(short* buf, size_t start, size_t len);
|
void acquireASAP(short* buf, size_t len);
|
||||||
int dispatch(DivCommand c);
|
int dispatch(DivCommand c);
|
||||||
void* getChanState(int chan);
|
void* getChanState(int chan);
|
||||||
DivMacroInt* getChanMacroInt(int ch);
|
DivMacroInt* getChanMacroInt(int ch);
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
void DivPlatformPong::acquire(short** buf, size_t len) {
|
void DivPlatformPong::acquire(short** buf, size_t len) {
|
||||||
int out=0;
|
int out=0;
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (on) {
|
if (on) {
|
||||||
if (--pos<=0) {
|
if (--pos<=0) {
|
||||||
pos=(freq?2:1)<<4;
|
pos=(freq?2:1)<<4;
|
||||||
|
|
|
@ -266,7 +266,7 @@ const char** DivPlatformQSound::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformQSound::acquire(short** buf, size_t len) {
|
void DivPlatformQSound::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
qsound_update(&chip);
|
qsound_update(&chip);
|
||||||
buf[0][h]=chip.out[0];
|
buf[0][h]=chip.out[0];
|
||||||
buf[1][h]=chip.out[1];
|
buf[1][h]=chip.out[1];
|
||||||
|
|
|
@ -54,16 +54,18 @@ void DivPlatformRF5C68::chWrite(unsigned char ch, unsigned int addr, unsigned ch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: this code is weird
|
||||||
|
// make sure newDispatch didn't break it up
|
||||||
void DivPlatformRF5C68::acquire(short** buf, size_t len) {
|
void DivPlatformRF5C68::acquire(short** buf, size_t len) {
|
||||||
short buf[16][256];
|
short bufC[16][256];
|
||||||
short* chBufPtrs[16]={
|
short* chBufPtrs[16]={
|
||||||
buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],
|
bufC[0],bufC[1],bufC[2],bufC[3],bufC[4],bufC[5],bufC[6],bufC[7],
|
||||||
buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]
|
bufC[8],bufC[9],bufC[10],bufC[11],bufC[12],bufC[13],bufC[14],bufC[15]
|
||||||
};
|
};
|
||||||
size_t pos=start;
|
size_t pos=0;
|
||||||
|
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
memset(buf[i],0,256*sizeof(short));
|
memset(bufC[i],0,256*sizeof(short));
|
||||||
}
|
}
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
|
@ -72,7 +74,7 @@ void DivPlatformRF5C68::acquire(short** buf, size_t len) {
|
||||||
rf5c68.sound_stream_update(bufPtrs,chBufPtrs,blockLen);
|
rf5c68.sound_stream_update(bufPtrs,chBufPtrs,blockLen);
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
for (size_t j=0; j<blockLen; j++) {
|
for (size_t j=0; j<blockLen; j++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=buf[i*2][j]+buf[i*2+1][j];
|
oscBuf[i]->data[oscBuf[i]->needle++]=bufC[i*2][j]+bufC[i*2+1][j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos+=blockLen;
|
pos+=blockLen;
|
||||||
|
|
|
@ -56,7 +56,7 @@ const char** DivPlatformSAA1099::getRegisterSheet() {
|
||||||
return regCheatSheetSAA;
|
return regCheatSheetSAA;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSAA1099::acquire_saaSound(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformSAA1099::acquire_saaSound(short** buf, size_t len) {
|
||||||
if (saaBufLen<len*2) {
|
if (saaBufLen<len*2) {
|
||||||
saaBufLen=len*2;
|
saaBufLen=len*2;
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
|
@ -73,19 +73,19 @@ void DivPlatformSAA1099::acquire_saaSound(short* bufL, short* bufR, size_t start
|
||||||
saa_saaSound->GenerateMany((unsigned char*)saaBuf[0],len,oscBuf);
|
saa_saaSound->GenerateMany((unsigned char*)saaBuf[0],len,oscBuf);
|
||||||
#ifdef TA_BIG_ENDIAN
|
#ifdef TA_BIG_ENDIAN
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
buf[0][i+start]=(short)((((unsigned short)saaBuf[0][1+(i<<1)])<<8)|(((unsigned short)saaBuf[0][1+(i<<1)])>>8));
|
buf[0][i]=(short)((((unsigned short)saaBuf[0][1+(i<<1)])<<8)|(((unsigned short)saaBuf[0][1+(i<<1)])>>8));
|
||||||
buf[1][i+start]=(short)((((unsigned short)saaBuf[0][i<<1])<<8)|(((unsigned short)saaBuf[0][i<<1])>>8));
|
buf[1][i]=(short)((((unsigned short)saaBuf[0][i<<1])<<8)|(((unsigned short)saaBuf[0][i<<1])>>8));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
buf[0][i+start]=saaBuf[0][i<<1];
|
buf[0][i]=saaBuf[0][i<<1];
|
||||||
buf[1][i+start]=saaBuf[0][1+(i<<1)];
|
buf[1][i]=saaBuf[0][1+(i<<1)];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSAA1099::acquire(short** buf, size_t len) {
|
void DivPlatformSAA1099::acquire(short** buf, size_t len) {
|
||||||
acquire_saaSound(bufL,bufR,start,len);
|
acquire_saaSound(buf,len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned char applyPan(unsigned char vol, unsigned char pan) {
|
inline unsigned char applyPan(unsigned char vol, unsigned char pan) {
|
||||||
|
|
|
@ -71,7 +71,7 @@ class DivPlatformSAA1099: public DivDispatch {
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
friend void putDispatchChan(void*,int,int);
|
friend void putDispatchChan(void*,int,int);
|
||||||
|
|
||||||
void acquire_saaSound(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_saaSound(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -81,7 +81,7 @@ const char** DivPlatformSCC::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSCC::acquire(short** buf, size_t len) {
|
void DivPlatformSCC::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
scc->tick();
|
scc->tick();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
void DivPlatformSegaPCM::acquire(short** buf, size_t len) {
|
void DivPlatformSegaPCM::acquire(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
// do a PCM cycle
|
// do a PCM cycle
|
||||||
pcmL=0; pcmR=0;
|
pcmL=0; pcmR=0;
|
||||||
|
|
|
@ -39,10 +39,10 @@ const char** DivPlatformSMS::getRegisterSheet() {
|
||||||
return stereo?regCheatSheetGG:regCheatSheetSN;
|
return stereo?regCheatSheetGG:regCheatSheetSN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformSMS::acquire_nuked(short** buf, size_t len) {
|
||||||
int oL=0;
|
int oL=0;
|
||||||
int oR=0;
|
int oR=0;
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
if (w.addr==0) {
|
if (w.addr==0) {
|
||||||
|
@ -74,7 +74,7 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_
|
||||||
if (oR<-32768) oR=-32768;
|
if (oR<-32768) oR=-32768;
|
||||||
if (oR>32767) oR=32767;
|
if (oR>32767) oR=32767;
|
||||||
buf[0][h]=oL;
|
buf[0][h]=oL;
|
||||||
buf[1][h]=oR;
|
if (stereo) buf[1][h]=oR;
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
if (isMuted[i]) {
|
if (isMuted[i]) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=0;
|
oscBuf[i]->data[oscBuf[i]->needle++]=0;
|
||||||
|
@ -85,7 +85,7 @@ void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformSMS::acquire_mame(short** buf, size_t len) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
if (stereo && (w.addr==1))
|
if (stereo && (w.addr==1))
|
||||||
|
@ -95,10 +95,10 @@ void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t
|
||||||
}
|
}
|
||||||
writes.pop();
|
writes.pop();
|
||||||
}
|
}
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
short* outs[2]={
|
short* outs[2]={
|
||||||
&buf[0][h],
|
&buf[0][h],
|
||||||
&buf[1][h]
|
stereo?(&buf[1][h]):NULL
|
||||||
};
|
};
|
||||||
sn->sound_stream_update(outs,1);
|
sn->sound_stream_update(outs,1);
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
|
@ -113,9 +113,9 @@ void DivPlatformSMS::acquire_mame(short* bufL, short* bufR, size_t start, size_t
|
||||||
|
|
||||||
void DivPlatformSMS::acquire(short** buf, size_t len) {
|
void DivPlatformSMS::acquire(short** buf, size_t len) {
|
||||||
if (nuked) {
|
if (nuked) {
|
||||||
acquire_nuked(bufL,bufR,start,len);
|
acquire_nuked(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_mame(bufL,bufR,start,len);
|
acquire_mame(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,8 +66,8 @@ class DivPlatformSMS: public DivDispatch {
|
||||||
double NOTE_SN(int ch, int note);
|
double NOTE_SN(int ch, int note);
|
||||||
int snCalcFreq(int ch);
|
int snCalcFreq(int ch);
|
||||||
|
|
||||||
void acquire_nuked(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_nuked(short** buf, size_t len);
|
||||||
void acquire_mame(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_mame(short** buf, size_t len);
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
int dispatch(DivCommand c);
|
int dispatch(DivCommand c);
|
||||||
|
|
|
@ -68,7 +68,7 @@ const char** DivPlatformSNES::getRegisterSheet() {
|
||||||
void DivPlatformSNES::acquire(short** buf, size_t len) {
|
void DivPlatformSNES::acquire(short** buf, size_t len) {
|
||||||
short out[2];
|
short out[2];
|
||||||
short chOut[16];
|
short chOut[16];
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (--delay<=0) {
|
if (--delay<=0) {
|
||||||
delay=0;
|
delay=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
|
|
|
@ -41,7 +41,7 @@ double DivPlatformSoundUnit::NOTE_SU(int ch, int note) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSoundUnit::acquire(short** buf, size_t len) {
|
void DivPlatformSoundUnit::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
su->Write(w.addr,w.val);
|
su->Write(w.addr,w.val);
|
||||||
|
|
|
@ -51,7 +51,7 @@ const char** DivPlatformSwan::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSwan::acquire(short** buf, size_t len) {
|
void DivPlatformSwan::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
// PCM part
|
// PCM part
|
||||||
if (pcm && dacSample!=-1) {
|
if (pcm && dacSample!=-1) {
|
||||||
dacPeriod+=dacRate;
|
dacPeriod+=dacRate;
|
||||||
|
|
|
@ -36,7 +36,7 @@ const char** DivPlatformT6W28::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformT6W28::acquire(short** buf, size_t len) {
|
void DivPlatformT6W28::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
cycles=0;
|
cycles=0;
|
||||||
while (!writes.empty() && cycles<16) {
|
while (!writes.empty() && cycles<16) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
|
|
|
@ -39,7 +39,7 @@ const char** DivPlatformTIA::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformTIA::acquire(short** buf, size_t len) {
|
void DivPlatformTIA::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
tia.tick();
|
tia.tick();
|
||||||
if (mixingType==2) {
|
if (mixingType==2) {
|
||||||
buf[0][h]=tia.myCurrentSample[0];
|
buf[0][h]=tia.myCurrentSample[0];
|
||||||
|
|
|
@ -60,7 +60,7 @@ void DivPlatformTX81Z::acquire(short** buf, size_t len) {
|
||||||
|
|
||||||
ymfm::ym2414::fm_engine* fme=fm_ymfm->debug_engine();
|
ymfm::ym2414::fm_engine* fme=fm_ymfm->debug_engine();
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1) {
|
if (--delay<1) {
|
||||||
|
|
|
@ -94,7 +94,7 @@ const char** DivPlatformVB::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformVB::acquire(short** buf, size_t len) {
|
void DivPlatformVB::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
cycles=0;
|
cycles=0;
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
|
|
|
@ -56,8 +56,8 @@ const char** DivPlatformVERA::getRegisterSheet() {
|
||||||
void DivPlatformVERA::acquire(short** buf, size_t len) {
|
void DivPlatformVERA::acquire(short** buf, size_t len) {
|
||||||
// both PSG part and PCM part output a full 16-bit range, putting bufL/R
|
// both PSG part and PCM part output a full 16-bit range, putting bufL/R
|
||||||
// argument right into both could cause an overflow
|
// argument right into both could cause an overflow
|
||||||
short buf[4][128];
|
short whyCallItBuf[4][128];
|
||||||
size_t pos=start;
|
size_t pos=0;
|
||||||
DivSample* s=parent->getSample(chan[16].pcm.sample);
|
DivSample* s=parent->getSample(chan[16].pcm.sample);
|
||||||
while (len>0) {
|
while (len>0) {
|
||||||
if (s->samples>0) {
|
if (s->samples>0) {
|
||||||
|
@ -98,18 +98,18 @@ void DivPlatformVERA::acquire(short** buf, size_t len) {
|
||||||
chan[16].pcm.sample=-1;
|
chan[16].pcm.sample=-1;
|
||||||
}
|
}
|
||||||
int curLen=MIN(len,128);
|
int curLen=MIN(len,128);
|
||||||
memset(buf,0,sizeof(buf));
|
memset(whyCallItBuf,0,sizeof(whyCallItBuf));
|
||||||
pcm_render(pcm,buf[2],buf[3],curLen);
|
pcm_render(pcm,whyCallItBuf[2],whyCallItBuf[3],curLen);
|
||||||
for (int i=0; i<curLen; i++) {
|
for (int i=0; i<curLen; i++) {
|
||||||
psg_render(psg,&buf[0][i],&buf[1][i],1);
|
psg_render(psg,&whyCallItBuf[0][i],&whyCallItBuf[1][i],1);
|
||||||
buf[0][pos]=(short)(((int)buf[0][i]+buf[2][i])/2);
|
buf[0][pos]=(short)(((int)whyCallItBuf[0][i]+whyCallItBuf[2][i])/2);
|
||||||
buf[1][pos]=(short)(((int)buf[1][i]+buf[3][i])/2);
|
buf[1][pos]=(short)(((int)whyCallItBuf[1][i]+whyCallItBuf[3][i])/2);
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=psg->channels[i].lastOut<<4;
|
oscBuf[i]->data[oscBuf[i]->needle++]=psg->channels[i].lastOut<<4;
|
||||||
}
|
}
|
||||||
int pcmOut=buf[2][i]+buf[3][i];
|
int pcmOut=whyCallItBuf[2][i]+whyCallItBuf[3][i];
|
||||||
if (pcmOut<-32768) pcmOut=-32768;
|
if (pcmOut<-32768) pcmOut=-32768;
|
||||||
if (pcmOut>32767) pcmOut=32767;
|
if (pcmOut>32767) pcmOut=32767;
|
||||||
oscBuf[16]->data[oscBuf[16]->needle++]=pcmOut;
|
oscBuf[16]->data[oscBuf[16]->needle++]=pcmOut;
|
||||||
|
|
|
@ -45,7 +45,7 @@ void DivPlatformVIC20::acquire(short** buf, size_t len) {
|
||||||
0b0, 0b10, 0b100, 0b110, 0b1000, 0b1010, 0b1011, 0b1110,
|
0b0, 0b10, 0b100, 0b110, 0b1000, 0b1010, 0b1011, 0b1110,
|
||||||
0b10010, 0b10100, 0b10110, 0b11000, 0b11010, 0b100100, 0b101010, 0b101100
|
0b10010, 0b10100, 0b10110, 0b11000, 0b11010, 0b100100, 0b101010, 0b101100
|
||||||
};
|
};
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (hasWaveWrite) {
|
if (hasWaveWrite) {
|
||||||
hasWaveWrite=false;
|
hasWaveWrite=false;
|
||||||
for (int i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ const char** DivPlatformVRC6::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformVRC6::acquire(short** buf, size_t len) {
|
void DivPlatformVRC6::acquire(short** buf, size_t len) {
|
||||||
for (size_t i=start; i<start+len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
// PCM part
|
// PCM part
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
if (chan[i].pcm && chan[i].dacSample!=-1) {
|
if (chan[i].pcm && chan[i].dacSample!=-1) {
|
||||||
|
|
|
@ -206,7 +206,7 @@ const char** DivPlatformX1_010::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformX1_010::acquire(short** buf, size_t len) {
|
void DivPlatformX1_010::acquire(short** buf, size_t len) {
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
x1_010.tick();
|
x1_010.tick();
|
||||||
|
|
||||||
signed int tempL=x1_010.output(0);
|
signed int tempL=x1_010.output(0);
|
||||||
|
|
|
@ -158,17 +158,17 @@ const char** DivPlatformYM2203::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformYM2203::acquire(short** buf, size_t len) {
|
void DivPlatformYM2203::acquire(short** buf, size_t len) {
|
||||||
if (useCombo) {
|
if (useCombo) {
|
||||||
acquire_combo(bufL,bufR,start,len);
|
acquire_combo(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_ymfm(bufL,bufR,start,len);
|
acquire_ymfm(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2203::acquire_combo(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2203::acquire_combo(short** buf, size_t len) {
|
||||||
static int os;
|
static int os;
|
||||||
static short ignored[2];
|
static short ignored[2];
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os=0;
|
os=0;
|
||||||
// Nuked part
|
// Nuked part
|
||||||
for (unsigned int i=0; i<nukedMult; i++) {
|
for (unsigned int i=0; i<nukedMult; i++) {
|
||||||
|
@ -230,7 +230,7 @@ void DivPlatformYM2203::acquire_combo(short* bufL, short* bufR, size_t start, si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2203::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os;
|
static int os;
|
||||||
|
|
||||||
ymfm::ym2203::fm_engine* fme=fm->debug_fm_engine();
|
ymfm::ym2203::fm_engine* fme=fm->debug_fm_engine();
|
||||||
|
@ -240,7 +240,7 @@ void DivPlatformYM2203::acquire_ymfm(short* bufL, short* bufR, size_t start, siz
|
||||||
fmChan[i]=fme->debug_channel(i);
|
fmChan[i]=fme->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os=0;
|
os=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1) {
|
if (--delay<1) {
|
||||||
|
|
|
@ -55,8 +55,8 @@ class DivPlatformYM2203: public DivPlatformOPN {
|
||||||
|
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
||||||
void acquire_combo(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_combo(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -299,13 +299,13 @@ double DivPlatformYM2608::NOTE_ADPCMB(int note) {
|
||||||
|
|
||||||
void DivPlatformYM2608::acquire(short** buf, size_t len) {
|
void DivPlatformYM2608::acquire(short** buf, size_t len) {
|
||||||
if (useCombo) {
|
if (useCombo) {
|
||||||
acquire_combo(bufL,bufR,start,len);
|
acquire_combo(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_ymfm(bufL,bufR,start,len);
|
acquire_ymfm(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2608::acquire_combo(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2608::acquire_combo(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
static short ignored[2];
|
static short ignored[2];
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ void DivPlatformYM2608::acquire_combo(short* bufL, short* bufR, size_t start, si
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
// Nuked part
|
// Nuked part
|
||||||
for (int i=0; i<nukedMult; i++) {
|
for (int i=0; i<nukedMult; i++) {
|
||||||
|
@ -407,7 +407,7 @@ void DivPlatformYM2608::acquire_combo(short* bufL, short* bufR, size_t start, si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2608::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2608::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
ymfm::ym2608::fm_engine* fme=fm->debug_fm_engine();
|
ymfm::ym2608::fm_engine* fme=fm->debug_fm_engine();
|
||||||
|
@ -424,7 +424,7 @@ void DivPlatformYM2608::acquire_ymfm(short* bufL, short* bufR, size_t start, siz
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1) {
|
if (--delay<1) {
|
||||||
|
|
|
@ -70,8 +70,8 @@ class DivPlatformYM2608: public DivPlatformOPN {
|
||||||
|
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
||||||
void acquire_combo(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_combo(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -234,13 +234,13 @@ const char** DivPlatformYM2610::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformYM2610::acquire(short** buf, size_t len) {
|
void DivPlatformYM2610::acquire(short** buf, size_t len) {
|
||||||
if (useCombo) {
|
if (useCombo) {
|
||||||
acquire_combo(bufL,bufR,start,len);
|
acquire_combo(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_ymfm(bufL,bufR,start,len);
|
acquire_ymfm(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2610::acquire_combo(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2610::acquire_combo(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
static short ignored[2];
|
static short ignored[2];
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ void DivPlatformYM2610::acquire_combo(short* bufL, short* bufR, size_t start, si
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
// Nuked part
|
// Nuked part
|
||||||
for (int i=0; i<24; i++) {
|
for (int i=0; i<24; i++) {
|
||||||
|
@ -338,7 +338,7 @@ void DivPlatformYM2610::acquire_combo(short* bufL, short* bufR, size_t start, si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2610::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2610::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
ymfm::ym2610::fm_engine* fme=fm->debug_fm_engine();
|
ymfm::ym2610::fm_engine* fme=fm->debug_fm_engine();
|
||||||
|
@ -357,7 +357,7 @@ void DivPlatformYM2610::acquire_ymfm(short* bufL, short* bufR, size_t start, siz
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1 && !(fm->read(0)&0x80)) {
|
if (--delay<1 && !(fm->read(0)&0x80)) {
|
||||||
|
|
|
@ -38,8 +38,8 @@ class DivPlatformYM2610: public DivPlatformYM2610Base {
|
||||||
|
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
||||||
void acquire_combo(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_combo(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -298,13 +298,13 @@ const char** DivPlatformYM2610B::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformYM2610B::acquire(short** buf, size_t len) {
|
void DivPlatformYM2610B::acquire(short** buf, size_t len) {
|
||||||
if (useCombo) {
|
if (useCombo) {
|
||||||
acquire_combo(bufL,bufR,start,len);
|
acquire_combo(buf,len);
|
||||||
} else {
|
} else {
|
||||||
acquire_ymfm(bufL,bufR,start,len);
|
acquire_ymfm(buf,len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2610B::acquire_combo(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2610B::acquire_combo(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
static short ignored[2];
|
static short ignored[2];
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ void DivPlatformYM2610B::acquire_combo(short* bufL, short* bufR, size_t start, s
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
// Nuked part
|
// Nuked part
|
||||||
for (int i=0; i<24; i++) {
|
for (int i=0; i<24; i++) {
|
||||||
|
@ -406,7 +406,7 @@ void DivPlatformYM2610B::acquire_combo(short* bufL, short* bufR, size_t start, s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYM2610B::acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformYM2610B::acquire_ymfm(short** buf, size_t len) {
|
||||||
static int os[2];
|
static int os[2];
|
||||||
|
|
||||||
ymfm::ym2610b::fm_engine* fme=fm->debug_fm_engine();
|
ymfm::ym2610b::fm_engine* fme=fm->debug_fm_engine();
|
||||||
|
@ -423,7 +423,7 @@ void DivPlatformYM2610B::acquire_ymfm(short* bufL, short* bufR, size_t start, si
|
||||||
adpcmAChan[i]=aae->debug_channel(i);
|
adpcmAChan[i]=aae->debug_channel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
if (--delay<1 && !(fm->read(0)&0x80)) {
|
if (--delay<1 && !(fm->read(0)&0x80)) {
|
||||||
|
|
|
@ -34,8 +34,8 @@ class DivPlatformYM2610B: public DivPlatformYM2610Base {
|
||||||
|
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
||||||
void acquire_combo(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_combo(short** buf, size_t len);
|
||||||
void acquire_ymfm(short* bufL, short* bufR, size_t start, size_t len);
|
void acquire_ymfm(short** buf, size_t len);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void acquire(short** buf, size_t len);
|
void acquire(short** buf, size_t len);
|
||||||
|
|
|
@ -61,12 +61,12 @@ const char** DivPlatformYMZ280B::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformYMZ280B::acquire(short** buf, size_t len) {
|
void DivPlatformYMZ280B::acquire(short** buf, size_t len) {
|
||||||
short buf[16][256];
|
short why[16][256];
|
||||||
short *bufPtrs[16]={
|
short *bufPtrs[16]={
|
||||||
buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],
|
why[0],why[1],why[2],why[3],why[4],why[5],why[6],why[7],
|
||||||
buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]
|
why[8],why[9],why[10],why[11],why[12],why[13],why[14],why[15]
|
||||||
};
|
};
|
||||||
size_t pos=start;
|
size_t pos=0;
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
size_t blockLen = MIN(len, 256);
|
size_t blockLen = MIN(len, 256);
|
||||||
ymz280b.sound_stream_update(bufPtrs, blockLen);
|
ymz280b.sound_stream_update(bufPtrs, blockLen);
|
||||||
|
@ -74,9 +74,9 @@ void DivPlatformYMZ280B::acquire(short** buf, size_t len) {
|
||||||
int dataL=0;
|
int dataL=0;
|
||||||
int dataR=0;
|
int dataR=0;
|
||||||
for (int j=0; j<8; j++) {
|
for (int j=0; j<8; j++) {
|
||||||
dataL+=buf[j*2][i];
|
dataL+=why[j*2][i];
|
||||||
dataR+=buf[j*2+1][i];
|
dataR+=why[j*2+1][i];
|
||||||
oscBuf[j]->data[oscBuf[j]->needle++]=(short)(((int)buf[j*2][i]+buf[j*2+1][i])/2);
|
oscBuf[j]->data[oscBuf[j]->needle++]=(short)(((int)why[j*2][i]+why[j*2+1][i])/2);
|
||||||
}
|
}
|
||||||
buf[0][pos]=(short)(dataL/8);
|
buf[0][pos]=(short)(dataL/8);
|
||||||
buf[1][pos]=(short)(dataR/8);
|
buf[1][pos]=(short)(dataR/8);
|
||||||
|
|
|
@ -29,7 +29,7 @@ const char** DivPlatformZXBeeper::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformZXBeeper::acquire(short** buf, size_t len) {
|
void DivPlatformZXBeeper::acquire(short** buf, size_t len) {
|
||||||
bool o=false;
|
bool o=false;
|
||||||
for (size_t h=start; h<start+len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
// clock here
|
// clock here
|
||||||
if (curSample>=0 && curSample<parent->song.sampleLen) {
|
if (curSample>=0 && curSample<parent->song.sampleLen) {
|
||||||
if (--curSamplePeriod<0) {
|
if (--curSamplePeriod<0) {
|
||||||
|
|
|
@ -1359,6 +1359,10 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DivEngine::getBufferPos() {
|
||||||
|
return bufferPos>>MASTER_CLOCK_PREC;
|
||||||
|
}
|
||||||
|
|
||||||
void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsigned int size) {
|
void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsigned int size) {
|
||||||
lastLoopPos=-1;
|
lastLoopPos=-1;
|
||||||
|
|
||||||
|
@ -1619,6 +1623,9 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
|
||||||
int attempts=0;
|
int attempts=0;
|
||||||
int runLeftG=size<<MASTER_CLOCK_PREC;
|
int runLeftG=size<<MASTER_CLOCK_PREC;
|
||||||
while (++attempts<(int)size) {
|
while (++attempts<(int)size) {
|
||||||
|
// -1. set bufferPos
|
||||||
|
bufferPos=(size<<MASTER_CLOCK_PREC)-runLeftG;
|
||||||
|
|
||||||
// 0. check if we've halted
|
// 0. check if we've halted
|
||||||
if (halted) break;
|
if (halted) break;
|
||||||
// 1. check whether we are done with all buffers
|
// 1. check whether we are done with all buffers
|
||||||
|
@ -1693,12 +1700,13 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
|
||||||
disCont[i].fillBuf(disCont[i].runtotal,disCont[i].lastAvail,size-disCont[i].lastAvail);
|
disCont[i].fillBuf(disCont[i].runtotal,disCont[i].lastAvail,size-disCont[i].lastAvail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: handle more than 2 outputs
|
||||||
for (int i=0; i<song.systemLen; i++) {
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
float volL=((float)song.systemVol[i]/64.0f)*((float)MIN(127,127-(int)song.systemPan[i])/127.0f)*song.masterVol;
|
float volL=((float)song.systemVol[i]/64.0f)*((float)MIN(127,127-(int)song.systemPan[i])/127.0f)*song.masterVol;
|
||||||
float volR=((float)song.systemVol[i]/64.0f)*((float)MIN(127,127+(int)song.systemPan[i])/127.0f)*song.masterVol;
|
float volR=((float)song.systemVol[i]/64.0f)*((float)MIN(127,127+(int)song.systemPan[i])/127.0f)*song.masterVol;
|
||||||
volL*=disCont[i].dispatch->getPostAmp();
|
volL*=disCont[i].dispatch->getPostAmp();
|
||||||
volR*=disCont[i].dispatch->getPostAmp();
|
volR*=disCont[i].dispatch->getPostAmp();
|
||||||
if (disCont[i].dispatch->isStereo()) {
|
if (disCont[i].dispatch->getOutputCount()>1) {
|
||||||
for (size_t j=0; j<size; j++) {
|
for (size_t j=0; j<size; j++) {
|
||||||
out[0][j]+=((float)disCont[i].bbOut[0][j]/32768.0)*volL;
|
out[0][j]+=((float)disCont[i].bbOut[0][j]/32768.0)*volL;
|
||||||
out[1][j]+=((float)disCont[i].bbOut[1][j]/32768.0)*volR;
|
out[1][j]+=((float)disCont[i].bbOut[1][j]/32768.0)*volR;
|
||||||
|
|
Loading…
Reference in a new issue