cwtest/cfg : Many updates

This commit is contained in:
kevin 2024-03-03 16:44:44 -05:00
parent 0dd460f33f
commit a9ddce7877
31 changed files with 79449 additions and 32331 deletions

4
.gitignore vendored
View File

@ -1,6 +1,10 @@
# directories to ignore
libcw
backup
data
data1
data_perf_vel_study
midi_record
.deps
autom4te.cache

View File

@ -0,0 +1,166 @@
{
test: {
audio_midi:
{
record_dir: "/home/kevin/temp/shiau_uen",
//record_dir: "/home/kevin/src/currawong/audio/video_trailer/beck",
//record_dir: "/home/kevin/src/currawong/audio/workshop/beck2",
record_folder: "record",
record_fn_ext: "am",
max_midi_msg_count: 32768,
//midi_timer_period_micro_sec: 15000,
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
audio_in_ch_map: [4 5 ],
audio_out_ch_map: [0, 1 ]
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 0, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 0,
midi_device_list: [
// piano
{
enableFl: true,
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
//midi_out_device: "Scarlett 18i20 USB",
//midi_out_port: "Scarlett 18i20 USB MIDI 1",
midi_out_device: "iRig MIDI 2",
midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 127,
// do not play damper values that are in this range
damper_dead_band_enable_fl: false,
damper_dead_band_min_value: 1,
damper_dead_band_max_value: 30,
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
//pedal: {
// down_id: 127,
// down_vel: 75,
// half_down_id: 64,
// half_down_vel: 43,
// half_up_id: 63,
// half_up_vel: 43
//
//},
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// spirio vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106,112 ]
// vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
//scale_chord_notes_enable_fl: true,
//scale_chord_notes_factor: 0.5,
}
//{ midi_out_device: "PipeWire-RT-Event", midi_out_port: "input" },
],
}
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "/home/kevin/src/cwtest/src/libcw/html/audio_midi",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial:
{
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyACM0", // Serial device name
baud: 38400,
bits: 8,
stop: 1,
parity: no,
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: true,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
groupL: [
{
enableFl: true, // (req)
asyncFl: true,
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
//device: "ICUSBAUDIO7D USB Audio",
enableFl: true, // (req)
label: "main", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
}
}
}

366
src/cwtest/cfg/bkgd.cfg Normal file
View File

@ -0,0 +1,366 @@
{
test: {
preset_sel: {
params: {
//score_fn: "~/src/currawong/projects/score_proc/data/play_file.csv",
score_fn: "~/src/cwtest/src/cwtest/cfg/preset_sel/score/20220423/temp.csv",
//score_fn: "~/src/currawong/audio/workshop/beck2/record_2/play_score.csv",
record_dir: "~/src/cwtest/src/cwtest/cfg/preset_sel/preset_sel_fragments",
record_fn: "m350-458_bkgd_audio_file", //"m302-325",
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/flow_proc_dict.cfg",
crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 12489, // 302 9187, // coda 11499,
end_play_loc: 14726, // 10109, // coda 12426,
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 500.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 0.4,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 0, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 250,
midi_device_list: [
// sampler
{
enableFl: true,
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
midi_out_device: "Scarlett 18i20 USB",
midi_out_port: "Scarlett 18i20 USB MIDI 1",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
/*
pedal: {
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
*/
// spirio 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106, 112 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
// piano
{
enableFl: true,
midi_out_device: "Fastlane",
midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
//midi_out_device: "iRig MIDI 2",
//midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input" ,
pedal: {
up_id: 0,
up_vel: 0,
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 34
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106,112 ]
vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
//vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: true,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: false,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
files: [
{
enableFl: true,
device_label:"my_audio_io_file",
//in_fname: "/home/kevin/temp/coda_0_a_new.wav",
//in_rewindow_on_start_fl: true,
out_fname: "/home/kevin/temp/temp.wav",
out_rewind_on_start_fl: true,
out_ch_count: 6,
}
]
groupL: [
{
enableFl: true, // (req)
asyncFl: true, // (req) Use an asynchronous callback
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
//device: "ICUSBAUDIO7D USB Audio"
enableFl: true, // (req)
meterFl: true, // (opt)
label: "dev", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
//outGroup: "main", // (opt) or sink data before an audio callback is made for that group
},
{
// System device name
device: "my_audio_io_file",
clockSrcDev: "dev",
syncToClockSrcDevInputFl: true, // false = sync to clockSrcDev output
enableFl: true, // (req)
meterFl: false, // (opt)
label: "dev_file", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
//inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow_0: {
framesPerCycle:64,
maxCycleCount:15000,
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
srcFn: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/src/currawong/audio/pianist_excerpt/pianist.wav", eofFl:true } } },
dstFn: { class: audioFileOut, in:{ in:srcFn.out }, args:{ default:{fname:"/home/kevin/temp/audio_flow_out_1.wav"} } },
}
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"dev"} } },
// ivory dry
ivory: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,0,0]}} }
vsl: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:ivory.out }, args:{}}
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out }, args:{}},
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }},
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out }},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }},
//wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out }},
//dry_bal_gain: { class: audio_gain, in:{ in:aud_in.out, gain:wd_bal.inv_out }},
mstr_wet_out_gain: { class: audio_gain, in:{ in:mute_wet.out }}
mstr_dry_out_gain: { class: audio_gain, in:{ in:aud_in.out }},
// apply the wet/dry gain balance
wd_bal: { class: balance },
wd_mix: { class: audio_mix, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, gain0:wd_bal.out, gain1:wd_bal.inv_out }}
// merge the wet/dry signals into a single 4 channel signal
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:wd_mix.out, in2:vsl.out } },
//aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"dev"} } },
//sel_dry: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1,1,1 ]}} }
//merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:aud_in.out } },
af_out: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"dev_file"} } },
//ain_mtr: { class: audio_meter, in:{ in:aud_in.out } }
}
presets: {
dry: { mute_wet: { gain:1 }, wd_bal:{ in:1.0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}

366
src/cwtest/cfg/coda.cfg Normal file
View File

@ -0,0 +1,366 @@
{
test: {
preset_sel: {
params: {
//score_fn: "~/src/currawong/projects/score_proc/data/play_file.csv",
score_fn: "~/src/cwtest/src/cwtest/cfg/preset_sel/score/20220423/temp.csv",
//score_fn: "~/src/currawong/audio/workshop/beck2/record_2/play_score.csv",
record_dir: "~/src/cwtest/src/cwtest/cfg/preset_sel/preset_sel_fragments",
record_fn: "m350-458_coda_audio_file", //"m302-325",
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/flow_proc_dict_coda.cfg",
crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 12431, // 302 9187, // coda 11499,
end_play_loc: 14726, // 10109, // coda 12426,
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 500.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 0.4,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 0, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 250,
midi_device_list: [
// sampler
{
enableFl: true,
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
midi_out_device: "Scarlett 18i20 USB",
midi_out_port: "Scarlett 18i20 USB MIDI 1",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
/*
pedal: {
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
*/
// spirio 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106, 112 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
// piano
{
enableFl: true,
midi_out_device: "Fastlane",
midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
//midi_out_device: "iRig MIDI 2",
//midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input" ,
pedal: {
up_id: 0,
up_vel: 0,
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 34
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106,112 ]
vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
//vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: true,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: false,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
files: [
{
enableFl: true,
device_label:"my_audio_io_file",
//in_fname: "/home/kevin/temp/coda_0_a_new.wav",
//in_rewindow_on_start_fl: true,
out_fname: "/home/kevin/temp/temp.wav",
out_rewind_on_start_fl: true,
out_ch_count: 6,
}
]
groupL: [
{
enableFl: true, // (req)
asyncFl: true, // (req) Use an asynchronous callback
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
//device: "ICUSBAUDIO7D USB Audio"
enableFl: true, // (req)
meterFl: true, // (opt)
label: "dev", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
//outGroup: "main", // (opt) or sink data before an audio callback is made for that group
},
{
// System device name
device: "my_audio_io_file",
clockSrcDev: "dev",
syncToClockSrcDevInputFl: true, // false = sync to clockSrcDev output
enableFl: true, // (req)
meterFl: false, // (opt)
label: "dev_file", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
//inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow_0: {
framesPerCycle:64,
maxCycleCount:15000,
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
srcFn: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/src/currawong/audio/pianist_excerpt/pianist.wav", eofFl:true } } },
dstFn: { class: audioFileOut, in:{ in:srcFn.out }, args:{ default:{fname:"/home/kevin/temp/audio_flow_out_1.wav"} } },
}
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"dev"} } },
// ivory dry
ivory: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,0,0]}} }
vsl: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:ivory.out }, args:{}}
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out }, args:{}},
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }},
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out }},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }},
//wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out }},
//dry_bal_gain: { class: audio_gain, in:{ in:aud_in.out, gain:wd_bal.inv_out }},
mstr_wet_out_gain: { class: audio_gain, in:{ in:mute_wet.out }}
mstr_dry_out_gain: { class: audio_gain, in:{ in:aud_in.out }},
// apply the wet/dry gain balance
wd_bal: { class: balance },
wd_mix: { class: audio_mix, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, gain0:wd_bal.out, gain1:wd_bal.inv_out }}
// merge the wet/dry signals into a single 4 channel signal
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:wd_mix.out, in2:vsl.out } },
//aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"dev"} } },
//sel_dry: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1,1,1 ]}} }
//merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:aud_in.out } },
af_out: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"dev_file"} } },
//ain_mtr: { class: audio_meter, in:{ in:aud_in.out } }
}
presets: {
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}

View File

@ -0,0 +1,75 @@
{
proc_dict:
{
audio_in: {
help: "Audio input device.",
vars: {
device: { type:string, flags:['init'], doc:"Audio device" },
# 'init' inidcates that this value may only be set when the proc instance is created
out: { type:audio, doc:"Audio output" }
}
},
audio_out: {
help: "Audio output device.",
vars: {
device: { type:string, flags:['init'], doc:"Audio device" },
in: { type:audio, doc:"Audio input" }
}
},
audio_gain: {
help: "Audio gain control.",
vars: {
in: { type:audio, doc:"Audio input." },
gain: { type:real, default:1.0, doc:"Gain value." },
out: { type:audio, doc:"Audio output." }
}
},
poly_audio_split: {
help: "Audio poly split.",
vars: {
in: { type:audio, doc: "Audio input." },
out: { type:audio, doc: "Audio output.", duplicate: { port:'in', source:'audio_ch_cnt' }
}
},
poly_audio_merge: {
help: "Audio poly merge.",
in: { type:audio, duplicate: { source:'poly_src'} doc: "Audio input." },
# 'poly_src' duplicate 'in' for each poly instance on the other side of th input connection
out: { type:audio, doc: "Audio output." }
}
},
subnet_dict:
{
multi_ch_gain: {
ports: {
in: { proc: split, var: in }
gain: { proc: gain, var: gain },
out: { proc: merge, var: out },
}
procs: {
split: { type: poly_audio_split },
gain: { type: audio_gain, in: { in:split.out }, poly:{ port: 'in', source: 'audio_ch_count' } },
merge: { type: poly_audio_merge, in: { in:gain.out } }
}
}
}
network_dict:
{
procs: {
ain: { type: audio_input, device:"USB Audio Device" },
gain: { type: mulit_ch_gain, in: { in:ain.out } args: { default:{ gain:0.5 }} }
aout: { type: audio_output, device:"USB Audio Device", in: { in:gain.out } }
}
}
}

View File

@ -0,0 +1,525 @@
{
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."}
}
}
audio_in: {
vars: {
dev_label: { type:string, doc:"Audio device label." },
out: { type:audio, doc:"Audio output" },
}
}
audio_out: {
vars: {
dev_label: { type:string, doc:"Audio device label." },
in: { type:audio, flags:["src"], doc:"Audio input." }
}
}
audioFileIn: {
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." }
eofFl:{ type:bool, eofFl: true, doc:"Set the system 'halt' flag when the audio is completely read."},
}
}
audioFileOut: {
vars: {
fname: { type:string, doc:"Audio file name." },
bits: { type:uint, value:32, doc:"Audio file word width. (8,16,24,32,0=float32)."},
in: { type:audio, flags:["src"], doc:"Audio file input." }
}
}
audio_gain: {
vars: {
in: { type:audio, flags:["src"], doc:"Audio input." },
gain: { type:real, value:1.0, doc:"Gain coefficient." }
out: { type:audio, doc:"Audio output." },
}
}
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." },
}
presets:
{
mute_off: { gain:1 },
mute_on: { gain:0 },
}
}
audio_duplicate: {
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." },
out: { type:audio, doc:"Audio output containing repeat * input channel count channels."}
}
}
audio_merge: {
vars: {
in0: { type:audio, flags:["src"], doc:"First audio input." },
in1: { type:audio, flags:["src"], doc:"Second audio input." },
in2: { type:audio, flags:["src","src_opt"], doc:"Third audio input." },
in3: { type:audio, flags:["src","src_opt"], doc:"Fourth audio input." },
in4: { type:audio, flags:["src","src_opt"], doc:"Fifth audio input." },
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." }
out: { type:audio, doc:"Audio output. Channel count is the sum of the input channel count." },
}
}
audio_mix: {
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." },
out: { type:audio, doc:"Audio output. Channel count is max of the input signal channels." },
}
}
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." },
out: { type:audio, doc:"Audio output." },
}
}
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" },
}
presets: {
a: { hz:220 },
b: { hz:880 },
}
}
pv_analysis: {
vars: {
in: { type:audio, flags:["src"], doc:"Audio input." },
maxWndSmpN: { type:uint, value: 1024, doc:"Maximum window sample count." },
wndSmpN: { type:uint, value: 1024, doc:"Window sample count." },
hopSmpN: { type:uint, value: 128, doc:"Hop sample count." },
hzFl: { type:bool, value: false, doc:"Calculate frequency via the method of phase changeof each bin." },
out: { type:spectrum, doc:"Spectrum output." }
}
presets: {
dry: {
wndSmpN: 1024,
hopSmpN: 128
}
kc: {
wndSmpN: 1024,
hopSmpN: 128
}
a: {
wndSmpN: 1024,
hopSmpN: 128
}
b: {
wndSmpN: 1024,
hopSmpN: 128
}
c: {
wndSmpN: 1024,
hopSmpN: 128
}
d: {
wndSmpN: 1024,
hopSmpN: 128
}
f_1: {
wndSmpN: 1024,
hopSmpN: 128
}
f_2: {
wndSmpN: 1024,
hopSmpN: 128
}
f_3: {
wndSmpN: 1024,
hopSmpN: 128
}
f_4: {
wndSmpN: 1024,
hopSmpN: 128
}
g: {
wndSmpN: 1024,
hopSmpN: 128
}
g_a: {
wndSmpN: 1024,
hopSmpN: 128
}
g_1_a: {
wndSmpN: 1024,
hopSmpN: 128
}
g_1_d: {
wndSmpN: 1024,
hopSmpN: 128
}
}
}
pv_synthesis: {
vars: {
in: { type:spectrum, flags:["src"], doc:"Spectrum input." },
out: { type:audio, doc:"Audio output." }
}
}
spec_dist: {
vars: {
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."},
out: { type:spectrum, doc:"Spectrum output." },
}
presets: {
dry: {
}
kc: {
ceiling: 20.0,
expo: 2.0,
thresh: 65.0,
upr: 0.0,
lwr: 2.0,
mix: 0.0
}
a: {
ceiling: 20.0
expo: 2.0
thresh: 60.0
upr: [ -1.1, -0.99],
lwr: 2.0
mix: 0.0
}
b: {
ceiling: 20.0
expo: 2.0
thresh: [ 77.0, 74.0 ],
upr: -0.5
lwr: [ 3.0, 2.0 ],
mix: 0.0
}
c: {
ceiling: 20.0
expo: 2.0
thresh: 80.0
upr: -0.5
lwr: 5.0
mix: 0.0
}
d: {
ceiling: 20.0
expo: 2.0
thresh: 70.0
upr: [ -3.9, 04.5]
lwr: 4.0
mix: 0.0
}
f_1: {
ceiling: 20.0
expo: 2.0
thresh: 50.0
upr: -3.0
lwr: 1.0
mix: 0.0
}
f_2: {
ceiling: 20.0
expo: 2.0
thresh: 60.0
upr: -3.0
lwr: 1.0
mix: 0.0
}
f_3: {
ceiling: 20.0
expo: 2.0
thresh: 55.0
upr: -3.0
lwr: 1.0
mix: 0.0
}
f_4: {
ceiling: 20.0
expo: 2.0
thresh: 55.0
upr: -5.0
lwr: 1.0
mix: 0.0
}
g: {
ceiling: 40.0
expo: 8.0
thresh: [60.0 64.0]
upr: -0.7
lwr: 8.0
mix: 1.0
}
g_a: {
ceiling: 40.0
expo: 2.0
thresh: [50.0 54.0]
upr: -0.7
lwr: 2.0
mix: 1.0
}
g_1_a: {
ceiling: 20.0
expo: 2.0
thresh: [50.0 54.0]
upr: -0.7
lwr: 8.0
mix: 1.0
}
g_1_d: {
ceiling: [60.0 64.0]
expo: [ 7.0 5.0]
thresh: [40.0 34.0]
upr: [-0.4 -0.3]
lwr: [ 7.0 5.0]
mix: 1.0
}
}
}
compressor: {
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."},
out: { type:audio, doc:"Audio output." },
}
presets: {
dflt: {
igain: 3.0
thresh: 60.0
ratio: 5.0
atk_ms: 5.0
rls_ms: 20.0
wnd_ms:100.0
ogain: 1.0
}
kc: {
bypass: false
igain: 3.0
thresh: 80.0
ratio: 2.0
atk_ms: 20.0
rls_ms: 1000.0
wnd_ms: 200.0
ogain: 1.0
}
input: {
bypass: false
igain: 2.0
thresh: 30.0
ratio: 12.0
atk_ms: 5.0
rls_ms: 20.0
wnd_ms: 20.0
ogain: 0.5
}
dry: {
}
a: {
igain: 6.0
ogain: 1.0
}
b: {
igain: 10.0
ogain: 1.0
}
c: {
igain: 11.0
ogain: 1.0
}
d: {
igain: 9.0
ogain: 1.0
}
f_1: {
igain: 6.0
ogain: 1.0
}
f_2: {
igain: 6.0
ogain: 1.0
}
f_3: {
igain: 6.0
ogain: 1.0
}
f_4: {
igain: 6.0
ogain: 1.0
}
g: {
igain: 10.0
ogain: 0.75
}
g_a: {
igain: 10.0
ogain: 0.75
}
g_1_a: {
igain: 10.0
ogain: 0.75
}
g_1_d: {
igain: 10.0
ogain: 0.75
}
}
}
limiter: {
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."},
out: { type:audio, doc:"Audio output." },
}
presets: {
dflt: {
bypass: false,
igain: 1.0
thresh: 0.9,
ogain: 1.0
}
}
}
dc_filter: {
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."},
out: { type:audio, doc:"Audio output." },
}
presets: {
dflt: {
bypass: false,
gain: 1.0
}
}
}
audio_meter: {
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." },
peakFl: { type:bool, value: false, doc:"Peak output." }
clipFl: { type:bool, value: false, doc:"Clip indicator output."}
}
}
}

View File

@ -9,7 +9,7 @@
perfDirL: [
{ dir:"~/temp/shiau_uen_sf", fname:"play_score.csv" },
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record", fname:"play_score.csv" },
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/score", fname:"temp.csv" }
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full", fname:"temp.csv" }
]

View File

@ -0,0 +1,385 @@
{
test: {
preset_sel: {
params: {
score_fn: "~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
perfDirL: [
{
dir:"~/temp/shiau_uen_sf",
fname:"play_score.csv",
vel_table: []
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record",
fname:"play_score.csv",
vel_table: []
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full",
fname:"temp.csv",
vel_table: [
{ "device":"piano", "name":"ivory" }, // VSL uses Ivory vel table
{ "device":"sampler", "name":"ivory" }
]
}
]
record_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/preset_select",
record_fn: "m1_458",
//record_fn: "m224_234-5461_5691"
//record_fn: "m279_287-8288_8609"
//record_fn: "m357_361-11459_11586"
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/gutim_full/flow_proc_dict.cfg",
vel_table_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/vel_table_perf.json"
vel_table_backup_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/backup"
//crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 1, //0, //12431, // coda 11499,
end_play_loc: 16354, //59, //14726, // coda 12426,
live_mode_fl: false,
enable_recording_fl: false,
midi_record_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record",
midi_record_folder: "shiau_uen",
sf_reset_loc: 1,
score_follower: {
enable_flag: true,
score_csv_fname: "/home/kevin/src/currawong/projects/score_proc/temp.csv",
search_area_locN: 10,
key_wnd_locN: 7,
track_print_fl: false, // print output from the sfTrack unit
track_results_backtrack_fl: false,
dyn_ref: [
{ mark: "silent", level:0, vel:1 },
{ mark:"pppp-", level:1, vel:3 },
{ mark:"pppp", level:2, vel:5 },
{ mark:"pppp+", level:3, vel:7 },
{ mark:"ppp-", level:4, vel:10 },
{ mark:"ppp", level:5, vel:15 },
{ mark:"ppp+", level:6, vel:20 },
{ mark:"pp-", level:7, vel:25 },
{ mark:"pp", level:8, vel:30 },
{ mark:"pp+", level:9, vel:35 },
{ mark:"p-", level:10, vel:40 },
{ mark:"p", level:11, vel:45 },
{ mark:"p+", level:12, vel:50 },
{ mark:"mp-", level:13, vel:55 },
{ mark:"mp", level:14, vel:60 },
{ mark:"mp+", level:15, vel:65 },
{ mark:"mf-", level:16, vel:70 },
{ mark:"mf", level:17, vel:75 },
{ mark:"mf+", level:18, vel:80 },
{ mark:"f-", level:19, vel:85 },
{ mark:"f", level:20, vel:90 },
{ mark:"f+", level:21, vel:95 },
{ mark:"ff", level:22, vel:100 },
{ mark:"ff+", level:23, vel:105 },
{ mark:"fff", level:24, vel:115 },
{ mark:"fff+", level:25, vel:120 },
{ mark:"ffff", level:26, vel:125 },
]
},
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 50.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 1.0,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 400, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 0,
midi_device_list: [
{
// SAMPLER
enableFl: true,
label: "sampler",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
midi_out_device: "Scarlett 18i20 USB",
midi_out_port: "Scarlett 18i20 USB MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
{
//SPIRIO
enableFl: true,
label: "piano",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
midi_out_device: "iRig MIDI 2",
midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
//pedal: {
// up_id: 0,
// up_vel: 0,
// down_id: 127,
// down_vel: 75,
// half_down_id: 64,
// half_down_vel: 43,
// half_up_id: 63,
// half_up_vel: 43
//
//},
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: true,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
groupL: [
{
enableFl: true, // (req)
asyncFl: true,
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
activeFl: true, // (req)
meterFl: true, // (opt)
label: "main", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first six channels: ivory, mic, vsl
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,1,1,1,1 ]}} }
// delay the incoming audio signal to sync it with the piano
sync_delay { class: audio_delay, in: { in:split_in.out }, args:{ default:{ delayMs:400 } }}
// select the first two channels to feed into the transform
sync_split: { class: audio_split, in:{ in:sync_delay.out } args:{ default:{select[1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_split.out } }
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out } },
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out } },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out } },
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out } },
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out } },
// apply the wet/dry gain balance
wd_bal: { class: balance, args{}},
wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out } },
dry_bal_gain: { class: audio_gain, in:{ in:sync_split.out, gain:wd_bal.inv_out } },
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out } }
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out } },
// merge the wet/dry signals into a single 4 channel signal
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, in2:mstr_wet_out_gain.out, in3:mstr_dry_out_gain.out } },
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
//af_merge { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:sync_delay.out } },
//af_out: { class: audioFileOut, in:{ in:af_merge.out }, args:{ default:{fname:"/home/kevin/temp/temp.wav"}}},
}
presets: {
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
*/
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}

View File

@ -0,0 +1,391 @@
{
test: {
preset_sel: {
params: {
//score_fn: "~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
score_fn: "~/src/currawong/projects/score_proc/temp.csv"
perfDirL: [
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1",
fname:"play_score_w_vt.csv",
vel_table:[
],
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck2",
fname:"play_score_w_vt.csv",
vel_table:[
],
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/taka1",
fname:"play_score_w_vt.csv",
vel_table:[
],
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/taka2",
fname:"play_score_w_vt.csv",
vel_table:[
],
},
{
dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data/score",
fname:"temp.csv",
vel_table: [
{ "device":"piano", "name":"spirio" }, // VSL uses Ivory vel table
{ "device":"sampler", "name":"ivory" }
]
}
]
record_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/preset_select",
record_fn: "m1_458_trans_5",
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/gutim_full/flow_proc_dict.cfg",
vel_table_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/vel_table_perf.json"
vel_table_backup_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/backup"
//crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 1, //0, //12431, // coda 11499,
end_play_loc: 16354, //59, //14726, // coda 12426,
live_mode_fl: false,
enable_recording_fl: false,
midi_record_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record",
midi_record_folder: "shiau_uen",
sf_reset_loc: 1,
score_follower: {
enable_flag: false,
score_csv_fname: "/home/kevin/src/currawong/projects/score_proc/temp.csv",
search_area_locN: 10,
key_wnd_locN: 7,
track_print_fl: false, // print output from the sfTrack unit
track_results_backtrack_fl: false,
dyn_ref: [
{ mark: "silent", level:0, vel:1 },
{ mark:"pppp-", level:1, vel:3 },
{ mark:"pppp", level:2, vel:5 },
{ mark:"pppp+", level:3, vel:7 },
{ mark:"ppp-", level:4, vel:10 },
{ mark:"ppp", level:5, vel:15 },
{ mark:"ppp+", level:6, vel:20 },
{ mark:"pp-", level:7, vel:25 },
{ mark:"pp", level:8, vel:30 },
{ mark:"pp+", level:9, vel:35 },
{ mark:"p-", level:10, vel:40 },
{ mark:"p", level:11, vel:45 },
{ mark:"p+", level:12, vel:50 },
{ mark:"mp-", level:13, vel:55 },
{ mark:"mp", level:14, vel:60 },
{ mark:"mp+", level:15, vel:65 },
{ mark:"mf-", level:16, vel:70 },
{ mark:"mf", level:17, vel:75 },
{ mark:"mf+", level:18, vel:80 },
{ mark:"f-", level:19, vel:85 },
{ mark:"f", level:20, vel:90 },
{ mark:"f+", level:21, vel:95 },
{ mark:"ff", level:22, vel:100 },
{ mark:"ff+", level:23, vel:105 },
{ mark:"fff", level:24, vel:115 },
{ mark:"fff+", level:25, vel:120 },
{ mark:"ffff", level:26, vel:125 },
]
},
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
alt_labelL: [ "A","B","C","D","E","F","G" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 50.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 1.0,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 400, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 0,
midi_device_list: [
{
// SAMPLER
enableFl: true,
label: "sampler",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI B",
midi_out_device: "MIDIFACE 2x2",
midi_out_port: "MIDIFACE 2x2 Midi Out 1",
//midi_out_device: "Scarlett 18i20 USB",
//midi_out_port: "Scarlett 18i20 USB MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
{
//SPIRIO
enableFl: true,
label: "piano",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
midi_out_device: "MIDIFACE 2x2",
midi_out_port: "MIDIFACE 2x2 Midi Out 2",
//midi_out_device: "iRig MIDI 2",
//midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
/*
pedal: {
up_id: 0,
up_vel: 0,
down_id: 127,
down_vel: 0,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
*/
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parseBufByteCnt: 1024,
appNameStr: "cwtest",
fileDevName: "file_dev",
fileDevReadAheadMicros: 3000,
testFileLabel: "file_0",
testFileEnableFl: false
file_ports: [
{ "label":"file_0",
//"file": "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1/record_4/midi.mid",
"enable_fl": false },
]
asyncFl: true,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
groupL: [
{
enableFl: true, // (req)
asyncFl: true,
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
//device: "Scarlett 18i20 USB USB Audio",
device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
activeFl: true, // (req)
meterFl: true, // (opt)
label: "main", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
multiPriPresetProbFl: false, // Use probability to select primary multi-preset
multiSecPresetProbFl: true, // Use probability to select secondary multi-preset
multiPresetInterpFl: false, // Interpolate between two selected multi-presets
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first six channels: ivory, mic, vsl
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,1,1,1,1 ]}} }
// delay the incoming audio signal to sync it with the piano
sync_delay { class: audio_delay, in: { in:split_in.out }, args:{ default:{ delayMs:400 } }}
// select the first two channels to feed into the transform
sync_split: { class: audio_split, in:{ in:sync_delay.out } args:{ default:{select[1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_split.out } }
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out } },
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out } },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out } },
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out } },
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out } },
// apply the wet/dry gain balance
wd_bal: { class: balance, args{}},
wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out } },
dry_bal_gain: { class: audio_gain, in:{ in:sync_split.out, gain:wd_bal.inv_out } },
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out } }
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out } },
// merge the wet/dry signals into a single 4 channel signal
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, in2:mstr_wet_out_gain.out, in3:mstr_dry_out_gain.out } },
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
//af_merge { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:sync_delay.out } },
//af_out: { class: audioFileOut, in:{ in:af_merge.out }, args:{ default:{fname:"/home/kevin/temp/temp.wav"}}},
}
presets: {
dry: { pva:dry, sd:dry, cmp:dry, mute_wet:{ gain:0.0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1.0 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1.0 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1.0 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1.0 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1.0 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1.0 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1.0 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1.0 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1.0 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1.0 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1.0 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1.0 } }
}
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,390 @@
{
test: {
preset_sel: {
params: {
score_fn: "~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
perfDirL: [
{ dir: "~/temp/shiau_uen_sf",
fname: "play_score.csv",
vel_table: []
},
{ dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record",
fname: "play_score.csv",
vel_table:[]
},
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full",
fname:"temp.csv",
vel_table: [
{ "device":"piano", "name":"ivory" }, // VSL uses Ivory vel table
{ "device":"sampler", "name":"ivory" }
]
}
]
record_fn: "m1_458",
//record_fn: "m1-7",
record_fn_ext: "txt",
// NOTE: the presets and flow_proc_dict are begin taken from matt_20230610
record_dir: "~/src/cwtest/src/cwtest/cfg/matt_20230610/cfg/preset_sel/preset_sel_fragments",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/matt_20230610/cfg/flow_proc_dict.cfg",
vel_table_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/vel_table_perf.json"
vel_table_backup_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/vel_table/backup"
//crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 1, //0, //12431, // coda 11499,
end_play_loc: 16354, //59, //14726, // coda 12426,
live_mode_fl: false,
enable_recording_fl: false,
midi_record_dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/midi_record",
midi_record_folder: "shiau_uen",
sf_reset_loc: 1,
score_follower: {
"enable_flag": false,
"cm_score_csv_fname": "~/src/cwtest/src/cwtest/cfg/gutim_full/cm_score.csv",
"search_area_locN": 10,
"key_wnd_locN": 7,
},
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 50.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 0.9,
default_master_dry_gain: 0.9,
default_master_sync_delay_ms: 0, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 0,
midi_device_list: [
{
// SAMPLER
enableFl: true,
label: "sampler",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
midi_out_device: "Scarlett 18i20 USB",
midi_out_port: "Scarlett 18i20 USB MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
{
//SPIRIO
enableFl: true,
label: "piano",
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
midi_out_device: "iRig MIDI 2",
midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: true,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
files: [
{
enableFl: true,
device_label:"my_audio_io_file",
in_fname: "/home/kevin/temp/coda_0_d_ivory_vsl.wav",
in_rewind_on_on_start_fl: true,
in_cache_fl: true,
in_use_internal_clock_fl: false, // file devices can be clocked by an internal thread
// or by another device See 'clockSrcDev' and
// 'syncToClockSrcDevInputFl' in the device specifation
out_fname: "/home/kevin/temp/full_recording_with_transforms_20231306.wav",
out_rewind_on_start_fl: true,
out_cache_fl: true,
out_use_internal_clock_fl: false,
out_ch_count: 6,
out_cache_block_sec: 10 // output cache block size
}
],
groupL: [
{
enableFl: true, // (req)
asyncFl: true,
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
activeFl: true, // (req)
meterFl: true, // (opt)
label: "dev", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
},
{
// System device name
device: "my_audio_io_file", //
clockSrcDev: "dev", // (opt) sync to the device 'dev'
syncToClockSrcDevInputFl: false, // (opt) false = sync to clockSrcDev output
activeFl: true, // (req)
meterFl: false, // (opt)
label: "dev_file", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"dev"} } },
// select the first six channels: ivory, mic, vsl
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,1,1,1,1 ]}} }
// delay the incoming audio signal to sync it with the piano
// NOTE THIS DELAY IS NOT USED - IT IS PATCHED AROUND
sync_delay { class: audio_delay, in: { in:split_in.out }, args:{ default:{ delayMs:0 } }}
// select VSL
vsl_split: { class: audio_split, in:{ in:split_in.out } args:{ default:{select[0,0,1,1] }} }
// select the first two channels to feed into the transform
sync_split: { class: audio_split, in:{ in:split_in.out } args:{ default:{select[1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_split.out } }
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out } },
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out } },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out } },
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out } },
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out } },
// apply the wet/dry gain balance
wd_bal: { class: balance, args{}},
wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out } },
dry_bal_gain: { class: audio_gain, in:{ in:sync_split.out, gain:wd_bal.inv_out } },
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out } }
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out } },
// merge the wet/dry signals into a single 4 channel signal
//merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, in2:mstr_wet_out_gain.out, in3:mstr_dry_out_gain.out } },
//aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
// 1/2=ivory-wet 3/4=ivory-dry 5/6=VSL
af_merge { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, in2:vsl_split.out } },
aout: { class: audio_out, in:{ in:af_merge.out }, args:{ default:{dev_label:"dev"} } },
aout_file: { class: audio_out, in:{ in:af_merge.out }, args:{ default:{dev_label:"dev_file"} } },
}
presets: {
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
*/
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}

View File

@ -0,0 +1,24 @@
{
"note_on_ms": 500, // duration of note
"note_off_ms": 250, // duration between notes
"midi_pitch": 60,
"midi_velocity": 64,
"min_pitch": 22,
"max_pitch": 108,
"pitch_incr": 3,
"tables": [
{
"enableFl": true,
"name": "spirio",
"device": "piano", // must be 'piano' or 'sampler'
"table": [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
},
{
"enableFl": true,
"name": "ivory",
"device": "sampler", // must be 'piano' or 'sampler'
"table": [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ]
}
]
}

View File

@ -0,0 +1,356 @@
{
test: {
preset_sel: {
params: {
//score_fn: "~/src/currawong/projects/score_proc/data/play_file.csv",
score_fn: "~/src/cwtest/src/cwtest/cfg/preset_sel/score/20220423/temp.csv",
//score_fn: "~/src/currawong/audio/workshop/beck2/record_2/play_score.csv",
record_dir: "~/src/cwtest/src/cwtest/cfg/preset_sel/preset_sel_fragments",
record_fn: "m350-458", //"m302-325",
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/flow_proc_dict.cfg",
crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 12431, // 302 9187, // coda 11499,
end_play_loc: 14726, // 10109, // coda 12426,
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 500.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 0.4,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 0, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 250,
midi_device_list: [
// sampler
{
enableFl: true,
midi_out_device: "Fastlane",
midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
//midi_out_device: "Scarlett 18i20 USB",
//midi_out_port: "Scarlett 18i20 USB MIDI 1",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
// pedal down velocity input/output mapping
/*
pedal: {
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
*/
// spirio 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106, 112 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
//vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
// piano
{
enableFl: true,
midi_out_device: "Fastlane",
midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
//midi_out_device: "iRig MIDI 2",
//midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input" ,
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 34
vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106,112 ]
//vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: true,
scale_chord_notes_factor: 0.5,
},
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: false,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
files: [
{
enableFl: true,
device_label:"my_audio_io_file",
//in_fname: "/home/kevin/temp/coda_0_a_new.wav",
//in_rewindow_on_start_fl: true,
out_fname: "/home/kevin/temp/temp.wav",
out_rewind_on_start_fl: true,
out_ch_count: 6,
}
]
groupL: [
{
enableFl: true, // (req)
asyncFl: true, // (req) Use an asynchronous callback
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
//device: "ICUSBAUDIO7D USB Audio"
enableFl: true, // (req)
meterFl: true, // (opt)
label: "dev", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
},
{
// System device name
device: "my_audio_io_file",
clockSrcDev: "dev",
syncToClockSrcDevInputFl: false, // false = sync to clockSrcDev output
enableFl: true, // (req)
meterFl: false, // (opt)
label: "dev_file", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
//inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow_0: {
framesPerCycle:64,
maxCycleCount:15000,
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
srcFn: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/src/currawong/audio/pianist_excerpt/pianist.wav", eofFl:true } } },
dstFn: { class: audioFileOut, in:{ in:srcFn.out }, args:{ default:{fname:"/home/kevin/temp/audio_flow_out_1.wav"} } },
}
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
//aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
aud_in: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/temp/coda_0_d_ivory_vsl.wav", eofFl:true } } },
// ivory dry
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,0,0]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:split_in.out }, args:{}}
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out }, args:{}},
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }},
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out }},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }},
//wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out }},
//dry_bal_gain: { class: audio_gain, in:{ in:aud_in.out, gain:wd_bal.inv_out }},
mstr_wet_out_gain: { class: audio_gain, in:{ in:mute_wet.out }}
mstr_dry_out_gain: { class: audio_gain, in:{ in:aud_in.out }},
// apply the wet/dry gain balance
wd_bal: { class: balance },
wd_mix: { class: audio_mix, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, gain0:wd_bal.out, gain1:wd_bal.inv_out }}
// merge the wet/dry signals into a single 4 channel signal
//merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out } },
//aout: { class: audio_out, in:{ in:mstr_wet_out_gain.out }, args:{ default:{dev_label:"main"} } },
//af_out: { class: audioFileOut, in:{ in:merge.out }, args:{ default:{fname:"/home/kevin/temp/coda_0_a_new.wav"}}},
aout: { class: audio_out, in:{ in:mstr_wet_out_gain.out }, args:{ default:{dev_label:"dev"} } },
//sel_dry: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1,1,1 ]}} }
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:aud_in.out } },
af_out: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"dev_file"} } },
//ain_mtr: { class: audio_meter, in:{ in:aud_in.out } }
}
presets: {
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}

View File

@ -0,0 +1,330 @@
{
test: {
preset_sel: {
params: {
//score_fn: "~/src/currawong/projects/score_proc/data/play_file.csv",
score_fn: "~/src/cwtest/src/cwtest/cfg/preset_sel/score/20220423/temp.csv",
//score_fn: "~/src/currawong/audio/workshop/beck2/record_2/play_score.csv",
record_dir: "~/src/cwtest/src/cwtest/cfg/preset_sel/preset_sel_fragments",
//record_fn: "preset_sel_20220423",
//record_fn: "preset_sel_20220507",
record_fn: "unknown",
//record_fn: "m302-325",
//record_fn: "m350-458",
//record_fn: "m1-7",
record_fn_ext: "txt",
flow_proc_dict_fn: "~/src/cwtest/src/cwtest/cfg/flow_proc_dict.cfg",
crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 0, //0, //12431, // coda 11499,
end_play_loc: 0, //59, //14726, // coda 12426,
presets: {
preset_labelL: [ "dry", "a", "b", "c", "d", "f1", "f2", "f3", "f4", "g", "ga", "g1a", "g1d" ],
default_gain: 1.0,
default_wet_dry_gain: 0.5,
default_fade_ms: 50.0,
default_preset: "dry",
default_master_wet_in_gain: 1.0,
default_master_wet_out_gain: 1.0,
default_master_dry_gain: 1.0,
default_master_sync_delay_ms: 400, // spirio 400
},
midi_play_record: {
max_midi_msg_count: 32768,
midi_timer_period_micro_sec: 15000,
all_off_delay_ms: 2500, // delay after stop time to turn off all notes
log_in_flag: false,
log_out_flag: false,
half_pedal_flag: false,
min_damper_down_time_ms: 250,
midi_device_list: [
// piano
{
enableFl: true,
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI B",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 1",
midi_out_device: "Scarlett 18i20 USB",
midi_out_port: "Scarlett 18i20 USB MIDI 1",
//midi_out_device: "PipeWire-RT-Event",
//midi_out_port: "input",
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
// spirio 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106, 112 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
scale_chord_notes_enable_fl: false,
scale_chord_notes_factor: 0.05,
},
{
enableFl: true,
//midi_out_device: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//midi_out_device: "MIDIFACE 2x2",
//midi_out_port: "MIDIFACE 2x2 Midi Out 2",
midi_out_device: "iRig MIDI 2",
midi_out_port: "iRig MIDI 2 MIDI 1",
//midi_out_device: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
// p4-
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
vel_table: [ 1, 3, 5, 7, 9 , 12, 15, 18, 22, 26, 30, 34, 36, 40, 44, 48, 52, 56, 60, 64, 66, 72, 76, 80, 83 ]
//vel_table: [ 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 36, 40, 44, 48, 52, 56, 60, 65, 70, 75, 80, 87, 94, 102 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 54, 58, 58, 64, 68, 72, 76, 80, 84, 98, 102 ]
//vel_table: [ 1, 4, 10, 12, 12, 18, 24, 24, 30, 36, 36, 44, 48, 52, 58, 64, 64, 70, 76, 82, 88, 94,100,106,112 ]
//vel_table: [ 1, 5 10, 16, 21, 26, 32, 37, 42, 48, 53, 58, 64, 69, 74, 80, 85, 90, 96,101,106,112,117,122,127 ] ,
// pedal down velocity input/output mapping
pedal: {
up_id: 0,
up_vel: 0,
down_id: 127,
down_vel: 75,
half_down_id: 64,
half_down_vel: 43,
half_up_id: 63,
half_up_vel: 43
},
force_damper_down_fl: false,
force_damper_down_threshold: 35,
force_damper_down_velocity: 80,
scale_chord_notes_enable_fl: true,
scale_chord_notes_factor: 0.5,
},
//{ midi_out_device: "PipeWire-RT-Event", midi_out_port: "input" },
],
}
},
io: {
callbackMutexTimeOutMs: 100,
}
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/preset_sel",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
uiCfgFn: "ui.cfg", // default UI resource description
asyncFl: false
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: false,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
asyncFl: false,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
groupL: [
{
enableFl: true, // (req)
asyncFl: true,
label: "main", // (req) User label
id: 0, // (req) User id (can also be set at runtime)
srate: 48000, // (req) Sample rate used by all devices in this group
dspFrameCnt: 64 // (req) Size of DSP processing buffers
}
],
deviceL: [
{
// System device name
device: "Scarlett 18i20 USB USB Audio",
//device: "USB Audio CODEC USB Audio",
//device: "HDA Intel PCH CS4208 Analog",
enableFl: true, // (req)
meterFl: true, // (opt)
label: "main", // (req) User label
userId: 0, // (opt) User id (can also be set at runtime)
framesPerCycle: 512, // (req) Samples per audio device cycle
cycleCnt: 3, // (req) Count of device cycle buffers.
inGroup: "main", // (opt) All devices in a group must be 'ready' to source
outGroup: "main", // (opt) or sink data before an audio callback is made for that group
}
]
},
socket: {
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
flow: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 15000, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first six channels: ivory, mic, vsl
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1,1,1,1,1 ]}} }
// delay the incoming audio signal to sync it with the piano
sync_delay { class: audio_delay, in: { in:split_in.out }, args:{ default:{ delayMs:400 } }}
// select the first two channels to feed into the transform
sync_split: { class: audio_split, in:{ in:sync_delay.out } args:{ default:{select[1,1]}} }
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_split.out } }
// wet signal processing chain
wet_in_gain: { class: audio_gain, in:{ in:mstr_wet_in_gain.out } },
pva: { class: pv_analysis, in:{ in:wet_in_gain.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc, args:{ bypass:false } },
pvs: { class: pv_synthesis, in:{ in:sd.out } },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc, args:{ bypass:false } },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out } },
//wet_out_gain: { class: audio_gain, in:{ in:pvs.out } },
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out } },
// apply the wet/dry gain balance
wd_bal: { class: balance, args{}},
wet_bal_gain: { class: audio_gain, in:{ in:mute_wet.out, gain:wd_bal.out } },
dry_bal_gain: { class: audio_gain, in:{ in:sync_split.out, gain:wd_bal.inv_out } },
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out } }
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out } },
// merge the wet/dry signals into a single 4 channel signal
merge: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out, in2:mstr_wet_out_gain.out, in3:mstr_dry_out_gain.out } },
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
//af_merge { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:sync_delay.out } },
//af_out: { class: audioFileOut, in:{ in:af_merge.out }, args:{ default:{fname:"/home/kevin/temp/temp.wav"}}},
}
presets: {
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
/*
dry: { mute_wet: { gain:0 } },
a: { sd:a, cmp:a, mute_wet:{ gain:1 } },
b: { sd:b, cmp:b, mute_wet:{ gain:1 } },
c: { sd:c, cmp:c, mute_wet:{ gain:1 } },
d: { sd:d, cmp:d, mute_wet:{ gain:1 } },
f1: { sd:f_1, cmp:f_1, mute_wet:{ gain:1 } },
f2: { sd:f_2, cmp:f_2, mute_wet:{ gain:1 } },
f3: { sd:f_3, cmp:f_3, mute_wet:{ gain:1 } },
f4: { sd:f_4, cmp:f_4, mute_wet:{ gain:1 } },
g: { sd:g, cmp:g, mute_wet:{ gain:1 } },
ga: { sd:g_a, cmp:g_a, mute_wet:{ gain:1 } },
g1a: { sd:g_1_a, cmp:g_1_a, mute_wet:{ gain:1 } },
g1d: { sd:g_1_d, cmp:g_1_d, mute_wet:{ gain:1 } }
*/
/*
dry: { mute_wet: { gain:0 } },
a: { pva:a, sd:a, mute_wet:{ gain:1 } },
b: { pva:b, sd:b, mute_wet:{ gain:1 } },
c: { pva:c, sd:c, mute_wet:{ gain:1 } },
d: { pva:d, sd:d, mute_wet:{ gain:1 } },
f1: { pva:f_1, sd:f_1, mute_wet:{ gain:1 } },
f2: { pva:f_2, sd:f_2, mute_wet:{ gain:1 } },
f3: { pva:f_3, sd:f_3, mute_wet:{ gain:1 } },
f4: { pva:f_4, sd:f_4, mute_wet:{ gain:1 } },
g: { pva:g, sd:g, mute_wet:{ gain:1 } },
ga: { pva:g_a sd:g_a, mute_wet:{ gain:1 } },
g1a: { pva:g_1_a sd:g_1_a, mute_wet:{ gain:1 } },
g1d: { pva:g_1_d sd:g_1_d, mute_wet:{ gain:1 } }
*/
}
}
}
}