diff --git a/4klang_VSTi/4klang.dll b/4klang_VSTi/4klang.dll index 79e1064..c5a99cb 100644 Binary files a/4klang_VSTi/4klang.dll and b/4klang_VSTi/4klang.dll differ diff --git a/4klang_VSTi/8klang.dll b/4klang_VSTi/8klang.dll index d9ec26d..8b6ce06 100644 Binary files a/4klang_VSTi/8klang.dll and b/4klang_VSTi/8klang.dll differ diff --git a/4klang_source/4klang.asm b/4klang_source/4klang.asm index a1a93bf..486af75 100644 --- a/4klang_source/4klang.asm +++ b/4klang_source/4klang.asm @@ -748,27 +748,28 @@ go4kDST_func_do: %endif movzx eax, byte [VAL-1] ; // get type flag %ifdef GO4K_USE_DST_SH - fld dword [edx+go4kDST_val.snhfreq] ; // snh in + fld dword [edx+go4kDST_val.snhfreq] ; // snh in (inr) %ifdef GO4K_USE_DST_MOD_SH - fadd dword [WRK+go4kDST_wrk.sm] ; // snh' in + fadd dword [WRK+go4kDST_wrk.sm] ; // snh' in (inr) %endif fmul st0, st0 ; // square the input so we never get negative and also have a smoother behaviour in the lower frequencies fchs - fadd dword [WRK+go4kDST_wrk.snhphase]; // snh' in + fadd dword [WRK+go4kDST_wrk.snhphase]; // snh' in (inr) fst dword [WRK+go4kDST_wrk.snhphase] - fldz ; // 0 snh' in - fucomip st1 ; // 0 snh' in + fldz ; // 0 snh' in (inr) + fucomip st1 ; // snh' in (inr) + fstp dword [esp-4] ; // in (inr) jc short go4kDST_func_hold - fld1 ; // 1 snh' in - faddp st1, st0 ; // 1+snh' in - fstp dword [WRK+go4kDST_wrk.snhphase]; // in + fld1 ; // 1 in (inr) + fadd dword [esp-4] ; // 1+snh' in (inr) + fstp dword [WRK+go4kDST_wrk.snhphase]; // in (inr) %endif ; // calc pregain and postgain %ifdef GO4K_USE_DST_STEREO - test al, byte STEREO ; // outr inl + test al, byte STEREO jz short go4kDST_func_mono fxch st1 ; // inr inl - fld dword [edx+go4kDST_val.drive] ; // drive inr inl + fld dword [edx+go4kDST_val.drive] ; // drive inr inl %ifdef GO4K_USE_DST_MOD_DM fadd dword [WRK+go4kDST_wrk.dm] %endif @@ -779,26 +780,26 @@ go4kDST_func_do: fxch st1 ; // inl outr go4kDST_func_mono: %endif - fld dword [edx+go4kDST_val.drive] ; // drive in + fld dword [edx+go4kDST_val.drive] ; // drive in (outr) %ifdef GO4K_USE_DST_MOD_DM fadd dword [WRK+go4kDST_wrk.dm] %endif - call go4kWaveshaper ; // out + call go4kWaveshaper ; // out (outr) %ifdef GO4K_USE_DST_SH - fst dword [WRK+go4kDST_wrk.out] ; // out' + fst dword [WRK+go4kDST_wrk.out] ; // out' (outr) %endif - ret ; // out' -%ifdef GO4K_USE_DST_SH -go4kDST_func_hold: - fstp st0 ; // in - fstp st0 + ret ; // out' (outr) +%ifdef GO4K_USE_DST_SH +go4kDST_func_hold: ; // in (inr) + fstp st0 ; // (inr) %ifdef GO4K_USE_DST_STEREO - test al, byte STEREO ; // outr inl - jz short go4kDST_func_monohold - fld dword [WRK+go4kDST_wrk.out2] ; // out2 + test al, byte STEREO + jz short go4kDST_func_monohold ; // (inr) + fstp st0 ; // + fld dword [WRK+go4kDST_wrk.out2] ; // outr go4kDST_func_monohold: %endif - fld dword [WRK+go4kDST_wrk.out] ; // out + fld dword [WRK+go4kDST_wrk.out] ; // out (outr) ret %endif diff --git a/4klang_source/Go4kVSTi/source/GoSynth/Go4kVSTiCore.cpp b/4klang_source/Go4kVSTi/source/GoSynth/Go4kVSTiCore.cpp index eb79dd2..6fdbe32 100644 --- a/4klang_source/Go4kVSTi/source/GoSynth/Go4kVSTiCore.cpp +++ b/4klang_source/Go4kVSTi/source/GoSynth/Go4kVSTiCore.cpp @@ -457,7 +457,7 @@ void Go4kVSTi_UpdateDelayTimes() if (v->id == M_DLL) { - DLL_valP v = (DLL_valP)(SynthObj.InstrumentValues[i][u]); + //DLL_valP v = (DLL_valP)(SynthObj.InstrumentValues[i][u]); if (v->reverb) { if (v->leftreverb) @@ -476,6 +476,7 @@ void Go4kVSTi_UpdateDelayTimes() int delay; if (v->synctype == 2) { + (&go4k_delay_times)[delayindex] = 0; // added for debug. doesnt hurt though v->delay = 0; v->count = 1; } @@ -549,7 +550,7 @@ void Go4kVSTi_Tick(float *oleft, float *oright, int samples) // send a stayalive signal to the host for (int i = 0; i < samples; i++) { - float signal = 0.0625*((float)(i&63)/32.0f - 1.0f); + float signal = 0.03125*((float)(i & 255) / 128.0f - 1.0f); *oleft++ = signal; *oright++ = signal; } @@ -1403,7 +1404,9 @@ void Go4kVSTi_LoadInstrument(char* filename, char channel) else { Go4kVSTi_ResetGlobal(); - fread(SynthObj.InstrumentNames[channel], 1, 64, file); + // read the instrument name in a dummy buffer, as global section doesnt have an own name + BYTE dummyNameBuf[64]; + fread(dummyNameBuf, 1, 64, file); if (version13) { BYTE dummyBuf[16]; @@ -1512,7 +1515,8 @@ void Go4kVSTi_SaveInstrument(char* filename, char channel) } else { - fwrite(SynthObj.InstrumentNames[channel], 1, 64, file); + // write a dummy name for global section as it doesnt have an own name + fwrite("GlobalUnitsStoredAs.4ki ", 1, 64, file); fwrite(SynthObj.GlobalValues, 1, MAX_UNITS*MAX_UNIT_SLOTS, file); } fclose(file); @@ -2055,12 +2059,8 @@ void Go4kVSTi_SaveByteStream(HINSTANCE hInst, char* filename, int useenvlevels, { if (!v->reverb) { - // if not notesync - if (v->synctype != 2) - { - // just push a dummy index - delay_indices.push_back(-1); - } + // just push a dummy index + delay_indices.push_back(-1); } } } @@ -2598,7 +2598,7 @@ void Go4kVSTi_SaveByteStream(HINSTANCE hInst, char* filename, int useenvlevels, fprintf(file, " .size\n"); fprintf(file, "endstruc\n"); fprintf(file, "%%endif\n"); - + fprintf(file, "%%ifdef GO4K_USE_FSTG\n"); fprintf(file, "GO4K_FSTG_ID equ 12\n"); fprintf(file, "%%macro GO4K_FSTG 2\n"); @@ -3130,7 +3130,7 @@ void Go4kVSTi_SaveByteStream(HINSTANCE hInst, char* filename, int useenvlevels, // modes = "FST_MUL"; if (v->type & FST_POP) modes += "+FST_POP"; - fprintf(file, "\tGO4K_FST\tAMOUNT(%d),DEST(%d*MAX_UNIT_SLOTS+%d+%s)\n", v->amount, v->dest_unit-emptySkip, v->dest_slot, modes ); + fprintf(file, "\tGO4K_FST\tAMOUNT(%d),DEST(%d*MAX_UNIT_SLOTS+%d+%s)\n", v->amount, v->dest_unit-emptySkip, v->dest_slot, modes.c_str()); } // global storage else diff --git a/4klang_source/Go4kVSTi/win/4klang.asm b/4klang_source/Go4kVSTi/win/4klang.asm index a1a93bf..486af75 100644 --- a/4klang_source/Go4kVSTi/win/4klang.asm +++ b/4klang_source/Go4kVSTi/win/4klang.asm @@ -748,27 +748,28 @@ go4kDST_func_do: %endif movzx eax, byte [VAL-1] ; // get type flag %ifdef GO4K_USE_DST_SH - fld dword [edx+go4kDST_val.snhfreq] ; // snh in + fld dword [edx+go4kDST_val.snhfreq] ; // snh in (inr) %ifdef GO4K_USE_DST_MOD_SH - fadd dword [WRK+go4kDST_wrk.sm] ; // snh' in + fadd dword [WRK+go4kDST_wrk.sm] ; // snh' in (inr) %endif fmul st0, st0 ; // square the input so we never get negative and also have a smoother behaviour in the lower frequencies fchs - fadd dword [WRK+go4kDST_wrk.snhphase]; // snh' in + fadd dword [WRK+go4kDST_wrk.snhphase]; // snh' in (inr) fst dword [WRK+go4kDST_wrk.snhphase] - fldz ; // 0 snh' in - fucomip st1 ; // 0 snh' in + fldz ; // 0 snh' in (inr) + fucomip st1 ; // snh' in (inr) + fstp dword [esp-4] ; // in (inr) jc short go4kDST_func_hold - fld1 ; // 1 snh' in - faddp st1, st0 ; // 1+snh' in - fstp dword [WRK+go4kDST_wrk.snhphase]; // in + fld1 ; // 1 in (inr) + fadd dword [esp-4] ; // 1+snh' in (inr) + fstp dword [WRK+go4kDST_wrk.snhphase]; // in (inr) %endif ; // calc pregain and postgain %ifdef GO4K_USE_DST_STEREO - test al, byte STEREO ; // outr inl + test al, byte STEREO jz short go4kDST_func_mono fxch st1 ; // inr inl - fld dword [edx+go4kDST_val.drive] ; // drive inr inl + fld dword [edx+go4kDST_val.drive] ; // drive inr inl %ifdef GO4K_USE_DST_MOD_DM fadd dword [WRK+go4kDST_wrk.dm] %endif @@ -779,26 +780,26 @@ go4kDST_func_do: fxch st1 ; // inl outr go4kDST_func_mono: %endif - fld dword [edx+go4kDST_val.drive] ; // drive in + fld dword [edx+go4kDST_val.drive] ; // drive in (outr) %ifdef GO4K_USE_DST_MOD_DM fadd dword [WRK+go4kDST_wrk.dm] %endif - call go4kWaveshaper ; // out + call go4kWaveshaper ; // out (outr) %ifdef GO4K_USE_DST_SH - fst dword [WRK+go4kDST_wrk.out] ; // out' + fst dword [WRK+go4kDST_wrk.out] ; // out' (outr) %endif - ret ; // out' -%ifdef GO4K_USE_DST_SH -go4kDST_func_hold: - fstp st0 ; // in - fstp st0 + ret ; // out' (outr) +%ifdef GO4K_USE_DST_SH +go4kDST_func_hold: ; // in (inr) + fstp st0 ; // (inr) %ifdef GO4K_USE_DST_STEREO - test al, byte STEREO ; // outr inl - jz short go4kDST_func_monohold - fld dword [WRK+go4kDST_wrk.out2] ; // out2 + test al, byte STEREO + jz short go4kDST_func_monohold ; // (inr) + fstp st0 ; // + fld dword [WRK+go4kDST_wrk.out2] ; // outr go4kDST_func_monohold: %endif - fld dword [WRK+go4kDST_wrk.out] ; // out + fld dword [WRK+go4kDST_wrk.out] ; // out (outr) ret %endif diff --git a/4klang_source/Go4kVSTi/win/Go4kVSTi.rc b/4klang_source/Go4kVSTi/win/Go4kVSTi.rc index 46834d3..1d9e43a 100644 --- a/4klang_source/Go4kVSTi/win/Go4kVSTi.rc +++ b/4klang_source/Go4kVSTi/win/Go4kVSTi.rc @@ -35,7 +35,7 @@ IDR_ASM_RES BINARY "4klang.bin" IDD_GO4KVSTIDIALOG DIALOGEX 0, 0, 594, 341 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Alcatraz - 4klang Synth Plugin - Version 3.11" +CAPTION "Alcatraz - 4klang Synth Plugin - Version 3.11.1" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN PUSHBUTTON "Load Patch Data",IDC_LOAD_PATCH,13,13,70,14 diff --git a/4klang_source/Go4kVSTi/win/Go4kVSTi2.rc b/4klang_source/Go4kVSTi/win/Go4kVSTi2.rc index e8ba6da..3d040fc 100644 --- a/4klang_source/Go4kVSTi/win/Go4kVSTi2.rc +++ b/4klang_source/Go4kVSTi/win/Go4kVSTi2.rc @@ -35,7 +35,7 @@ IDR_ASM_RES BINARY "4klang.bin" IDD_GO4KVSTIDIALOG DIALOGEX 0, 0, 594, 341 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Alcatraz - 8klang Synth Plugin (4klang addon) - Version 3.11" +CAPTION "Alcatraz - 8klang Synth Plugin (4klang addon) - Version 3.11.1" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN PUSHBUTTON "Load Patch Data",IDC_LOAD_PATCH,13,13,70,14