diff --git a/Makefile.am b/Makefile.am index f4bfeec..5706035 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,8 +22,8 @@ AM_LDFLAGS = # debug/release switches if DEBUG AM_CFLAGS += -g - # -Wextra -Werror -Wconversion -fsanitize=address - AM_CXXFLAGS += -g -Wall -fsanitize=undefined + # -Wextra -Werror -Wconversion -fsanitize=address -lasan -fsanitize=thread + AM_CXXFLAGS += -g -Wall -Wextra -Wno-unused -fsanitize=undefined else AM_CFLAGS += -O3 AM_CXXFLAGS += -O3 diff --git a/src/cwtest/cfg/flow/flow_test.cfg b/src/cwtest/cfg/flow/flow_test.cfg index ea4acca..eb5f8f8 100644 --- a/src/cwtest/cfg/flow/flow_test.cfg +++ b/src/cwtest/cfg/flow/flow_test.cfg @@ -29,7 +29,7 @@ test_1: { framesPerCycle: 64, maxCycleCount: 1500, - + printNetworkFl: false, // print the network instance network: { procs: { @@ -38,6 +38,11 @@ osc: { class: sine_tone, in:{ hz:sh.out } }, afout: { class: audio_file_out, in: { in:osc.out } args:{ default:{fname:"/home/kevin/temp/audio_flow_out.wav"} }} } + + presets: { + a: { lfo:a220, osc: { gain:0.8 } }, + b: { lfo:{ dc:220, gain:25 }, osc: { gain:0.5 } } + } } } @@ -77,7 +82,8 @@ test_4: { framesPerCycle: 64, maxCycleCount: 15000, - + printNetworkFl: false, + network: { procs: { diff --git a/src/cwtest/cfg/flow_proc_dict.cfg b/src/cwtest/cfg/flow_proc_dict.cfg index d69164a..07e816a 100644 --- a/src/cwtest/cfg/flow_proc_dict.cfg +++ b/src/cwtest/cfg/flow_proc_dict.cfg @@ -1,10 +1,9 @@ { - balance: { vars: { - in: { type:real, value:0.5, doc:"Input vaue" }, - out: { type:real, doc:"Ouput value. Same as input value."}, - inv_out: { type:real, doc:"1.0 minus output value."} + in: { type:coeff, value:0.5, doc:"Input vaue" }, + out: { type:coeff, doc:"Ouput value. Same as input value."}, + inv_out: { type:coeff, doc:"1.0 minus output value."} } } @@ -22,20 +21,20 @@ } } - audioFileIn: { + audio_file_in: { vars: { fname: { type:string, doc:"Audio file name." }, out:{ type:audio, doc:"Audio file output" }, on_off:{ type:bool, value:false, doc:"1=on 0=off" },, - seekSecs:{ type:real, value:0.0, doc:"Seek to the specified seconds offset." } + seekSecs:{ type:ftime, value:0.0, doc:"Seek to the specified seconds offset." } eofFl:{ type:bool, eofFl: true, doc:"Set the system 'halt' flag when the audio is completely read."}, } } - audioFileOut: { + audio_file_out: { vars: { - fname: { type:string, doc:"Audio file name." }, - bits: { type:uint, value:32, doc:"Audio file word width. (8,16,24,32,0=float32)."}, + fname: { type:string, doc:"Audio file name." }, + bits: { type:uint, value:32u, doc:"Audio file word width. (8,16,24,32,0=float32)."}, in: { type:audio, flags:["src"], doc:"Audio file input." } } } @@ -43,7 +42,7 @@ audio_gain: { vars: { in: { type:audio, flags:["src"], doc:"Audio input." }, - gain: { type:real, value:1.0, doc:"Gain coefficient." } + gain: { type:coeff, value:1.0, doc:"Gain coefficient." } out: { type:audio, doc:"Audio output." }, } } @@ -51,9 +50,10 @@ audio_split: { vars: { in: { type:audio, flags:["src"], doc:"Audio input." }, - select: { type:bool, doc:"Enable/Disable each channel" } - gain: { type:real, value:1.0, doc:"Audio gain for each selected (output) channel." } - out: { type:audio, doc:"Audio output." }, + select: { type:int, doc:"Give a list of integers where each integer selects an output channel for the associated input channel." } + igain: { type:coeff, value:1.0, doc:"Audio gain for each input channel." } + ogain: { type:coeff, value:1.0, doc:"Audio gain for each output channel." } + out: { type:audio, doc:"Audio output." }, } presets: @@ -67,7 +67,7 @@ vars: { in: { type:audio, flags:["src"], doc:"Audio input."}, duplicate: { type: uint, doc:"Count of times to repeat this channel." }, - gain: { type: real, value:1.0, doc:"Audio gain." }, + gain: { type: coeff, value:1.0, doc:"Audio gain." }, out: { type:audio, doc:"Audio output containing repeat * input channel count channels."} } } @@ -82,7 +82,7 @@ in5: { type:audio, flags:["src","src_opt"], doc:"Sixth audio input." }, in6: { type:audio, flags:["src","src_opt"], doc:"Seventh audio input." }, in7: { type:audio, flags:["src","src_opt"], doc:"Eigth audio input." }, - gain: { type:real, value:1.0, doc:"Audio gain for each selected (output) channel." } + gain: { type:coeff, value:1.0, doc:"Audio gain for each selected (output) channel." } out: { type:audio, doc:"Audio output. Channel count is the sum of the input channel count." }, } } @@ -91,8 +91,8 @@ vars: { in0: { type:audio, flags:["src"], doc:"First audio input." }, in1: { type:audio, flags:["src"], doc:"Second audio input." }, - gain0: { type:real, value:0.5, doc:"Audio gain for input 0." }, - gain1: { type:real, value:0.5, doc:"Audio gain for input 1." }, + gain0: { type:coeff, value:0.5, doc:"Audio gain for input 0." }, + gain1: { type:coeff, value:0.5, doc:"Audio gain for input 1." }, out: { type:audio, doc:"Audio output. Channel count is max of the input signal channels." }, } } @@ -100,8 +100,8 @@ audio_delay: { vars: { in: { type:audio, flags:["src"], doc:"Audio input." }, - maxDelayMs: { type:real, value:1000.0 doc:"Maximum possible delay in milliseconds." }, - delayMs: { type:real, doc:"Delay in milliseconds." }, + maxDelayMs: { type:ftime, value:1000.0 doc:"Maximum possible delay in milliseconds." }, + delayMs: { type:ftime, doc:"Delay in milliseconds." }, out: { type:audio, doc:"Audio output." }, } } @@ -109,16 +109,19 @@ sine_tone: { vars: { - srate: { type:real, value:48000.0, doc:"Sine tone sample rate."} - chCnt: { type:uint, value:2, doc:"Output signal channel count."}, - hz: { type:real, value:440.0, doc:"Frequency in Hertz."}, - gain: { type:real, value:0.8, doc:"Signal frequency."}, - out: { type:audio, doc:"Audio output" }, + srate: { type:srate, value:0, doc:"Sine tone sample rate. 0=Use default system sample rate"} + chCnt: { type:uint, value:2, doc:"Output signal channel count."}, + hz: { type:coeff, value:440.0, doc:"Frequency in Hertz."}, + phase: { type:coeff, value:0.0, doc:"Offset phase in radians."}, + dc: { type:coeff, value:0.0, doc:"DC offset applied after gain."}, + gain: { type:coeff, value:0.8, doc:"Signal frequency."}, + out: { type:audio, doc:"Audio output" }, } presets: { - a: { hz:220 }, - b: { hz:880 }, + a220 : { hz:220 }, + a440 : { hz:440 }, + a880 : { hz:880 }, } } @@ -218,12 +221,12 @@ in: { type:spectrum, flags:["src"], doc:"Spectrum input." }, bypass: { type:bool, value: false, doc:"Copy input to output without transform."}, - ceiling: { type:real, value: 30.0, doc:"Ceiling parameter."}, - expo: { type:real, value: 2.0, doc:"Exponent parameter."}, - thresh: { type:real, value: 54.0, doc:"Threshold parameter."}, - upr: { type:real, value: -0.7, doc:"Upper slope parameter."}, - lwr: { type:real, value: 2.0, doc:"Lower slope parameter."}, - mix: { type:real, value: 0.0, doc:"Basic/Bump Mix parameter."}, + ceiling: { type:coeff, value: 30.0, doc:"Ceiling parameter."}, + expo: { type:coeff, value: 2.0, doc:"Exponent parameter."}, + thresh: { type:coeff, value: 54.0, doc:"Threshold parameter."}, + upr: { type:coeff, value: -0.7, doc:"Upper slope parameter."}, + lwr: { type:coeff, value: 2.0, doc:"Lower slope parameter."}, + mix: { type:coeff, value: 0.0, doc:"Basic/Bump Mix parameter."}, out: { type:spectrum, doc:"Spectrum output." }, @@ -359,14 +362,14 @@ vars: { in: { type:audio, flags:["src"] true, doc:"Audio input." }, bypass: { type:bool, value: false, doc:"Bypass the compressor."}, - igain: { type:real, value: 1.0, doc:"Input gain."}, - thresh: { type:real, value: 90.0, doc:"Attack threshold in dB."}, - ratio: { type:real, value: 2.0, doc:"Compression ratio."}, - atk_ms: { type:real, value: 20.0, doc:"Attack time in milliseconds."}, - rls_ms: { type:real, value: 20.0, doc:"Release time in milliseconds."}, - wnd_ms: { type:real, value: 200.0, doc:"RMS calc. window length in milliseconds."}, - maxWnd_ms: { type:real, value: 1000.0, doc:"Maximim (allocated) window length in milliseconds."}, - ogain: { type:real, value: 1.0, doc:"Output gain."}, + igain: { type:coeff, value: 1.0, doc:"Input gain."}, + thresh: { type:coeff, value: 90.0, doc:"Attack threshold in dB."}, + ratio: { type:coeff, value: 2.0, doc:"Compression ratio."}, + atk_ms: { type:coeff, value: 20.0, doc:"Attack time in milliseconds."}, + rls_ms: { type:coeff, value: 20.0, doc:"Release time in milliseconds."}, + wnd_ms: { type:coeff, value: 200.0, doc:"RMS calc. window length in milliseconds."}, + maxWnd_ms: { type:coeff, value: 1000.0, doc:"Maximim (allocated) window length in milliseconds."}, + ogain: { type:coeff, value: 1.0, doc:"Output gain."}, out: { type:audio, doc:"Audio output." }, } @@ -475,9 +478,9 @@ vars: { in: { type:audio, flags:["src"] true, doc:"Audio input." }, bypass: { type:bool, value: false, doc:"Bypass the limiter."}, - igain: { type:real, value: 1.0, doc:"Input gain."}, - thresh: { type:real, value: 0.0, doc:"Linear (0.0-1.0) threshold."}, - ogain: { type:real, value: 1.0, doc:"Output gain."}, + igain: { type:coeff, value: 1.0, doc:"Input gain."}, + thresh: { type:coeff, value: 0.0, doc:"Linear (0.0-1.0) threshold."}, + ogain: { type:coeff, value: 1.0, doc:"Output gain."}, out: { type:audio, doc:"Audio output." }, } @@ -496,7 +499,7 @@ vars: { in: { type:audio, flags:["src"], doc:"Audio input." }, bypass: { type:bool, value: false, doc:"Bypass the DC filter."}, - gain: { type:real, value: 1.0, doc:"Output gain."}, + gain: { type:coeff, value: 1.0, doc:"Output gain."}, out: { type:audio, doc:"Audio output." }, } @@ -513,13 +516,121 @@ vars: { in: { type:audio, flags:["src"], doc:"Audio input." }, dbFl: { type:bool, value: true, doc:"Output in Decibels." }, - wndMs: { type:real, value: 100.0, doc:"RMS window length." }, - peakDb: { type:real, value: -10.0, doc:"Peak threshold." }, - out: { type:real, value: 0.0, doc:"Meter output." }, + wndMs: { type:ftime, value: 100.0, doc:"RMS window length." }, + peakDb: { type:coeff, value: -10.0, doc:"Peak threshold." }, + out: { type:coeff, value: 0.0, doc:"Meter output." }, peakFl: { type:bool, value: false, doc:"Peak output." } clipFl: { type:bool, value: false, doc:"Clip indicator output."} } } - + subnet: { + vars: { + } + } + + poly: { + vars: { + count: { type:uint, doc:"Count of network duplicates." }, + order: { type:string, value:"net", doc:"Execution order 'net'=net first 'proc'=proc first" } + } + } + + sample_hold: { + vars: { + in: { type:audio, flags:["src"], doc:"Audio input source." }, + period_ms: { type:ftime, value:50, doc:"Sample period in milliseconds." }, + out: { type:sample, value:0.0, doc:"First value in the sample period." }, + mean: { type:sample, value:0.0, doc:"Mean value of samples in period." }, + } + } + + + number: { + vars: { + value: { type:numeric, value:0.0, doc:"Input and output value."}, + store: { type:numeric, value:0.0, doc:"Store but don't emit until the next exec."} + } + } + + timer: { + vars: { + srate: { type:srate, value:0, flags["src"], doc:"Sample rate to use as the time base. 0=Use default system sample rate." }, + period_ms: { type:ftime, value:100, doc:"Timer period in milliseconds." }, + out: { type:bool, value:false, doc:"Output pulse." }, + } + } + + counter: { + vars: { + trigger: { type:bool, flags["src"], doc:"Counter increments with each toggle of trigger." }, + reset: { type:bool, value:false, doc:"Reset the counter to the initial value." }, + init: { type:numeric, value:0.0, doc:"Counter initial value." }, + min: { type:numeric, value:0.0, doc:"Minimum output value." }, + max: { type:numeric, value:10.0, doc:"Maximum output value." }, + inc: { type:numeric, value:1.0, doc:"Incrment value." }, + repeat_fl: { type:bool, value:true, doc:"Repeat on reaching the limits." }, + mode: { type:string, value:"modulo", doc:"limit mode: 'modulo'=wrap, 'reverse'=count in opposite direction, 'clip'=repeat limit value."}, + out_type: { type:string, value:double, flags["init"], doc:"The type of the output value." }, + out: { type:runtime, value:0.0, doc:"Counter output value."}, + } + } + + // All elements of the list must belong to the same of three possible types: + // string,cfg,numeric (uint,int,float,double) + list: { + vars: { + in: { type:uint, flags:["src"], doc:"List selection index." }, + list: { type:cfg, doc:"List as a 'cfg' object." }, + out: { type:runtime, doc:"List output value." }, + value:{ type:runtime, flags["mult"], doc:"List 'mult' output per list value." }, + } + } + + add: { + vars: { + in: { type:numeric, flags:["src","mult"], doc:"Operands" }, + otype: { type:string, value:double, flags:["init"], doc:"The type of the output value." }, + out: { type:runtime, flags:["no_src"], doc:"Result" }, + } + } + + preset: { + vars: { + in: { type:string, flags:["src"], doc:"Preset to select." }, + } + } + + + xfade_ctl: { + + poly_limit_cnt: 1, + + // Notes: + // 1. It would be better to setup the source net-proc as a 'in' variable with type 'net'. + // 2. The only purpose for the 'srateSrc' is to get the sample rate of the system. + + vars: { + net: { type:string, doc:"Proc name of the poly network."}, + netSfxId: { type:uint, value: 0, doc:"Label sfx id of the source poly instance."}, + srateSrc: { type:audio, flags:["src"], doc:"Audio source to derive the sample rate."}, + durMs: { type:uint, value:1000, doc:"Cross-fade duration in milliseconds" }, + trigger: { type:all, doc:"Start cross-fade." }, + preset: { type:string, doc:"Preset to apply to the poly network." }, + + gain: { type:coeff, flags:["mult"], value:0, doc:"Cross-fade gain output." } + } + }, + + poly_merge: { + + vars: { + in: { type:audio, flags:["src", "mult"], doc:"Audio input channel." }, + gain: { type:coeff, value: 0, flags:["src", "mult"], doc:"Input channel gain." }, + out_gain: { type:coeff, value: 1, doc:"Output gain" }, + out: { type:audio, doc:"Audio output." }, + } + } + + } diff --git a/src/cwtest/cfg/gutim_full/scriabin/csv_to_score.py b/src/cwtest/cfg/gutim_full/scriabin/csv_to_score.py index b40e128..8b1adba 100644 --- a/src/cwtest/cfg/gutim_full/scriabin/csv_to_score.py +++ b/src/cwtest/cfg/gutim_full/scriabin/csv_to_score.py @@ -243,10 +243,10 @@ def gen_reference( scoreL, out_dir, out_fn ): f.write(s) if r0 and (r0['src'] == 'gutim' and r['src'] != 'gutim'): - print(r['src'],r['oloc'],end=" ") + print(r['src'],f"m{r0['meas']}",f"loc-begin:{r['oloc']}",end=" ") if r0 and (r0['src'] != 'gutim' and r['src'] == 'gutim'): - print(r0['oloc']) + print(f"end:{r0['oloc']}") r0 = r