Add tests for opcode stereo variants, squashing several bugs in the process. Implement receive opcode to test stereo sending.

This commit is contained in:
Veikko Sariola 2020-05-16 21:23:41 +03:00
parent f9388b028a
commit 87264c443c
39 changed files with 472 additions and 47 deletions

View File

@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.15)
# i.e. set_property(TARGET 4klang PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
cmake_policy(SET CMP0091 NEW)
project(4klang
project(sointu
VERSION 3.3.2
DESCRIPTION "A modular synthesizer for 4k/8k intros"
LANGUAGES C CXX)
@ -38,6 +38,6 @@ add_subdirectory(src)
# Testing only available if this is the main app
# Emergency override 4KLANG_CMAKE_BUILD_TESTING provided as well
if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR 4KLANG_CMAKE_BUILD_TESTING) AND BUILD_TESTING)
if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR SOINTU_CMAKE_BUILD_TESTING) AND BUILD_TESTING)
add_subdirectory(tests)
endif()

View File

@ -31,7 +31,7 @@ EXPORT MANGLE_FUNC(su_op_add,0)
fadd st0, st3
fxch
ret
su_op_pop_mono:
su_op_add_mono:
%endif
fadd st1
ret
@ -146,7 +146,7 @@ EXPORT MANGLE_FUNC(su_op_xch,0)
jnc su_op_xch_mono
fxch st0, st2 ; c b a d
fxch st0, st1 ; b c a d
fxch st0, st2 ; d c a b
fxch st0, st3 ; d c a b
su_op_xch_mono:
%endif
fxch st0, st1

View File

@ -140,7 +140,7 @@ endstruc
USE_HOLD
%xdefine CMDS CMDS HOLD_ID + %1,
%if %1 == STEREO
%define INCLUDE_STEREO_DISTORT
%define INCLUDE_STEREO_HOLD
%endif
%endmacro

View File

@ -79,8 +79,7 @@ SECT_TEXT(sunoise)
EXPORT MANGLE_FUNC(su_op_noise,0)
%ifdef INCLUDE_STEREO_NOISE
jnc su_op_noise_mono
clc
call dword [esp]
call su_op_noise_mono
su_op_noise_mono:
%endif
call MANGLE_FUNC(FloatRandomNumber,0)
@ -287,22 +286,22 @@ SECT_DATA(suconst)
%endif
;-------------------------------------------------------------------------------
; LOAD_VAL opcode
; LOADVAL opcode
;-------------------------------------------------------------------------------
; Input: WRK : pointer to unit workspace
; VAL : pointer to unit values as bytes
; Output: st0 : 2*v-1, where v is the loaded value
; Dirty: eax, edx
; Input: edx : pointer to unit ports
;
; Mono version: push 2*v-1 on stack, where v is the input to port "value"
; Stereo version: push 2*v-1 twice on stack
;-------------------------------------------------------------------------------
%if LOAD_VAL_ID > -1
%if LOADVAL_ID > -1
SECT_TEXT(suloadvl)
EXPORT MANGLE_FUNC(su_op_loadval,0)
%ifdef INCLUDE_STEREO_LOAD_VAL
jnc su_op_loadval_mono
call su_loadval_mono
su_loadval_mono:
call su_op_loadval_mono
su_op_loadval_mono:
%endif
fld dword [edx+su_load_val_ports.value] ; v
fsub dword [c_0_5] ; v-.5
@ -310,3 +309,31 @@ su_loadval_mono:
ret
%endif ; SU_USE_LOAD_VAL
;-------------------------------------------------------------------------------
; RECEIVE opcode
;-------------------------------------------------------------------------------
; Mono version: push l on stack, where l is the left channel received
; Stereo version: push l r on stack
;-------------------------------------------------------------------------------
%if RECEIVE_ID > -1
SECT_TEXT(sureceiv)
EXPORT MANGLE_FUNC(su_op_receive,0)
lea ecx, dword [WRK+su_unit.ports]
%ifdef INCLUDE_STEREO_RECEIVE
jnc su_op_receive_mono
xor eax,eax
fld dword [ecx+su_receive_ports.right]
mov dword [ecx+su_receive_ports.right],eax
su_op_receive_mono:
%else
xor eax,eax
%endif
fld dword [ecx+su_receive_ports.left]
mov dword [ecx+su_receive_ports.left],eax
ret
%endif ; RECEIVE_ID > -1

View File

@ -154,10 +154,10 @@ endstruc
;-------------------------------------------------------------------------------
; LOAD_VAL structs
;-------------------------------------------------------------------------------
%assign LOAD_VAL_ID -1
%assign LOADVAL_ID -1
%macro USE_LOAD_VAL 0
%if LOAD_VAL_ID == -1
%assign LOAD_VAL_ID CUR_ID
%if LOADVAL_ID == -1
%assign LOADVAL_ID CUR_ID
%assign CUR_ID CUR_ID + 2
%xdefine OPCODES OPCODES MANGLE_FUNC(su_op_loadval,0),
%xdefine NUMPARAMS NUMPARAMS 1,
@ -167,7 +167,7 @@ endstruc
%macro SU_LOADVAL 2
db %2
USE_LOAD_VAL
%xdefine CMDS CMDS LOAD_VAL_ID+%1,
%xdefine CMDS CMDS LOADVAL_ID+%1,
%if %1 == STEREO
%define INCLUDE_STEREO_LOAD_VAL
%endif
@ -183,3 +183,30 @@ endstruc
struc su_load_val_wrk
.size
endstruc
;-------------------------------------------------------------------------------
; RECEIVE structs
;-------------------------------------------------------------------------------
%assign RECEIVE_ID -1
%macro USE_RECEIVE 0
%if RECEIVE_ID == -1
%assign RECEIVE_ID CUR_ID
%assign CUR_ID CUR_ID + 2
%xdefine OPCODES OPCODES MANGLE_FUNC(su_op_receive,0),
%xdefine NUMPARAMS NUMPARAMS 0,
%endif
%endmacro
%macro SU_RECEIVE 1
USE_RECEIVE
%xdefine CMDS CMDS RECEIVE_ID+%1,
%if %1 == STEREO
%define INCLUDE_STEREO_RECEIVE
%endif
%endmacro
struc su_receive_ports
.params ; receive does not actually have params, left and right only through send
.left resd 1
.right resd 1
endstruc

View File

@ -8,8 +8,8 @@ function(regression_test testname)
add_executable(${testname} ${source}.asm test_renderer.c)
# the tests include the entire ASM but we still want to rebuild when they change
file(GLOB FOURKLANG ${PROJECT_SOURCE_DIR}/src/*.inc ${PROJECT_SOURCE_DIR}/src/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.inc)
set_source_files_properties(${source}.asm PROPERTIES OBJECT_DEPENDS "${FOURKLANG}")
file(GLOB SOINTU ${PROJECT_SOURCE_DIR}/src/*.inc ${PROJECT_SOURCE_DIR}/src/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.inc)
set_source_files_properties(${source}.asm PROPERTIES OBJECT_DEPENDS "${SOINTU}")
set_source_files_properties(${FOURKLANG} PROPERTIES HEADER_FILE_ONLY TRUE)
add_test(${testname} ${testname})
@ -40,22 +40,35 @@ function(regression_test testname)
endfunction(regression_test)
regression_test(test_envelope "" ENVELOPE)
regression_test(test_loadval "" LOAD)
regression_test(test_send "" SEND)
regression_test(test_send_global)
regression_test(test_envelope_stereo ENVELOPE)
regression_test(test_loadval "" LOADVAL)
regression_test(test_loadval_stereo LOADVAL LOADVAL_STEREO)
regression_test(test_send LOADVAL SEND)
regression_test(test_send_stereo SEND)
regression_test(test_send_global SEND)
regression_test(test_receive SEND RECEIVE)
regression_test(test_receive_stereo RECEIVE)
regression_test(test_panning ENVELOPE PANNING)
regression_test(test_panning_stereo PANNING)
regression_test(test_multiple_instruments ENVELOPE)
regression_test(test_pop LOAD FOP_POP)
regression_test(test_addp LOAD)
regression_test(test_mulp LOAD FOP_MULP)
regression_test(test_push "LOAD;FOP_POP" FOP_PUSH)
regression_test(test_xch LOAD)
regression_test(test_add LOAD)
regression_test(test_mul LOAD)
regression_test(test_addp_stereo LOAD)
regression_test(test_mulp_stereo LOAD FOP_MULP2)
regression_test(test_pop LOADVAL POP)
regression_test(test_pop_stereo POP)
regression_test(test_addp LOADVAL)
regression_test(test_addp_stereo LOADVAL)
regression_test(test_mulp LOADVAL FOP_MULP)
regression_test(test_mulp_stereo LOADVAL FOP_MULP2)
regression_test(test_push "LOADVAL;POP" FOP_PUSH)
regression_test(test_push_stereo PUSH)
regression_test(test_xch LOADVAL)
regression_test(test_xch_stereo LOADVAL)
regression_test(test_add LOADVAL)
regression_test(test_add_stereo LOADVAL)
regression_test(test_mul LOADVAL)
regression_test(test_mul_stereo LOADVAL)
regression_test(test_loadnote)
regression_test(test_noise ENVELOPE VCO_NOISE)
regression_test(test_loadnote_stereo)
regression_test(test_noise ENVELOPE NOISE)
regression_test(test_noise_stereo NOISE)
regression_test(test_oscillat_sine ENVELOPE VCO_SINE)
regression_test(test_oscillat_trisaw ENVELOPE)
regression_test(test_oscillat_pulse ENVELOPE VCO_PULSE)
@ -72,8 +85,9 @@ regression_test(test_oscillat_gainmod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND"
regression_test(test_distort ENVELOPE)
regression_test(test_distort_mod "VCO_SINE;ENVELOPE;SEND")
regression_test(test_distort_stereo ENVELOPE)
regression_test(test_hold ENVELOPE)
regression_test(test_hold ENVELOPE HOLD)
regression_test(test_hold_mod "VCO_SINE;ENVELOPE;SEND")
regression_test(test_hold_stereo HOLD)
regression_test(test_filter_band "VCO_SINE;ENVELOPE;FOP_MULP")
regression_test(test_filter_low "VCO_SINE;ENVELOPE;FOP_MULP")
@ -85,7 +99,7 @@ regression_test(test_filter_resmod "VCO_SINE;ENVELOPE;FOP_MULP;SEND")
regression_test(test_delay "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
regression_test(test_delay_stereo "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
regression_test(test_delay_notetracking "ENVELOPE;FOP_MULP;PANNING;VCO_NOISE")
regression_test(test_delay_notetracking "ENVELOPE;FOP_MULP;PANNING;NOISE")
regression_test(test_delay_reverb "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
regression_test(test_delay_feedbackmod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND")
regression_test(test_delay_pregainmod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

29
tests/test_add_stereo.asm Normal file
View File

@ -0,0 +1,29 @@
%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,
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_LOADVAL MONO,VALUE(32)
SU_LOADVAL MONO,VALUE(64)
SU_LOADVAL MONO,VALUE(128)
SU_ADD STEREO
SU_XCH STEREO
SU_POP MONO
SU_POP MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,21 @@
%define BPM 100
%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_ENVELOPE STEREO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,23 @@
%define BPM 100
%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_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_HOLD STEREO,HOLDFREQ(3)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -14,7 +14,8 @@ SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADNOTE STEREO
SU_LOADNOTE MONO
SU_LOADNOTE MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH

View File

@ -0,0 +1,22 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 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_LOADNOTE STEREO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -14,8 +14,8 @@ SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(40)
SU_LOADVAL MONO,VALUE(80)
SU_LOADVAL MONO,VALUE(40)
SU_LOADVAL MONO,VALUE(80)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH

View File

@ -0,0 +1,22 @@
%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 STEREO,VALUE(40)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

29
tests/test_mul_stereo.asm Normal file
View File

@ -0,0 +1,29 @@
%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(96)
SU_LOADVAL MONO,VALUE(128)
SU_LOADVAL MONO,VALUE(0)
SU_LOADVAL MONO,VALUE(96)
SU_MUL STEREO
SU_XCH STEREO
SU_POP MONO
SU_POP MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -17,11 +17,11 @@ SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(96)
SU_LOADVAL MONO,VALUE(0)
SU_MULP MONO
SU_MULP MONO
SU_LOADVAL MONO,VALUE(96)
SU_LOADVAL MONO,VALUE(128)
SU_MULP MONO
SU_OUT STEREO,GAIN(128)
SU_MULP MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH

View File

@ -13,11 +13,12 @@ SU_END_TRACKS
SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_ENVELOPE MONO, ATTAC(32),DECAY(32),SUSTAIN(64),RELEASE(64),GAIN(128)
SU_ENVELOPE MONO, ATTAC(32),DECAY(32),SUSTAIN(64),RELEASE(64),GAIN(128)
SU_NOISE MONO, SHAPE(64),GAIN(128)
SU_MULP MONO
SU_ENVELOPE MONO, ATTAC(32),DECAY(32),SUSTAIN(64),RELEASE(64),GAIN(128)
SU_NOISE MONO, SHAPE(96),GAIN(128)
SU_MULP STEREO
SU_MULP MONO
SU_OUT STEREO, GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH

View File

@ -0,0 +1,24 @@
%define BPM 100
%define USE_SECTIONS
%include "../src/sointu.inc"
SU_BEGIN_PATTERNS
PATTERN 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 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_NOISE STEREO, SHAPE(96),GAIN(128)
SU_ENVELOPE MONO, ATTAC(32),DECAY(32),SUSTAIN(64),RELEASE(64),GAIN(128)
SU_ENVELOPE MONO, ATTAC(32),DECAY(32),SUSTAIN(64),RELEASE(64),GAIN(128)
SU_MULP STEREO
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_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_PAN STEREO,PANNING(40)
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

26
tests/test_pop_stereo.asm Normal file
View File

@ -0,0 +1,26 @@
%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_LOADVAL MONO,VALUE(96)
SU_LOADVAL MONO,VALUE(0)
SU_LOADVAL MONO,VALUE(0)
SU_POP STEREO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,26 @@
%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_LOADVAL MONO,VALUE(96)
SU_PUSH STEREO
SU_POP MONO
SU_POP MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

28
tests/test_receive.asm Normal file
View File

@ -0,0 +1,28 @@
%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) ; should receive -0.5
SU_SEND MONO,AMOUNT(128),PORT(5,receive,left) ; should send -0.25
SU_SEND MONO,AMOUNT(128),PORT(6,receive,left) + SEND_POP ; should send -0.25
SU_LOADVAL MONO,VALUE(128) ; should receive 1
SU_SEND MONO,AMOUNT(128),PORT(6,receive,left) + SEND_POP ; should send 0.5
SU_RECEIVE MONO ; should receive -0.5
SU_RECEIVE MONO ; should receive 0.5
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,27 @@
%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) ; should receive -0.5
SU_SEND MONO,AMOUNT(128),PORT(5,receive,right) ; should send -0.25
SU_SEND MONO,AMOUNT(128),PORT(5,receive,left) + SEND_POP ; should send -0.25
SU_LOADVAL MONO,VALUE(128) ; should receive 1
SU_SEND MONO,AMOUNT(128),PORT(5,receive,left) + SEND_POP ; should send 0.5
SU_RECEIVE STEREO; should receive 0.5 -0.5
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -0,0 +1,28 @@
%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(0)
SU_SEND STEREO,AMOUNT(96),PORT(6,receive,left) + SEND_POP
SU_LOADVAL MONO,VALUE(64)
SU_LOADVAL MONO,VALUE(128)
SU_SEND STEREO,AMOUNT(128),PORT(6,receive,left) + SEND_POP
SU_RECEIVE STEREO; should receive 0.5 -0.5
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"

View File

@ -1,5 +1,4 @@
%define BPM 100
%define SINGLE_FILE
%define USE_SECTIONS
%include "../src/sointu.inc"
@ -16,8 +15,8 @@ SU_BEGIN_PATCH
SU_BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(96)
SU_LOADVAL MONO,VALUE(32)
SU_XCH MONO
SU_OUT STEREO,GAIN(128)
SU_XCH MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH

27
tests/test_xch_stereo.asm Normal file
View File

@ -0,0 +1,27 @@
%define BPM 100
%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_LOADVAL MONO,VALUE(32)
SU_LOADVAL MONO,VALUE(96)
SU_XCH STEREO
SU_POP MONO
SU_POP MONO
SU_OUT STEREO,GAIN(128)
SU_END_INSTRUMENT
SU_END_PATCH
%include "../src/sointu.asm"