100 lines
3.5 KiB
Python
100 lines
3.5 KiB
Python
import subprocess
|
|
import os
|
|
|
|
|
|
def gen_ivory_player_caw_pgm( out_dir, caw_fname, midi_csv_fname, audio_fname, midi_dev_label, midi_port_label ):
|
|
|
|
caw_template = f"""
|
|
{{
|
|
base_dir: "{out_dir}"
|
|
io_dict: "{out_dir}/io.cfg"
|
|
proc_dict: "~/src/caw/src/libcw/flow/proc_dict.cfg",
|
|
subnet_dict: "~/src/caw/src/libcw/flow/subnet_dict.cfg",
|
|
|
|
programs: {{
|
|
|
|
sample_generator: {{
|
|
non_real_time_fl:false,
|
|
network: {{
|
|
procs: {{
|
|
mf: {{ class: midi_file, args:{{ csv_fname:"{midi_csv_fname}" }}}},
|
|
mout: {{ class: midi_out in:{{ in:mf.out }}, args:{{ dev_label:"{midi_dev_label}", port_label:"{midi_port_label}" }}}},
|
|
stop: {{ class: halt, in:{{ in:mf.done_fl }}}}
|
|
|
|
ain: {{ class: audio_in, args:{{ dev_label:"main" }}}},
|
|
split: {{ class: audio_split, in:{{ in:ain.out }} args:{{ select: [0,0, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1] }}}},
|
|
af: {{ class: audio_file_out, in:{{ in:split.out0 }}, args:{{ fname:"{audio_fname}"}}}},
|
|
aout: {{ class: audio_out, in:{{ in:ain.out }}, args:{{ dev_label:"main"}}}},
|
|
}}
|
|
}}
|
|
}}
|
|
}}
|
|
}}
|
|
"""
|
|
with open(caw_fname, "w") as f:
|
|
f.write(caw_template)
|
|
|
|
|
|
def gen_audio_file( out_dir, midi_csv_fname, midi_dev_label, midi_port_label, caw_exec_fname, caw_cfg_fname, audio_fname ):
|
|
|
|
gen_ivory_player_caw_pgm(out_dir, caw_cfg_fname, midi_csv_fname, audio_fname, midi_dev_label, midi_port_label )
|
|
|
|
argL = [ caw_exec_fname, "exec", caw_cfg_fname, "sample_generator" ]
|
|
|
|
print(" ".join(argL))
|
|
|
|
p = subprocess.Popen(argL,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
|
|
out,err =p.communicate()
|
|
|
|
if p.returncode != 0:
|
|
print("The call '%s' to failed with code:%i Message:%s %s"," ".join(argL),p.returncode,out,err)
|
|
|
|
def gen_all_files( work_dir,midi_dev_label,midi_port_label,caw_exec_fname,midi_filterL=None ):
|
|
|
|
fnL = os.listdir(work_dir)
|
|
|
|
for fn in fnL:
|
|
if "." in fn:
|
|
fn_ext_partL = fn.split(".")
|
|
if fn_ext_partL[1] == "csv":
|
|
fn_partL = fn_ext_partL[0].split("_")
|
|
|
|
mark_fn = "_".join(fn_partL[0:-1]) + "_marker.txt"
|
|
|
|
damp_fl = fn_partL[1] == "damp"
|
|
|
|
midi_pitch = int(fn_partL[0])
|
|
|
|
if midi_filterL is None or (midi_filterL is not None and midi_pitch in midi_filterL):
|
|
|
|
wav_dir = os.path.join(work_dir,"wav")
|
|
|
|
if not os.path.isdir(wav_dir):
|
|
os.mkdir(wav_dir)
|
|
|
|
damp_label = "damp_" if damp_fl else ""
|
|
audio_fname = os.path.join(wav_dir,f"{midi_pitch:03}_{damp_label}samples.wav")
|
|
|
|
midi_csv_fname = os.path.join(work_dir,fn)
|
|
mark_tsv_fname = os.path.join(work_dir,mark_fn)
|
|
|
|
caw_cfg_fname = os.path.join(work_dir,f"{midi_pitch:03}_{damp_label}caw.cfg")
|
|
|
|
print(midi_pitch,midi_csv_fname,mark_tsv_fname,audio_fname)
|
|
|
|
gen_audio_file( work_dir, midi_csv_fname, midi_dev_label, midi_port_label, caw_exec_fname, caw_cfg_fname, audio_fname )
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
work_dir = "/home/kevin/temp/wt6"
|
|
midi_dev_label = "MIDIFACE 2x2"
|
|
midi_port_label = "MIDIFACE 2x2 Midi Out 1"
|
|
caw_exec_fname = "/home/kevin/src/caw/build/linux/debug/bin/caw"
|
|
midi_filterL = None
|
|
gen_all_files(work_dir,midi_dev_label,midi_port_label,caw_exec_fname,midi_filterL)
|
|
|
|
|
|
|