cwtest/src/cwtest/cfg/main.cfg

2299 lines
81 KiB
INI

{
a:1,
b:2,
c:[1.23,4.56,7.89],
datasets: {
dataL: [
{ name: mnist, inDir: "~/src/datasets/mnist" }
]
}
test: {
variadicTpl: {},
thread: {},
kbTest1: {},
kbTest2: {},
kbTest3: {},
spscBuf: {},
spscQueueTmpl: {},
nbmpscQueue: {
blkN: 4,
blkByteN: 1024,
testDurMs: 10000,
threadN: 10,
out_fname: "~/temp/temp.txt"
}
websockSrv: {
physRootDir: "~/src/cwtest/src/libcw/html/websockSrvTest", // path to 'dfltHtmlPageFn'
dfltHtmlPageFn: "test_websocket.html", // websockets enabled HTML/JS app
port: 5687, // websocket port
rcvBufByteN: 128, // incoming msg's larger than this will be broken into multiple parts
xmtBufByteN: 128, // outgoing msg's larger than this will be broken into multiple parts
queueBlkCnt: 3, // count of memory blocks in the non-blocking queue (See: cwNbMpScQueue)
queueBlkByteCnt: 4096, // size of each non-blocking memory block
timeOutMs: 50, // milliseconds to block waiting for incoming websock messages
},
uiTest: {
ui: {
physRootDir: "~/src/cwtest/src/libcw/html/uiTest",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
queueBlkCnt: 8,
queueBlkByteCnt: 8192,
extraLogsFl: true,
fmtBufByteN: 4096,
websockTimeOutMs: 50, // max time out while blocking for a websock event
uiCfgFn: "ui.cfg", // default UI resource description
idleMsgPeriodMs: 50
},
listEle: {
row: {
check: { name: playCheckId, title:"Play", value: false },
select: { name: preMenuId, title:"Preset",
children:
{
option:{ name: psOpt1, title:"Sel 1" },
option:{ name: psOpt2, title:"Sel 2" },
option:{ name: psOpt3, title:"Sel 3" }
},
}
},
}
},
serialSrv: {},
midiDeviceReport: {},
// Test the MIDI file input device. See cwMidiDeviceTest.cpp
// Compares the time between MIDI events in a file to the time between
// the same events from the file device.
midiDevice: {
appNameStr: "test_app",
fileDevName: "file_dev",
fileDevReadAheadMicros: 3000,
parseBufByteCnt: 1024,
enableBufFl:true,
bufferMsgCnt:4096,
filterRtSenseFl:true
testFileLabel: "file_0", //
testFileEnableFl: true,
file_ports: [
{ "label":"file_0",
"file": "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1/record_4/midi.mid",
"enable_fl": true },
{ "label":"file_1",
"file": "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1/record_5/midi.mid"
"enable_fl": false }
]
},
midifile:
{
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_2_f_sh_minor.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_2_f_sh_minor.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_3_b_minor.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_3_b_minor.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_9_g_sh_minor.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op8_9_g_sh_minor.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op42_7_f_minor.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op42_7_f_minor.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_1_allegro fantastico.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_1_allegro fantastico.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_2_allegretto.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_2_allegretto.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_3_molta_vivace.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op65_3_molta_vivace.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op56_4.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op56_4.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op49_1.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_etude_op49_1.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_1.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_1.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_2.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_2.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_3.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_3.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_4.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_4.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_5.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op74_5.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op67_1.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op67_1.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op67_2.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op67_2.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_sonate_7_op64.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_sonate_7_op64.csv" }
csv: { midiFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op48_3.mid",
csvFn:"~/src/cwtest/src/cwtest/cfg/gutim_full/scriabin/scriabin_prelude_op48_3.csv" }
}
midifile1:
{
// rpt_beg_end: print the first and last 'msg' count msgs in 'midi_fname'.
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_5/midi.mid",
msg_cnt: 10,
note_on_only_fl: true,
},
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_7/midi.mid",
msg_cnt: 5,
note_on_only_fl: true,
},
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_11/midi.mid",
msg_cnt: 5,
note_on_only_fl: true,
},
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_13/midi.mid",
msg_cnt: 5,
note_on_only_fl: true,
},
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_17/midi.mid",
msg_cnt: 5,
note_on_only_fl: true,
},
rpt_beg_end: {
midi_fname: "~/temp/shiau_uen/record_23/midi.mid",
msg_cnt: 5,
note_on_only_fl: true,
},
}
midifile0:
{
// rpt: Print a MIDI file report for the listed midi files.
// rpt: { midiFn:"~/media/audio/midi/988-v25.mid" }
// rpt: { midiFn:"~/src/currawong/audio/workshop/demare2/record_5/midi.mid"}
// csv: Convert MIDI files to CSV files
// csv: { midiFn:"~/src/currawong/audio/workshop/demare2/record_5/midi.mid", csvFn: "midi.csv" }
// csv: { midiFn:"~/src/currawong/site/web_part_selection/GUTIM part 1 no colors, single system all sections correcting staves distance.mid",
// csvFn: "~/temp/midi.csv" }
// batch_convert: Convert all the MIDI files in
// <io_dir>/<session_dir>/record_<take_number>/midi.mid to CSV files.
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "beck1",
take_begin: 0,
take_end: 9,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "beck2",
take_begin: 0,
take_end: 9,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "taka1",
take_begin: 0,
take_end: 10,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "taka2",
take_begin: 0,
take_end: 16,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "nonken1",
take_begin: 0,
take_end: 18,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "nonken2",
take_begin: 0,
take_end: 12,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "demare1",
take_begin: 0,
take_end: 13,
print_warnings_flag: false
},
batch_convert: {
io_dir: "~/src/currawong/audio/workshop",
session_dir: "demare2",
take_begin: 0,
take_end: 10,
print_warnings_flag: false
},
},
audioDevTest: {
srate: 48000,
bufN: 3,
framesPerCycle: 512,
inDev: "MBox USB Audio",
outDev: "MBox USB Audio",
meterMs: 50,
amHz: 1,
amMaxGain: 0.8
},
audioDevFileTest: {
//inAudioFname: "~/temp/temp_sine_100_hz.wav",
inAudioFname: "~/temp/piano_0.wav",
outAudioFname: "~/temp/test.wav",
framesPerCycle:1024,
cycleCnt:100,
},
audioDevAlsa: {},
audioDevRpt: {}, // print a list of audio device
audiofile:
{
rpt: { fn:"~/src/cwtest/src/cwtest/cfg/main_cfg_data/audio_32_float.wav", begIdx: 0, frmCnt: 10 }
},
afop:
{
// Generate sine signals
sine: { enable_fl:true, fn:"~/temp/temp_sine_100_hz.wav", srate: 48000, bits: 0, hz: 100, gain: 0.5, secs: 10.0 },
sine: { enable_fl:true, fn:"~/temp/temp_sine_1000_hz.wav", srate: 48000, bits: 0, hz: 1000, gain: 0.5, secs: 10.0 },
// Mix audio files
mix: { enable_fl:true, outFn: "~/temp/temp_mix.wav", outBits: 0,
srcL: [
{ gain: 0.6, src:"~/temp/temp_sine_100_hz.wav" },
{ gain: 0.4, src:"~/temp/temp_sine_1000_hz.wav" }
]}
// Cut sections of audio files into separate audio files.
select_to_file: { enable_fl:true,
outDir: "~/temp",
markerFn: "~/temp/select_marker.txt" // write an Audacity marker file with beg/end fade in/out times
outBits:32,
fadeInSec: 0.1,
fadeInPreFl: true, // start selection at 'begSec-fadeInSec' else start at 'begSec'
fadeOutSec: 0.1,
fadeOutPostFl: true, // end selection at 'endSec+fadeOutSec' else end end at 'endSec'
srcFn: "~/temp/temp_mix.wav"
selectL: [
{ begSec: 1.0, endSec: 2.0, dst: "temp_cut0.wav", /* src:"src.wav" */ },
{ begSec: 3.0, endSec: 4.0, dst: "temp_cut1.wav", /* src:"src.wav" */ },
]}
// Extract a section of source audio, apply fade in/out ramps, and mix it into a destination file.
cut_and_mix:
{
enable_fl: true,
dstFn: "~/temp/test_xfade.wav",
dstBits: 32,
srcDir: "~/temp",
crossFadeSec: 0.5,
argL: [
// Include "srcBegFadeSec" and "srcEndFadeSec" to set the begin/end cross-fade duration.
{ srcBegSec: 1.0, srcEndSec: 2.0, srcFn: "temp_sine_100_hz.wav", dstBegSec:0.0, gain:1.0 },
{ srcBegSec: 3.0, srcEndSec: 4.0, srcFn: "temp_sine_1000_hz.wav", dstBegSec:0.5, gain:1.0 }
]
},
// Given a set of overlapping source files of identical length solo a given source during a specified time interval.
parallel_mix:
{
enable_fl: true,
dstFn: "~/temp/test_pmix.wav",
dstBits: 32,
srcDir: "~/temp",
argL: [
{ srcBegSec: 0.0, srcEndSec: 1.0, srcFn: "temp_sine_100_hz.wav", fadeOutSec:0.5, gain:1.0 },
{ srcBegSec: 0.5, srcEndSec: 3.0, srcFn: "temp_sine_1000_hz.wav", fadeOutSec:0.5, gain:1.0 }
{ srcBegSec: 2.5, srcEndSec: 5.0, srcFn: "temp_mix.wav", fadeOutSec:0.5, gain:1.0 }
]
},
// Convolve an audio file with an impulse response
convolve:
{
enable_fl: true,
dstFn: "~/temp/temp_convolve.wav",
dstBits: 32,
srcFn: "~/temp/test_pmix.wav",
irFn: "~/src/cwtest/src/cwtest/cfg/main_cfg_data/freeverb3_IR_theater.wav",
irScale: 0.25,
},
// Synthesize a signal.
generate:
{
enable_fl: true,
dstFn: "~/temp/temp_click.wav",
dstBits: 32,
dstSrate: 48000,
dstSecs: 711.0, // file duration in secs
op: "click", // select the operation
sine: { gain:0.7, hertz:440.0 },
click: { gain:0.8, decay:0.9, msL:[ 61000,117000,181000,241500,280500,312000,357300,419800,480000,535500,584200,646100,678000,709500 ] }
},
// This is the interface to the Currawong online transform audition demo.
transform_app:
{
srcDir: "~/temp/kc_record/xform_only/cut", // location of 'wet' source files
dryFn: "~/temp/kc_record/xform_only/cut/concert.wav", // dry source file
dstPreFn: "~/temp/test_xform_app.wav", // the output file prior to reverb
dstRevFn: "~/temp/test_xform_app_rev.wav", // the output file with reverb
dstBits: 32,
irEnableFl: false,
irScale: 0.25,
irFn: null, //"~/media/audio/IR/freeverb3/101-cup.wav"
argL: [
{ srcBegSec: 0.0, srcEndSec: 4.2, srcFn: "a.wav", fadeOutSec:0.5, wetGain:0.3 },
{ srcBegSec: 4.2, srcEndSec: 8.6, srcFn: "b.wav", fadeOutSec:0.5, wetGain:0.3 },
{ srcBegSec: 8.6, srcEndSec: 15.67, srcFn: "c.wav", fadeOutSec:0.5, wetGain:0.3 },
{ srcBegSec: 15.67, srcEndSec: 17.98, srcFn: "d.wav", fadeOutSec:0.0, wetGain:0.3 },
]
},
},
audio_file_proc: {
srcFn: "/home/kevin/src/currawong/audio/GUTIM_All_20200711_96k_float.wav",
dstFn: "/home/kevin/temp/audio_out.wav",
cfg: "tremelo",
recordChN: 0,
recorder: {
enableFl: true,
frameN: 1024,
sigN: 10,
filename: "~/temp/temp.csv",
colLabelL: [ "mean0", "mean1", "db0", "db1", "db2", "db3", "db4" ]
}
tremelo: {
wndSmpN: 1024,
hopSmpN: 1024,
program: "tremelo",
args: {
hz: 1.0
depth: 1.0
}
}
pvoc: {
wndSmpN: 512,
hopSmpN: 512,
program: "pvoc",
args: {
procSmpN: 512,
wndSmpN: 2048,
hopSmpN: 512
}
}
}
pvoc_file_proc: {
srcFn: "/home/kevin/temp/audio.wav",
dstFn: "/home/kevin/temp/audio_out.wav",
program: "spec_dist",
recordChN: 2,
recorder: {
enableFl: false,
frameN: 1024,
sigN: 10,
filename: "~/temp/temp.csv",
colLabelL: [ "mean0", "mean1", "db0", "db1", "db2", "db3", "db4", "db5", "db6" ]
}
pvoc_template: {
wndSmpN: 2048, // required FT window size in samples
hopSmpN: 512, // required Sample offset between successive FT windows
procSmpN: 512, // required Output samples for each FT frame processed
presetLabel: preset_1, // required
inGain: 1.0, // optional
outGain: 1.0, // optional
function: pvoc_template,
args:
{
foo: 1,
blah: 2,
}
}
spec_dist: {
wndSmpN: 2048,
hopSmpN: 512,
procSmpN: 512,
inGain: 1.0, // optional
outGain: 1.0, // optional
function: spec_dist,
args: {
ceiling: 30.0,
expo: 2.0,
thresh: 54.0,
upr: -0.7,
lwr: 2.0,
mix: 0.0
}
}
}
// Create a server to listen on a known port
sockMgrSrvTest: {
protocol: tcp, // tcp | udp
//nicDev: // optional NIC device
localPort: 5688,
},
sockMgrClientTest: {
//nicDev: // optional NIC device
protocol: tcp,
localPort: 5687,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5688,
}
// Interactive send/recv tester
socketUdp: {
localPort: 5687,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5688
},
socketTcpClient: {
localPort: 5687,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5688
dgramFl: false,
serverFl: false,
timeOutMs: 100
},
socketTcpServer: {
localPort: 5688,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5687,
dgramFl: false,
serverFl: true,
timeOutMs: 100
},
socketSrvUdp: {
localPort: 5688,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5687,
},
socketSrvTcp: {
localPort: 5688,
remoteAddr: "127.0.0.1", // localhost
remotePort: 5687,
},
socketMdns: {},
dnssd: {},
eucon: {},
dirEntry: {
path: "~/src/cwtest/src/cwtest/cfg/test",
attrL: [ "file","dir","link","hidden","cur_dir","parent_dir","full_path","recurse","recurse_links"]
},
io: {
ui: {
enableFl: true,
asyncFl:false,
physRootDir: "/home/kevin/src/cwtest/src/libcw/html/ioTest",
dfltPageFn: "index.html",
port: 5687,
rcvBufByteN: 2048,
xmtBufByteN: 2048,
fmtBufByteN: 4096,
uiCfgFn: "ui.cfg" // default UI resource description
queueBlkCnt: 8,
queueBlkByteCnt: 32768,
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
extraLogsFl: false,
},
serial: {
enableFl: false,
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enableFl: true,
asyncFl: false,
label: "port1", // User label
device: "/dev/ttyACM0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: no
}
],
},
midi: {
enableFl: true,
asyncFl: true,
parseBufByteCnt: 1024,
appNameStr: "cwtest",
fileDevName: "file_dev",
fileDevReadAheadMicros: 3000,
testFileLabel: "file_0",
testFileEnableFl: false
enableBufFl:true,
bufferMsgCnt:4096,
filterRtSenseFl:true
file_ports: [
{ "label":"file_0",
//"file": "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1/record_4/midi.mid",
"enable_fl": false },
]
},
audio: {
enableFl: true,
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: "MBox USB Audio"
//device: "sof-hda-dsp"
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: {
enableFl: true,
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [
{
enableFl: true, // (req)
asyncFl: false, // (req)
label: "sock0", // (req)
userId: 0, // (opt)
port: 5687, // (req) This sockets port number
timeOutMs: 50, // (req) Timeout used for blocking sockets.
// Attributes:
// blocking or non-blocking,
// udp or tcp,
// listen, broadcast
// reuse_addr, reuse_port, multi_cast_ttl, multi_cast_loop
// stream
attrL: [ udp, blocking ],
// Automatically connect to this remote socket.
// remoteAddr: "192.168.0.10", // (opt)
// remotePort: 5687 // (opt)
},
{
enableFl: true, // (req)
asyncFl: false, // (req)
label: "sock1", // (req)
userId: 1, // (opt)
port: 5688, // (req) This sockets port number
timeOutMs: 50, // (req) Timeout used for blocking sockets.
attrL: [ udp, blocking ],
}
]
}
},
io_minimal: {
},
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,
label: "piano",
//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: "PipeWire-RT-Event",
//midi_out_port: "input",
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,
// 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: {
enableFl: true,
asyncFl:false,
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
queueBlkCnt: 8,
queueBlkByteCnt: 32768,
idleMsgPeriodMs: 50, // period without messages before an idle message is generated
extraLogsFl: false,
},
serial:
{
enableFl: false,
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: {
enableFl: true,
asyncFl: true,
parseBufByteCnt: 1024,
appNameStr: "cwtest",
fileDevName: "file_dev",
fileDevReadAheadMicros: 3000,
testFileLabel: "file_0",
testFileEnableFl: false
enableBufFl:true,
bufferMsgCnt:4096,
filterRtSenseFl:true
file_ports: [
{ "label":"file_0",
//"file": "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1/record_4/midi.mid",
"enable_fl": false },
]
},
audio: {
enableFl: true,
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",
device: "MBox USB Audio",
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: {
enableFl: false,
asyncFl: false,
maxSocketCnt: 10,
recvBufByteCnt: 4096,
threadTimeOutMs: 50,
socketL: [],
}
}
b23Tree:
{
},
mnist: {
desc: "Print the MNIST images to an SVG/HTML file.",
inDir: "~/src/datasets/mnist",
outHtmlFn: "~/temp/image_svg_0.html"
},
dataset_wtr: {
outFn: "~/temp/temp.ds"
},
dataset_rdr: {
inFn: "~/temp/temp.ds",
cacheByteN: 146,
},
dataset_adapter: {
inFn: "~/temp/temp.ds",
cacheByteN: 154,
batchN: 3,
},
dataset: {
desc: "Read MNIST native file -> write dataset file -> read datasetfile -> write SVG file",
inDir: "~/src/datasets/mnist",
dsFn: "~/temp/temp_dataset.ds",
outHtmlFn: "~/temp/image_svg.html",
batchN: 3500,
cacheByteN: 2800000
},
svg: {
desc:"Create an SVG/HTML test file.",
notes:"If no CSS file name is given then the style information will be written inline.",
outHtmlFn: "~/temp/test_svg.html",
outCssFn: "~/temp/test_svg.css"
},
// Convert the the 'am' files in 'inDir' to MIDI and CSV files
// named 'midi.mid' and 'midi.csv'.
// The 'beg_loc' and 'end_loc' will be written to a file named 'meta.cfg'.
// All output files are written in the same directory as the 'am' files.
am_to_midi_file: [
{ enable_fl: false, player_name: "beck", prefix_label:"beck_1", sess_numb:1, beg_loc: 4232, end_loc: 4707, dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/data/beck1" },
{ enable_fl: false, player_name: "beck", prefix_label:"beck_2", sess_numb:2, beg_loc: 4232, end_loc: 4707, dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/data/beck2" },
{ enable_fl: false, player_name: "taka", prefix_label:"taka_1", sess_numb:1, beg_loc: 4232, end_loc: 4707, dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/data/taka1" },
{ enable_fl: false, player_name: "taka", prefix_label:"taka_2", sess_numb:2, beg_loc: 4232, end_loc: 4707, dir: "~/src/cwtest/src/cwtest/cfg/gutim_full/data/taka2" },
{ enable_fl: false, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 120, end_loc: 146, dir: "~/temp/shiau_uen/segment_0" },
{ enable_fl: false, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 888, end_loc: 929, dir: "~/temp/shiau_uen/segment_1" },
{ enable_fl: false, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 2287, end_loc: 2454, dir: "~/temp/shiau_uen/segment_2" },
{ enable_fl: false, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 3765, end_loc: 3883, dir: "~/temp/shiau_uen/segment_3" },
{ enable_fl: false, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 5407, end_loc: 5462, dir: "~/temp/shiau_uen/segment_4" },
{ enable_fl: true, player_name: "ding", prefix_label:"ding_1", sess_numb:1, beg_loc: 6608, end_loc: 6677, dir: "~/temp/shiau_uen/segment_5" }
],
flow_proc_dict: {
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, srcFl:true, doc:"Audio input." }
}
}
audioFileIn: {
vars: {
fname: { type:string, doc:"Audio file name." },
out:{ type:audio, doc:"Audio file output" },
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, srcFl:true, doc:"Audio file input." }
}
}
audio_gain: {
vars: {
in: { type:audio, srcFl:true, doc:"Audio input." },
gain: { type:real, value:1.0, doc:"Gain coefficient." }
out: { type:audio, doc:"Audio output." },
}
}
audio_split: {
vars: {
in: { type:audio, srcFl:true, 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, srcFl:true, 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, srcFl:true, doc:"First audio input." },
in1: { type:audio, srcFl:true, doc:"Second 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, srcFl:true, doc:"First audio input." },
in1: { type:audio, srcFl:true, 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 the sum of the input channel count." },
}
}
audio_delay: {
vars: {
in: { type:audio, srcFl:true, 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, srcFl:true, doc:"Audio input." },
hopSmpN: { type:uint, value: 128, doc:"Hop sample count." },
wndSmpN: { type:uint, value: 512, doc:"Window sample count." },
hzFl: { type:bool, value: false, doc:"Calculate frequency via the method of phase changeof each bin." },
out: { type:spectrum, doc:"Spectrum output." }
}
}
pv_synthesis: {
vars: {
in: { type:spectrum, srcFl:true, doc:"Spectrum input." },
out: { type:audio, doc:"Audio output." }
}
}
spec_dist: {
vars: {
in: { type:spectrum, srcFl:true, doc:"Spectrum input." },
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, srcFl: 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: 0.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
}
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.25
}
g_a: {
igain: 10.0
ogain: 0.25
}
g_1_a: {
igain: 10.0
ogain: 0.25
}
g_1_d: {
igain: 10.0
ogain: 0.25
}
}
}
}
flow_test: {
flow_proc_fname: "~/src/cwtest/src/cwtest/cfg/flow_proc_dict.cfg",
framesPerCycle:64,
maxCycleCount:15000,
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
printNetworkFl: true, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
procs: {
srcFn: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/temp/temp_sine_100_hz.wav", eofFl:false, on_off:true } } },
wet_in_gain: { class: audio_gain, in:{ in:srcFn.out }, args:{}},
sd_poly: {
class: poly,
args: { default:{ count:3 }}
network: {
procs: {
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 },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc },
}
presets:{}
}
}
xfade_ctl: { class: xfade_ctl, in:{ srateSrc:sd_poly.cmp.out }, args:{ default:{ net:sd_poly, durMs:1000 }} },
wet_out_gain: { class: audio_gain, in:{ in_:sd_poly.cmp_.out, gain_:xfade_ctl.gain_ }, args:{}},
dstFn: { class: audioFileOut, in:{ in:wet_out_gain.out }, args:{ default:{fname:"/home/kevin/temp/audio_flow_out.wav"} } },
}
}
}
flow_pv: {
framesPerCycle:64,
maxCycleCount:15000,
network: {
srcFn: { class: audioFileIn, argLabel:"default", args:{ default:{fname:"/home/kevin/temp/audio.wav", eofFl:true } } },
pva: { class: pv_analysis, in:{ in:srcFn.out }, args:{ default:{ wndSmpN:512, hopSmpN:64, hzFl:false } } },
pvs: { class: pv_synthesis, in:{ in:pva.out }, args:{ default:{ } } },
dstFn: { class: audioFileOut, in:{ in:pvs.out }, args:{ default:{fname:"/home/kevin/temp/audio_flow_out.wav"} } },
}
}
flow_spec_dist: {
framesPerCycle: 64, // time-domain audio cycles frame per cycle
maxCycleCount: 0, // 0 disables maxCycleCount
printNetworkFl: false, // print the network instance
printClassDictFl: false, // print the class description dictionary
network: {
ain:
{
class: audioFileIn,
argLabel:"compare",
args:{
default:{ fname:"/home/kevin/temp/audio.wav", eofFl:true },
kc: { fname:"/home/kevin/src/currawong/audio/GUTIM_All_20200711_96k_float.wav", eofFl:true }
compare:{ fname:"/mnt/zinger02k/zonk/temp/kc_record/xform_only/cut/dry.wav", eofFl:true }
}
},
pva: { class: pv_analysis, in:{ in:ain.out }, args:{ default:{ wndSmpN:[2048,1024], hopSmpN:[512,256], hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:[kc b] },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:[kc b] },
aout: { class: audioFileOut, in:{ in:cmp.out }, args:{ default:{fname:"/home/kevin/temp/kc_compare/b.wav"} } },
}
}
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/projects/score_follow/play_score.csv",
score_fn: "~/src/currawong/audio/workshop/beck1/record_4/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: "temp_frag",
record_fn_ext: "txt",
crossFadeSrate: 48000.0, // TODO: move to flow cfg. and set via 'system default sample rate'
crossFadeCount: 3,
beg_play_loc: 0,
end_play_loc: 0,
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: 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,
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: "Fastlane",
//midi_out_port: "Fastlane MIDI A",
//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 ] ,
},
{
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: "PC-300",
//midi_out_port: "PC-300 MIDI 1",
// 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 ] ,
},
//{ midi_out_device: "PipeWire-RT-Event", midi_out_port: "input" },
],
}
frag_panel: {
panel: {
name: fragPanelId
addClassName: fragPanel
row: {
name: fragPanelRowId
addClassName: fragPanelRow
col: {
numb_disp: { name: fragBegLocId, title:"Beg Loc", value: 0 },
numb_disp: { name: fragEndLocId, title:"End Loc", value: 0 },
number: { name: fragInGainId, title:"In Gain", min:0.0, max:100.0, step:0.1, decpl:1 },
number: { name: fragOutGainId, title:"Out Gain", min:0.0, max:100.0, step:0.1, decpl:1 },
},
col: {
row: {
name: fragPresetRowId,
addClassName: fragPresetRow,
},
row: {
string: { name: fragNoteId, addClassName: fragNote, title:"Note" },
}
},
col: {
number:{ name: fragWetDryGainId, title:"Wet/Dry", min:0.0, max:1.0, step:0.1, decpl:2 },
number:{ name: fragFadeOutMsId, title:"Fade Ms", min:0.0, max:5000, step:1, decpl:0 },
row: {
button:{ name: fragPlaySeqBtnId, title:"Play Seq" },
button:{ name: fragPlayAllBtnId, title:"Play All" },
}
},
col: {
number: { name: fragBegPlayLocId, title:"Begin", min:0, max:1000000, step:1, decpl:0 },
number: { name: fragEndPlayLocId, title:"End", min:0, max:1000000, step:1, decpl:0 },
button: { name: fragPlayBtnId, title:"Play" }
}
}
}
},
},
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
uiCfgFn: "ui.cfg" // default UI resource description
},
serial: {
pollPeriodMs: 50,
recvBufByteN: 512,
array: [
{
enable_flag: false,
label: "port1", // User label
device: "/dev/ttyUSB0", // Serial device name
baud: 115200,
bits: 8,
stop: 1,
parity: "no",
}
]
},
midi: {
parserBufByteN: 1024,
},
audio: {
meterMs: 50, // audio meter filter length and meter callback period
threadTimeOutMs: 50, // audio thread cond var time out
groupL: [
{
enableFl: true, // (req)
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)
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: {
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
// Simulate SPIRIO with Synchron
non_spirio_network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first two channels (this reduces the channel count if there are more than 2 incoming channels)
ivory_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[1,1]}} }
vsl_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[0,0,1,1]}} }
// delay the incoming audio signal to sync it with the piano
sync_delay: { class: audio_delay, in: { in:vsl_in.out }, args:{ default:{ delayMs:0 } }}
mstr_wet_in_gain: { class: audio_gain, in:{ in:ivory_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 },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }, args:{}},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }, args:{}},
// apply the wet/dry gain balance
wd_bal: { class: balance, args{}},
wet_bal_gain: { class: audio_gain, in:{ in:wet_out_gain.out, gain:wd_bal.out }, args:{}},
dry_bal_gain: { class: audio_gain, in:{ in:vsl_in.out, gain:wd_bal.inv_out }, args:{}},
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out }, args:{}}
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out }, args:{}},
// merge the wet/dry signals into a single 4 channel signal
merge0: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:mstr_dry_out_gain.out }, args:{} },
merge1: { class: audio_merge, in:{ in0:mstr_wet_out_gain.out, in1:sync_delay.out }, args:{} },
//merge1: { class: audio_merge, in:{ in0:ivory_in.out, in1:vsl_in.out }, args:{} },
aout: { class: audio_out, in:{ in:merge1.out }, args:{ default:{dev_label:"main"} } },
}
// SPIRIO network
network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first two channels (this reduces the channel count if there are more than 2 incoming channels)
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[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 } }}
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_delay.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 },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }, args:{}},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }, args:{}},
// 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 }, args:{}},
dry_bal_gain: { class: audio_gain, in:{ in:sync_delay.out, gain:wd_bal.inv_out }, args:{}},
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out }, args:{}}
mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out }, args:{}},
// 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 }, args:{} },
//aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
}
// stereo network
stereo_network: {
aud_in: { class: audio_in, args:{ default:{dev_label:"main"} } },
// select the first two channels (this reduces the channel count if there are more than 2 incoming channels)
split_in: { class: audio_split, in:{ in:aud_in.out } args:{ default:{select[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 } }}
mstr_wet_in_gain: { class: audio_gain, in:{ in:sync_delay.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 },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc },
wet_out_gain: { class: audio_gain, in:{ in:cmp.out }, args:{}},
mute_wet: { class: audio_gain, in:{ in:wet_out_gain.out }, args:{}},
// 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 }, args:{}},
dry_bal_gain: { class: audio_gain, in:{ in:sync_delay.out, gain:wd_bal.inv_out }, args:{}},
mstr_wet_out_gain: { class: audio_gain, in:{ in:wet_bal_gain.out }, args:{}}
//mstr_dry_out_gain: { class: audio_gain, in:{ in:dry_bal_gain.out }, args:{}},
// 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 }, args:{} },
//aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
aout: { class: audio_out, in:{ in:mstr_wet_out_gain.out }, args:{ default:{dev_label:"main"} } },
}
presets: {
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 } }
}
}
},
stereo_network: {
ain: { class: audio_in, args:{ default:{dev_label:"main"} } },
// split the input channels to create a wet and dry signal path
split_wet: { class: audio_split, in:{ in:ain.out }, args:{ default:{ select:[1,0]} }},
split_dry: { class: audio_split, in:{ in:ain.out }, args:{ default:{ select:[0,1]} }},
// duplicate the channels on the wet/dry signal path to simulate a 4 channel audio interface
dupl_wet: { class: audio_duplicate, in:{ in:split_dry.out }, args:{ duplicate:2 } },
dupl_dry: { class: audio_duplicate, in:{ in:split_wet.out }, args:{ duplicate:2 } },
// wet signal processing chain
pva: { class: pv_analysis, in:{ in:dupl_wet.out }, args:{ default:{ wndSmpN:512, hopSmpN:128, hzFl:false } } },
sd: { class: spec_dist, in:{ in:pva.out }, preset:kc },
pvs: { class: pv_synthesis, in:{ in:sd.out }, },
cmp: { class: compressor, in:{ in:pvs.out }, preset:kc },
// reduce the wet and dry signal path to 1 channel each because we are using a 2 channel interface
osplit_wet: { class: audio_split, in:{ in:cmp.out }, args:{ default:{ select:[1,0]} }},
osplit_dry: { class: audio_split, in:{ in:dupl_dry.out }, args:{ default:{ select:[0,1]} }},
// apply the wet/dry gain
wd_bal: { class: balance, args{}},
wet_gain: { class: audio_gain, in:{ in:osplit_wet.out, gain:wd_bal.out }, args:{}},
dry_gain: { class: audio_gain, in:{ in:osplit_dry.out, gain:wd_bal.inv_out }, args:{}},
// merge the wet/dry signals back into a single signal
merge: { class: audio_merge, in:{ in0:wet_gain.out, in1:dry_gain.out }, args:{} },
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
},
sine_network: {
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: {
sin: { class: sine_tone, args:{ default:{ hz:[220,880]} }},
splitL: { class: audio_split, in:{ in:sin.out }, args:{ default:{ select:[1,0]} }},
splitR: { class: audio_split, in:{ in:sin.out }, args:{ default:{ select:[0,1]} }},
delay: { class: audio_delay, in:{ in:splitL.out }, args:{ default:{ delayMs:1} }},
bal: { class: balance, args:{} },
mix: { class: audio_mix, in:{ in0:delay.out, in1:splitL.out, gain0:bal.out, gain1:bal.inv_out }, args:{ }},
merge: { class: audio_merge, in:{ in0:mix.out, in1:splitR.out }, args:{}},
aout: { class: audio_out, in:{ in:merge.out }, args:{ default:{dev_label:"main"} } },
},
presets: {
a: { splitL:hi, splitR:lo },
b: { splitL:lo, splitR:hi }
}
},
piano_score:{
//filename: "/home/kevin/src/currawong/projects/score_proc/data/play_file.cfg",
//filename: "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data/beck1/record_5/play_score.csv"
//filename: "/home/kevin/src/cwtest/src/cwtest/cfg/gutim_full/data/score/20231028/temp.csv"
filename: "/home/kevin/src/currawong/projects/perf_meas_workshop_0/foo.csv"
}
gutim_reg: {
dir: "~/temp/cw_reg/reg.csv"
},
score_follow: {
srate: 48000,
score_csv_fname: "/home/kevin/src/currawong/projects/score_proc/temp.csv",
score_parse_warn_fl: false, // print score parse warnings
score_warn_fl: false, //print SF score warnings
score_report_fl: false, // Generate an SF score report
out_score_rpt_fname: "score_report.txt",
dyn_tbl_report_fl: false, // Print the dynamics table report
score_wnd_locN: 10, // score follower score search window
midi_wnd_locN: 7, // score folloer MIDI sequence length
track_print_fl: false, // print output from the sfTrack unit
// if true score follower backtracking overwrites previous result records with new alignments
// otherwise new result records are generated for new alignments.
track_results_backtrack_fl: false,
print_rt_events_fl: false, // print real-time score following output events from cwScoreFollowTest.cpp
pre_test_fl: false, // Add a single random note prior to the first note in the sequence
show_muid_fl: false, // Show muid in the MIDI note representation of the SVG output.
meas_enable_fl: true, // enable performance measurements
meas_setup_report_fl: false, // generate a performance measurement config. report (locations of sets,'calcs' and sections)
out_dir: "~/temp/score_follow_test_2",
// each of these files will be written to the dir: <out_dir>/<perf_label>
write_perf_meas_json_fl: false,
out_perf_meas_json_fname: "perf_meas.json",
write_svg_file_fl: false,
out_svg_fname: "sf_results.html",
write_sf_analysis_csv_fl: false,
out_sf_analysis_csv_fname: "sf_analysis.csv",
write_midi_csv_fl: false,
out_midi_csv_fname: "midi.csv",
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 },
]
// Generate the 'play_score.csv' by syncing a performed MIDI file to
// the score. This allows the file to be played back via cwIoPresetSelApp.
gen_synced_perf_files:
{
enable_fl: true,
jobL: [
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck1" },
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/beck2" },
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/taka1" },
{ dir:"~/src/cwtest/src/cwtest/cfg/gutim_full/data1/taka2" },
],
out_fname: "play_score.csv",
},
perfL: [
{
enable_fl: false,
player: JS,
perf_date: "20230904",
take: 1,
label: full_midi,
start_loc: 0,
end_loc:7825,
midi_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/GUTIM_20230904.mid"
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 5,
label: shiau_uen_5,
start_loc: 120,
end_loc: 146,
midi_fname: "~/temp/shiau_uen/record_5/midi.mid",
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 7,
label: shiau_uen_7,
start_loc: 888,
end_loc: 929,
midi_fname: "~/temp/shiau_uen/record_7/midi.mid",
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 11,
label: shiau_uen_11,
start_loc: 2287,
end_loc: 2454,
midi_fname: "~/temp/shiau_uen/record_11/midi.mid",
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 13,
label: shiau_uen_13,
start_loc: 3765,
end_loc:3883,
midi_fname: "~/temp/shiau_uen/record_13/midi.mid",
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 17,
label: shiau_uen_17,
start_loc: 5407,
end_loc:5462,
midi_fname: "~/temp/shiau_uen/record_17/midi.mid",
},
{
enable_fl: false,
player: SD,
perf_date: "20230514",
take: 23,
label: shiau_uen_23,
start_loc: 6628,
end_loc: 6677,
midi_fname: "~/temp/shiau_uen/record_23/midi.mid",
}
]
}
svg_midi_file: {
"src_file_type": "midi",
"src_fname": "~/temp/shiau_uen/record_5/midi.mid",
//"src_file_type": "piano_score",
//"src_fname": "~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
//"src_fname": "/home/kevin/src/cwtest/src/cwtest/cfg/preset_sel/score/20220423/temp.csv"
"out_fname": "~/temp/score_follow_test/midi_svg.html"
"midi_state_args": {
"cache_enable_fl": true,
"cache_block_msg_count": 128,
"pedal_up_midi_value": 64,
"pedal_half_min_midi_value": 40,
"pedal_half_max_midi_value": 50
}
}
svg_score: {
"piano_score_fname":"~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
"cm_score_fname":"~/src/cwtest/src/cwtest/cfg/gutim_full/cm_score.csv",
"css_fname":"~/src/cwtest/src/cwtest/cfg/gutim_full/score/svg/score.css",
"out_fname":"~/src/cwtest/src/cwtest/cfg/gutim_full/score/svg/score.html"
"midi_state_args": {
"cache_enable_fl": true,
"cache_block_msg_count": 128,
"pedal_up_midi_value": 64,
"pedal_half_min_midi_value": 43,
"pedal_half_max_midi_value": 45
}
},
midi_state: {
"midi_fname": "~/src/currawong/audio/workshop/beck1/record_4/midi.mid",
"cache_enable_fl": true,
"args": {
"cache_enable_fl": true,
"cache_block_msg_count": 128,
"pedal_up_midi_value": 64,
"pedal_half_min_midi_value": 43,
"pedal_half_max_midi_value": 45
}
},
csv: {
fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/cm_score.csv",
titleL: [ "status","d0","d1" ]
// titleL: []
},
score_test: {
score_fname: "/home/kevin/src/currawong/projects/score_proc/temp.csv"
srate: 48000,
parse_fl: true, // do score parsing
parse_report_fl: true, // report parse
parse_warn_fl: false, // show parser warnings
score_fl: true, // do sfscore processing
score_report_fl: false, // report sfscore
score_warn_fl: false, // show score warnings
match_fl: false, // score match test
track_fl: false, // score track test
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 },
]
sfmatch: {
// Generate an example performance
gen_perf_example:
{
enable_fl: false,
beg_loc_idx: 0,
loc_cnt: 10
}
maxScWndN: 10, // max size of the score alignment window
maxMidiWndN: 7, // max counf of the performance (MIDI) alignment window
init_score_loc: 120, // initial score location
beg_perf_idx: 0, // first perf. index
perf_cnt: 7, // must be <= maxMidiWndN
// init_score_loc = 0
perf0 [
{ muid:0 smpIdx:0 pitch:65 vel:44 },
{ muid:1 smpIdx:3600 pitch:63 vel:64 },
{ muid:2 smpIdx:7200 pitch:45 vel:65 },
{ muid:3 smpIdx:10800 pitch:30 vel:66 },
{ muid:4 smpIdx:14400 pitch:37 vel:67 },
{ muid:5 smpIdx:18000 pitch:65 vel:112 },
{ muid:6 smpIdx:21600 pitch:87 vel:100 },
{ muid:7 smpIdx:21600 pitch:36 vel:88 },
{ muid:8 smpIdx:21600 pitch:46 vel:30 },
{ muid:9 smpIdx:193028 pitch:85 vel:30 },
{ muid:10 smpIdx:330171 pitch:100 vel:88 },
{ muid:11 smpIdx:638742 pitch:80 vel:100 },
]
// init_score_loc = 120
perf: [
{ muid:0 smpIdx:0 pitch:68 vel:44 },
{ muid:1 smpIdx:3600 pitch:35 vel:64 },
{ muid:2 smpIdx:7200 pitch:77 vel:65 },
{ muid:3 smpIdx:10800 pitch:42 vel:66 },
{ muid:4 smpIdx:14400 pitch:49 vel:67 },
{ muid:5 smpIdx:18000 pitch:75 vel:112 },
{ muid:6 smpIdx:21600 pitch:75 vel:100 },
{ muid:7 smpIdx:21600 pitch:46 vel:88 },
{ muid:8 smpIdx:21600 pitch:52 vel:30 },
{ muid:9 smpIdx:193028 pitch:58 vel:30 },
{ muid:10 smpIdx:330171 pitch:84 vel:88 },
{ muid:11 smpIdx:638742 pitch:50 vel:100 },
]
},
sftrack: {
maxScWndN: 10, // max size of the score alignment window
maxMidiWndN: 7, // max counf of the performance (MIDI) alignment window
report_midi_file_fl: false,
report_track_fl: true,
print_fl: false,
backtrack_fl: true
perf:{
enable_fl:true,
loc_idx: 120,
midi_fname:"/home/kevin/temp/shiau_uen/record_5/midi.mid"
}
}
},
translate_frags:
{
//
//
// translate_frags IS OBSOLETE. SEE projects/translate_frags.py
//
//
cur_frag_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/preset_select/m1_458.txt",
cur_score_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/score/temp.csv",
new_score_fname: "~/src/currawong/projects/score_proc/temp.csv",
out_frag_fname: "~/src/cwtest/src/cwtest/cfg/gutim_full/preset_select/m1_458_trans.txt",
cur_score_rpt_fname "~/temp/piano_score_preset_sel_rpt.txt"
new_score_rpt_fname "~/temp/sfscore_preset_sel_rpt.txt"
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
},
srate: 48000,
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 },
]
}
}