release Furnace Pro
This commit is contained in:
parent
6fe8bea50e
commit
2255bdf6c7
12 changed files with 8246 additions and 454 deletions
|
|
@ -39,6 +39,8 @@
|
|||
#endif
|
||||
#include <fmt/printf.h>
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
void process(void* u, float** in, float** out, int inChans, int outChans, unsigned int size) {
|
||||
((DivEngine*)u)->nextBuf(in,out,inChans,outChans,size);
|
||||
}
|
||||
|
|
@ -817,6 +819,7 @@ void DivEngine::runExportThread() {
|
|||
size_t fadeOutSamples=got.rate*exportFadeOut;
|
||||
size_t curFadeOutSample=0;
|
||||
bool isFadingOut=false;
|
||||
int watermarkPos=-((rand()%120)*4410);
|
||||
switch (exportMode) {
|
||||
case DIV_EXPORT_MODE_ONE: {
|
||||
SNDFILE* sf;
|
||||
|
|
@ -853,17 +856,26 @@ void DivEngine::runExportThread() {
|
|||
}
|
||||
for (int i=0; i<(int)totalProcessed; i++) {
|
||||
total++;
|
||||
float nextWaterSample=0;
|
||||
watermarkPos++;
|
||||
if (dejarteArriba && watermarkPos>=0 && watermarkPos<(int)watermark_size) {
|
||||
nextWaterSample=(signed char)watermark[watermarkPos];
|
||||
nextWaterSample/=128;
|
||||
}
|
||||
if (watermarkPos>=(int)watermark_size) {
|
||||
watermarkPos=-((rand()%120)*4410);
|
||||
}
|
||||
if (isFadingOut) {
|
||||
double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples));
|
||||
outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i]))*mul;
|
||||
outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i]))*mul;
|
||||
outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i]+nextWaterSample))*mul;
|
||||
outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i]+nextWaterSample))*mul;
|
||||
if (++curFadeOutSample>=fadeOutSamples) {
|
||||
playing=false;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i]));
|
||||
outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i]));
|
||||
outBuf[2][i<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][i]+nextWaterSample));
|
||||
outBuf[2][1+(i<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][i]+nextWaterSample));
|
||||
if (lastLoopPos>-1 && i>=lastLoopPos && totalLoops>=exportLoopCount) {
|
||||
logD("start fading out...");
|
||||
isFadingOut=true;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,13 @@ constexpr int MASTER_CLOCK_PREC=(sizeof(void*)==8)?8:0;
|
|||
|
||||
void DivEngine::nextOrder() {
|
||||
curRow=0;
|
||||
|
||||
if (dejarteArriba) {
|
||||
if (!(rand()%3)) for (int i=0; i<chans; i++) {
|
||||
dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,0x4a+(rand()%12)));
|
||||
}
|
||||
}
|
||||
|
||||
if (repeatPattern) return;
|
||||
if (++curOrder>=curSubSong->ordersLen) {
|
||||
logV("end of orders reached");
|
||||
|
|
@ -361,6 +368,24 @@ int DivEngine::dispatchCmd(DivCommand c) {
|
|||
|
||||
c.chan=dispatchChanOfChan[c.dis];
|
||||
|
||||
if (dejarteArriba) {
|
||||
if (c.cmd==DIV_CMD_NOTE_ON) {
|
||||
if (c.value!=DIV_NOTE_NULL) {
|
||||
if (!(rand()%5)) {
|
||||
c.value+=(rand()%17)-8;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (c.cmd==DIV_CMD_NOTE_OFF) {
|
||||
if (!(rand()%4)) return 0;
|
||||
}
|
||||
if (c.cmd==DIV_CMD_INSTRUMENT) {
|
||||
if (!(rand()%3)) {
|
||||
c.value+=rand()%3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return disCont[dispatchOfChan[c.dis]].dispatch->dispatch(c);
|
||||
}
|
||||
|
||||
|
|
|
|||
8048
src/engine/watermark.cpp
Normal file
8048
src/engine/watermark.cpp
Normal file
File diff suppressed because it is too large
Load diff
2
src/engine/watermark.h
Normal file
2
src/engine/watermark.h
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
extern const unsigned char watermark[];
|
||||
extern const unsigned int watermark_size;
|
||||
Loading…
Add table
Add a link
Reference in a new issue