Implement gain and inverse gain effects, for the moments when you just need them.

This commit is contained in:
Veikko Sariola 2020-05-16 22:29:08 +03:00
parent e966bc0084
commit 5760f78201
11 changed files with 202 additions and 0 deletions

View File

@ -78,6 +78,46 @@ su_op_hold_holding:
%endif ; HOLD_ID > -1
;-------------------------------------------------------------------------------
; GAIN Tick
;-------------------------------------------------------------------------------
%if GAIN_ID > -1
SECT_TEXT(sugain)
EXPORT MANGLE_FUNC(su_op_gain,0)
%ifdef INCLUDE_STEREO_GAIN
jnc su_op_gain_mono
call su_stereo_filterhelper
%define INCLUDE_STEREO_FILTERHELPER
su_op_gain_mono:
%endif
fld dword [edx+su_gain_ports.gain] ; g x
fmulp st1, st0 ; g*x
ret
%endif ; GAIN_ID > -1
;-------------------------------------------------------------------------------
; INVGAIN Tick
;-------------------------------------------------------------------------------
%if INVGAIN_ID > -1
SECT_TEXT(suingain)
EXPORT MANGLE_FUNC(su_op_invgain,0)
%ifdef INCLUDE_STEREO_INVGAIN
jnc su_op_invgain_mono
call su_stereo_filterhelper
%define INCLUDE_STEREO_FILTERHELPER
su_op_invgain_mono:
%endif
fld dword [edx+su_invgain_ports.invgain] ; g x
fdivp st1, st0 ; x/g
ret
%endif ; INVINVGAIN_ID > -1
;-------------------------------------------------------------------------------
; su_op_filter: perform low/high/band-pass filtering on the signal
;-------------------------------------------------------------------------------

View File

@ -156,6 +156,66 @@ struc su_hold_wrk
.holdval resd 1
endstruc
;-------------------------------------------------------------------------------
; GAIN effect related defines
;-------------------------------------------------------------------------------
%assign GAIN_ID -1
%macro USE_GAIN 0
%if GAIN_ID == -1
%assign GAIN_ID CUR_ID
%assign CUR_ID CUR_ID + 2
%xdefine OPCODES OPCODES MANGLE_FUNC(su_op_gain,0),
%xdefine NUMPARAMS NUMPARAMS 1,
%endif
%endmacro
%macro SU_GAIN 2
db %2
USE_GAIN
%xdefine CMDS CMDS GAIN_ID + %1,
%if %1 == STEREO
%define INCLUDE_STEREO_GAIN
%endif
%endmacro
%define GAIN(val) val
struc su_gain_ports
.gain resd 1
.params
endstruc
;-------------------------------------------------------------------------------
; INVGAIN effect related defines
;-------------------------------------------------------------------------------
%assign INVGAIN_ID -1
%macro USE_INVGAIN 0
%if INVGAIN_ID == -1
%assign INVGAIN_ID CUR_ID
%assign CUR_ID CUR_ID + 2
%xdefine OPCODES OPCODES MANGLE_FUNC(su_op_invgain,0),
%xdefine NUMPARAMS NUMPARAMS 1,
%endif
%endmacro
%macro SU_INVGAIN 2
db %2
USE_INVGAIN
%xdefine CMDS CMDS INVGAIN_ID + %1,
%if %1 == STEREO
%define INCLUDE_STEREO_INVGAIN
%endif
%endmacro
%define INVGAIN(val) val
struc su_invgain_ports
.invgain resd 1
.params
endstruc
;-------------------------------------------------------------------------------
; CLIP effect related defines
;-------------------------------------------------------------------------------

View File

@ -43,6 +43,10 @@ regression_test(test_envelope "" ENVELOPE)
regression_test(test_envelope_stereo ENVELOPE)
regression_test(test_loadval "" LOADVAL)
regression_test(test_loadval_stereo LOADVAL LOADVAL_STEREO)
regression_test(test_gain LOADVAL GAIN)
regression_test(test_gain_stereo GAIN)
regression_test(test_invgain LOADVAL INVGAIN)
regression_test(test_invgain_stereo INVGAIN)
regression_test(test_send LOADVAL SEND)
regression_test(test_send_stereo SEND)
regression_test(test_send_global SEND)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

24
tests/test_gain.asm Normal file
View File

@ -0,0 +1,24 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0
SU_END_PATTERNS
SU_BEGIN_TRACKS
TRACK VOICES(1),0
SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(0)
SU_LOADVAL MONO,VALUE(128)
SU_GAIN STEREO,GAIN(64)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,25 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0
SU_END_PATTERNS
SU_BEGIN_TRACKS
TRACK VOICES(1),0
SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(32)
SU_GAIN MONO,GAIN(128)
SU_LOADVAL MONO,VALUE(128)
SU_GAIN MONO,GAIN(64)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

25
tests/test_invgain.asm Normal file
View File

@ -0,0 +1,25 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0
SU_END_PATTERNS
SU_BEGIN_TRACKS
TRACK VOICES(1),0
SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(48)
SU_INVGAIN MONO,GAIN(64)
SU_LOADVAL MONO,VALUE(80)
SU_INVGAIN MONO,INVGAIN(64)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,24 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0
SU_END_PATTERNS
SU_BEGIN_TRACKS
TRACK VOICES(1),0
SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(48)
SU_LOADVAL MONO,VALUE(80)
SU_INVGAIN STEREO,INVGAIN(64)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"