From 84fa3ebefdc03a751586570d079906cbb9a43762 Mon Sep 17 00:00:00 2001 From: mwinter Date: Fri, 2 Feb 2024 01:04:23 -0600 Subject: [PATCH] adding things before oaxaca - almost done --- lilypond/includes/part_I.ly | 40 +- lilypond/includes/part_II.ly | 40 +- lilypond/includes/part_III.ly | 40 +- lilypond/includes/part_IV.ly | 40 +- lilypond/score_template (copy 1).pdf | Bin 0 -> 835294 bytes lilypond/score_template.ly | 15 +- lilypond/score_template.pdf | Bin 1277698 -> 567902 bytes .../{ => edited}/includes/part_I.ly | 0 .../{ => edited}/includes/part_II.ly | 0 .../{ => edited}/includes/part_III.ly | 0 .../{ => edited}/includes/part_IV.ly | 0 .../edited/seeds_and_ledgers_1.ly | 155 +++ .../edited/seeds_and_ledgers_1.pdf | Bin 0 -> 1300225 bytes .../original_output/includes/part_I.ly | 20 + .../original_output/includes/part_II.ly | 20 + .../original_output/includes/part_III.ly | 20 + .../original_output/includes/part_IV.ly | 20 + .../original_output/score_template.ly | 154 +++ .../{ => original_output}/score_template.pdf | Bin 1334323 -> 1334286 bytes .../{ => edited}/includes/part_I.ly | 0 .../{ => edited}/includes/part_II.ly | 0 .../{ => edited}/includes/part_III.ly | 0 .../{ => edited}/includes/part_IV.ly | 0 .../edited/seeds_and_ledgers_2.ly | 154 +++ .../edited/seeds_and_ledgers_2.pdf | Bin 0 -> 922670 bytes .../original_output/includes/part_I.ly | 11 + .../original_output/includes/part_II.ly | 11 + .../original_output/includes/part_III.ly | 11 + .../original_output/includes/part_IV.ly | 11 + .../original_output}/score_template.ly | 0 .../{ => original_output}/score_template.pdf | Bin .../coda/edited/includes/part_I.ly | 14 + .../coda/edited/includes/part_II.ly | 14 + .../coda/edited/includes/part_III.ly | 14 + .../coda/edited/includes/part_IV.ly | 14 + .../coda/edited/seeds_and_ledgers_3_coda.ly | 158 +++ .../coda/edited/seeds_and_ledgers_3_coda.pdf | Bin 0 -> 566361 bytes .../coda/original_output/includes/part_I.ly | 14 + .../coda/original_output/includes/part_II.ly | 14 + .../coda/original_output/includes/part_III.ly | 14 + .../coda/original_output/includes/part_IV.ly | 14 + .../score_template (copy 1).pdf | Bin 0 -> 835294 bytes .../coda/original_output/score_template.ly | 156 +++ .../coda/original_output/score_template.pdf | Bin 0 -> 565816 bytes .../main/edited/includes/part_I.ly | 14 + .../main/edited/includes/part_II.ly | 14 + .../main/edited/includes/part_III.ly | 14 + .../main/edited/includes/part_IV.ly | 14 + .../main/edited/seeds_and_ledgers_3.ly | 157 +++ .../main/edited/seeds_and_ledgers_3.pdf | Bin 0 -> 432251 bytes .../main/original_output/includes/part_I.ly | 14 + .../main/original_output/includes/part_II.ly | 14 + .../main/original_output/includes/part_III.ly | 14 + .../main/original_output/includes/part_IV.ly | 14 + .../score_template (copy 1).pdf | Bin 0 -> 835294 bytes .../main/original_output}/score_template.ly | 3 + .../main/original_output/score_template.pdf | Bin 0 -> 481407 bytes .../4200a90d/lilypond/part_IV.ly | 2 +- .../43b009ff/lilypond/part_I.ly | 10 +- .../43b009ff/lilypond/part_II.ly | 6 - .../43b009ff/lilypond/part_III.ly | 6 - .../43b009ff/lilypond/part_IV.ly | 6 - .../443ec222/lilypond/part_I.ly | 4 +- .../443ec222/lilypond/part_II.ly | 2 - .../443ec222/lilypond/part_III.ly | 2 - .../443ec222/lilypond/part_IV.ly | 2 - .../46985d14/lilypond/part_I.ly | 10 +- .../46985d14/lilypond/part_II.ly | 6 - .../46985d14/lilypond/part_III.ly | 6 - .../46985d14/lilypond/part_IV.ly | 6 - .../490b1e6e/lilypond/part_II.ly | 2 +- .../4a8a6e53/lilypond/part_I.ly | 12 +- .../4a8a6e53/lilypond/part_II.ly | 6 - .../4a8a6e53/lilypond/part_III.ly | 10 +- .../4a8a6e53/lilypond/part_IV.ly | 6 - .../4b7745df/lilypond/part_I.ly | 14 +- .../4b7745df/lilypond/part_II.ly | 6 - .../4b7745df/lilypond/part_III.ly | 6 - .../4b7745df/lilypond/part_IV.ly | 6 - .../4e7d35e5/lilypond/part_I.ly | 2 +- .../52c9a980/lilypond/part_I.ly | 2 +- .../61ce9067/lilypond/part_III.ly | 2 +- .../66f6a618/lilypond/part_I.ly | 26 +- .../66f6a618/lilypond/part_II.ly | 16 +- .../66f6a618/lilypond/part_III.ly | 18 +- .../66f6a618/lilypond/part_IV.ly | 16 +- .../66f6a618/lilypond/part_IV.pdf | Bin 0 -> 69957 bytes .../6d635e88/lilypond/part_I.ly | 18 +- .../6d635e88/lilypond/part_II.ly | 2 - .../6d635e88/lilypond/part_III.ly | 2 - .../6d635e88/lilypond/part_IV.ly | 2 - .../6ed95c4c/6ed95c4c_mus_model.json | 2 +- .../6ed95c4c/lilypond/part_I.ly | 10 +- .../6ed95c4c/lilypond/part_II.ly | 4 +- .../6ed95c4c/lilypond/part_III.ly | 8 +- .../6ed95c4c/lilypond/part_IV.ly | 8 +- .../6ed95c4c/lilypond/part_IV.pdf | Bin 0 -> 45302 bytes .../6fb60ab6/lilypond/part_I.ly | 4 +- .../6fb60ab6/lilypond/part_II.ly | 2 - .../6fb60ab6/lilypond/part_III.ly | 2 - .../6fb60ab6/lilypond/part_IV.ly | 2 - .../761e4585/lilypond/part_I.ly | 2 +- .../761e4585/lilypond/part_IV.ly | 2 +- .../784130cc/lilypond/part_I.ly | 2 +- .../79e0a4a7/lilypond/part_I.ly | 14 +- .../79e0a4a7/lilypond/part_II.ly | 6 - .../79e0a4a7/lilypond/part_III.ly | 6 - .../79e0a4a7/lilypond/part_IV.ly | 6 - .../7d3c9a80/lilypond/part_I.ly | 14 +- .../7d3c9a80/lilypond/part_II.ly | 6 - .../7d3c9a80/lilypond/part_III.ly | 6 - .../7d3c9a80/lilypond/part_IV.ly | 6 - .../7edbdceb/lilypond/part_I.ly | 2 +- .../41e447bc/41e447bc_mus_model.json | 2 +- .../41e447bc/lilypond/part_I.ly | 8 +- .../4c059f33/4c059f33_mus_model.json | 2 +- .../4c059f33/lilypond/part_I.ly | 8 +- .../4c059f33/lilypond/part_II.ly | 4 +- .../4c059f33/lilypond/part_III.ly | 4 +- .../4c059f33/lilypond/part_IV.ly | 6 +- .../5201b8af/5201b8af_mus_model.json | 5 +- .../5201b8af/lilypond/part_I.ly | 10 +- .../5201b8af/lilypond/part_II.ly | 4 +- .../5201b8af/lilypond/part_III.ly | 4 +- .../5201b8af/lilypond/part_IV.ly | 4 +- .../525274f2/525274f2_mus_model.json | 5 +- .../525274f2/lilypond/part_I.ly | 10 +- .../525274f2/lilypond/part_II.ly | 4 + .../525274f2/lilypond/part_III.ly | 6 +- .../525274f2/lilypond/part_IV.ly | 8 +- .../525274f2/lilypond/part_IV.pdf | Bin 0 -> 34944 bytes .../60adbbef/60adbbef_mus_model.json | 2 +- .../60adbbef/lilypond/part_I.ly | 22 +- .../60adbbef/lilypond/part_II.ly | 10 +- .../60adbbef/lilypond/part_III.ly | 10 +- .../60adbbef/lilypond/part_IV.ly | 8 - .../62300302/62300302_mus_model.json | 9 +- .../62300302/lilypond/part_I.ly | 10 +- .../62300302/lilypond/part_II.ly | 6 +- .../62300302/lilypond/part_III.ly | 6 +- .../62300302/lilypond/part_IV.ly | 4 + .../72dc057f/lilypond/part_I.ly | 24 +- .../72dc057f/lilypond/part_II.ly | 16 +- .../72dc057f/lilypond/part_III.ly | 14 +- .../72dc057f/lilypond/part_IV.ly | 12 +- .../74307bb4/74307bb4_mus_model.json | 2 +- .../74307bb4/lilypond/part_I.ly | 60 +- .../74307bb4/lilypond/part_II.ly | 8 - .../74307bb4/lilypond/part_III.ly | 12 +- .../74307bb4/lilypond/part_IV.ly | 8 - .../74b8f8d9/74b8f8d9_mus_model.json | 2 +- .../74b8f8d9/lilypond/part_I.ly | 32 +- .../74b8f8d9/lilypond/part_II.ly | 16 +- .../74b8f8d9/lilypond/part_III.ly | 20 +- .../74b8f8d9/lilypond/part_IV.ly | 16 +- .../76e45e56/lilypond/part_I.ly | 24 +- .../76e45e56/lilypond/part_II.ly | 18 +- .../76e45e56/lilypond/part_III.ly | 16 +- .../76e45e56/lilypond/part_IV.ly | 14 - resources/string_quartet_3_rise.json | 3 +- resources/string_quartet_3_rise.json_bak | 3 +- .../44490863/lilypond/part_I.ly | 70 +- .../44490863/lilypond/part_II.ly | 70 +- .../44490863/lilypond/part_III.ly | 70 +- .../44490863/lilypond/part_IV.ly | 70 +- .../47bdba0e/lilypond/part_I.ly | 76 +- .../47bdba0e/lilypond/part_II.ly | 76 +- .../47bdba0e/lilypond/part_III.ly | 76 +- .../47bdba0e/lilypond/part_IV.ly | 76 +- .../4874dd07/lilypond/part_I.ly | 56 +- .../4874dd07/lilypond/part_II.ly | 56 +- .../4874dd07/lilypond/part_III.ly | 56 +- .../4874dd07/lilypond/part_IV.ly | 56 +- .../4b40ed47/lilypond/part_I.ly | 30 +- .../4b40ed47/lilypond/part_II.ly | 30 +- .../4b40ed47/lilypond/part_III.ly | 30 +- .../4b40ed47/lilypond/part_IV.ly | 30 +- .../4bf1af12/lilypond/part_I.ly | 32 +- .../4bf1af12/lilypond/part_II.ly | 32 +- .../4bf1af12/lilypond/part_III.ly | 32 +- .../4bf1af12/lilypond/part_IV.ly | 32 +- .../4c646e0e/4c646e0e_code.scd | 992 +++++++++++++++++ .../4c646e0e/4c646e0e_mus_model.json | 342 ++++++ .../4dd2a130/lilypond/part_I.ly | 4 +- .../4dd2a130/lilypond/part_II.ly | 4 +- .../4dd2a130/lilypond/part_III.ly | 4 +- .../4dd2a130/lilypond/part_IV.ly | 4 +- .../4e9f1dcc/lilypond/part_I.ly | 30 +- .../4e9f1dcc/lilypond/part_II.ly | 30 +- .../4e9f1dcc/lilypond/part_III.ly | 30 +- .../4e9f1dcc/lilypond/part_IV.ly | 30 +- .../4f53a446/4f53a446_mus_model.json | 2 +- .../50c2b0ad/lilypond/part_I.ly | 4 +- .../50c2b0ad/lilypond/part_II.ly | 4 +- .../50c2b0ad/lilypond/part_III.ly | 4 +- .../50c2b0ad/lilypond/part_IV.ly | 4 +- .../521654f8/lilypond/part_I.ly | 32 +- .../521654f8/lilypond/part_II.ly | 32 +- .../521654f8/lilypond/part_III.ly | 32 +- .../521654f8/lilypond/part_IV.ly | 32 +- .../531df78c/lilypond/part_I.ly | 70 +- .../531df78c/lilypond/part_II.ly | 70 +- .../531df78c/lilypond/part_III.ly | 70 +- .../531df78c/lilypond/part_IV.ly | 70 +- .../531df78c/lilypond/part_IV.pdf | Bin 0 -> 38954 bytes .../536cac90/lilypond/part_I.ly | 2 + .../536cac90/lilypond/part_II.ly | 4 +- .../536cac90/lilypond/part_III.ly | 4 +- .../536cac90/lilypond/part_IV.ly | 4 +- .../567a9375/lilypond/part_I.ly | 4 +- .../567a9375/lilypond/part_II.ly | 4 +- .../567a9375/lilypond/part_III.ly | 4 +- .../567a9375/lilypond/part_IV.ly | 4 +- .../5ef20586/lilypond/part_I.ly | 4 +- .../5ef20586/lilypond/part_II.ly | 4 +- .../5ef20586/lilypond/part_III.ly | 4 +- .../5ef20586/lilypond/part_IV.ly | 4 +- .../5f0075ab/lilypond/part_I.ly | 4 +- .../5f0075ab/lilypond/part_II.ly | 4 +- .../5f0075ab/lilypond/part_III.ly | 4 +- .../5f0075ab/lilypond/part_IV.ly | 4 +- .../5f3f1c84/5f3f1c84_mus_model.json | 2 +- .../5f3f1c84/lilypond/part_I.ly | 48 +- .../5f3f1c84/lilypond/part_II.ly | 48 +- .../5f3f1c84/lilypond/part_III.ly | 48 +- .../5f3f1c84/lilypond/part_IV.ly | 48 +- .../61207e49/lilypond/part_I.ly | 4 +- .../61207e49/lilypond/part_II.ly | 4 +- .../61207e49/lilypond/part_III.ly | 2 + .../61207e49/lilypond/part_IV.ly | 4 +- .../624f7439/lilypond/part_I.ly | 4 +- .../624f7439/lilypond/part_II.ly | 4 +- .../624f7439/lilypond/part_III.ly | 2 + .../624f7439/lilypond/part_IV.ly | 4 +- .../65120e88/lilypond/part_I.ly | 4 +- .../65120e88/lilypond/part_II.ly | 4 +- .../65120e88/lilypond/part_III.ly | 4 +- .../65120e88/lilypond/part_IV.ly | 4 +- .../6522664c/lilypond/part_I.ly | 28 +- .../6522664c/lilypond/part_II.ly | 28 +- .../6522664c/lilypond/part_III.ly | 28 +- .../6522664c/lilypond/part_IV.ly | 28 +- .../66b20499/lilypond/part_I.ly | 2 + .../66b20499/lilypond/part_II.ly | 4 +- .../66b20499/lilypond/part_III.ly | 4 +- .../66b20499/lilypond/part_IV.ly | 4 +- .../67633b5a/67633b5a_code.scd | 994 ++++++++++++++++++ .../67633b5a/67633b5a_mus_model.json | 50 + .../67633b5a/lilypond/part_I.ly | 6 + .../67633b5a/lilypond/part_II.ly | 6 + .../67633b5a/lilypond/part_III.ly | 6 + .../67633b5a/lilypond/part_IV.ly | 6 + .../6db2efcc/lilypond/part_I.ly | 30 +- .../6db2efcc/lilypond/part_II.ly | 30 +- .../6db2efcc/lilypond/part_III.ly | 30 +- .../6db2efcc/lilypond/part_IV.ly | 30 +- .../7276dc78/lilypond/part_I.ly | 70 +- .../7276dc78/lilypond/part_II.ly | 70 +- .../7276dc78/lilypond/part_III.ly | 70 +- .../7276dc78/lilypond/part_IV.ly | 70 +- .../736745da/lilypond/part_I.ly | 4 +- .../736745da/lilypond/part_II.ly | 4 +- .../736745da/lilypond/part_III.ly | 4 +- .../736745da/lilypond/part_IV.ly | 4 +- .../767e70f0/lilypond/part_I.ly | 4 +- .../767e70f0/lilypond/part_II.ly | 4 +- .../767e70f0/lilypond/part_III.ly | 4 +- .../767e70f0/lilypond/part_IV.ly | 4 +- .../78a94ed1/lilypond/part_I.ly | 36 +- .../78a94ed1/lilypond/part_II.ly | 36 +- .../78a94ed1/lilypond/part_III.ly | 36 +- .../78a94ed1/lilypond/part_IV.ly | 36 +- .../7ede7adb/lilypond/part_I.ly | 26 +- .../7ede7adb/lilypond/part_II.ly | 26 +- .../7ede7adb/lilypond/part_III.ly | 26 +- .../7ede7adb/lilypond/part_IV.ly | 26 +- .../tmp/tmp_mus_model.json | 196 ++-- .../string_quartet_3_rise_coda_only.json | 18 + .../string_quartet_3_rise_coda_only.json_bak | 18 + .../44490863/44490863_code.scd | 981 +++++++++++++++++ .../44490863/44490863_mus_model.json | 154 +++ .../47bdba0e/47bdba0e_code.scd | 992 +++++++++++++++++ .../47bdba0e/47bdba0e_mus_model.json | 161 +++ .../4874dd07/4874dd07_code.scd | 979 +++++++++++++++++ .../4874dd07/4874dd07_mus_model.json | 121 +++ .../4b40ed47/4b40ed47_code.scd | 981 +++++++++++++++++ .../4b40ed47/4b40ed47_mus_model.json | 86 ++ .../4bb01bac/4bb01bac_code.scd | 994 ++++++++++++++++++ .../4bb01bac/4bb01bac_mus_model.json | 65 ++ .../4bf1af12/4bf1af12_code.scd | 981 +++++++++++++++++ .../4bf1af12/4bf1af12_mus_model.json | 87 ++ .../4dd2a130/4dd2a130_code.scd | 992 +++++++++++++++++ .../4dd2a130/4dd2a130_mus_model.json | 65 ++ .../4dd2a130/lilypond/part_I.ly | 6 + .../4dd2a130/lilypond/part_II.ly | 6 + .../4dd2a130/lilypond/part_III.ly | 6 + .../4dd2a130/lilypond/part_IV.ly | 6 + .../4e9f1dcc/4e9f1dcc_code.scd | 981 +++++++++++++++++ .../4e9f1dcc/4e9f1dcc_mus_model.json | 86 ++ .../4f53a446/4f53a446_code.scd | 992 +++++++++++++++++ .../4f53a446/4f53a446_mus_model.json | 64 ++ .../4f53a446/lilypond/part_I.ly | 22 + .../4f53a446/lilypond/part_II.ly | 22 + .../4f53a446/lilypond/part_III.ly | 22 + .../4f53a446/lilypond/part_IV.ly | 22 + .../4f53a446/lilypond/part_IV.pdf | Bin 0 -> 47841 bytes .../5015ba0f/5015ba0f_code.scd | 994 ++++++++++++++++++ .../5015ba0f/5015ba0f_mus_model.json | 65 ++ .../50c2b0ad/50c2b0ad_code.scd | 992 +++++++++++++++++ .../50c2b0ad/50c2b0ad_mus_model.json | 96 ++ .../50c2b0ad/lilypond/part_I.ly | 8 + .../50c2b0ad/lilypond/part_II.ly | 8 + .../50c2b0ad/lilypond/part_III.ly | 8 + .../50c2b0ad/lilypond/part_IV.ly | 8 + .../521654f8/521654f8_code.scd | 981 +++++++++++++++++ .../521654f8/521654f8_mus_model.json | 87 ++ .../531df78c/531df78c_code.scd | 981 +++++++++++++++++ .../531df78c/531df78c_mus_model.json | 157 +++ .../536cac90/536cac90_code.scd | 992 +++++++++++++++++ .../536cac90/536cac90_mus_model.json | 98 ++ .../536cac90/lilypond/part_I.ly | 14 + .../536cac90/lilypond/part_II.ly | 14 + .../536cac90/lilypond/part_III.ly | 14 + .../536cac90/lilypond/part_IV.ly | 14 + .../567a9375/567a9375_code.scd | 992 +++++++++++++++++ .../567a9375/567a9375_mus_model.json | 65 ++ .../567a9375/lilypond/part_I.ly | 6 + .../567a9375/lilypond/part_II.ly | 6 + .../567a9375/lilypond/part_III.ly | 6 + .../567a9375/lilypond/part_IV.ly | 6 + .../5c1e1d32/5c1e1d32_code.scd | 994 ++++++++++++++++++ .../5c1e1d32/5c1e1d32_mus_model.json | 65 ++ .../5ededd80/5ededd80_code.scd | 994 ++++++++++++++++++ .../5ededd80/5ededd80_mus_model.json | 42 + .../5ededd80/lilypond/part_I.ly | 6 + .../5ededd80/lilypond/part_II.ly | 6 + .../5ededd80/lilypond/part_III.ly | 6 + .../5ededd80/lilypond/part_IV.ly | 6 + .../5ef20586/5ef20586_code.scd | 992 +++++++++++++++++ .../5ef20586/5ef20586_mus_model.json | 65 ++ .../5ef20586/lilypond/part_I.ly | 6 + .../5ef20586/lilypond/part_II.ly | 6 + .../5ef20586/lilypond/part_III.ly | 6 + .../5ef20586/lilypond/part_IV.ly | 6 + .../5f0075ab/5f0075ab_code.scd | 992 +++++++++++++++++ .../5f0075ab/5f0075ab_mus_model.json | 65 ++ .../5f0075ab/lilypond/part_I.ly | 6 + .../5f0075ab/lilypond/part_II.ly | 6 + .../5f0075ab/lilypond/part_III.ly | 6 + .../5f0075ab/lilypond/part_IV.ly | 6 + .../5f3f1c84/5f3f1c84_code.scd | 992 +++++++++++++++++ .../5f3f1c84/5f3f1c84_mus_model.json | 105 ++ .../61207e49/61207e49_code.scd | 992 +++++++++++++++++ .../61207e49/61207e49_mus_model.json | 141 +++ .../61207e49/lilypond/part_I.ly | 14 + .../61207e49/lilypond/part_II.ly | 14 + .../61207e49/lilypond/part_III.ly | 14 + .../61207e49/lilypond/part_IV.ly | 14 + .../624f7439/624f7439_code.scd | 992 +++++++++++++++++ .../624f7439/624f7439_mus_model.json | 141 +++ .../624f7439/lilypond/part_I.ly | 14 + .../624f7439/lilypond/part_II.ly | 14 + .../624f7439/lilypond/part_III.ly | 14 + .../624f7439/lilypond/part_IV.ly | 14 + .../65120e88/65120e88_code.scd | 992 +++++++++++++++++ .../65120e88/65120e88_mus_model.json | 65 ++ .../65120e88/lilypond/part_I.ly | 6 + .../65120e88/lilypond/part_II.ly | 6 + .../65120e88/lilypond/part_III.ly | 6 + .../65120e88/lilypond/part_IV.ly | 6 + .../6522664c/6522664c_code.scd | 981 +++++++++++++++++ .../6522664c/6522664c_mus_model.json | 85 ++ .../66b20499/66b20499_code.scd | 992 +++++++++++++++++ .../66b20499/66b20499_mus_model.json | 96 ++ .../66b20499/lilypond/part_I.ly | 10 + .../66b20499/lilypond/part_II.ly | 10 + .../66b20499/lilypond/part_III.ly | 10 + .../66b20499/lilypond/part_IV.ly | 10 + .../67633b5a/67633b5a_code.scd | 994 ++++++++++++++++++ .../67633b5a/67633b5a_mus_model.json | 49 + .../67633b5a/lilypond/part_I.ly | 8 + .../67633b5a/lilypond/part_II.ly | 8 + .../67633b5a/lilypond/part_III.ly | 8 + .../67633b5a/lilypond/part_IV.ly | 8 + .../6975a80a/6975a80a_code.scd | 994 ++++++++++++++++++ .../6975a80a/6975a80a_mus_model.json | 61 ++ .../6db2efcc/6db2efcc_code.scd | 981 +++++++++++++++++ .../6db2efcc/6db2efcc_mus_model.json | 86 ++ .../7276dc78/7276dc78_code.scd | 981 +++++++++++++++++ .../7276dc78/7276dc78_mus_model.json | 158 +++ .../736745da/736745da_code.scd | 992 +++++++++++++++++ .../736745da/736745da_mus_model.json | 65 ++ .../736745da/lilypond/part_I.ly | 6 + .../736745da/lilypond/part_II.ly | 6 + .../736745da/lilypond/part_III.ly | 6 + .../736745da/lilypond/part_IV.ly | 6 + .../767e70f0/767e70f0_code.scd | 992 +++++++++++++++++ .../767e70f0/767e70f0_mus_model.json | 65 ++ .../767e70f0/lilypond/part_I.ly | 6 + .../767e70f0/lilypond/part_II.ly | 6 + .../767e70f0/lilypond/part_III.ly | 6 + .../767e70f0/lilypond/part_IV.ly | 6 + .../78a94ed1/78a94ed1_code.scd | 981 +++++++++++++++++ .../78a94ed1/78a94ed1_mus_model.json | 90 ++ .../793d1587/793d1587_code.scd | 994 ++++++++++++++++++ .../793d1587/793d1587_mus_model.json | 65 ++ .../7c414d40/7c414d40_code.scd | 994 ++++++++++++++++++ .../7c414d40/7c414d40_mus_model.json | 65 ++ .../7e833361/7e833361_code.scd | 994 ++++++++++++++++++ .../7e833361/7e833361_mus_model.json | 65 ++ .../7ede7adb/7ede7adb_code.scd | 981 +++++++++++++++++ .../7ede7adb/7ede7adb_mus_model.json | 83 ++ .../tmp/tmp_mus_model.json | 119 +++ supercollider/material_tweak.scd | 34 +- supercollider/seeds_and_ledgers_backend.scd | 1 + .../seeds_and_ledgers_backend_rise.scd | 2 + supercollider/seeds_and_ledgers_main.scd | 4 +- .../seeds_and_ledgers_transcriber.scd | 5 +- .../seeds_and_ledgers_transcriber_rise.scd | 362 +++++++ 419 files changed, 45002 insertions(+), 2527 deletions(-) create mode 100644 lilypond/score_template (copy 1).pdf rename lilypond/string_quartet_1/{ => edited}/includes/part_I.ly (100%) rename lilypond/string_quartet_1/{ => edited}/includes/part_II.ly (100%) rename lilypond/string_quartet_1/{ => edited}/includes/part_III.ly (100%) rename lilypond/string_quartet_1/{ => edited}/includes/part_IV.ly (100%) create mode 100644 lilypond/string_quartet_1/edited/seeds_and_ledgers_1.ly create mode 100644 lilypond/string_quartet_1/edited/seeds_and_ledgers_1.pdf create mode 100644 lilypond/string_quartet_1/original_output/includes/part_I.ly create mode 100644 lilypond/string_quartet_1/original_output/includes/part_II.ly create mode 100644 lilypond/string_quartet_1/original_output/includes/part_III.ly create mode 100644 lilypond/string_quartet_1/original_output/includes/part_IV.ly create mode 100644 lilypond/string_quartet_1/original_output/score_template.ly rename lilypond/string_quartet_1/{ => original_output}/score_template.pdf (81%) rename lilypond/string_quartet_2/{ => edited}/includes/part_I.ly (100%) rename lilypond/string_quartet_2/{ => edited}/includes/part_II.ly (100%) rename lilypond/string_quartet_2/{ => edited}/includes/part_III.ly (100%) rename lilypond/string_quartet_2/{ => edited}/includes/part_IV.ly (100%) create mode 100644 lilypond/string_quartet_2/edited/seeds_and_ledgers_2.ly create mode 100644 lilypond/string_quartet_2/edited/seeds_and_ledgers_2.pdf create mode 100644 lilypond/string_quartet_2/original_output/includes/part_I.ly create mode 100644 lilypond/string_quartet_2/original_output/includes/part_II.ly create mode 100644 lilypond/string_quartet_2/original_output/includes/part_III.ly create mode 100644 lilypond/string_quartet_2/original_output/includes/part_IV.ly rename lilypond/{string_quartet_1 => string_quartet_2/original_output}/score_template.ly (100%) rename lilypond/string_quartet_2/{ => original_output}/score_template.pdf (100%) create mode 100644 lilypond/string_quartet_3/coda/edited/includes/part_I.ly create mode 100644 lilypond/string_quartet_3/coda/edited/includes/part_II.ly create mode 100644 lilypond/string_quartet_3/coda/edited/includes/part_III.ly create mode 100644 lilypond/string_quartet_3/coda/edited/includes/part_IV.ly create mode 100644 lilypond/string_quartet_3/coda/edited/seeds_and_ledgers_3_coda.ly create mode 100644 lilypond/string_quartet_3/coda/edited/seeds_and_ledgers_3_coda.pdf create mode 100644 lilypond/string_quartet_3/coda/original_output/includes/part_I.ly create mode 100644 lilypond/string_quartet_3/coda/original_output/includes/part_II.ly create mode 100644 lilypond/string_quartet_3/coda/original_output/includes/part_III.ly create mode 100644 lilypond/string_quartet_3/coda/original_output/includes/part_IV.ly create mode 100644 lilypond/string_quartet_3/coda/original_output/score_template (copy 1).pdf create mode 100644 lilypond/string_quartet_3/coda/original_output/score_template.ly create mode 100644 lilypond/string_quartet_3/coda/original_output/score_template.pdf create mode 100644 lilypond/string_quartet_3/main/edited/includes/part_I.ly create mode 100644 lilypond/string_quartet_3/main/edited/includes/part_II.ly create mode 100644 lilypond/string_quartet_3/main/edited/includes/part_III.ly create mode 100644 lilypond/string_quartet_3/main/edited/includes/part_IV.ly create mode 100644 lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.ly create mode 100644 lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.pdf create mode 100644 lilypond/string_quartet_3/main/original_output/includes/part_I.ly create mode 100644 lilypond/string_quartet_3/main/original_output/includes/part_II.ly create mode 100644 lilypond/string_quartet_3/main/original_output/includes/part_III.ly create mode 100644 lilypond/string_quartet_3/main/original_output/includes/part_IV.ly create mode 100644 lilypond/string_quartet_3/main/original_output/score_template (copy 1).pdf rename lilypond/{string_quartet_2 => string_quartet_3/main/original_output}/score_template.ly (97%) create mode 100644 lilypond/string_quartet_3/main/original_output/score_template.pdf create mode 100644 resources/string_quartet_1/66f6a618/lilypond/part_IV.pdf create mode 100644 resources/string_quartet_1/6ed95c4c/lilypond/part_IV.pdf create mode 100644 resources/string_quartet_2/525274f2/lilypond/part_IV.pdf create mode 100644 resources/string_quartet_3_rise/4c646e0e/4c646e0e_code.scd create mode 100644 resources/string_quartet_3_rise/4c646e0e/4c646e0e_mus_model.json create mode 100644 resources/string_quartet_3_rise/531df78c/lilypond/part_IV.pdf create mode 100644 resources/string_quartet_3_rise/67633b5a/67633b5a_code.scd create mode 100644 resources/string_quartet_3_rise/67633b5a/67633b5a_mus_model.json create mode 100644 resources/string_quartet_3_rise/67633b5a/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise/67633b5a/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise/67633b5a/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise/67633b5a/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only.json create mode 100644 resources/string_quartet_3_rise_coda_only.json_bak create mode 100644 resources/string_quartet_3_rise_coda_only/44490863/44490863_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/44490863/44490863_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.pdf create mode 100644 resources/string_quartet_3_rise_coda_only/5015ba0f/5015ba0f_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5015ba0f/5015ba0f_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/521654f8/521654f8_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/521654f8/521654f8_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/531df78c/531df78c_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/531df78c/531df78c_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/536cac90_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/536cac90_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/567a9375_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/567a9375_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/61207e49_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/61207e49_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/624f7439_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/624f7439_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/65120e88_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/65120e88_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/6522664c/6522664c_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/6522664c/6522664c_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/66b20499_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/66b20499_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/736745da_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/736745da_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_I.ly create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_II.ly create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_III.ly create mode 100644 resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_IV.ly create mode 100644 resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/793d1587/793d1587_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/793d1587/793d1587_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/7e833361/7e833361_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/7e833361/7e833361_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_code.scd create mode 100644 resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_mus_model.json create mode 100644 resources/string_quartet_3_rise_coda_only/tmp/tmp_mus_model.json create mode 100644 supercollider/seeds_and_ledgers_transcriber_rise.scd diff --git a/lilypond/includes/part_I.ly b/lilypond/includes/part_I.ly index f71fd0c..fad68f5 100644 --- a/lilypond/includes/part_I.ly +++ b/lilypond/includes/part_I.ly @@ -1,27 +1,13 @@ -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4f53a446/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/624f7439/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/61207e49/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/66b20499/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/65120e88/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/567a9375/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/736745da/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f0075ab/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5ef20586/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4dd2a130/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/767e70f0/lilypond/part_I.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/536cac90/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_I.ly" diff --git a/lilypond/includes/part_II.ly b/lilypond/includes/part_II.ly index 6a498df..1a93ad0 100644 --- a/lilypond/includes/part_II.ly +++ b/lilypond/includes/part_II.ly @@ -1,27 +1,13 @@ -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4f53a446/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/624f7439/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/61207e49/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/66b20499/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/65120e88/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/567a9375/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/736745da/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f0075ab/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5ef20586/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4dd2a130/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/767e70f0/lilypond/part_II.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/536cac90/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_II.ly" diff --git a/lilypond/includes/part_III.ly b/lilypond/includes/part_III.ly index 5a8556b..9d3d7c1 100644 --- a/lilypond/includes/part_III.ly +++ b/lilypond/includes/part_III.ly @@ -1,27 +1,13 @@ -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4f53a446/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/624f7439/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/61207e49/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/66b20499/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/65120e88/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/567a9375/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/736745da/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f0075ab/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5ef20586/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4dd2a130/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/767e70f0/lilypond/part_III.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/536cac90/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_III.ly" diff --git a/lilypond/includes/part_IV.ly b/lilypond/includes/part_IV.ly index ec3fac8..c138422 100644 --- a/lilypond/includes/part_IV.ly +++ b/lilypond/includes/part_IV.ly @@ -1,27 +1,13 @@ -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4f53a446/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/624f7439/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/61207e49/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/66b20499/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/65120e88/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/567a9375/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/736745da/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f0075ab/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5ef20586/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4dd2a130/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/767e70f0/lilypond/part_IV.ly" -\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/536cac90/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_IV.ly" diff --git a/lilypond/score_template (copy 1).pdf b/lilypond/score_template (copy 1).pdf new file mode 100644 index 0000000000000000000000000000000000000000..efc08dce15258a02e448c86359793ad461016632 GIT binary patch literal 835294 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

#o~jF%zyvls4Uk}|2y;}t#KGF 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 z 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%0A;NRAp>T-W>FAxXjyc0LZ1FDF1-XWQQyUv58 zUj5@Pv-9-wrV2!j@lpbd2i^nNj(o9b&51grYijQIfB7Q16Sq7!k>=%n704TjbnbjR zo@o4(&O6oL@v@u7M-wlM=vL$MA~Nsiv%@52>)sEoBKE zvNdMmEh$sF*r;MhZ%v0mJ+++Fuh?bqJ1LV!CvZEN^9N4JoJY-7_ucT8U$b=2OUxF4 zO?W>;=O}tuSX)?y7Q@nxQ9-i4JuiLOdAkK2BuE-qB9j3?6*~HiZUX9v1+6GU%z~on zs8jvMO)hzHaWgyKvSPP5ufFodf6rMvUd_VQ-tkfkJTLNcE_A|Q@t_mAohmm2&NRG2ktRL>7tV+Jq)7R@#``b$dH!Oe$DVKa0w#K7On)zL!5|{X(i0qM$BpXM ztMsEL9qjP(77PTy(Y=n>90MJMOVJR|m%t2^LNmMtg9uzqc91nan4zlAb;#BJNOCzE zcN^8|sN}8jYf5C%Z^2ZL(s#N{=g`YrFOWL3jv8LjA<5-b$4jm}9a5%)=H*=%MBL&T z7jdiqjLQRO8>{}n?Z?cL&0uJDGNC)KOKQ=vv_&W1rfM-&YVyoFmWF$|Da*PCDSZaVlxjKmKWDJ zsuE%QX$ct9_v+ey+E9$l0n^JHE}(x-{yA1DN;Bvh43#|KnyAkfq7Dlfk?cX|Ef@T; zgD^zn9ORJaM#iT;VFCkHcC4j)Ho4C??V;Y;q*#WAsk$Wv+ZlZZ3Z3l+{L--aQ64SYAgUzx52QTls zKm>P^BnR6UZgB`4j~aA2Kmm7xIHTm6`NG=Lm>DfpN#4r4E{KipUvPV;tH0pVozB}Xhy@pl z0~RbnI~{O4`nGEB^k{B%q-5N!jy@Wc4iPDJk?^3w#~Whw_@1~?ibsxC8ds$8&I>fW zVnuF~y@?~_0afG+$lWliC^6gcqB+K`x_z_%*Tt^>izdI|*zAoQZygXy)bLLasAIwe zQiHaNs(diP?*~Z&L?|Bsphmjt7OC>eE|r`<0~ZV7f4yUBpdDqYf&( zh+BCs7}*?a=o{;t?xzS5cO?MSGPA)qBC-W;Q$C zFB3UB;jX%y;22oGV!Fk`UEK~f^LAgQ=8!Hpo5dk;FHWO|hxNbUP7V1elC}0jUXi!`|34CtJy)H3ku;bRe(8oeKL&SC%ECFN( z1V;P{_)NXB64xe4Gph4%2ef#c{BoNp*ImY(3c`^fb9MyCy6v&;WQ>1fwRz?PDli( z&;Gm>NQ4_qnlB)4mDDP{GXuqKSaP-`Z;SigOJ^M2B(>#jk*>>p8OUUT%V9*|sLMV0 zjK~eui`fMoDrwMJP_js~=P#vTRj>_oX_1bd})BuN-n6h;yS75 zKvh8b6~~y4jPnP=1Gm=^x%F_{L;)RK39pWaTzLkVbPf+!S9AimZRGrcE1$vW^2k~6 zjU+Q@$^9#i>03bZ>Qh6car3SW6t{KAZMk+bOvFgN^6!~+$e8zJAXuG95p=ha^)Xo< zdu$ar)2Z-lCO1*@@|Fw~xlbbnJwr57EC3F@2uoK%VWE1EJSBB0@5kU@ak0^nzqnA( zsh+r*Aj2Sc;}B-vkU`vRB7G5ey6WkR{6^;;8Hnvd$g-$ONf^ukD@OU66oJcjI-j?Z zk|i`SHJGiC+M$le+k}&vh7nvSS}U2U`{*E$MUw7yK5?@{7sLqNh2jMIXUY>Jkg_^4 znZ%y*&oZ}Knh{`0Ue*c;2?z~q)3sH{0L=>}0e@~+%ha3!_`=WB3aX`P0hTB#{m>O) zi3fi6Cv^ueg${C&~$8xMcnMwDdMKRO=_`ZFRg)whJkLh=~Uk9(TM!BtFunuZlOV? z!os>n1O(LzZ5G=04{NK3!dmSsRVfx3v*HH!Pu9#(qM|H3J*x}McF3~Vw=c*!9@;zrY2oN_m0N?>B8=4OxHQ_c&Y ziv<@cj975hQyBSr^O+l7FBc7X0pTI%a15>ElB4gTD;C4^A5k4~d%4+qALpCT+z>Y= z`2sQffQ}rLA~DmdBguv9CK)#=xzFvmd38_(&L(cKa6ny(#7(5EIN0R9seZ~T8Tdiq z(!7o8Qa2DCn%y-ppzi{S)Q#ud5yJzWQSEe*v2rvM-NEae8`$A4+Ua&}28nyHF7UnL zwV8xVhOl{(i3l6}8=6{y{;*->;W89{$mDUeDH|=f0~eaVJOLWvz+j*9xRXRq4C~D& zYFXY%pR}yCRjx&E{-mw+B}$yj;|r!ApkRO~)Q_gF0!dnY!2ynRG-Qd!0?& z3_M~U48QqrH>9Z~qN@Du77ddg#Li}JB6dIIh6W8ZpsgEDamWp`8o`>AZ7T5k<`k+I zJV4*#qGw-w&7HBxveV>VMFx{UyM*B)|}1Y$V3@H8_qTG zMbeN%qHf)B$_KCWBaH~0P2rqqk!n<$LP8C3la(+gKkzMRMln3D9c2b*t-1!j2^O9a zOho8x4o9J*Z|HBDI-$Gc1hq>291gLw+;BwBCUIi7`)@dVx4UrDt7=hWUvUz7P(;qA zasKUYgX>N}ZzPVZKDv%IH_Ih>!`XII4+RYd@=3?!GT=s>byRI0GiIlkqdMzW zGfCP+!vgyGB>&q)BNJgKRQB9xms0L#>QMhi{B9@Ub+?+V5XxgDW31TfJoaXX?OSdN zn+UVm>a^U7azd=-md4F%oSOij+_?E&(9k0@MxuzIYO`KAS+mC&spEREYM0 z)1&6~=393p?VKtF)|^e@i1Y$I1 zHIJ{07W4H=ROejmbyBwHyo0giYyxLOiNpe0QHqlgi4(qiWPm^&#h9+u*x04j3a@c4 z;-)i=DKE>hgj^*d#8JehXbR&y<22ML(~88Zvk9Dui3l%5a{<1B!ZnsBscT0k~54;<87B%>|w(niT2=FO~I2r85xe(I`?mOn-gZDmki>+@|3V>>~%JCBO3>j(Q|<`0JbpaH+FRRFlj}T+~VO#cd*8C&NAENZ?}t=#0We(Wa7bn@6KAh0F#Q zxENSLr-3SR6Br!2YHn~rJ&MxV?GA&)y#lZbo3@FYO=PR$W>Y?0mELT;$hkl6|GLpF zz){T`U67$9SsSWNW}{Qw1g8s%uM^&}Fyv96;tN)cq=$&}8jZk--wQN5(1}q@5&>3z zq@L(NymlbYI19Roy)H@=r$zTf_M(1`B0uG9-bQYMPE;jmExWig;lvD^1}c~v ze}t$5;0DEL>L!U?BDaLd+1!mt+%RH79qLnwA?ha)$6Sa!rd491irmInrAP!IV{W&L z$ZhD!AGre9Q&f@rKvrqsyv8{#xrt3K>J$ycKT8ZsfjUJNxa2X1jI(6LDR5D!Xa*j0 z=tn6~sL0}$zU7b!;39Y71*7RS@uC4%#yo`jFPiiv=S9w;|Ky9ChA z`fD*eZyeQ%`$kseakIIbh}(aw+i`yZx4JxXK6kTM9HtGHXr@?kr^0qjzFS=$IG?;x zszS|DLZ8SGo+yCCfKvWemzHR}#yO2*QQ%H6Lo~9P!)OwS6iz5!>)x1UMMQPR#e&Ok zbvAdyq1L?s(y3Kypp}ju5@uDQvZx9T@g+@6G zq&v}M6t38A_|Q2NZKqghtCS3ab|{m(`QrxFjV^S5+`u4XddxbiHj)4xqd{rr#m;Hw z(u3SqP=G}6MDR8oF*dnLBz(Uh17HpSepcWO2)}X`EPcfwXHR4F)|C6~r`TOD>(a z#yT<=oq(c9Kf()|ABF+|!Vx737req&7JywP%@r@3#`)tGMXC+KDZka_akFV0(ih7L zUaYq;$X0&6W!klxgKeJrdS19!kh-~yEp3;qS567nTy zb2t$>A&p*oz%ixdq#0xyPg1mE@fE4^z}fyO0=KN-1u9`%!K)8S$TWg9-f%(0O`wDW zB^#MaQcKN3CCr$WVvp*Kiv^c)Ly(1Xr<`0`P>=b!0y;hC)Js#{WJAXOB5;XGUnp)T zvHk4y1@pJK*Qs9~^XUs;s>t4P`0dC7rv>*>dLcUxl^l@$lvfDSC7vo8qKL+NJ29m~ zY)2h(V3^0loldOJm~AdZwcgedmoGP)wu$pC+J`#WZgezMxYH$Z^W8&@_gbK#GZ!3( zgrq0HWvFvw+k?@rwug?av!L-_3nFm;Mh6-Ju^9C?x;$<+Y11JXfltQ2-hkIFH89ne zTRu{*@jeSWz%?fjR$KE;$4w4(<}cz#mq}o0ywid|a$EjOCrUHj>B>)OKsW=p8#iXE z@m>oeeIdbGdho?_M$^VI?6nuwt#0A0($~x~i6dXRV#R{~SNuy{ZbFG&-0G?;vCHo^ zK4-&Y<^b)>je^WUqqWe3vV74Lp!!9%+}0euENA157HGAtutD4>#ZLoDrqoLU(hQ!6 znsax)uw`a&=(MoOs-3*}Pq&@CsD8So+no1VAYBaP<0!lB9G%wN8mx}_9Gx%2Wfn4M zr?Tsfz)4iWpQJ;UoCsekB&|W z1-hz>y{hdmWKRhW0N)!xdHgxjp|iIZW+@X z3hUTKBXBlrGfAEl*^ARJYX;nj6o3?%Esg4oQ$=b>@ivLK0>t|;odD?@j3z+5&m>no zz;B>AnMTaAUf8hFGLu-7Lj!<4<96Uqz)jF&Mc`hg_%mE1AT;#(OJJ^q4CS zG|AxEr&@Qi4G9u;!OHVk-IR#;1p@Q8(dcK-9YkF*3s9>Wu(+)-dI7zZIUe*#61l= zZj(&#+-fGTV#y^mecn|;Y;~v|c>zX~0JCMEgJU1V%;l&u84?nctvb{?VK9Xm%P(Nj zWdcZ$*X4G*KW^eS0<05p1Cnwmin9AUX=H^Z2jF;H1@QANZ%gtOAQC$XpCO;It~^zb zx^=}-?3Vu>yW!dVjRXyKde5x^df5KKQGyzZxb0OA9ZN1LRd{Cw_`cy;14jZFgykTD zhaICDmanbCl2?W+SVk4#jTM~8*SvsNsh#E_g;to}InZ2EzMTfIKkRf)_ehgCE7*~X z4yqFx+-{6xDc?e+{%NquzG=L-f?)t>Mx^kk#%1mT-U{3i4&Q`Fm`*jNzN`lw%@xTZ z=gk!i3?F$RgGOy6w2Te%#Dek_SiR_>s~NZNQA6N5h8A>_MWJ|u1%sqez+WcQ7}BmZ zsez6mO(#GZ%xx%Hve?}P3BQ$hR}gXAi;l+(=sH0%_!zt~D`6Q`xngsI9MZep&E|0E zkt1OT>V)no)OoSuzR*#v!EHdzB30mym@z;u!SxbP#>K^kuJ$;WNr(9nbA@7VUaqjbhJ^4_^dh>i85UlINM64K}-)= zpX6OlD1`{zfQ$%CA(c#GeWi;dI#?t`%@_n4Oh9Ws$%1Aubqn4vCK3Tgs*cS__1=)6 zv2nw?nc^hm9TNaLrF6I%)Zgt=8YEzJE^y?q1|9$^)WPVt0>=!8Rj9k%3McSZ@-77; zaba=61CP;=<3rgGbC_6l5CL^!QQ&EVkCu{0-LBRtaw!LtcU~ZUBn{mqgM5S#JPn#7 zb~0p8xpK46XKCfedoSo1X>g#2OhAQ6i5=uDJz!3%4piuXB<1-WZ@r+S+2$mK%4#wK zk^?M_DYh@*s*`qCdG7_%2ZB5`t~TJ&xEREu6J)0=TC@5dc3O4$j%Pcp0+6+!IlAI( zU{d)VFKsgNt_!fd1O|u2w#AyMnjvDGseo9s1e=prt-R}k2{|xidqnXk1r9Q9hd3B9 z{GBl@z%LD4GtheB8jQT}f*rYFf)ZWeE26*Cn$osJyw*35YV$o)B}nPWV9TxbT#pT$8ED=*UQ!B^Pm{j|%veU|5WzgFj=! zNlbUBNqP3+aq_@fdYlsp91XG9JWwZiQy#eKs80lSNvyoVfZ-S1jvMo8Sagdx;X;zH z{=6D^1QI4Fjh;qhuZ#4}zt`1I-{hN}MdHLM7caSpT>Y0^9ykldp^F9*0j@I-kqN*B z1qT%4ddOd$c-hnhWo%}gOt6|7h0JExK$_7ooam!HdjiSG-V4SB)oiMo5ZICPh&u_z zuyOlV+|paX%42f7hy!@7>I5Zr#MIGSu4ayJ7<9X%!`SKNoa0c6*3%5{zwr}GvJXfe>s1>h0K z9kc=HM*(oOYgILOyFYd*?x^!744Sy&Y=1oeQCGkpFDgL7Zn4NOIW~b4krUhuh#8k0 zw!Q^F%1j{6NwzqW}hzFzxMS6$>DQV zGMy0+Ty$b*b2&mHyb!Y|=><};7B=o*03lEc#PO~SaE61Zgb!i%5&;&_1k{62uVJFe zttQc*t~rcwf%uCrFZa4Zu9tb;K#lQQLa%n|0yM@=s*viJF45skK&M+0Ja{pmW$-{` zJebM1x=jkFG#F2g&T(hcIV`*{c9GUVQprt3A=T3w3f>9&ual#^>%2pQDA*~HF@a)f z=$^YQ5mYe76cu5xAvsA7uk(d0nsVokw|IOoZa&k>Ij@~q3gUyg9u#EMKloNJn*S~&Zcl8a>I6X2PSKHfkay~T#EAHe9*f*a5jHK;10qcEn+vWHLwD~kO2WygA%No zrK*UV7s!L~4)>D#+5!d<`khe-%6R177Bt|qGM9NN-Z$e;I51mFDoL1V- z6{-MUnBa9V0Znv~vDTPp!2A|{7@&ng<{GetnpmW--6AFYLYzSsxtGL^p|4{=hCv7L z?goE=20Tn%;W1T=bVxEd-mt+S2$Ix|?fq_m8RkWSqyByeK?-#mM|IYD#|Hmyw?ij? zcN44`^+N~$QyMx;i}SC#-BvX;QbNTpAPTU;pbUn1WV8{q5||s#K(a=}SHHwFiObLp zr?3vF?}n32@aVi}gYH2siqA#}ztSiZ^`BK&ug8i@&=}sWfkyLu1~jCnI!kqVM5IbEIsA8upU!X=~tMl2LeZ(=d zg;8ASE!amKQ<`|!)SO4Q`6ALo&O0@TCHH4<*z{h~uU9^MlLyX{;%ESsZgqjb8Kja& z&6O`exLEY9uSE(KiyIWRd4scN`EuAoIHD_|W> zWsR7S$}c*!%w=R5-m3xQJrEZ0X==DYmch&p>7H63tjaWRPyr=b3|iytlG}0HJtYyh z`fr*%a2A0R3l1$n$RK+C3r?~VUPDdVfPKp4k@E?heagiQvW`jxAAtHZ$k^)=E+B8! zKyRAM5;XT2DN;G^CJ`;=OEf9b8x+=P9CAVQ*3oEyWd9dH^pH*w0X2Mt?Xhn}^|Vo9j3ssW5$@}lu>4dO);*qeCKl*itr z4;pXOATBqmN@-S2$EX&#o_NXComCU*m)IjZKb$z?0f=WdW|cR*jpztuqj^9m7vMaMFITU{oC z2&ubhZFSK^gF^*1P}Oguk-CDUe<(9*@D(ZoXcpJH`ZL^$58E zTz76vGXQ^fc=VX%J38AMZMD`OGpKWi&V9Re4QmtBt!0mh=9PS#U53K&9t|RHSY$(9 z0b&Do+?oQFX;g9B*PAqOHg%)G9W-oC4jt&eSPJ%lXEBqB?rF^4>$1QlL@3^)K?IJD zio=P`;SZdAmpn1sD32;|d#6ieB_#F?u-I~-BF7A75y;;GTK8bYMT4w}TZ>s5P*hP{ zBU*CzL>(+XCUGNMdkh!@W<;dm$dODCCYJ!Q$Glp-EOIg);;3H|YX&=VjmVzZ=rAS0 zl$Pc}t09JoUy``p-e3!VPUY&PiFznF5;C6a&o11W@pjl)1Lc2X`Z+26b!SHqrqB?_DATTFP-`Ulf zj;U*xre={s_qw!s#v3t+5(NzxC^bXblAP7B*FlrOC|-=_FHvP~zNjUI8E?QK7TbQr zO|aG}coiP;sG_zj6v<1*n=kmYRV+32j3OLl0fVuPRcMcPZ=WMGdCQ?PBza1Xmk?93hYI7oRLCz;){RO zSj0_)4h>Uai?DyiA-9xlF>LCH*(n9tsylJoT^!hG@U{zN>g@nJrDL@LEklhT5EPC* zl`NhZ=B!5*yDwRnO;sDb?}Cnrd9TwINY)~_*8&aF#PJ3~LIIh(!qc@VN%@D(0J(uV z<_0{yA^nBA1alh1d;!|*p(~D*1Uza6Zq+GPDkC$=GkEU>fABG9X#WYe(Th9YieAx{u^U7oNEf8@dhjqua8$nco`!0AGUAxHa zn%nDmxtJSHL(neZ7*w>vI1ELL7mA+vo{Cn7nvG*$>@ufoA}%t4!w1vjqKAw+3P|eg zVja@1=p@GIUXSWc_w9A7SeI38`bvcO+Ylr=*b$>7rfGsx81mcsr<@EBc)+;IS6^K2Aiz1_hQ}B# zn(21)Md_PPss&~MT4kO$s?1%$Ep3uB?RKD4%9EUBW0-*5q7^mu)@X=9#H|1gFsjN$ zlx#eA!r)yP#B!r>bCdTkS>Zw!iOLucuD%$3)uIaAF4<&pvsoO)?En-Z+Ucg1xvN2j zlf=!FMhui6lH*Nr19CUqG_(RPy9bF65!_X6FN*b+FuNhv$wf|{DjFuN0Y(@epq1pf zLyq=9qfI>U>h5%z8kWI3FPOj?9f()NO*Xh52zn|XHy&`Qqm;p$FM#d}gKLkU@(KVR zGW1C16rj9HPI)vE7~XzC#EyXm@WRLw7W7{b3Q(?M2wCZyUGB1ik!tR&i&xFhdbOW( z)mg97EQWVq5LcWCTU>Ffhb_I~c=H7jHkD*B%EQeLp+l$~YeaB&#Vox$s#9*2X!5vO z2#(-&CzYf&5z>j4q7&)f7r>X1AaKADnH)yMO&-7+2HBiCX0x#F8fH4sT2=BTx7S-H z?}%x6K5}0UBWA6|0at(4TE5lU0IO4LvB^)8%bODS5D{z{;C3zJMp>4%;HM19Y=&?a?_`0CS7#h+B;`dDLv$rh(Ur%a0&c z>~b7y^v;m0(jHfn)bDF2SiDDSDR7uNZ?~Y~M)M#s_rGQq=Mmp4K=6)g#s3Xn+Ck$z z7ew$Hx+ywdeXy$lw1X=^7=@wsixv$g7&@X%%1$R;CwW7A9#c?%6(7+<=ae7FgtA$* z!baNWA*mq1?8Nkj?-E9NVitpmYQx)CoRsy5f=jaC7U|Kx=%vB zx(4zWopogIUqI$2kDCSDTrQ}jfHy;rnhvxEWH>l3&?ASm-KB7s+;TEEs9nrGYbZRJ zy^i2LMCipK$M_D#u7MwlUPBR;4Hpo(zM@asnHn+v{I)Yg|!RGjh7yqUBw0 z@Qw?FyEwt+_7i-a=qq3-*CP13)a)hsN;Ek=fcIPwkz>p>$iKTi{SSPJlyE-C~>KD?yui-vuIpkbAp`TbOyP z9yj*7EN(V|6LD*{pN@!|X7H8u)3I_HdEjgg=MUUcJA`Er$a9EOae!gbx_=pu=#|l$-o@E2z(#&Le)_%x!q8b)~LMm0vVP& zkiLly0}WwoWMr;-i$U5hhw>A<;=Z^ABL>>NNZpafD!_<|a>cC-MjE)pc)?z9L68s& zt^z?K%D{as26^Nx0_Q*EcD}Bot>7U@Liv21l66_foVQ*O#~hEin?x?fsuQ=_WvE%J z`1;23MQ8Ij1B@?|hHmY#1riq_W%e&%yGt`yH=DnS$itFo5 znvjJ3s>zgdcn1cZ$`TM_gfJQuwa_zGgXtONvt~ywMc~jTNLeX z*;5v}=?*qMTwh7z!eHO-B6}6LyYktq^oo;sFo;(TDGYfLh(}FzF9OI!NiYeC2ZMdJ z3wjI&nsC3Vp?}D4b(zvB{6p9?PD0fX^cEYPX0DwW+fja_OXoGf`QYw0J8plOX2-35 znI;dM&E7~H$9~R8!P#(?J%nDm1av6|fqs2FyhkSw{>@Rg`d%)L&1Bp0!v?2b9cjPag*2_17wDux$phha{%VyA+f z?syFbS{5Bj^}aD(aT2o?gLh=GXq}qZKW|0g7RfHI{A#)gitFG$mT-4nSK#^IT}n5zolP?dgWTgUgaD ziCMyUl!04$5~QYNk+b~^6Olt^%Y~DJb7Z0vCf*fHC_$KyS@le5+!n#HT1l0;{9TC`AY;_lI5Hh`4M-^1^NJek5~hhWE(5aRFUPLAz1Qt=D3kQ?(Zz9rO$#Er%1e$zF5x1WybL-W zbL)b`0Vf+HXiY&C8y6hPBt^X*toJe+*BjfrKx+otc}`s9_Axi0KZTF#3pnP`5R~fh zn3&DyE;$`Ca+naaZudYFKH5&a>R-g=F4y5PB_ik|cAR#Q3E`fNoe%k%FXFU=;~fl| z5Ci;}5-D_X$;0G<*j6S60O6e-=q9CbP0fehzT|oOG%_=G$BPUWgcR~56wkUFZCjVA z<{fXxElJ~e8FT}K666%_0?b91f&qXJCSLfSG+NY5XRHfe!$v2Q3vR3PLg*rNC$_c* zro4gb--S6MC)(9U%uaSkmB@+6WsZ!dRr*oQSFBjj|K_lu)BDOb5M~6lGN|r z=<4V(OT&n2qx(u!`Es*4oY>|#)L>nqF>P;i7eJqw9*K!E@aRU)=5G`^m1=f%4v{U~ zY_2aMfpbVmacKb!Dh$w4`FW@ZYE|Oz(@>2YB4+S809gypEES=OiuJ1_V4VHV;aN&XF=eu21r)u z<9z|Rt3zT*NYEO$*X=dOdLv+{y`zIimSzBuGuF^=q%2$AQwNNoGq3DAqfMy7HAUm&sZje0{SMCuRlO zPdMx9FS;%*P(glScDjgLEV_uB7Tqw_%;0>Db9vxA0tX1fLksSp#?rs*4Q3cdMAYO; z*kDX_UUD{nqeUh?9*SK9hYnUY)=8(5Rqf!VR~#>aE&})Oc63weMYndlQ_T|9x7+1` zv$>lIyouDdh!#TD7Q~S<$gazc38@&?(TwUT_Z2H3$jFuEOmu>oOAby4{>$A14?;5f zFestJrvcwuB@erG*2!yR&wLkA?~uv+JI z;Xx4_y=0yEaQFzo6;bl2`;u78QkSZ9E{WyU&}k0Pgo}$0fhARRXgXN;oZ1MiCO_(I zE=QKx4pek>r$HGSaU+Q*;sB03Kq(~`-9jM|xP}ZKmpr@ZY%+%j47@+zQ%+@@2%dWC zdJG#$^G~}KJpr*S50Do|CwU?_N*v#o2WN!NIj%b80XaC81+(BYWVM)-M#N3`8s0$z z&?|g(Eyj>1h7ACsT6EtvM{XA~_i&i-Cz{Vwe^@yh5TY_a6PoT+egW68a4MKc;o;lYWMopZLSYQj#J zOuDFIMJ@whWdh~sd*nAN=QHRw$O30uswO71V8Dn#@uq_=X+l@ii`>Qq`vc(6O1|m- z^j*fB;Dyme=z{PIjZFZuC|eaL{L%oEj3)&373Nj*53PwQ9vpLGfYR<)dWuInvW5bb ziQ5Uz2q})aZC1Y%U@i(42SrZcV+{Lm@=%O4a9$Ig0;d5! z7i2YEQ-o2amoGWW|KGKJ9;sQ>4Iq&5#Y#-&}+BTfxs#mxDRf| zGfosp4s7NX(KQq(CbAa)iw5HZCnmO(f6}Dfb|}a(8H_(}do)oKaRZN1c{CB6Fv;b{ z%b|;{PV*}|+G&;=ICKe=pI<@XK-k%h&S!4+M)$vG_JXTlphaWJS>R1Yz7pkye3gW5@uGUBE|Yq!EUqdaaFZ4>J)4!Brv^$$20eiFRxbMf>4l|b`H zPJ93_R@~m{MDtWsB1q6WWpT3!8^ujFi&ifIU=w}}x*NV%zLy~7@gf@L2^WD2t{2&> zQZ24J*9#k6DprmC%S3L#mC2+fw>eMbyy?VnhYPQqs!FEzkc#{{W79SwYkM(sN|m@5 zjWhBX1@40Hy%6+Nl+5aDAW0K-AcyRl+mYKO7%*57@fT2ugT^b%)t$TpgMYi*H#_;Q zQb$Gkn_afqofxQOm)v*E-FA&4j=A!sxIAu_=cdD$%T3bcXcD_|*vVSeZ31M)9H!b$ zV%+Q!7OxZPFU*nyTtmkQtQUL9b%@?+xaX8#a@ku>4s&eWz9kpUQnXQ!#C!?OQp}}D zh)+(e9}~K`-9&}vKjo@dX!29er*GKePSS%C6&kTRiSVU*g(f4cJ9*;;8mo1X_LHq^ zsRLl8KcYS_K<3K@Z2)egi@*ibTM+U?T?PWs%cX7o9V*-Xtq8^*d+i zAMwR0#x0^1IZb8YDc9{o?m`8la-TRFakHr#*$1Pw=CZ?v%?t`Ne5-iWxyGBp4R^}z`68f7Uf@3=tMy7i6=gju}f zs^>5AtBuXubZEZmG+-yS`2kHXX1%ezgoZ%vQ zcAzkjX;%|n_p3%oC=p<8MJslj5}`xUQAg8FeM$u0G!s}1rx-ybe1EC(fAklHH1TJ@ z6YQ4<-3MO1l6otyGFx?1oJp$?9 zrk2m$hJGa=sCX_reu(7% z^sA(R>i_-!H$GYa=ji*}e4ndfO9`U)l02t9HOV}bwkmKk7KYYSI^IY3y$^RMG zs#>{P{aU`y7`wJ}ht~i7DZ^+OaYykngFyEA-gSx389sCblKjtq?9YvU)v%QI{QDxB z`{Z+fFnGVH%&uyVa9Limr<=l<;UeZJm-9?NyyB*;T`K1)FU)JBD{zrsCDPiw&6u81Vwb{5*ps2 zU6C@TY5!aq`=8~5TJ>nzx>IOGM2BwSMS6Dok8f!$?Ef$Avo-nbJ-1rs|M|dL3sJpg zm(VDl;?kwN_Gw%gBddi`%HcyM)Jks}RK9b|cHww|1ADTCw1_b%8$x>nMI)~!f3#uIv+NEBg*A);{twVS?o;>UM4#eXf5Y)i_e{s@Z zKyQ8R(1@>tS_ZWV3Jq!()Hw)Y289QOcWc=?G`|%<`3{{!4LS#O+CH~5_x+5$^YObP zLVM7^dqim2P&~Au_}BRST`dz-H8iYUMEgJt-8!5hA>k1{LR)qT=recT_Jn;>*N=2f z)QmCS7Q5DU?sUK?Q##Yo5$XCR-qAbBfgOi-q~Cg^?##M{j!rGK^-_-~SubU%-TBO% z`(MSbHKb&}Uek`}t#G2xlR*{oZtwr*(~}+l-2L$M#f1#Hk00~ieKYfF-$~~d<)4?c2?rbo>09W7B6`?6B_QiGKO+ddp9Y-=b~5_lqvy|9$J3r4hl$ zS8eL~ebL^V&RlM2%)8TSecpzR8?L%gWbnavC)f6UaX08fmW(sfq|TBdjl139pY~@z z_N?0XFAn~5?Bb2=nX_cj?iPMItIt1c4lV2U&lu0qo_9NsOOpC{saeSqzy5H3`#)Dh zek+im_-~7*S6Vf#dbRf_#;yCK&8s%+&bK*pYt-RcD_5;7zN+ZT=2f+-`RD6nR_zYi zci9nCC|1#LYwXdQjQMT%-%ndKDcbYV+2Xaot)0Evz$2HAT{>}T@9;ClmcFZ=`1^Fu zYNe0msy5!blsk6gw^S$k4V>Aw-tLuC8}2;ue&FlX7ZbMaeJsTNVb5Ph z*Z*UF2wK1O;^55#&-9w{X!NE_oqKM&z3JShRh!;)&i+Tp^%}Q}K5Kq==i%fxJH0JG zDE`iwR}bwxvGeFZ6aML4^zy{6`8G7}y7}DWG4l?rK6awbn<-b`^ctLQO`LW^SL~{h zBJk^UbpkTQ%Q`G%ckA8mVcFyDO!VX5oj<&LUGOjWg(n+Iv>$x-&r2a^BM(Jhj64&0 zbpe3v@dStSrS&C&HkTq4-(^=Cb>o_`9!fAU$NB@>}e$fH9pU&G`BiT;x zA4N}3e39jir+n~(tevvV$@-h8S+6WT2i$vm_F1Qc*+;teoF92~oYbiLs-?YZept5mZ1(~a zjx0(tee8n;C%)Od{KMJ1XM3ORn&xhsNAc#iE$a20s{TvS!r^~h-*ENt@xxd1@5%pr z{!{tSRJyaM$C2IzdUWjdAmTyKOc9xSZM*aG!u|eBf0#RH@zRq6`V}cYsafS;7H&SX z{r=t!i6503f3HRGxO8XoN8~NM^xTGtuG2kVe${VCNR{SGyPo;sRP)nU&y+Z|^VH2_ z=7ISwXK$Vz|5!lV;_GKz+?%CslZ;&t{P0!FoU{An9sZ56ziQSq`;$2K9;_X)+>q}q!wn?s;*K;Kv zlY4X0ux%OljrkC?`0C9v<>SKT8(#j@s!OTx?j=5?YBpe6Y#*g&J2E>XNb4_uG!ZLz3-f3!@{OpUN!iBsa|kOu|KkRdv*QQ z`V`xbkIA&A=jsKezN%Btb862|M=$<*dwb`U+avaCVZrWsw|ec)m}N-+A2W?RIqQA* zTUT;FITro6QdFJKST@?CEB;#<|-zev>fm`)|hg{_Ad{=9_8^OL{ItK%?b9>7mtg z&FLFivu*|Foaf&b?%b+ht!-5o)Et$2`@zmnUjzhim~*#pp^&dfRsFiss%81}cdBX3 zXf(Xkin>PvGPWpQ&vhry(|vEU?<QKwU0(-neRAM^^ItO$p7j1f zucOCPZt4*`&Mz-c9=tGR&JWGwElrW2Ox?)&uDmI4{#q^~*P!(kv*oK)^t+TN!X_4f zuwzb-7t5ZEZCAUIUL*O`tDAORjN9B%;@iu?Z@$~s+ts2|*2WK3y{VhM_^d~X`n4Wd zHR0EfvrfGJ=k1w0dJVo=qj!RbtCOy~(PVM?BO@~Wu`l1U^>KTqKd~n1@pFZ5SNo~a z!7{NA&YKoKw#mk|`a3 zw~U?OTF9P`RTt*@RQ`J7El1WLKK|xm!b|T*EZx4X>fNuW<;Z7Ln7#N|EANMAZTkLP ztnQQobq3Vvv#ifIwT^&wtOZ`XlPeXTH>c6=E^!Hu*I5(F%I)6&bUB~uZ95y`Rj+;%szB_s1`28JQ zH*@xHc;=Vvh3=I4_3u3wi{6^Is?3w_olcF}xqH>EU4J({nQ~XdsWo2bJ-z8p=5EP% zCO&twdA#Fq=WV)|EB}!`<%$(dUUx*E$pwpKe|zKp$TK@P7=JEV*`Qpn>f0QJ>Sp<& zZ0OPFJ-wYbY3?_9FNQdu6#b>jli#0R+kHBF*HUwTP38Kl(eXOlAL)^0x({wvw*HNo zTMyS+6#8~xl{RlnwkuubX!lP;Z;zOrBIT)6drqGCbL9SED;$wO?qBw>PU448w_n-4 zebRv}ug14nSmvkjbhTqOuO6#ZyQU*HkMC3WZCJ0~Wm}9H^L$dL5TkRy%Ml}YoI3sI z=?X*7p3PTu!Kfjlt8E(4^}D1i;+=01t4W#7DbD{G)GPkBR7cFvOe-qZ%$s-0$JJSz zesX7@STg$8vSNl=bv^3?1{DLM1$M);=KH>M2ZY0@|N~=Dpat^lvFh$|2fsnbNkGs z;MGYDclM;EpXTXXu>G|LE&8;n8BwZV?VPpe)JpTHM!zx1<89R|l+89}_1R~WXBv5{ zja)E$U_gy-!Cxha*RoHakLyNUIdZJz!A@H$Ej@H>=+=E9MS}BHnz8U$x&rI!_82*J zR<2oJ=UN`CScMV0`!%^Vyxfh*)4%5IvU=N(v*UMaAC_rI_S2i58gD;^d49MWB%lfN$N)Qnvk>F z?8UVbh37spxAVOk8D6|Bx3s~SIqrK8%$n5_y{Pg$BDm?$wN1`sF5Rt0ck}(od%1oL znlkbC8<#dTc)a*V)?IJ*xDy@S{ygC1tWxd!u2@ob;h6^kNz%T{clOs-O(tdNsLvlb z?nKHeWg3S4@z&L0ORu#!bq=4R|ZUJw<9QF6^c$0T?c$FP5W_Ro5 zxmD@;_+rhzY8H~SPp;nSSO8>;ON z&h&D`rg4+s4>4*?N)Xs2^X}^pg4PD~8M5Z$<2#w}RC!n7)!d!+-j%x+X>m z2E^UG``aBE25euy?L(5fZ6+U`UU_S+-FeF%HBwjnruEsc;>}nZmL*ez^*1X{c+ovU zwp@3vAO5hW#P#i4Gr7a21yv~9FW~x#_YDbR`}uA9p$e?)+u`7w`5J*_kaCemT$M`e9-d2!jIL~)>%^Z`vSGwbvk{q zwENozWy308$}o6>H$&!(X-k&NUC*rh;7G?BYx5+1m&bYQtL_6QS84OKS%5g68KRWy2lsOkq$)9uL&$$W| zt+-`;i^!2B-UM#hK5_4?J4Y{1e|CGyh%CSLI&kdwoH@U#ocW|4JTk@4neH|^@V8@5 zhM!jEoRMJQ%cP$3^}d>wx5-c5bbmbkN8kPC!=tq*>AP>Q z?)v(DoBEBL7OvZ9>dd@#7agv3Vc_LP6G~hw_oDxAXIxDqI(ICTG~S0Rmy>1jJnDD< z!TsGUW?iYCy~Vtx=D7pqM;tsbs=~hCov!o0=lsK4{plQYS*AOuTvO&Q{pztkdu-6k z$k8jV)q1;n^H5VO5iodrGwn+j`+li8|lqs9WGx zn@!Ea{>t3tQT7%m=7l`#USe*~RL`?kd7m_H)?3T!UwvI|blkgLTWqNN{gG79H!SOW zb#?NOdyI`gmtWE}wDQEYN$7`Q2Tgs0!4)tyEu|}G*H@b(mJv;Em zgASfYsms^Nem|&E%>pBGOnG+rX@+@Ajk9ZqPo5O-mcF6bpy3}@HhpwGJWJTe<MDzvEanSs-wZnqc?RG?As+RjGYzQ013H+Na$8a7_H>`OI>ME^OSp{JVCod*4VK5Sh5c+hk3? zx;AIn(`|2y_CD17j~pQphOuKXI>)ZOM@z+CkwF#I}t5kt=;|9c!TjJWC*8049 z%NM^qbg+G$dp8TsoOz?!!FB6rc)e{lRj>EsxjVNXX2=k?#IA^U_nI9pR(F1}AFhWC zd7;fKlrL!XkrPu6-|ARyew-ce(k1Ki!;U5i&UD!F)wp}Z_x*im_3A+Zf!AB^+x^x| z?5T5eNbRMAlKc~KwQ~HCB}!N5)PB^Q_zyQ_O?0`!*fU9PFFF0koqp*~yj{Gu`qDG$ z1FEbDc(CH|!-F-#8ukwCcA|gPPM%&L-q&oLy>7$l^K&1rJU-p}EM4b!T~m4X%-mJS z9v(L)uy^wJ175yz-~H!(no?cv)rfbY+W87dw)1#Pv>n{6{G{UwqlYEmh-jM5C^L|$%PWqCI&pk<_4{4n4RN=RW58V2C zY@s~P`L`1soHQ!S(PI;)H@sF{AM05;vGB@#-@Y3efB&)iDOMdw+Q-qZVA7+d;*=~G zYhC_Ld9&nx@pjba(!~e#nzsGK*!cr{ZvSvIWYpj`tB4&zo`aPcC_Vy50HZ@1HLk6S%f{w|JS; zWShRpJuTto>(v`YJc#K1=Gu>gHy2G@we`blyGFZy+wgTgZ9~pogO^-69$B-}Kc%)M zJKk+#ib4xF2By8bqI!{Ip1AuW3N?6=Dbw2u!{gmac{$a9qO*ooTG;B=;X2DMoUJvv z{?z9C;yiv@W{)d*^^hc8B1a8Nn&R%@I44dy-;PO@;oHUU;_WK2)Cj*}3~Mm9)5kkQ zZl8+1$5W|t`GB7u4%pFb)v1RK%Pd&(^OMutFR^4+Z;Vu zw|A$IUWI}eoXXg<*yPgnOLg6r?f%z}jy=c4syDCVH<8KSG>AL2K+_pHa?P68b71#Z z)0h7;e0it*9nMEQyWD-&*_*q!FK>FiXZ;=xGUp$frP}U9`q8kbopx)Fmzl-xe%12q z^mM(}mwB4u_X(R_?UqbmpZ4(k_HMnnyV{H+L-u}(ed1u|Tqn}q>+xd3gz=lt=ggj9 z!^s@0=U)qMnd{ozl!*$LznXmS{>!!cq}aBnT(=w%Lo00Af3Nx6hOe~PA7lLyo_q7K z#(OV@Pdqdr=th3VglQ?pyH!ei6tTU2(;v<-_Ftn{R)((&GjVwDC4pVrQ1 zKlz|Qwfgx>1t)c=4A$$to?0c%W5z(dN^=_UU7nFS}&zyIh+}p+cLBBIAdgjvK10O z-X7TR)6snCvpW}?2WL7mzMt^1PuAb=ygt)z!`;=b!V2ua(yZ*PYnuywpS19&0c&EWHpO68ijqrsb(tu3G4?1-q>Jd-$z9n^QM-Z!f#L>A@kF z9$iWQc=F`$UQBMh{r5c8Hq89W`)%KwbGFP6*ORQ?@#0;DZo#i^O~1QsVfWR8T6S*p zW7qf10>0b)sQih7uU7Yc{;oypL<_q#yX@_`yjqjAX$n*ySNU9<^ljI?|EpNvWMgBU zyi)LVgP)Hc4LWIz9Qp2jt93adb520*=-c6A zvCEUXkAJq;G2uX~`YU?;RB=+|kn0PKS9ec1mVCcw>gvRYZgl?f#fujgzE8Dk!Tfmp zo9FECI`2>4yBtq)q-wTvci_r3l^ZuJKR;2IXU`@kD>{AezVM70#^j0naoCQVQ@>qO zXGtzs<+U{&$jF0|(5FmFQ!uGlA81 zJ?)&S!I+zEzgqXWWQv`!%dA`WAV=F5EAL&tR`~g;17|M3?D8q&&>~g8^91KD_M>t6 z*@@d{3b$KsteWy?!qR1ut^4F@b*q1a*^$fErCO5WVvpt}65LALesrN7Bc2_u_%O+t z1T}viIwV%-3K0=&gKpoSo#Dp8$0Z)DZJ)VO_Y*%fDb}>;fT{P3pZRzyQHMGiXWXvp zTDGn8y=h%yhIbe6RJN30mx0+I?@6{d<;t|a=+=|T*JdlX z*BMx_SiXjf`#9sA9(>Qtc)G)^Zdr48s9C0>KDk5am948XwA)o<@2XwJ%EX#CD&+mk zgwHqqb}d`tX4}m2^PLaQ_8mE4{L;InN6d+9H*Q!3eIzFW%sw)1|*DoZ&au5M~B6m8TmLoPGIT5 z-O^6{Ze^^#dG5^ZpZQF{>4tCrNR?#KpqBI7#<`OLr%aI{ zPoG6jntZ(9=>DlAleQ?*vctj1tUl|{5JTol+hwj&^-s@R9 z?zPvgvtO(9Va;97nuw`p{L({ydsgF3w|0AT{n~43j%qU(y3^gOns>>@jhokH&9SZb z)e~_~J$s()cv(bhrrxrzn_`9(2FWHUQ|jj zId`_+bAL^G;OgZL$;^b0_r*?g`l23DZBIbWbSskQ?N?@If%PvF77m>`GIy7H70mCC z&p%cDLdSK^{)1D#$&jc?xt#9J*-qU*Q@r@ngyr&Go|11&^WnSO^?8;0Sb`Frb~i59 z=zI6kE*btww7TrI!Mo#ps`50~)sw%NA7?c$yuZlxg4fdJzLE5sj^D57cP_Y4={Gk& z)-RZ=SiUg>vcAiF;{JsL=blWx^!{?G0%a2)S~;rr!E>I9eKvMTaN~T*+~cqO9k=Gn8Rx$j)r91l-6NuN4fw$!P!rEGfsY_0mElMD=+ zH+N|Hoy(FR-dDe|GuDIl$(vuD5qrY%!$Z=gZo8~DSx5p5gpPn+pPo+P`jUcIs~ z^O_rhg;MUy`f}g=WV^N=Uf|U}Gzc4YbmC@j|5Vos4qw+g&V{Cb?w*rwa+a>KlE(V^ za`m@=WPJMD;|Ke$#VM>sKJWVfPpnMKi>jcwaz#kOtRwyla$v2B|b+qU1>PQ~cl z9z90i=IH)*&L22ut^GW6Zs0Z4tuA9aAkf!@rM-js>wa5l-&8VrFc1_&B;c?=bXh=# z7>D{HHwK}wby~o6t@Vo`q=*WF zVtET9Kt3U!RtR!JiTqOJaCO#%;+%~(31BDJ!g0I+%7(Xqri=FCMcQVnglm5ThCh_D zRM(mFHJ$USYsagR89KUW9ddJaypQ90h+~ta_|zHn0j7~;mB}|QlrXPgh=Nd;ZU+k+G?Bz42R+7t z&4U!`q%ztDQpLCjK?GoY5itl>WWe!>Y#Xrr9q5e1gw@V{JE4@^3fezhS=#D^Ob+_q6Z; zgw#llL7&0wAYGCjgKj?|R+hurAY0+^MpPa>9I0qEZd-LafYRF1o((TB8p?lBY@qZ{ zSOqJNDeeUaRF(%cE|z3WM`rc;9*7M~Ph_hQW>RwIr*uIf8X+;@JwNHYbIAS@RH#io z$>FtV-sW+!Oh-(InNfnmih{3gpvGKtUFWKvrqw$0lJixd8n!x5;Vws+x5Q#%mx+T8 zMP?+k0d-C4lFl6+cUVC|kJ;^EY1a$Rfx&@sHcexoYM)Nllor6>2UX!@O9h9Z%1 zhMmLCzy5XoSR?B$L&bb1eSFH-Nw+y<(v88IpdqjW}YeVL4H*AU`N{Wfcye=Mw{<(+ z+mlhp#<4dtpmq%%SnX9H7;qR-h4}gTY~h%JL-~l^w-?(Rh-1 zQoL;JjO^^>wtV;bH+?er5c)K95Ajd-?0i*zK0ozx0ubC0Vg@e|VDVD9s@>NBfOEhR z(jn4G{56q_A`cq3DrdH1`>EsPUeF+7ToRtus9GE$H-Y1$JDe+=Ta0szi>x~y`< zlP}<<;{aAdo>Pibj8nyuQI}|oWQ(4cgqPtF9Rh|lv|)hEC{vL_73Sf0$pE)eQ@zR> zB`<9kRTo7U<%jl5=j{zyo-5f&!cEfTSnQ#^Goe?6D|z=g5OcCDd5bCix`ICGP5hs+ zlS7Te=fk}5UCFq8B?L6FZt-rpZi$+*CzYLK0rFDia^1=p>yo!}mZe{AZX{9<>E7ag zVxN+q!m&yL9+~^B)8iwN?wL2u8&)BU7-f3$4Dz|Ck(r!jre&^_Eh<4ODJtD6WsCWX z@r!0G<;Wh3bkp7I@A+n^~^J-{*i`sqhsn^j6jFy3v6gR+?9l52t` zHC#HE6a-eYT5o3f>*fiinWp*-SZ#?(I27mXQlQL-hED%3EwBG`B_Yfh+w)l8{ieM$ z%gPZbV}v%Zm4cB*Au}#%Cd8^Vmu-NsZB?Uh@p5B~x{D0JFFd{1gT?$f11TwD=n3=`!Rfr20> zxXLs>Wk8KXm$~RcDgp;e&2r+4YzG-_F8Dj=tdQpe>jIfkX`bcRgVb?{xq*<9p=uA| zaKep4#)SsXI`+)Hfvh&>#eqvQ9Gx6igwe~cyf(!hERVds*D)k!UyguousX*eH+u?8 z!(YF*XL#PP=olio%7&=wU+5gC(W(>5;yX@!Wr@M;25~*Sgj|4ysrxJD2^qLI;YuQd z+)}eaSeZrZiq!Ls)}06l2M49DD%!ucBbC2|H2m5fEK5D4sc$@R zjQx{dVVm*-bz%sQT1&jdY~|uG{)R(}f-6UkAC;n%ml_Nh$s?wrq*5gdCmv5iIJ49z zM^Y`N`p*|prfv4N&)n*p!A%o$?b9(n=n>SI70qK zJw7=00CR-gdKs5s8-Bi@cQt6P&f1xfZ4k{&Br)p9$ew2BBuq-7g5z#%*4&(ICPzN_ zJ^bLd2P(E+=!~)9T%*g0=?ti++H2offFKBk{+-s|Ua+L8WM)hZj!)=#!6ee9%|M>C z=<tCTcjPrq@qai!uh#(k*4ZwjKn^<)AHMdKz_G|dpG>&PpB6IAT8 z?yH{By1Bi{EP);9vqOqJ^A|*fCGu2`cziuKkvvpc1g11#R34S6fQxFN-Z{kt0~^a( z=tKBUdaR-hM`uFRu>xVp{ms8Fl2Hh*Ez2v)B_&oBT2YU9(4A>I(Lu|Pq7LIJ5MyW{ zz8aOSIJPBnBkn6G7a%74t5!(be+M0_x|*6ky$0n*A?cUhYLbZ!5|Zd=Q>E7*UA1sz z3&Y>u!o|1WIcoU;-OTZK1~K#)uiy?v!FP*}@AkroZKxksE_9KIfk41Urn;%ZiD!S3 zSKR5acaax7E66wu0uql_O%GR()Y8ZJtwahVEB?S!-Ic0edTgIBpzw08ZEQKHo;%0b z$_EM8kw>e7gOjW3IRzUC*Ydg`PS)iW%c_o)C5%=MC{VIwi@dpeDA+qM>5mdgSxcj& z#B1#+l`<@;H;vw1I+l=S`t~k9B=LlF?>;l*=RNy+R33=+%#Bp;QQExVF`!jDKS6Oz zhmNMGV!<}6z1nIB`Poo<(UfnS+}suMsOxdPe7v4&jdhtC7G&^w^tSCqc?VN9A}hHr z6^~S{#n?)jqYToYOknog!)<%{@oVXq+nKy6A!}+y*W015=BT3Yh>Ns)cPLY*o>U)e zj8__qmr|yyExOtIX6`iTy$=)P+(novwew^I;HKr@lC0zFT^!&NoaL3v(8XFz6tb;D zn@Tp`+@ZrM-o+v3Q>>ak&CLhUooIadksv5by4J@##7PtXb@~eTfxca5tK9o;l3_Ux zgzUM^}Pg z5epVSf84AF)@RVbcG}85If4S_k_O@5p1a+(?C`ZYHs#Lv>I>R*bbu)&pd`?H>U|sd z`Eqbw_bvU!2B?ZfOb;hyxb}|S?;&hM?<0*!!pOe~-vhA+_V~>+)IHigdzIH#>*mVS zbf6A6VU)Th<~t4y@v8VdZiA?aaU_ljhOKFWikH;sm$}vGSEKsMWS@&lh6`X_kD`;& zmV!b()nLNj8R`>7P8qXX{yvMA5O5*ZG}5)VXV1u{c`zKH3ziazK^j%RXOM_vP>cOe3NuUhQP>U z!up%AHC*QgcD;k?H^dVx2lXe}uHZ$1F9+P>PABF5P`j0(f@&e07wHBMZDvUPtr)*Z zxaX@ZSy%a#}Y;6o+1am&Lj(g|+a0=*!9UoC8GW1(E zvma?AS)lwFyZqO)cS#%5N9$l+O4Z_F(NkDf&hP@~xrVALfIoHeM~E{vCHtFG^^N(<|^keI{gN zrR8N5M6Q@Yu4Hjy)`0vr@>{*Kx5dSgtp0OOel`F3xv?+$KGufYr{v!36aMf~D~_Xw zjmMirG!P?gZXxGkOE4Xp%r83Ou^X-ktS!H^zPG$ygPd-Z(f#du9ld2+ASO2YQC>iH z{j&6;5E91Kx+UT6_Ce=tcFoh4D6kalZDF7b#Lg-gqdij8{+iD}#KPNKJ`dwxdxKz{ zWR?k+!eV;PI1D>4s%7T#zki2i8M9<%8S^i<6du;wOk~a?-{j6blUz2nii751wCLDI zU7{Q*y0Q=)L$2;i8vjyR!ZNqE_6@u;E8O%(661Ot080~LrLBySj>?z7h1@N~_ko@EHvf$pehn4p>B+2i5RzTq{y z+w-Fm`S5);N$ZYUe(LdrizMb9Pr@eF3&x&QiMh3F23^GHJdTu**dvBhJWz6{!=n%* zI|B)qG>SLL&iqd)Yj%41JQV(?2f?IPk=CU&oqGAi_qzj(f=sd;ucTCPyjA*uc7VFK zoQg1z){^K2*?tu6XyabFk-m|bN)hjX!o--1aq9T%K^NzcqHtM6sx}imB$W!61H4w) z&=v9=+<1$n@ouT*YX>*>NQ?SANA}%!l-i#Ad8O-9=1<#OUJCOL7xjI+D#5pvqpxwi zK*w7GZ1(F_&b0%-Ifzbu4W!;+oQgg1&xELrBe4dIXLv{LYA5vYn<&_KpU}Jxz+IER z)~EC!d;0W;d|1-R_?5w<4tlbvH&=Q#dfty(7K$nFw&boHntZ8DKN)d}v zR!T{cVyb$AyL1l1Zcr)SM6OmsyMQHD$V?px7W5nag>pMk1B(LOphwplx>(bDy&V^L z1!cDnckSC-@sKd6=KHQ4g6f>@^leF4Q6x+Mh*7A7w<5JhjwB}p z<+jh1)Ehn^mnWKf&&fVUscqom1*t3?@crS{>tY9ZGZX zhQNs#1}Y#Esj=h^XIgU9KXCA(N6A-dU7%dp=Ei}KvwuXkA;}I3ZTr<+4OJ?L$#NcAVByHCrB#l(6m>OG2n*su~P%zi|^Y`|=6nP9CzRf$33cnLYBRD*VGe9s0YvQfK#v%51p0IY3{Zrg5>MAJG*m4Z1y*@tmWK}w8)`{ zV@MQAW=LaOMmF44d;xccj7qJ-HRHzj#m+4;iKgbI(r^pTc0D-oL8W9I8WO;s$yCY1 zrqnErMOs#9smEzm(j0qwyzG0E1*`2w?rL01kPjb(X_=+Z$DYD6dv-E8^Xeae zJ2DO4WIbXRsN8xV$lM^;pu_e3)T1lE9)vOw1A5jq{62ZBysfE$^Iqe#Kxk;HH7RFn$pjI@lnjF^h+#_QNpBklMyoMMH~ zZ5B=(pHALqd+1?OD8d^62n*+K>HU4Uwj7OmuW_5Fmf?Y zl=*;5cFor6Y4@4zM9WQqU}sPP;7;$(qh&=guIJYpWlf6Ev&8bR9zKoc z3O?=G5IM~yyF#}Dz$3~a5fQ9-G1~p~V10DK2vQnjRb~IUMX38fq1(97*AMpyFr0l? z*`67%b!|F$$6OIpJz73OA-`OthzBRX+)gLf|4=KY##l+aor6>&5R?rbB+=uRcb>lG zYB*)>B>~fqIxnbBu&y+M<77c-AhDz3c6?ZTtE8R1_PS;C?Sj;gwtJPB`AmEqpPrVp z{koCCckMm5=K^NAseCuAAIC@~{*}@f>U#qBz%i%c2&^Hcik(4LU(CPHUm}$H0t-Uc zNxhIC4|L22Wvsl-B$~{6s0u(2ul@|-6ZEawqzzA2r7@o{W(Df_m%>_pj>5)iPF6x5 zS>)NTB!vR4D;~JLmkP=a9Dq01F|lKLZFwd}elF}-MgK18_>WM4da^e3_wh=;gJ8bw zYznc2=g1YUOm zNA+|xajw_!UCe8IP7xr##Uqmd6rz9|r(Db_fsDYHp8*qmS=V593r~+QH@9?b+)&6E z3>ypY>65A4CA7n@?_gcHgM*?kD3zN z=iYe&B*$D-WS~EhP<=3-cz!j%Y4c%Sg?ej_v$f(sk^w@LI734Gt08{DB0Os@&E{<3 z>hqnOU=SVL8g=EPbh*Ifp(#zKj_=0Z2Lr+w-s{*V*?(i{q|L;E-6g$XUz3q-8nK7! zIFJ3ShIk1TQ&UlfX?s6eKpCgyDa|xPf@(c;Hw|MRtNK|MqlcKc*yO?D7LxsvW|tue z3S{KB8Xgc8CE2at1}pn23IUVDD=Evunrk6r^Z1pc<7H)c3@1qO+%mWwl-hR`hMF-E z@Na>9WVJq4kPpF~JM1kV%|{0%5ysi!9ylx?8N~#}M76x}NrlNtNm2uYVIy3+ia7+N zEbnpNv)U9d)Q>)#6`f{Z3J}k}Mbem@C9;_Op|)Z4Wm5SBX1&sYbrR+*q~r@`fQ;9|g#u3LE2lAYPAB z$;w!Xegh9zP-KATx1~EH@dm(P1}o02*zFAg_s1sd2)gB^gJ*&?7Pb_Y)G>_+(9rWT zL`i`Sa{1MRz2ipS08}khezgM_>JQV9Lba&8`U#tDxx`{)Xfxeih%)6ARg>eYSirLHM@h^p%-+-xs6p=oXb1>bBRlM_QsVYA8<2hp3AEbtKsOQEW^;D z>wT=ptRQq+?isp29|&XP&)_CtIPzfZc$>tWpbeGwTj+wRt69eI zYav?;2wzl*1tnOjDq);zme?brqXdCY!S}WV5Sam5AK11;;4pp2EIsb^F(^`orD=$M z4sx?*?%TFe7#0l`D>Y}BTpCa<%Q6_iMwB2h!&R9(Um0aj(2V&y+mL%USe9E42gs2V zI}yy#H!+bp5!EYDZ}gu@J}2TjgDXo8XSyYM6#bn(7sBN>)FA*U+!0&nj|)^uIIynd zC{ViWqv;dr9gwnFKeLi}r3dpYMI_PzP^9+rmmZPFQZ~0Wc>IJV5Gpz@EP(RY`Cs&S z9}--Pv(%u41#1}H)?hmgKnU%M2?-KG9!a6G@`DXRQ~vYQgMO)hvB5Vfxc#6V$PW!@ zy#*7y+`BxCn8T?kg|0>CJq6;% z{{rnFUC_Vnfv))BPzmGGh$iWfl$NbftW9I$ce67#bN&I z`~Lv5f20h|{|U@4@qtvuU2SCtVI`dfRvLn;zMEQe!rP3Lx#V<;_W9$3yj;4by4asi zA&5pC4@UDyN(C7V0lEXAE## zk6Ir^wfMdpzpMdnAQnPyG7yF=105hK8UQ7c&tT-)^j-h{YWi+t-0vuK(*$4;U|eAc zXr_B&&4zjeQXZ+@;m~1Eilt7{SJC6r`OpWnW;cIq)2yCD(putM`Auk>e+K=d{J{RO z`;hHP-0c_mGd*B#^3d?y@W+X^3(H}Y=k6jHNa#0!ryr5Ue6~Et$z1#-<_lYdr4|WG z2&qF9)G4Q3%vae=I zG3o4kV%t<}^|70@wXxH&y;=7+ejj?m-6XV=YyBp7MeZTfrPC$eBHE(hrJ%!Hfzb*5 z9FQ4M+H>3U+Y{MS7?9$D7Z+kSV?TmLluv)=Ud zaB0wDU~*$lXc(}-zro+nzuPnBKlT;%3IFbKDbVyi^Cj_44LK!r3ON0>XjCK;FVZfO zE7BlR5;9-VZ?v_?7e0#c?VNq^(s;lR27Nffw9r+lqFjH8?i|T2nju15 z47ISca8~Twwb9ktvG50)rgzsqYaX{MTlA-_NGePEqtdPtrV^);tJ0tntx~2^_mh&c zm2JvD=j^z>t)01))#a2*@+gZg9LgM`IFolIY>8cyZjT``2ThTsm=ahK*^JxY(|CpZ zhJOTpBz}~oQ??>U4>t`nMyExuMsP%XL_9~97&A8HaVp|5@RQG=T@0D+TRU~WbiMq2 zX?+p7W4RL;?v4DO)B;@o)Dv^BJ`x{DPRwR5ay)nlot|9c9Od0-oERJ#JZjzS-R(Vk z0KEIYo3DN+WitYtBAB_bj>sK~3@*CIopkP6*Nqcq-IEw;dJGb}zPj>%hdPS?n*KeM zoNV9%qssG5;T5i9eNlsC!S(6o13polJNt}#hFm|62LD8o1TgVpCN9&@x&|xN(#9Rf z?Nz0GRU}O1Mu-&9R)qMYUnSV;Ci&hLfbr|fm>4q09qyN9#yMdGeLy6?Vr=o+6AT#yPR^T*Fgh~$27%6H>I@zKO|aNB4v|?;Oac$rBhRL? zywKqhxfaIcY&y8+gPo(BrevC+-XAumns`qmf~mqZAt%)Ud!&WDe972s)o+PM5xa_EQC|e6DG0?3G{q8{ zq-%_^+s&H_?mk0q7*7I!`K{d<0hC0UPwUhdvfDIWWy>TVE3>FZ1 zcXvMmD=Xq9W@U2$5Kcor4c}I^fe)2+a`O68gWq7Kq94htWTly=2!b%yh22*VO#eXh;L|~TC$2FQ3b=k!A8}peV15CYw#2vg>!I1?ydRXNG%(06lyw_IM2S^8l9D|g!x@S2S zbsyk^G7Ac*j_5nrX*D@Xp^xz&>$9YGOzgm?>x@41Gf(bl0yJ`+Ic#yg4VporjOBPp zabGh?_+9VjeK->q-`P~2^4Ag8oisIhS|*;vQNWOpdVw|v1C!n8=pK!6G7Z5I|4@5c zDf>ex?kO1g9I^^aNe`=M%+ziGxPFH*89)w2+vFD@4bt(csPAsO#x~?paNgJ2dM3fy zcBq`Jv{lYP9$|H^biK&w7D=gkCNI9v(k4CDKp8zvH{ZLy_t|ImUMTXvR1AlPhW9CG3K=L z*@^1MlJ;M0JQ!f8VD00~bx5_9?aO#&-8<+wC_-g|<#V0QfYRcKN=cE+Q zO+8B*#`3G?8?L~YWAzeYh46DBKYX9*J9{546d--_kDx#m(%o7Az~^?S{@JQh&<@FS zkb+W}j8iGDXLQcM1KoVhK%YPfDX!j_dxdPyshfzYHVxWH0jjbj{H+6oqie~g?Sw`VTXzK*!s*KsGi za>UY+r&v0;q5?O=b$rzetw%Oz^+AwbVC0ImMH5!Ih3mtK34PM+0LdXTY-+-lt{BUU zJ>&*of|(ZFf<0{O-9XbTYCLBZJ-d{>r8k!B(sceo zFzoF6>i>MYKEA2i5v3|5T*^zD5*2fkJ7&c9YcOnJ?hUB_ZX~x|=)A}!P?u|a&N2N&zc+!x$s9hGlaPa6wWwUcpZ6NT4k=-&f0Br7q~40bk6|cHJd+-@}(Ek z6uS9}hX{Jmh$ssi+oj%)J@Y~U12CsWbq{^CJ?HTY4@UTtCx`>X*Q4tlME|p2%a$xG z99nUCt-r#w_G1b?S_x%H^!JM-h9TWMPKxdp7GaKmXOQx+ULrLYbX<8Nv~hVk zStb+F(sF1}kJF7YTy)Iutd2bD)_&hZLc5Mq9_kUI?4;N)W#uMN*+rShj>ok)lpxr` z!ze7Dv{tTNaG@t;dVvUzAR(1;R4qr*QSgx}VatM3T1PW$h6>e)cbUQN{3bZU$x)v@ zjh1eKrvVO>L6Yodfv6i$1TjmflbpHQbwp%>u7KW4JsqrkK)u97P0I(*CJ$=j4bbJC zdA#zk`mH19WZ=5E71#0Zv_>7q80W+|07Um}EH!?_D@5wvO-X)9=hNS21uY?|&-v+G z&T)Y0{>z&ZJ-ow)IZB*-0KAz*|4f2-=`vY&q@N(z2N$xvRJLgKydNVIaxHl_ggZ64 zHEo$aO|KHq&5B_TJBq5Cfrm$G zd%Z@DelKKcd2i=SIFw%`Atx)=Ha($eqEuNW)((api=l?lrrkh^zc7RP9B)4rK-+G+ zkmD0Xn4Fl1r|>$|11hEN3KWHVt!GUocSkRzq)ANqqbD(Al2w$uIU_#59(?c{)`IXd zr&!ClCiGTqyl|q@1%Li@Jy@-xgyfyb*iYi$pid^;KtU=*E?xu>_nYlkwfqPsWF6%K zKG@DTLeHDzY(;!t`(DLy(99vFc^z-DHO>@5oNY0q$SvJ&-Xs*r5#tcA)81YQ?zk}> zmD0*q4p}ykNr>iL>Ih-AdlxdH>(IWHweWK%6F?Z?A@!D(7Jg=S2@{g&==+EJhX*Z_ z(4KPX1r!wzW=;xr%U!wNx_}P9vyjrqkz#9#65gJ`fh zHuIa@X@%%nX(h=`Ov!0dFCo`}xnNE3gQn_HNF=&9UUbn8Rc+AXHg^zIKU}Our?c~nr@g1Y&88*V^a@5v@<*l=lD<3xjIp^_SZ|wI zX!H4zpFDTntidt$B(jy5emu}5#akW{72=3 zx&IM@RhF|MZr*a#{7*W6a{b*S)8^1gP4?4YnXuv?bf)=JXQ4diG9`0hC4NpOeW;Gr z5DL%@+=SAOV-or=G^WsD03nPw^|d;Zag1RfQLc|(U1tq4oYU%d%S&g+Ye$C?N`!~R0^2Jo_fWEahsy~od_1VBhD16((AFOM0#T|s9)uEV3R9UP z!>{5hmnTV}j5GYicZ?Pe);dE*pQz34D%R#(Mob%cHdW-(%2TxzB@-Nf^kYVNzT*zD zn$*x4*=Xe^euX%oe-VczTrWjyM;#I!>a7%xDcCEsn#d& zxY(zE2H0@tj}t<`xr0;!x z1?jjbhN2Bq&dkF9IEI)BmL7PbRF6Au_|*#a?bzqy1kD4}n`nGrqMz$f33ld)nd(x8 zw^f*A=774WXwfbgxF={rva#mn*s=R-twM@;j=#^#(rdE1&xf^nul0f0xo=z$1#P*Q zxzW3YTY{D5Z1w3O+S z#I2#Exg)X0mfG?n32(U1Y=1)T4{&?t44lF)E#USriBeqz66CUwbP)|YgBhbs&#T8G z=I<7k*BU*=KopY+ljCVxWW^ks5^xqI9T)F3j7}Frx@Z)Q?^o-~*MeJ+-G8z_~&@ z24q0x1^B=o*j~GXW&rtG4tVzYSLtPC;Fn6abW++K%13cYB=b56W^V>1ePyPcc#%OB zmXBcU0?{%CMRcaxHSy_+gVBnJsY)L@x?tl#PAB}vWqTF4vuN;VoOB&534oh$NmnC|+;igxrMq*uEdGNa9=iM8G6Jn_Z4b{sBa(2K>0VuB6`$E)mop zkAHXd9sLRHn4Ynt*eDb-@{H%OUy3s;8(!sgeV8lMTS_dWKqgf5P|KrBMJ-wD0QOmy ztHU=eh<1o7{+c+@LQY``iET|~b8{>hKl}N%&XN7Yn)4VrFgRQz*L9qm4Yz*`lPZ=sbqj_UF_}^=b7ded%3NrXyk&#x zETZyR02v)OF_UuD?AOT?uKWohPX%x=4w+d~9pU+rJ{p{f3jUUEB2QpH`mKn+U4wX0 z8O(iSl4f!_VLz8(v=|ZrCx?KOiDQ^>)$HowiA}};N^Gm<0)`eL&_Lwj5SkbYxbZ%T zLK=`0+#L)2DhMa2eqHy9=5Cb`4A)FI){Tv1q?85)P2&1$$D>z$W*$5MVn}6T6p)Fv>#W2SeU(F>SqM|tD_OLsek9z4|qcaFjLOgv(3~I4R6suNDX-D_k1TChT)>^*zad0+ zBGDtAl`(m1m*j7kK5(Sxl@w5*GZ5L?Kk@GgLDVOm0QSM|3Euag=^QIOl#e-}-}9V( z>HOumrJEbLw~Oil)Wg5_fHYRLr|*ka2sqvW=%2(nU*E!C!=FO%&CzHSYIr=_vl*Tv z#+Qu3K|VwlHsg1#Wmak#>a$I^9JU z42@ebWJ-W%Mp*1CPsVH{N=6#sVecv4iP^E^P=wa_XEp;`o(q=M{P-CiODc@ z&(;z6PC(q1z6$wJ{T2^%JoF1O%8A%2v(1KP49yi1@(+|mJn?LgED)__tROlizdvF% z;F9$csv1l;HReV?7PPtFT%n+2^;;xuRO&k!4vPM|@7Eg&eJI-ACc#3QMJWuNrK8M> zm~uETVs8cvCQ4w!AbK-)av+7iR7iJch=VZRhU-pmDCY(@w;{k-V^yp z&{1dZNUVf|h8yVdh#+fz3_oZjQSAUa^OO0~054#8$N_r*zjCm!6Tn09x}y=fHA5InY8W}js-Sgw#e`RUDOprSMC;_2|oK z*9Zf2OpxSi?*3nhD@E|xQCs#=LsPBkFd%wc35Z^OP<%HaryY<1l0++fFk-BhTlnf& zBH-Z^VMFy+%t*N!fYD>`qUtV5q7PE~?r3GHE);;zmz*^)JIoB9Gdj#EEKqdv$yu^( zoO;eGF>r^+bP&SZGF5~18vxc%{ni7iCYDx~4mI00G1i|Lm`&OXIJyh`bwtYYm1HOg zs~^tsQZ#!XOFDCuiM%aaAmaM-k26DHi*NJ1?i7$NuyRc4ptvEc9SevjniVew-yiN8 zkU8Luq+`K!n1MbZrxn>|JfZTa**#4)Ewji5Fft{or*F}oOu$_GPSu6b))~AADS{WL?mGcG=SVjv&x}=)~7hy}habu*#Gx%1xA55GEyC z3#NV6$c6Hk{52biaKo9z2H!KKEYO^!# z1qeYN#7ghDEZ29Uk+8(jGB8I0I|!_isH^N{1!r$yetd^b>U3-UnuF8We*G{qY(;3* zuzBXG2#Wy&YXQJt{pUeR!EU z^gjXQ&qrZxEcZx&TfW`X+(N0h3Uh}K{dZ-X%^*aSPvk+ts0`0VTQ<)OfdB`xTh3pv zifd!)4GO53R^6Z{a=#$L0LJ$pHzF+L4?~%jmm0Lzw}$er0Hjo8G+| zK1v5++|vc88wS!t_43$K(lKoGV}8L)1HZrkq{W!iam6jYjR>2);2y@^3XEb3nxjaR z-PZcA{+XHni_tfay0kYsvFeyj;*dHNDu)9SCl>mNUCC(u#QDOjZ8cw|F9dC}9yX*# z?|A&a-`V<4*dOmdzqV#k$OpDzs{MKsR)*g!(2MM+lIi@yz5WSEspxEQ#NPQH@cR_&1k)Yk9inPc#KDkqN~ghYGp-I>&PM zPr-FCE>G{hDZ|kDT0B)Su#PG2ta!XgGm!a`eC7*h>5EUFj>dl@y&`W(MOI>3qY@MwqCqD`^ctOxGUm~ZOca2BpD3gn(%*6hU}N;-pY+DH z$PVWQ=tgE{&90Xxn!-Hj zPqM_lmGWT5+H`TX;e~Vt4}ZTc%iLO~Ne%f<$QAi9fD{#^+YB@#P$}Dtk_#XHZFE-g z!v9XYm^swn7cuV|Dkt7~XDlA0!Nz!;Xo zo=t4a#vH|M)wS)IaxO9Za};p|nM$bBZT@d*V_{<@vpLtSd-m_9_n7zATb?iGm+_a) zhve7pi-DnfIwMA4tkJiy^ei%yr$HB3T_59q(F^=XY9RU)CLFB&G?9hpY($n4dy)6Z zIyR=o76k^$SwBEym`&EdX@=$Kl>d!bCwOehb@2o z>)0_%R^3nP_Bx;HaA7;S#?Y{B+&TLcZ&y(>-#Yq)xhb`|8@eKFK}?#>s7v>VoQpy8 z`*pzBsH0wfjqVcd35F564vG+30QJkhZR;AoQ_lVUisW+P3eH`;)4fx_GunOja`-9c zQ}@Sj9DUigaZ|r*6EOFc-ks-{=~vo4(lgLA(lgjI`&Ia<_OA1Evld|aodJ3cI3;rT z9N#kwH$%9}?k|c)G-y$T!i>U>!lOdDLVOa3c_*cID*a@-#OP#_ znsP-|Qf|h-^xh=QTz5HmIl9@$T=YMdD65=B^D=ySiJZb5 z@tl$DYp!mNZ4dwB$C|}}1Wsz=lf>vTvqRiNZD&%ih(}6=L?u(a4AIgA?#AEML>FW1 z_q<%jH2xx8a=xOM^a#j#7?VRZP8ID^TeLkS zJ&gWTUz#5!FNDTPEVCJotsWRWv(EZ25+|?mO=&LmE-@~JOt=P6#F!kQP7VMGP7~S! zCsK*`!flPFU!ZrnIKR`VfEk!Gx*t$RWyJ$$YV+gE*ThLm7oDc$gSj65qOjG8n*?C)rggPkHk%yW1E->f&z>xKMF z_LdkvkJ2XkAO)LQj*=d#Wo`Vfs~#b){k;zhJ1t8t@F5=7%q+tMHLK)A^uK=rbH(y% zL52Hdk6GURN6C!4eB5-*!OAob4{X-4;)CbW_fZpMd`8p!xxhgL;gBH&e%>ZfC>mJp z!={_eM%Cw&?;>sgR?9>uQ>50d=*o*$_X#G-mnpLS$kQYe}b7VF=^f7H7cPe$fZ{(C!p-nrFOo@5apq1vO3QkguCzliP|% zcAy!o>+i7W<2J=Q4K}IWtp{cJs3=hTnt|LB=6}%nKxCFkVrQEn`=PF3+PvQxknzsUvxQn!K{zO z{V+M;PzVq$@M(C#m4T%?^dI!FH!fwO1VvwW3MyYf7nQj(_})=@RJ}t*OM@FIO(A$3=kg;hqEc7+#HAkQzKo;Zt+xEZz z)b%Bt?TpK(gCRyk?6JKd-qSo4oXd)SZTJRYevW($6;k!@yiFPrD$W@jUuv|9M%^fl z3lCCzW%da6)4-_x7s}otO0y`;whi01nPFwvwr$(CZQHhO+x8!}G9tscS@*uGQSaSR zjn_Dhvv>cDefGEJnqk+!1L@lt+hZm#lYEgK3`M7B5{txyg(D3q3YujeRbzwm8*;$*d2=p$;fK zrC^l~9Mft@6P#h#_(r3i!pIqCJEKmsvV&2?yS+vxQ? z{|vGTAbqI^!wl4p5S}O(8xywVP*{+NEUZKn%!-29MrRgOA`3cyCl>(Axr22VaAhxG zk!2WtzkG9jVzH}Zq-bLQ+$tBc3V6I=z*B^Jd0pDl#x6gEH%vP`YyjmXlX_rgXR-f< z{VBMB?LlcH8caIKI>$V{>N@iHV-st@X_jRk9Ht0NEcb=G`U9O2&pJjB^nu$)PD8|(10BWbHI=&M{c7XxC@ARIr&hYu z*cs}jO3b#j%i=ZM?*C)<;!DGEppJVmB!7$J9lnvBj%$}qnHuIWP`@u2Ku?ow#GIG& zp|vpf_d3m%QZJL?08Dq9e{;ab_lflt@-knZn~=|hkoWTa(tL70P~XmLqNm+a^9(QQ z<0FL>I(|U(+!2f*EV@H<2l*DMJwtowM!%!(<`%*1EVn>Dq2ij90x^qcf|U&2Umqbo zTM(GOZ1x@bq0{ADCY#4$HMXiLyz`W~knv?uyLSf!xJxt;azu^Kpzcm*y(Ix;tQG9s zo&o^PVa~gQ4SW{i_u4;)ADQi;-otwkVaWAhh)XJxT{DAF`_w>4*BX7nQrn2JNHIFjZZnEMCNjl}~N3zhrqGNMg7WOa45m2E* z$@z1~Z{OpeQ&rp|PGV9J$*F0{iRfAPO|Ts+ z4o1Ui6-VO3s8P7bH9fz(OJ)Dq9d#0yS^rAQp_)upZ<1K3XAfHCkfA<}7dy0*+U*Df z-^t^jegm@Iu4s%EU<4lxK|2AZmPpobwl+!OJ`U`qItWMN?3^`}nZNEcokD+Bf`Owx&_4WYjezS+|fSL>BWyfz4y6Lii z-=LqL-Km%M$Gma<5Zj*;!gdy(kbr_!H|PN@M(7QRH&-n)ZUD5flfx2UQ z-p*#KvRsT_rER6T6g`y96h&CBPY8Sh`HnbWP+w3=Gf+tW0v;k)PchBP#Qn$XO5IPg zwNQv*(GnHim$I;K26J3hM|;0c*PaOyf-e6Q}YGR4Z-nR?C9Qf>r0D(X<(vEG@C z=k_o<|GUZFN$qocqZRQjkll_V^KE#!*?!-guxIyY`US<}27+$iBir+d<%iD3YHwNr<_E?+CYaoi^3zT7x9;DsTYEr5C&7#O*R}#Y^w7>#kXno7wouRqrc=@L z&XkRA*+7EfZMK~4z{{uh-s1-tRTAINi{er)+?@UR`8dww8NUf;UG3T zgPdZc-fJLd1q?iwprlf4n7^Jl#!TAUI$FvM7w|TZPJj9R9F`--k6y+g`D~1=DButQ z%+NZ~@&l?PP~dt&(ZQ`e2BseC>F;vq!h2|pKz7Ylr6$|BM5^>%m z{T+MdWzB6RMTHr_z*p@J+-*4_<-K=IzfT$(AZ*{+UH#4dMMvU?w;4w%FMdf^WvfA zp8(`jbOc&G7}$?r@klx7I1DI~*wmR&3n>>-j9?ZEs=vP!|K|QY1R_EBxmblOqAd`) zgL+r&63ePLX&h9Kpt@{}1E#??n0P5bNyMj`=H=8mvp2HJhP-UU1uAkiNu<{(Zzu;! z(8s{*>YRgj7b1W7=3IprssEkO!+yHaA*$Mxa!fL}z534%Z*-_p>_`10+N++Kn?1JU zMzm{$Y7r*1(sL5M@gmy|jG$hPl;r*9=`(~rH(MS!KFzc+fjfN3TDrWyju^giObtcY z^3FgYu@ddsh;8U@$}Yn?fL~B*s(ZTDIXUBPzzxrowu&1gY%sKOXZ+T)dDy= z4qPvQuFQ6I2vG^beuoBZ1DNmO6-ywJXC2Tx=k`AkiSef?ep72X*TVwNGQ{eCTaY;n zF5PiFC$LhFWLrX(ZJ#nZ^v>`+Gbfho#I=z5F%5K^F^ooH5^3I}u-{#PQ2CixSk|P2 zvx(Tqh?vj@9F$u!if{+PiiF{1Y}0a5cP6TI@yFbz880^R=ps~u*@ZaNW;zBoi$F=p z%PSC+x?3^_K_~DBkqvSMX@jm0u{q2>uIF1mdF24siU@(i^a>Azis)Hd@->fd=2 zey~_-bKs7H7p=&F@w5vwgmvPw5%)6)z}u%O0~*tS{9~>8%P%kB7^Siftw@uBFwJBF zsspd{Bw67KR=pMesCb1Qtv1Mp{qikTy9dauuZp9bk7)7%deWqnKlhCkE>pl-#h&5X z+=D1xP=+QfB~7=&;;UO7u)o~7AbaG8XG^Ji*pWgGDU6sAg~DEYdxCa5pmvK+@3Z5d!)_-2~K}EaJz`#tvM)Rv>=t2 zkM24nUquDryc%HZyhH>cuIu`oA&*otgz==!^Ltnj;5PI_etd^*!zk=;kz@02^q!`E z5m@`i2IQ*?u3|zfsHoK50BwYD?JLZnq2sg` zFDG+L7?2nR&J&jm;PKMD5;gN^FQlqbL?^t4i+Fm8{SM^g`V?72fFX01Tgr_-25E;R zTHUcko!Z-nRYw)5oKiGvifY+;Vudzf7+R>eAgb(R32?p|!6Ouo5gLM2q?^g4BI;OJ z(=^TlQUhyNj`U}9E>+p-$NoE}@Z6#(EC0~>;4?7Q(D5{6rKa&(P}QhT&e0DFJ0ed= z?$pHGtlVtEiHrj*pl}1<24F;YET`JxWnX5b1!lHr9N~Bynl&gUo$!_l?vdGLJ!KrV zcmpCJM=%c+xr%g3sZE=Ja?WD3k_MoJc(pTf{5;Bvyt)W0R-lStP^_~`&9Sb!KCc9S z#uy1=Wc*@P&xTJ{Lg{Qs`5`vbVxvBR6`y6@W4)VGSx{NPhdW*_Bf^rC0|&nN)k1Rs zWq2U=9!Cvz4T#%k@wEf9>VPsu#@Xwq9d|o5Jx`d&Q@iy|Y%Xbg%kjk`rO%h{|pQNcn=HzeBaeH%oNPEHlYFFd^^(8upX8CVwYq?{Tw_~&g)(wbf%y0 z?pWs0s|NMJ)C-P#ga_w(S`Bpo4zxR#ny@+V-| z81W`t0OXFkq!<0Ghk!kUugJA$|eiA)VgD2}#RTJS%b_@F9KJArhii4zx;BA5Z1 zSp#ffuZd#QKy{v$q2B#SP|ZsR6hk}XU5^ad5HdIs@|KJR>Ac$EHI}T4#sf41`=ADQ z1-TJiuD`gNZdH_(b#;}OE4!#f%#bw$w4sTp=vFSJ$;manI!VM!B@CGdR2Jx!7wB8m z$;mA<#N;pnp-b|B(3atWq|Sv5^4LIC-clo-u@c) zOc|Y&%}Aj+)*l`qEN&JfF!~)fR6fyr1J!Y^)_}~z;9xM|ppmcQ3S;X}9Hkg>iKf*`(2|UfRQo~ z2`z&7YhE084u$C8xK4NG8GjMEun*+mUnmYs3|BVS0k>)Nw;g(ucxszXR!S%si4w#d zS`Wkh!1L+IhqzMt?AP%mJks{iFOPPKkn4GSoa zb{BDO6)OB)2R9#Qd+< zNO3XSX1W2f#sF0HO(OjfnlB*bbGQM`{%K zaL3`u3SUoi=7Cm-myMdeguCXqCwM}Z_mcJcx(y9fppW_iUxO%~DHdN#ICuds#{hAf zYxN!Ic7X-|M$FjY)BL|#rvGEL{qH8x{|RRL9}Kzwk57__?w?$hlGn^CSjQmw$?XA^{ZBmR=SSE zx=2U~zWePBVRQl@#0d={uO-fVUOZx36rr0|$7xx4U4F~s#6~i9ud_4DlzD9rg zg|RiA+nb2223?EYW9#}3f23Au(qrAR__aL@3U7ww6Imo6oZ#Pp$rW)|pue!cd>6w+ zwK4JaN;Fhj&S~_f4^5-lY1?#qTp!{_#WC}>cp5ygng`U3><#RV^8;1^ybiED8cB^J zttAGM7fD;>`E+kqlaJ*6w3*sn2Gm_Erj`Ju3H_1y6Y1B`PseZ5Z}HFZPxDXxv^QE< z4U8t4rt8rrfBKL16TxZHv~fCloo|b`_UV58?{S!J^j;bN59|-F9&TP8KhbVuypM=I$OwX`AM8G1Kh<^Y z&CJXU+orDZoBx_=&md&s|K_&Duq|VpX1QYNHgOxj)^6UPHJkmO^(o|>|D<~iKK(u| zJY76Rd1QXXc{F=ee1ttE%>FT{WB*a^(4azs35~gjKfpPVD@d;#E8No^_`G;;PX-9f1;kg9&LOLvQ(S#>c zXllYnNfsm7)r6f>Opo#|K|gUni9gXl!CwnY`<_;YPED((al@u@_%I=~H?%o4T{J*6 zL$pOSNHj{cOf*omRJ2(%eKca!G+G$oHH!IwCKu-uIZkqH9 z%Iz%~biwIbC$KF%ukH%lqEmk>F?aWVn(PT3VZb$1RKId%Sf~wd)1OJ zPaxj_R9NHaI6%TbF?Kz2;pVvN=!}5v81amqX&&&eOKOjC$S)>HlWC6LW8C!XV+Qgr z*ATPWCup~wFqmQ?#RJ7}*e-~mx!r0<@U-jT$T+c2RmQa8xq{{49s9YKwEAL~zI&IC zY@gE&6=#?{z2NUt`b_MDbS=9i(2s0CkUqR~LQB-lAxKdVkAH%lNWAj33a*=~;;&k6 zg!BgEq2=pDGVxGCa`fpN$;JZ=fc%agU#5oZAn7F@4@j=zL2Z53FMdVc@(l!<8iP_R7uCCX?#>MzT6ny4j#u zxgAV?I-eWr9N49a=;aStMXkhqBOl)KJ!Us0xKBmC@2FySNLAM;rpPy$@lbd+n|39j zy*}{BaGUabaQ*T_?!F~Gmyt;-vPM!` zT0Jpwa|x4VCO#&CzauIgB^AUI!>@JLxR`9AC*IQDySS8;(-YOkNAl*?TM|miIXzot zL_DOb+{wD%cPn0#!#&OMhH`_UB@0!wHC6Uh(rRgG)u@BYEgl@ytsp&*wo=dN;534D zxkNOPzlEcL5Mqmj=DQN>>e{YB+{?(3Jr`=J>CWQtZ}di3n_+48tIgEGHp44oV@bN$ho9@DnY>D@^ z?mBI8ALqE;X!F^~H$eMqLb~;IDm#5r>Gy)*iqs8`(bP(DC<`IS_F9LwI)D-)myZ{l zu*7gedeF^me-I{d2s_}@{np_y5&4Y)L(}>CK4N=WPkZ|#Dc)zE)GyEFu!AioLO<-e zGUiL~SnvD6mg(Rxg;;h4$9)o5UcBWIpVeC0mt9@A zqUIiXLPdxri4mT==XWyBJs1V`Uz;%Ly#=7e!iToLh6*XulrY5C!z!1Gpzk(@4-i^P ztCOo)E(muSS2EWX{UVWf^1}ot#GY8Y*}g6A9p$wXgX{fE__1m0tSZz_)#extqJq>3 zD+pkX40HH^%n{R!syFT!6y&3DxhX}~At}5dCbIr?RB(98ND_eGO=PK_*v7);c1 zHk`fByxq+$6RS?BLAuWiD8alakD3P0FqR}XHG}WUj)ZI%;6tHC4-Zw1!o&NI2do4x z_1Cr!6teMno!L3R)#A}7aMd#6ZzF9NgR6q$Tjqdfo0|;I+%cSi(GW7@(}MHFcB~wY1gc1>Oz3AT!-uJ$^f2duPeWK}mWJ%YB^ z*d9!IM>YqarFs8SL;s=GEQ^tgnM{(5XsFsqd(P^bt1Je^wFIbQ?s0DDa&HN$v!$|O ztV5>4wtIhgh9ple6)lmddiwD`qWVmY-a1o_)XHzaaVL&{LGt~SoZ8Kkv8*j>vPiVG zQH(f0WRjQsmE{vOP{eP5;k%mQ zAwX!`k?(ccd_8H&?^2#wbc!VANdc{`!{CaG!Tb_03 za|#@wIqw%5;83-IpwcA1C8#} zr>LSMXlC8S0g_5)Vs5Qh(?{sM3B3_97A~4{+2oB}Qzn?Uk|PK%F7D~2F8&%H`}WHx z0QejOPQ;j-VRPs0sd#W4^WyQvo7gQK3-0DVIs!R-?2J5p^atI}k4aoueo=cTE{9Lh z3#=8f?f4~4mJw(#D+0k_jal(H}aU znO_M_0oT`XB#I>M#h^8euc4qAAp}Yj&cl?OZ1-VE1mRbAzJCajRrV)D7gD#v-sziE zlJkD4Pp~LuJ{{M@sB|D&S5{gQ@Gsl?Zmi93MI$)MImBy>Z%0sYlFBP0y0sI2oLWBL z4AasD)vK)N^n%%1^&tay@M%LvhaE7GiZ$n-k8-q(f9qIn zL&wBO#sq-CKyVujR!XVX#>Kyn(Qf~25N<%JRN<;deTmy7A+ zNYh524Ke34CZc5$^ph#3CIa>|f`i_myh#(e3Z=^GCradJDV^<9t;FztF;fMc6ti=3 zfA5FkDAS}wmsT=lZfUCdN&+^w(awLbna_*?>U+<+ow=LM>(98Wq0`oT4-OEvE}P5! z_>=p2Zn}K4->#c)?foeIUf#UcZQmbrue!g*n)YWi0Sg#)2Lx>k5Os#@4Qcz+=IA-OtnMnhuB_*d4 z6B{WjpC*b{GWAlGQ>H1OSmtzECFvvVJJG0yYYl8-Dt--Ihufj^0sgv0L9XN8WJTme zlcJsm_TlFRnIlUH*P{b`=tIbyh2^ zBdR<4F)ieg)EVQD!UPXwfP!0dHk~A1siJ61HrvN?aLa!Fc6{lk_i89&zcWL)W9LK& zO_FY_L2lf0J(H8)qCWKa;|3ldYqURdPy$L323v6%lp~}{4O*Rg--ESo6U-)+pnMHLn{pmOi~Pg{$hVQv!Z|T?p2Htj0Of7DSn6AySkSaj|fismAIRz zYWJ3v_T*JwC|FuWl#N7D{X__)x7buNXF@Eb2K{{xaAzza5Cg&l$E9M7@eQ{imMjIz zU934{L{L{EFP2*U!6qC`2`0Jn4~Ogyi$?reQ1Jg5TWFgL3qu&VA&d(Gvf)zzo+DX+ zjZPgm0zjFW09Edy1#}+}!{zzFA@U-J%n+<{AILWdYsgyKX&RC~(&ZeSry2^|O4?y# z?t{ETdJrOqG?bI2Wl&0!2v#>Y2SaV!**KWq?Cf0)}ddWYbe^eZuo_v#ZXX(w=o3u5K9zXK;@NE6PLMI*Ph7nb4`eqteT*eqD58}e@TByJiDd=P)0Gt3Vg1%0?*jz*yIqGqFSz1IEkTx zzR|WJx*rzh>_3!|?;r?F!ED#Q2?FJgsrv&jqE*|qDKj%~1KXU*?hjEcKz=)&5TN-& zs1LqWxD~ZVCQ-8(Q8!FAVC_hO`AR|4p334s>C4V${!T+`sU3Z-Q$b134a^B%)viP< zr^R^M?*f&jiuair{5wPMPjEjt0-#tV+`B#^B*4ZRaulA7_-?gJ?y2wX4;!y{JZ`|M zdN5dF>hOHM-0aKlwN2{y33K>6pM&L*uG?`kqV_?5H?6d#OOQz{cL+`38C}dXkK|p~ z(c{6j`}hiiuM~^t(ty}-X4h$YY$Sh%#u5|+M~fa}ZUnH7`9i82@bmt}S&9Uii?7!< zbbUl3J|QAWJKBqzU|Qj-c=O6@($Ji!$VL`?ockn>10dydluUf0Sw@DKiz;~IeR&1Jazww4k5s~t z>(#%ow{7eWTUiDHI?&ZVmjEf z_I{1ozwBl0k9E4&vi{70ynwQ~u0Y5w?8md}6=hn${r8{d79e?f zBKB=5N^xFhXE;`X>8%%%+ZXtzkcy85D*M+EK&*yKqpW*Ef5Sh61zTriL=(qz8y*gD zD&}_RWHJGutJjdW4CWt5kNLQI9l{vEk+ryxaDTwYzzc1jIqO0ZzB^$tqZ9Pb~c_& z5B#qV2~)LTRV}&H6llFvC`G$!$jCJ@tO7$l$QX<8oBO>IZd;@;ILKSWK2yb}!eoSr z{(4)&OC`*mM=|oI^(DrgTiCfkH!$$7VaNpng$5ZZ@*&m9l!9e6$Tn@FaTrem6}t+q z^_RS=iWF!Wb=%N(a75Zi`NwiGRR9l6-a2-mxpJJho_=pIIsO;x>OoA2h?bVfapj*s zPUmfhI;CR6G)u>+>L|X%@O9-qJMthq`wX018JyRLuX}t$?>YYxNT91YSfUE?@ui$|2e13ozVrx(#!nFfFZ&lZcALLSMf zhJbiPT?-Q4-yU$GB9=o#Ba4Ruh{d}GM+IX44#1gUqLUsuoV{ku4-@kDdDK(ZEw%Uyef`!wg6$&(5d3z~Q^+^tn-% z@YU0$j+FP0RHv?tRDASURo&2rXS?Y_6}5=GrxBOD3Exn8XQ6oUF+V}RDmV~8U`-i)$pe-sgYGyFE#t~PCX0=s>cbl78+^GP%QpMlyDJNe zWosVGj~0c1hN&l3oD~m89tvh_c(0(@8?z6v&k^VjJ{His8qyY$To2G*^=#fRU(j8U zyvT+&f3TntI1b!FtVa7nvaJUs!w13wfdkY_g+>6&qL)S;k+27|D(33S%Ie}0EdLtQ z9dTzEsR3v;;=o9b5d+fH3e&45hJJlwwF=ZunZ-yuUnrSfX}P)*$J37kX4T1%zOILB zT~kq6PL_%;$hjH$smbCiIkxBcHZYK`F}HAegrzXB#2Y6B*Hgmw3*EUd9rl#?JioYx zu!I-4Q@N{WKb?N$Vre`9zaK6lo3Ci&Kl}{L1KO{KL1T}OJ)|ctlIy;`u?8ITX6WHQ zNw70~^&y`;@o2snSkVRm`3=|u$Q_=~xVe_)fJw!HzIi*NTusPVz7M{Z@N&*8O{aN; zoo+-RU)PGSDON|=ov{sBfM6Sf)%=xypdDHU1Dw?H+zyByUl1_r$@;>LGm$kZKdvog z=hml}+!{eBM#?T&y7N%oUN8-VY^N?*#|i@{(PI919nbecV1J@@++K(n{$*hi6GVx@ zB*De4;7A>;PL11-gk%GBf~G9OGot>K`77ZtJC#Ga6F$&|Av6l6qh!ZDE~7kzrvP_i z@^TqilFY4@TH`)xn8Oe4AzF2n*z)Kwx*a_VU5yC(C7<4~raa`!>lqQM;}i=Tya9-G0@Y~=Ge zHGYv-itXES->fILmVao^M9685;cP5`$pYb24S(h1(igD^V5DMML}XF%eL_yx0HDyz5)aTeOycs$UAT41j^*pCxBq*w~m;EChm>d2_;a zc9_EykfukaHklJDShT1&WI_R2S8A|DK}v<*(jYoSh}5^>1^wi#t*TPGa-ue%qE*$; z3^K3kL(>i2gpwcu9XTu*uyWLv)RQZWbDrAW(9aPB!Qm{;f!7DH7nGr4HCa+lmBSz3 zm8x}Zyv&;7(3cJP)+A=QT=4@N)v_duQO%K(C9y!n1HIBep=n3xhy>O_f+m@B!@H5n z7q=z#{E}-iz=PgOW-QdN2Yu|cx$40sOa$5!wa{4sODdoQKP9FEsW1!gV+7e8Zmz!& zh^UuWhQbOk)T!eaNxcH%`U_oDtMY4ABu^$6n8Uma5~kTzOkopI|AsxxAB2leFfWf< zUJ^xAyfk=32%a+I(J3Pk20@^c*WBHK+uw0lLp}&(3QR)mV1zN};7@`(RJs??EfQWX zKvXQ?c!iM~ek2D2Fd?f*4-jIPg;`LFgK`xTq{J%hIuL_HvU4@;U9Xe>bP7cP+08}w z#f0i`7>0j_SC}#_)~TdbCYC<7+e3RM+E!E>c$NW*b1 z6l5vl{B|w-ZFIjCy6CS{0#C2?4gxyc(iQcgf)Nk2CYW>)-BQqN3iLf|vu3$=Ay2u2 zg!e8(&-I#9x@^%WGTq7c2kZtkf?-PE01x}5*C6mFNE!B-PQ${a#R1vucYA(+*de9i zr`QbDkv7(I>4P=a3tMk8Mpf%M)HC`y(xzk%4s)kgLP=QYScAk+eY?VjQs ztk(cWhJmwf#4K_frJmeRnorlsy>fafr!-WWCQXgOR&%TOX=iD&bXnS-p||^Kx>P=$ zPoHZV(#QE*u#aUwn18ar)n>3sbUKXzRtuw-)>QM%$>r_g>WIch{k0}SFR_QjJ=84JE!0kQJE{@=MZJg7P-c&H)1Ya0Wb3#> zvPd#~(ldFR0#PO}%g6jrHZ+Zgbc1Sxa)UY&aRi15v`P?2pqhi4gYtbW0CJEaNK=_~ zS+s0gRz0(hW!I={cx9P&fOWNH&Sl`K>cVz;ylg+~+u|K}ZaDqm>VCEZ-4CpNkoUoW z2S)v9)q|8TPX2)975@|Z8}A4E2S1;Ug^7h-+rDjiX6w2mGdVL}vqLjRGf6W`GgGry zvs|-&vthGj)3rILcIImab$0diKW3|bkItu`xt#RJ7hbQEtp=g#i5czc!qrqS{vj!NP4J#wEvuZ zO0O!fwfEi!_Cx+rF(MUEsI^F$(G_pdAkvF`i^PkT|5}V_rBEhCe<>DLsFa|tMr(=g z76C7ISZKM3Kgm2bpXY-K(Gsg6nSqJ+$o0t9khYmA0q&Kgg_DdQof=$guAwS7>Rq8nPAl*>np|fZRxzqyf%W1^RNocz=IegD*7&HwLz6)G+o9*#&z zTDbb?Vqvc^g<+DA0i!*R88p@vbXY{*##(?JUxOf{U%yo_w@zl}BrXLdFlv(?dI<*f~g81PK)%GYd@wrcc{p zs^9m|=6S0;RvLdhEa5wus@CvIDcZO=(l{byQ}mu&WiAK*-a8w7%wPYxx}h5;H~!;B zo{qcf`K)@K5^b%jZk#$V6)4hc6w;%Sp5i!hVYj5~Ltl3y1kAre2d#G*@$+*}dnD#z zUx=)XrhIR8o!g$i=VUfVO57Qv1)zRXKg2}~R4}j+RY^U_T}ukT>>7up7OXv;UU(>e zSi5cI9Hjbj5?jryAOA(a1^IOk0vfqGpm39`O-8qGXTPY9Tl8c2&en7gmSTk}{TyBi zyDo9JuF$eK!r)a(#VAX~DLq&Kc$lJ2a4yEpz|DNGJFri@Z50eh(4Pj^JIi>A)LO-f zkJJn;R&zo z>2c3XtS_szTx|up4#M8{WU^@4`TyZ0X6DoNCcH^21a$Z-7{}`_zvH1H|M|*snEBPy zQl>*HTO{F4tbL8mizDXQtjyt3ganP=kE~M);$b5eH4h^w%#?H(u zQ%MGxyE~w z6(WfR35?j3NP_xm9%?3s?HbX6{W&5h4-fMc1ErMY3wS zD#GJ!Vpj4g`c)U_*1ihf|Aeah3k&iX6)dJrGMZjE$vI@wail(4Ll9zIU1N2fZg-nr zJ2$~VTrU0dR+KNbFvt@-g4nDG5-JLoN{UuhZ06x_tn!YZ4wxu!f@VrYJTj@I+t<50 z!jmaaK}m-;rjq=id?SGIigzGzHA#p9aGkpS0v0KpgOvFi^1V;>auz<)Bu%zNXsUN)+Gl zIkulpl40D%_(DX3LhlDNw{bpkw_Kr-q>4UMH%`h=6b`z-cRT5t*q5=Treo!}7y~2O zzHAge^Pgbi^yZ_*g(thKQmTKIPt|$-TyMqY94=;`oNFBD*%tK*C7eg#M1xrHa8%8& zo{FeRv0U>nYZJ!Gri)pO4)z-jJAeaex(I}ln@uWz@zU1t6n6I36*@AYAjCgSmO3Mren#R-&>cGS_!qfnHGo2X1U?Z-`|K>Kfa}W&xn9^mEuu?^Vd6$)fbYQvy`mP zY;Jflh!62C&2a}HAiBx$K>Wy|AE#7EVe?rjbR=4Y`~+f|E8#@M6y$bBxpWHEB{2Od z`Lek*rG-lUAZ5f?Z71EUF!z#6{KcI;O+f^9^fN~vqV3PlDs*n&mkH#T_B<&**_&63 z>Dswf3YCF&y%sG)<#qO*p+n?I}q4x0h*3LOhf#MEZ4=k6 zA6E}aU0qjCO_hXRLRBHlie_i0h@-TnvA=E1ouxdbyQo+jbFSJLRTH{N5Gx&LDN!%0 zdTy->%ao9UQxM4G#z7#sI*_a?<8S@3m09`&vdh!#1RonXSWaZXQk6v=*+WUEzV%~k(_&AagQ)pFNI^Q$c zizEhT*eyzKdRHBM52*cOu86d^Ju_4aVh|L(ua~7py(n65X##&ra!5>k`Soj}O?9>H z`n{oRy}K_QYZ)Nc$iuYMZZQj63kWR1Yi^JG#)lL?__~>C<*G?8TP2w!9+|v}o?*Z5 zddmrT#2#G{iIvSSX2?f(rRoC@4*2UoAzo@|r*UURKwEXG& z2#Cg_!kwn3BIY8k;nl7JDLf1;@erXJtQ%%`w*+EkWtbS&Dg*48pm}%@a?Vtr@*OK1 z+i-dU2m1u-`WM$&PjIirz!HJi5KRy(Bh9!use#42#|h2Z{E>^t^6nsY)i{ zRnhZlG3&0Z5q&?eTx5mV!1~6ReCF-Vlh=N3l(@6>93S7H?l=R|>=nmw51$p&;FmOW zr$<3d-TksNxlN0NGNf^LJ(^0njxNOoz8} z%2;MJ>ZGNSfrScK(AO8m4Ej1vDcge6VC-|V_NxIgIJ;tj+mIy4y|Oq%gEioM)X$56 z9Pz(FnvinNxxxop9ihcTHKVxMeqqRHvueZS9AwsI1fX4PJIZIGTpQrqT@EDG=!90! z&CRjON4M>uT#8E z!$A`9I4dJ)TeC+o4-eA7yopK zeyEdh&*$(Q$%KijvpuV@>)o3Abw=u3SK1PiQ1o!gU-RB}yTP8pqd^Po&fQKbQEfqZhpZd%JIR*a&3lzI28pUy> zXbI}3`kMOi=b7^)OBi^4)4P9BvCm|c%A!uhPUu7Yh7Yt3?+fdhpLlN?iO67mF|jwJ z(T?U3galM|{V&SiDY%y?+|!P2+s=-ye{9>fZ9CbqZS5V~wrv|bwv)*@r)s|Q&8fMV zi|$_C)$i@Ul~87t@n+CT zC4`PIvpQ&p$S2tYw)RrI=>rY=k1?nHH?Ra9j96`TF^gj>xjrS3HWM#QewF}(Jc;BS0N&58WFxV@gNZwp#R-==$OQ0{jZG#+mVY@1e zxY#0xwKeM8Nn-Y0*EFyV{qS4^LtHfM!0*5Dcsj8GOs3Nx9`pfbn@0{8e&~-_w9{=m z(xxR&iEbz4S>ER2mtFgzS8S5xT`V7&s7tv65(@t*T zKrWF5d!fcmQ*IWfN5zDMq@3x1TXSkz(nsC9%Uu$q%^OWk2=FjFJm#jWjw6>2w-?kIRG7NZ05I=w)+h_c3cDx`k` zz)5}sI@lguXZJM)w6Q=Vqq=Ck&@kS+Y5SU z!8Qh9;xD5N5UsUXrr&r4;B4Wx83kq(cX{2cx-VB$s3W7%C>=bEsG1L!uz!RI`4FBA zC&s_ohJMaI10Y)hNKah16$Sl3H_6KPRoC}W-|ldB;1|?xe9xRi>%ET`-Zx+_A=mw` zKLK;~=WTRlSS_Jpso)RCoh{eo4&-IxqI0Sj*0VWp&~qT!t{K+?xj%+0_+b_r?6hg|c8)tpP>nv-%)jSuRDw64;X0Fu95F2*b?X znu40w1jpL*#um)7R;# z+eUx#A!Vc?%)SA=Yo5eD_`sm)$h&ZVfuT0VRjr+V!{F#o|46@5z(WfYNp>ggL>=Hn9q_W>Ug6cj`Bggxx#vpk(j3PwAqTDbMEL19_;IsBj>D=TPkbJ`S)zaxp$DjtFmXwzq`{>gYmxFRXCT?0vemOl+%f9- z6p&0IeVZLno@D=xLO=Ihm%YL#Z(~9nICt-&#v=DkVY$m8?VaNvU!#lwQSgp3-BLlX zR%Hv9QhLpGk1>teeT}7sY@ZS|!()qR_gyV)LzHM{SNv>x#u44lbu&}eSlojaM^?DE z)hn?Jf#d{WkxzkyU26jgQO*T9NP$ZI&Vo5JvnW3I1qoHpg?b$t8vDZxz5*0`K8Z_! zb(n7W8!2K>560o#2<|j25B~nJNBM+vc(eptZuyf3#-pf*+Bq{ab`-~;SpQ`eYm!c$ z7jkyW?+h6b-IVox#RfKkyPtZKBA_{_7^eHr!GO(L45$^V1HkZHXtD`|4>+rH;}5R| zKDyFd4kql%oC7*zguJh!d*gUogO$K5=0* z!J0kTzqqIu(d%lZ+6)JJ3=e`KmFVf^{Dz{?1Sy0cJ9_X@tz1<=KlliBG}y75nq?FpAQ1gSZ22#*`@=;UY{xV5hQFZ`|q6I%lHUhlj}e?%Os_xpmR=jcxAObraW{0 z^>7lP{p&;E3z6)H``_~-?V8IDw6i-&2Lo?m`Z%7B-8CC%HEjV7HT$CGiU3Igg@EI) z+LPEhm%wLSBmuJS<8!M|{RIxP#%O|L%O=BXGPZEG+KaU2hjLT=vj#({uWH8`6p)rN z0s5%*YDu~xpnQhwaN?kyl1oBOMP=XRw*dL3@?34OmYTkS4;bY57fLH27s&wng}Hx{ z_ve3dkWBxL3RLlQFlG3^VUUW7;%f5hw8D&RTy#qIwuW~9`R0F7kevTvbz>*u{Qq0s z{yzfpNA>pK3CRDv{oe%SPv!pwfn;L&A5ypfU?BfD_9)4q#$d=`XzTDJZ!@$rVK8)Z zvUfMJcenemk*foP5rgrM<;~R6+`@&y%+k%2!OY&(iNS)w!qdUR)Q-WD!G^*1KLl`= zKiW6@|CGNu7&@8S*_fKSF#PAp=|4*yY+RlHLkeeVYx!U1IA>G0pK@nQ4+dukLu1n) zO`MB`lj+aZ-JZdn!Gpn*!OPUi{{J8{S^fu+`5#aI--%3iCN`G;W{%70fb>CC-)6Tm zWF8yM38`meoBbM;(nGTy`6iW!}CEva2Kg2~l@o`! z?<3q#D&#w0B;%gT<9qV$bNziGrKhO4cUy8WCn}*V>X?$+Y}e$$<2?l4d5JBC8Cz97GAYk*;)Bf`Bo{X zl~c!U|5&orqQ-^;n+Cqon3!EwGqE7V_TZAc*|0LJq@9F;M9XV zW_cFgh1NH+Ti##zTk1RbE3K-jDu>Sgz3}q98P}#|^{URb;jtdRDW*}jd8*d7zRSjY z;)!;nXYI>~$MT(_W6h1-EqY6*!JGpL9&Gi#!2nC@WNaii@s8~0@FRZc0%?;$JumN3s*99q9| zZNnWMlCTxEhQ`+iqi&8dPyrwEGikyS)KO41OFNr*&a~WF_b25t&Da5;s_+H@8Qsm8 z8V1WY;U}(yvDO(jIVbec&k;rZJ}^~x9Uc;(b*p7xGh0>Jpuc5N9KV{oRK!I&2e*J9 z`uL{y<)mxALH%^MTadDsq1gxGP(!R&+6#G>V;JKj9dG@LfDyUF*SK9n++NnuUERgo zK~l62W{OqGwYHW-T(fVT6jd0<2so6E6x6JSMiD5&R$!Q(JF#q%vDH-M&|isS{*;ci zQ}qIzd`Sg>&{Y0R!_T_ zB~V5`9KcJ03=O;A6BIm?yJ#1NH{S%WL3N}&dM3*iA^wMnh*Z=vD914~#Ba10MCl(o z33+QC`v{9X1z4(pbJo5{WA}j9F}%{@e8sGdpKvxSC6Rz{3YQuMp2fE-RlvZO9X@SM z(b=*fI2q12y+YFw@=MkRb$8y-6>h;t2m0XIlq*V$k=xht&DEPwNwwm6onu-&(36I< zcK+#w!Mc+dFq5Yf z>2&PSFjTPqosOa_DM_rap;e4+P%%8~_zYpBp<4PY)=tkDG1nWGG4Ifj;G{vExBJuL z(aY_zTH_?ApSFVcm^3wGrTJps&2M4JzRTaBr*qNgvwgNj#0O6dNxpTQDP7iAGugLS zc`pfvu2t+3YIE9dXU>&d;f5#A=L8W#Y$p^5CjR9^_u&bNUk2y^s`yO3?$J3)rQN8s zRAgg_U1eo@<)IMj8>diJHCOE)BBtC_ z(>3u;sJ$?CJKYu0u1-WrA;vMfNhkr8{mBqM$eUbXj)tzqKqO@nV?_?i^h zZ#uVNi~Bl8aCcNrD4sz59Y0o(DNWXMVsI|Q3+s8(7|NlN2)%D#q-W1v_9ik6?WicO zw57pl`I7*O2VJ=RvfX;TuP9iNmi2*x(_ z@W9@Lu)WURjkebP1)>F&fBuktHB*d6ZslWIoARE*tIDdi-Wvzf$SGbQvzo-Pg83k2 zP)Ce~Yj(DN1L_^pgd0c1BEo2K3{Cdtf_m-px=`CwKa1TBlGaCr6`&VL8=sW#RA!%x z$Tv&-a7nil^9!3ycI&bwoPYNktvzAubkT2H|E4R^4O)xI!R_q#IAoDn?%QjYrpN>Z-r z8Hov_OvFBh?AHkIBcm&g&{eYuOji_!$NVQzkkD9sT>89AlHB|SGFO7VnAB6)!&ri` z756!6y|M?UAw8hH{diw!|pm@DJbLa=KLS!)dz(@|EP^cxWFS;xB{$0f?KP8^2bBz z&O}E(tRtVKLV1M~5;K2Y_}E{{8<{%F)x}aXthn8vcTo-GolaDZUOe=Bn$_`v16`RZ%NIX=<5DLMy8%6fWKB13q24Td9Q8$_@W4a0S7PtTg9Zqz#4dsGdbOZCefv zg@1}VVMWTM$u&~3q@dE;Vv(t5_)quoTjm>xYM>P5ADG40*J!nhrIgco;i#7|&$r^b zL)o)}zT0aFgfg1>LmMG0;WCADOliAIKCkYs?#8;r6?OE~v{<%pE!|fl_4(EihZRQ} zQ@3Vj7QjgF5t337q3@yR6qzbD%@7LAA<~9XE8v(F8dTCFy?hppnyUDYfvoxv!yK}= zNyW{mx<_hX+NMV`CLvQQrdgqkwtDV~Qb{6EzT>z2y*V%c9&?JMr{DJqsyLBjhR%};ufMDWR3F6KHhuxfIf7a82EFk0j9Li?H6-K-KdEen&5uMRB5UC5+TOpvCV$BT}Xz? zSweqfqDf>WcYQseDv56e(p4u&N70QUB`)~9O*;`cC3MKESt2VZr)*mJ2xeyM51_8C z2DwAgBI(@lLTt>3EVD$Rvno*{XBHWB(~hy*hrHJS-kdiOS>8mqwk8J07r{d<(bGbB z{hSFIr9>ztZNS8`A?lnvYaQNa#pCi>p}#i;3qjSGvvG*aBBvvMBZAiUugLLs0)f`S zfEQu(@0s~yHrNAC^xI5XltUQ;QgrSsaTp6SbEsA!mcyOMEqEN|DS9`#&~q(^cq#EJGlQ!4|HW`W5KS{=1L*onCtScC&l> z2WVw3KkH-!H+=mi7WtDCjU`}P5?KD#p_jbKRDQ75_1V7O=>X*=`3o@V>i`~Ai9w9) z1wHk7CrZ`LxXivyf|hbN{s>QA@MJ2!XvNp;ARy#vE5^d(RM_Q;6LlzOoUmw<5)?C2 zi8YQEv`dQ`kKU4|n%Z1X&c}dKf48Cl6SMt*=*~B2_t*t{nLp4w;!fY#p3kApB;||! zX8e8Rfb)*No^=qcZ-Mqr>ncDl=@1?lS!1u(n1`O5+XE!YnHTtBDDkUp^cl~m2L}1q z+iaH`XsAQZuqkanh8@1Jwjr8h`5%ky5iylv*p(~BwsnFVy15#Vmf^X<)*?*&d z@0Ymn&4F`7v2n-9jj&QIi-?j_h*2+bDGXre>`^{Ua8~q8f{PA?fUylDqA3#-Ez%A+ zlcV+lqvE(Lo@DO6__5F7&+!Dyj?>-{H^}=i)t1f%GIfI3fQm7T&J*Rtp$GxhIi|x!G#DLI_ z>y^2F`{Hi6yE-3H*<)>{V!`**ooV8VyH9gPtO63^rMF~gO)Q=-{=Q(!|VvHo4V`^06#37WwgS2xm z+94%GQN?yI0=6YZ$9w+ztc|6_mC_?V?=QHzH}6X2t?N$Pg!x6%%)7WfOonp!X*jp5 zUMP?Q@K{lAqrTxG*l($q`TfiwSR1-obu&i+S!(Klr+(qZYx&6{&Ohf<#JOo!(cLo@ zOWb@lw14UF7A3|b-`iySN+OcsP_S?Eu>>%uUC0BLsauf|h{OQE?uY|T0|NS4B7us> z>w5($*O&L)NSax*n;N=H3JJQ2l_$02Z!<5Wyu7~Y)Hf%M6e;d#LWvt3e<{^C{n z$4#PjfzM;gWZUrId_bVMBtV~-IW0PH_A}Tg%e_iHqv3C*szORS<*`Yy84V<(E9esC zHEVdy!PZzCw4&6BN2E*x_u_~vZo}(-LJdE@{o5{_eZ&H_6dKCfaQ@fCE#}&FP23kJ z&1hJu+IGJCQ4leV7-3ob!2U?Gn!W*EAe>Q>z(`s%Nh< zIj}><$K;+Rr4GwJm(AAueY?GhV$zobplf-9#Rd2LLYo7Jn5>DKM(!%y|opqC5W+xVu^p5^7Eqs&?Ao5)|SVkq=S85FG>Wt??n zH56=Qdgr!lojJtb?bYv(%wYvT1BL}xqBcJ(BEHHWBBDDhD>?VjRRD;w5h+Vnu6^H& z%}xURtH$1CHbc4SXxRAeCt)WXJ3E|yC4BWvRJ;@bX2~?g6mqm9j6*Y)yLdRvG$h}W z=KTCW0W~zsXB8P{NPKz_kDH@6kfK3oq&^nHdjURbgU!w`f=uv8z}Z8-Lx6z5WFk=p zKsF*dAzX{j)gdxCF&`_^KSk2y@PD1U*sK!=pYXU{b^`Yk?Q?hZevR!lt`Xp@nXvju z9DdS)wC?E>f}quYdkKL8eK{oWxvu0QTRnY$b|wWi*BDbYH1Oz(dp%%$21^dj#<2-| zA%{Fhyc)!X+vOiun&FpWt5WcX^i?GMD$6!taUbYDOoi1qB%j823ziHQwuGVq--ovW zE)}~Uf+8|9gSIda-BZAXB;fd%aY$hsM_VbEiQd8LkUa)H-L>CSzI6nE1R*7rKm9R} zJgef-&oqgQ2!{6A7H#Y#KnKL_H6`8c5|r4dmfaqyT!fsvW?o1=$E&FAALaq_QNVfH z`R{5BaQcTj^77W!3;>uR=<8YvWlU$_cuYqexo}B;fsj)qv1>}(D&zh&{Wu$-& z10a|Lz$!6LFis5hbabn6nQ!-9zKsfdNJ#$(1zgKdVH&473DeHOxM1N2U+1IGg8m3> z9I$y|;_{CixVT9Ia;L)_38!HP1%C2Bc1ZK#@i-T2QC>4(2$nWhmX}vhml5p1oO<7` zQJ!*__%C{jJo zPn}RRw@&7LLb4dx0-DVX9_oVGXLpYQC52+R-9Pg^)f5w|CSU>~8WtOvsB5k!?B~v$b%>ygCsGlZ!p$Vm&yN6d)W9T)qMN zzH#us;X?;CTBINVC+PD;GuX9bC3G4^?>Qz#xD@+Ibb+bLzP&M19$n&$3v2ij^owtL zy2kNt@?wB@ed0Oq|xiGumK04^@!^P z3!rf$1i_vZBZVP1R#unhp{39T1vF|`7+on*D^IC5uxJG_ ze=I5aS5QCFf5i#W0n9J-&Hhx?T(c=1h7XW@{syRR&d^+t8UaiMzX}3ys*eNid|_Jm zu^c=JKpjFg)Km49;8Ik;;0}r%7%;ub@D7D|4&W>(gS_+csfJRLwvIq^sAd&*=0Uaj>ww{Wk4~w~tA*<^X=&rLLMt zNco|Z?_6oF+zBi_80E!*VQ`NChZ)q?_ejquIz~6Y&|sMAgWefVZa(VspCD#CPG8VX zYl($%IEz3?M%KXqPq+^|qw&)G=*XW>m8GSng+*WhXpSwYYMba;N{~=qxTlDsAaF#S z%&@-#lqlDND=F&&w27sQ6mg3}m8G%P6?}E5w1h)*#b>`OL?SFeWFqyYjH~KEkV!{2 zkowzJ%-?3t(qFc)ka6A95)LaG>n>Rmu9^#n3l{?u6Jrx;K@mJZ3n#b$I$DQv*9(RM z@%NVp2);if`F04ukTgJG?@Vi}L@p*9TS&A~%D1b59Oen@KHJ^a>w7 zv_bJ^<8?8BNR>B&?E>{Whuz;`jUKYp3oxyOi+c$q0kNT-21a#MT2p+`3qBp#<^iAj zih{wjxPJ@#g(lM!Ilg4*j0Ueo>z;O0m@}&8-*C?F@ybXDYa4k(;NZT|UtfEp#v7+M z%edPyqV^tOla4czB9fsA8pVrX56`9rxFN(yKN%MFlJDH##6ai43IHHxWP6>Bd!Lkl zvtpNbz;1HAo95x|iq9PNVQsPiGdkr$v-i6okU5r+FHx{33=Q$mpwOXL!3$}YQ1rYP z53&M#zyOABpBb>e0->Te+08cDAzLl#IPdJRlQGQ0>7g`zX-azVw3J5w(T5wUh0N~3mzJkj@ z5VSm%RUiDGX zgh2YWIWAc)?`61vvWV@Z1KirAE$~K}h5IictTyV!ck=kYzf3?YEYX<;a0>D=+&EI4 zjQ502##cRuA*^K?T|ijMs9P6DwKsp#ZEy9UwtSYHyoLDOkGUjO=7W# zv&`G1Vw-C(V9rexJ{CG4XYX+tkMqua98P{@tPC~`Mh)5jwjM-;#@r`76uaY*j3(1l zqBs)}qegQqJj*uvf{_a&*yNS^{ZwIy(1bvEIA%!Uo}Bn47r9G|h13}!--kpRt~DrG zQPx2f^(QpFqQ9axeS1=nuG$Nj>8Q&v$OYbv@_xjyUGQOrlJSzmxz&|9RqUF!HMgaW z8WIJ1{CS@D)o*{%d_P#&SW#V*^CW9$kN4&7E^qE)%g^!M7hIxgHV;of?jnBD``~Tq ziqQDlB#ghEL4we^Fi2mYB}T<>=#m^NnFMH%bxCilmUPbPK z#N11QH?b)hElhb>zF_dpoXYby@`C+gScUL%sL}1?bv!fjCn2;cDDiV>>xI+r4L7NS zks|YU5YH=(RuH0a^& z;~?c$NkWj8yMM-QJ05dY>d%gKoqpA$*#|G1#81e4t~mj0wFfAV!=~7aIy_M3sMfc* z*BdK>FUI|eq@%8HC?JKzA1y0dxze$C)afrmFQ)D=Gp8jM@5?z5j+Z?|F;508lW>E|o_}n#}CeCFMC@%WYcPnZZ+Z#6xS*b?mhoo9PLN|8` zR#~Dq6WQTw#b;nOO%NY`9_HvpiyOc6j;&AEsQ9q^v>i_qGB(vW)ECtYC+RB`(xx>g zta%6ByVcp-(^H9=EdUrTnQZtTW{(Jdb)5U?yUj>oW4~P)T%Vm!w$R#Nyr0Vpo?9I{dtS%UkA*H; z-5Ch=lm0ya$Oo>b@Qc-(!5{QZs&lx$Ub`Gu9>WhnpF3{rM>Hey`D0EW)`lzB&p!U` z2Oq@opJ9Dgrg6l;Q|N^8!$(2nLzNSo+WCM3N)~2+nFT7HK zN@hRARAt;!lnv}I=o@L?a(sQtnhCqg-Iw38ece-s@cI?Rsughx&On4Q<@dr)#?QO$ zU>zj>bVK3$yy!*tG<}ye0`q;4FxxcLAi;k4tv=U%|*+ZdAM z!v@$MrW=WNiYo0DrfTCDJ*2c%I6T0O08a&KO5D+2ypMw=v4==A5nZ{}K^vi;{(LtZ zBF3(g&M}7~=I?C{lfgNtH9f7C2e9JOzTC~X7RLo!6={t0k8*t7ot1AIJ8P}l7vd*y z2P@zin~#SA`&>`!w{MXIeY1M=rTFnOZ3Bkf7f$0AgwA!&r-PC7gp@nQ#;s0d6Gs^% z`{ecip4Dbokhgqa7-}T?ZR5FKOc0Ica8`qB`7KQ;0w3)Ck;BSbLZNW4zAb;h4NT*J5T5+4#^2?&FaZ-_t<5rpo`;$BX6!ovNS@&r;JQo3W0 zuZYLW;=&mZ(wO6KzKzdGx1UuEHc}5z`0viNgGcf3O=kOyEsld)JS;hn0g%^G21~xq z8sPG?R0im90)fwlL~yNfAO^iOlXf2eGWern542CRFl65;au~TY!!d~Y4?j5`a7^|# z^LBks@4YWbYc~2J0Xz_H^)T}76)aC0MYH>Q^@NUaUV?RWUsTsP2ZaA7Ai@?A#bEc0 zHP!cEAf{>BEwJ|FIUbrH8|K;mG5u^Z&f)n5U89_SijCrWqRfaNil)eAxC=0|#f5-0 zZEbP7PeyVwcEN;5c3Z-`L3;xHWxVmdTi+sY*K1EFWi=3oj)#4)gb2x*vxhd68VV^(K(G%Pq**8Kh3LR~^!9r9c;Il*8~ z^9YZ=Y3aqW(NnWXau$P&e>5-m|P@QGG0`D+W`*_=N zg=lb5V=v&mMtEaCobkY+J2G<3(o@wQd7Q5)&CzqVg~C3&u)3<9r%IqaWd5@n#$c+# z++gro^fy^M@2$sqFrl!m>eYYRqLwOsG>$@4Wn_Trp@Z)@i zYb)s}BIECAR24nTi4KcGLr_`LeLf zwyfWGS1#BGt$kv&?%a897PCRk2N^SKgRHAJnLQPp#`Hgq&OG)6fdT~ZM0_4BrZMyn*>g@r>}J+9I0 z-Dav|V@Y%!H4|nPwUxH}A9f*mF)mK7=8u_i`bXRlOY=URb}ZB-9k5O7K|%ff{ddh1 z4d!{v7^$bQzhR?bf1jIa^P;-HrNc+yG4^^&9ujj?yludF4ew*ivGkh_&QRqjvJ`m_ z_e@Sru}s2FN>62(PiJc~Hh7pVOv;=45&MaLgn2~0)UJx_PypxvlwUzeQ22^siztN1 zd5K3R_-j&b37>~MWHnOT$zam`1_UL7nRwXT@AU@Z^4;@ii>{Z!FPp0e>|iF z|Ne381pz)4#61Pynbc!{|6I#5YndU)=41A@d75eXW_s`WRY|8;r(sjKXw)^N7d3#9 zi&21qjX?ujHN=6zuff~&GG(M>MV}(!c@{PQI*&fDJ0Gm1Zkf_3w@!AMmYb%RvYqNj z<7;4P+_veIbENi@TcI_Pl!}__{)M%3r1_ExwHzu zQonZFsB6G0?~&LV@!a9u>T0T@LYNMq{?3No21AT)`Zq1%hcPHzMf1o^_PBW zn(BC_iEX{#T7->`o3@+$lR}uyg{@w#rcp!xF<%xuySDAqI_Cyn-EEy@qh#IOs>%lI z#=~m#dh~{m)qTp;Gked*M{skgenHxt^_lF0+#8W^$Ww{%nFe>{bfNSqdwUu|>CC+P zY1V`I1K%6$8>aSrYLoAPTiYehhHP_(4dS}jDnUa`vuy2D?Nk$8vu)jF9eypJrT6mF z@5_^B|GLlNC&-OF+wWS^OA|MS4Z23}1-qOrwGLf30=GanLpNwQYPSrxHn&i>A-5E_ zM>je*T{lp-BDVv#lgsM$t%mpID?}a>{)z2rzuZslC)x{+jqB#09<{-*bl(WyWZxj) za^KXh!rz(EIsMY$`lfI|D7*xL7Ju7)^`dsc zuqU`7I6Sx|xJS5HI7m2EI8ZoLI7zr>AbkKk92P-6ri222Dhus5nYt+?CD=_zP|JIb z3CFcH0Xz!HTRm=%@ov$#?m5^&ZL(1Q`K zW3S^j6kId|anDZSgwZ8PWn9qh1`mY=SdWp8b-)TDU6_6b&)*D7su2s{N&m_(gL-zo zxh`R{2Lz(-CcYJQy9V2WVawNF)6=bDu&T8)Q#(&ct{_=Kr^6cj16UY24)ubMBT#tF zzv6r~YXdfBC_o+vmT=bH`#w{1C9hA zZ-s<)golrk8!VslC>w_fjW@f3pXfGNZdo(=!=4_I_=NZK3+4_TpUTeFyKyDY5bTi( z&-bI;(>jvZc~br^MS4kA0-CCGvH#igt?VS=%#BZEpBqabRPd7Vh5YRSSwhRkDq|E8 zWeRVDWotVl529DjIhiCl}e7>*|jd=Df2+7O>vGTW8dtfNwAC#zqKrzu`OKAT~> zDdY$hk~ry4AIIA6I5L?$LdEmQYS+;J=6}rU!&Mmy_-b&9Tzn}F3fqVp98f&${;=6{ zh4|VRC6;#TVOAiR3_i&uc{7z`Kb#!P-rhGMr$=MVOYY;nTGhKt6HbI z@L+Ixoq&T0WXKg&7`yx0!{o348j4M@DfrrqP{BfhmlMR{Oc0e02GEatwemqhW+~x;TC_Pm;Q<0B=*G zU)}KY<}-HK8XRHB_|HsNV7i3_d@Ah$ORXw_p#L~dIj06J`9yxnMaz>U|9V%LPli+Y zw`i|xk5T`J%L(`(8w};+Bl%PlN`~W~qO(QIJO|SzPUN*8tC zd9pN>K={aTnEgS1)@1|e85yWH;~|`ob{w9l{h?Inmx>_{8^vp8bqK@q3WmA!BH|frl>qSAwSR&W>4OH5>D$IbK`5JLSkZeQbI2n$Dqp-TQgiP z%mr`beg4Ee5do3?GsV7;UR5ED7IV{ZaRJ=BJ zzd<}Uky!Hk`s;aJ>NU~^4Ftl!wRELfh{baAU6TwUj= z_&LL>J8&bIe)>lrk<K!|MA4;U7a^U&%v-tVKGV49wYL+KVk{UG3$-#N$+$4)zw2?>*$XGzI5ZT)KnDAi8 zcUO$jEW$}Q7N>S9bL#PGkq6c%#1Vc?`t;nhh(zCppCcq!|H}T-Vbf80Q6ObXm&y%% zQBpNQ(Wf1=aZ;Y{laX%&8{=JJ$ea1~W1GQD? zS0Um_$9XUf`So*1wr@YL6}M|w+;s(yu2+cw$dt{@Vb17jqBH>dl(RA2lXl#-gYX*j zB(a-Podg~V5fSdDFV-}gD2dY{ig~vZXp2igTpV9wy($q*m&E(-K1da0oM>RlvyIEg zO-@RW@f;f{%G)P$chSc-_OEE(&Ui0xz4C$%XMZrxLDmE3ZKp80a66h<>fo(limhbu z#aYECe)~n?#pXq)PD#Fm;W2IprJdL$ zFH;C`ufwz$dt4FSp1vmY-Sr(CwcZ*EiHjRM-J9b7`>-lysV1kPp(o*_<1Zo# zW_X@bA7p;-|Kxjm^SybfSgwH#d&vbfX-%M+{$plAK|gc+C=3=?Bccwz0C>Uvrhi>&S#!ODRY2W`*#$a>{KX4qGr9q`={_FIe zRM{1ajeirxkK`Wr0&|TasIeyei^|KYlC%XrkDd9g&c2k9X(1sXVc#!gK4JNfq~u?U~wJcZP!eiGrtKiNBn) zrAGn8x&uNz^!R(A6Z%ZJkwvqACY!XsXJ7j-kuEnOu zqL8hC-)J+JW%f6iopDkHTEf}hT3BCSz~9E93i#PV_lL;d8+M{b zlYmHq=B8IqNXaRYnY>q*WKVyn|DH?F6st-=dm_on2Jt>b6?=zPCS|?la6Sd*P*(1U zb*}B?@I{3@NqBF6Gpepvm*dF$hwdeZQ>|xSJ)(chGnV&oZ^7Gpbr-vdO4PfS^KjWW zWr0x`SG7~ycR)Y*;PY@*7PJ`t9;h7G_XqmrzI7DKAW^O-YU+E&_Nqig{;!lK-6HKc zs&Pj0#o;fmxJ6}e(C1-FFe5ua&b_P(u` zUFYef8_}#z-`R7n#DH&`UsS|>?`S$sxjg7c^X=hVR~XHY5kRB*Fz*kW-@quGm1;|h z$FuNe3&X$WRoWz4)UH50k4V5QQZ%ws@^S`>i%-CAp}%U|(>U{E814bVdLiK#;^OqW zoO=Eht3TnrukP_VDdUSSqFPS%K&Qlic4?$hxMtP#cVKeQn7RAK^0Aw?7Z|u$vk~E? z;1%q0maFJzk}iU)L;f{Fq**1+e{_l|NsnU06nJwc=P!~m308ZLqQCl)Vk;DP=58a; zkte{rhQBX*)Se@HT|AvWL4wr>u~1puvM8K5??O?QpjIT6JHwEdV2=xdTcbFd|5@@E zObyb@CB|eBR%+r7RaZV;>*j^*Va~s--XS#Oz!q(z3c69 zXf+c}nnR}`r*cK%@g@m%c?rht{k&p@V}#E42V0^`Tz3+-1l3kbuTVIqLB|Gh@I;6V zq(J`76<|hWC_3`yY}aoGHdq#^yc4CIwVtx|tGLGxM&Ap`W#+8-2DlNa1BuFXJXG#d z^+}dd;k3uOrHz8NI@X>`DDCy!XAAqG@cPX)!I3xS|h3W(?V>j#+&2%0y zbDw%O84e8%Yuqv#-t5U9QRsMLGfS+)>YqIOEyWOsgW5^p39SBU4k48cNY4w%3VGgB zZQob(_<^vGQw}HdFM7UIaB@5!lSJ=yk@ntEneo%J7_Ks51dbckK(8Jn%rQpd@X-CU zOTN(3OTMC^9Mj80>nX|(yZWt}=I0NoOLa*Srm+4HR5ZN)j3S!*KKcDS8rw7bm#Hh8 zonD5&Dn>&`Tl&1MK1akaky3LLz`jV^=|m-m*iB|2{HV`GSf^#~)HM2!x4OlN#r_ugDINK2+6IG`|-AS8HzpmF2ds4XdaKDs~qpD)n|Cf{21B zC<|LuL|PFLP_e~UOl(21U3PbOcXxL;_J2L>eb(9D*ZY0v{9}BMv0QLFpP6^Zoa+wF zzG*7_`Ss!*yL!ime@_0I`8+=6^|O7oC$(rbrgh)Co5r3x=6JU7uxE!#O<7WW=A@|n z)=l)STkS7%ug{XQyMA9R|IPi>Fztn`LRR!rRph98F%62`uf6Kqc#Yrw-eFElQ!{K^Tpr|FXV2nS-9qCI z_DSh~$ofqI*FvkWp1k5x*OWeSbJIdACM28*KfWY7qi~s|T_1~D|7x}MSDnaw-5*9x z?5MeJ*TS(twRyW@j*LrImAZ1l-EVNyUjFt;AKP8MZROQt>BK9BiRDt>X6>|#ODgK^ zeqr{9glhSAFBmwwZ~3g(MVt7!kEyk&=z)TJin;n%{Ass3Z1*bDjkFKF-fTNuR&|^h6H#qjm0`oXpIkJ$ z(P`V)=WkRTTm8sS_X?laHThu|`QEkQ;O(s!Z+_XouEBh)+3CSwy4j2v?6)+l&Vs5- zwr!ff`_iJZTbmua=v%-(Wbl*&=d9ZPWxw5R+wQS-oG(s)o3By#r2bE$8!XL8%lb0N zzIIxxuO0G-2cADNb@Rps@#&*;J=j^n7&p`ETQ#FsxhlEb{L59Sa9~Mz$yWIaH2C%D z`^4H^Y9FlaIC*H<-XUG$-gxX9aH#o=S00~=%?Z%AE_|t6sl-ZES}thwV&><4(TJ=Enu3!CLj*01c zF}-*H-D`ghxHHako@YvfUCsA3C?1}%dG74TE)_!#q$hp)bS&*dRm&f z^0iG3F!x3eO1=3+H_2PZr!oFr@OpO9q2o7^Nz||-LvqiHdj8V)3jcP*s?g;jt6L7r-*$9r`PKLRpKaedQuFF)+P7&| z)t(l3m$&;6w;~+^=VdPQcbs9h-=SZ>6>Y|BznjNr?yQ?14mQd)rG`^w|1%@Lf9&Wq zY}C7sPDj=pNO76IuTSc^bER(|IQyx={SCW3m*+VZV>51BlV7c_=Gs2YuF_kZt0NZX z9Wk%+x+*tIdW~GxdYk=@DL>av*Uop}I?<|T=+^Ku_k3oX=aoZb0Yfv>%+P9EG{b)ml|clN=Q;j3+JTx}y$J1-cJ ze}46&4z=opmutIV&CqjOFa91=b?M_7DkqYtfD!BhIfW{eD{G#*16~ zC#|gNq^j!{y~VF_?=ah}zQb}IFXUm>A!tct=eWN{E~*WQPWscVRyJ-L7 zRY$+K$y}PA-KvCr?tT|$4$PO=em`qw{^zF3kmzXtUutNkkM^U^8&T%4l&QN znR4IX=kez@&t0E1+xsft;`D~^8{PW2#8lDx^4XsIxAx70dw(+yI=5jyB|GH6Nt>^p(MP>xr z$CeFq9n!mw>1F+U6-PVR)yNfjq|TNM2jAzT`hA_ObvC+atE5cG^EmnB-!1A@xmmW| zW2cA?)S!;hK{mtoz8yVe@AS8GU1HTI>kiGkx8l#?C-NM~ ze3qU!vsr4_t=26j?AzLeh)mGYyXd**Z1!Y>>JUkRM{G7O>!-)?OipyNTIZV zl|AyDs@JgTf~!OB9^6~IYJlC$pv8vz_1aFGb2#dd@6fL%r^OR5Ud_-SxtDh2)IHDK z8JW3!yH6QC?A^$uJWp4i95f-d)GTv@$;BSrs1QAP^Qy(Gv+`}~I5yYY84h<2+}Shu z)Xk%LDpqyYQz z*}d&^^@-};xWe9zS37)Nxi@^+;`fe+w-o9UoA|5jkfcKaT{P1>+m0@{eD;WnGY5?7 z>|3!>&HDxO20ncJ@KNor!$*&fZIHaz{$20PLPJ%({a2qHP;1Gw7TIOTtqI8W-pgy+ z&aX99?uFWpDjaN8@@A14xtDnCHsqh#yHv5gU2aAcO})Axux((2OYgpm(V#wObPGWVNX5>Jvvh7TNfD z`o_=C&R(yc_|vu1;JLRPy4ACuQ*D0BR!LQ^g>2v0dFP%_*#lR7?^@k0ExSaG4K+X1 zY*r&C-N|ovqnf$>7BBKz-}d}Ym2-V#XhfSOn%sL@UPzi|es-)cvh*5uj$B^N!E4r% zCNsaDTreE(DmQK({HruX^otm7t?&YPm*H3%a ze%68F=iAmQ8TqK@qKCE9r`q03pFJ(z;eA%%r0H|hr%#%(;^_D`x83@+YZw&SZD`jX zn#%qAtE)O%_ib`Kux?_4xt^nMjm(Tmn>0IXZXf^1KcdadL%|P6-5QZKd-2hLqbGxE z)hJVIkz-P+a*ic}(%*I|R@KdSa>k7L{%1P&8l|lgU&@uvL=p!zDEzg)a@S-RALxndd(1H@)f}nbn#^o4)u@t)}e9Sx8=oJRvB1wG2T*251M@S=#D|2#fuf&=j+pFlHbB6zRimltGceq z%IFRm2VHtL$t*tOp!2&XJB!UZYgH}3&$zKE)$aTHH6Jx?a*M{ZtA&jJ)@-Wgd8h3K zCTwo*S=ZceYGu#zeK!Wb*n7E$(Yoox+fJk7=QN*qC(|X(e8lJc6h1_U`qd<~=ShZ_qeBJYVZW74jA_y>h9Cr^H*&b1GT4$nd=L zhMkVjSNg=VPY;Vft9tEneyz(RLL}$-lPv1V9;<|fd zU|f1!O46Hq#=H45!!=#<&P-p`Wmx-aFQOY>-kZ04*5xA26Ryo^-f+%FtHS3(8#vlj zI?{D_mzE=DUe3;V?9*+@fz0vohRt@dFY|01oRp*;Kl5r6ZS7~@*7$wwu%&}(eT%EM z86|I|p8dW$WZ|4=SC4o`h8;PTX{_2e>f5iMLr8@K5=c0W3BZCO3(0|-Pq=6yFp%EtmbYHaql&_ zUs&S%=N}*1JbBz{NtoxinG+VzvF;T1#irb(6-V=?=ke|K$m#nM^C0)SKQ4r9uiSmf znV&z~mH8e~GobI={h4i_tvqpI!oZ)QS1L>yH2ubdm@Kc2^(r{eT-5l9ZHKAOSuKxQ z>ujU*1ZswP7=G4Yc;W6@Z@aY~PI<2Sce&90ai#Ezp?|G(-I4Vvm!a_0pt@_#$u<>- z*N>YqKKbYKts5mzB9{tX+SPL0xq(Hhb)TQDjQ3 z#(S#;0#Qy=2CNUh}lGl3TW$ac*Uq7e&Gs==S_wJH%sF(}<6M zZEfDtW6{r-%`-~;tkJG?pw+e!nFl+Mw_bWFrssskKl7g}`MGw{T63IEt*N`bluOf? z!P(nh^ZCwNu6e5#9b!M`YwD#}F#)%SO}IG2qrrnKuU>yE)$8o`lr}*}(;u(h z*6MxPSH2HI7KAO&(_xLzgqP)&wT^zh`WH_2J#x(wCOKyD+<-Tkg--7R9QLo^D*_ zUdE0f?}`KK?_Sa}dEuE?iT!U?*fRLyvX%qSKI`dbOnzSR-I$p*9u+%K?Xz#@=&!-{TDT7SEYlIvP{(8mj-JHs=J~mw1Yfkc<=WefFeQdte)veD< z_uU_^pB{PohFjM7F=P6=M>ZZ;?{WA^U$yZ~Mncx}-MiKec=`Tn`qjXf`@Vm__50z^ z9j`qH{SNN5y-&GoHFu(rxDi#|W=ygs+}SkDjl&)*+=Ke^}X zt%Z9Q?z!WB=Lz54Cmbp=CZuvm$tq(#i~o-J;kl#mi|IE5F0ERAV_n>xc=)dvvxEJQFPcrAO=Ll*|qvhMzlqrOp?|&pS3Y@M`@Zn@@8=g5o;m9A;d{#WotK{M`R4Qa z)$KlkcaD7bxU^;KnuYNJclOv+8WA<3Vb$6%i=8fT<n|7tP)edD~%5{wdXiM_%)`?RK(%o(FF&RE znm*5ezOSBOO3piBujBIS4Su*xJQ8-WY=`{iT-(n+W_>V_Npa`%4ww0`-s4LkVNt=*;dh}>V-UJkC%r9{lT ztdvf7x5QmpImLU>?0mNdo_gG?Uhml3I~PVgPOY=@!jzTTw5U$EyR2(f_id~p>EXEj z{T6l`$L@;G<#OG(C}{iwa3b>R?S;=_|A6 za__z@mt&eHaYKPUyLx`8oHDCp*)83j(gyXrTqt*&){ecac4^(ALwR>!pMjg6mLK1} z@Apo*Z+F-_xKqA+F=xhfoO3Kk0 z4)K0Zl3o zpLb=9&0^1*x^%l-?#+?@I27+zvP#FL z-g$pL?)t6ai>}Xp4?LdsbNtk(UmvE9s@Q6}|F4BF7k3}xJ#$y-3%<`vjtlJEdP&`e zr)xH|Zc#33UAysJYBZjoIV{hsnwxgc+?;6knb5gqo5ytu-a0YxXoUiKlgsu!QFY*! zM>XH~iP_{@vQRhg5$~S`&HX&3^|D&4A0P2?OJtRdk1xh`o?o}Ejd@=4 zj`^Pjetw_SWPtV7Db42_ei-&x1$@4#DV^r#c&MlC@zCHyc316gG|SUq=%Ytf%_+JY z_fpzL^}Jep!RgLtU)LXWbIX%Q-V-j?d|&f%N&m+4Ha;4Xe)8<8{yulDoBNgX`0?uD zn?ogEmTZ~ew`_Zp(jW$+eU6cXk>lRSqs+_uVP%9ORcKlVKR^m5qd(mxMH+nY|g zpB~}hYgOz>c%wSTCS}fCbpQF$>37f6kQx=fzuwuxqwkkbMMjj+WZhm^>Z;eWHfyd_ zt9QKPvkzxVJ9o^Ey%d@{xU=E){h<@_{^Ymy3GGUs&)X``4X4)ArY%c&U{xfk_ljH3 z_eLjQeQ9V|B|AOI?WJka&=dD{^J{PIvTjz7NY$`I-PYaTe<1T%tYLn*&!}TDKAvyt zO+T>iVBOPBE*T|!pLtYCti1F@TI8p4yZV*1E92jLVd2HrQ!a&j#T-fOH|4KU>(=yo z=03By*Bjl|fZ?yZPBD!-lzOnq-X{f*KC98b!3)O{S6yOewF$2EWM5eC3X{T1%sDvg zRpcVS{kaT&Z6069pLct+@;(o5)VXl#Z=a=yY6cZ@%=Gx|So3DrL~Vz?;l?o~59IpX zF1ugDtr2y8jYxek*Iyf-yl23J_x*RgY&vXj_l;evYXX+MoA38*?&iL;ns;w@=SO_d zwqEYPQ>@C|ytK8a@#W!Jb!Yly7gG)B5LSA=jsJf0spgptI}MpK&#LX;!@J+q{8&}2 z>!7Kd5^ijHwZ?7qg;T#4yz1U~=llzwS9`50(m=PRaigRgjW_N#ZrxRHd?0vqCD%>>zQ@`;I-*(&lnuuw6F1dnzz%`k$GO( z{Z-5D;E-vV>uz?Ou%Z9izh2k%Z8`DV%o9awxeVQ=+S2#09+Lt)?%iwKC+_bQhkNla zA9q|lA;_tIx1?q3N`BHlSFdh!Ye1gUduJUi@wMCjgxucFH}h`)*!AyesXkGcCq20q zmU(Gt({)8ZRT?xjapSrR-5kzbIAYom^1!*^m*Iof9B5(pAiePXE)HIk!!`$wv)@!P zAbNfKqoFmPp3UwxbM@B)gGXH%kscIKY~`p=zZQ%Q(!{$}oc>{9?Y7C@C4+}-Z{?~x zuw?IHB)6A}2%gp;ziM^#)Xd+RJzHBfYHc%VOIzzPlY*CY3<+vi{OHXB5A#1-?lI$o zv9i~JO^Yi!?X`P<;8On!ZGNwac1`NPU!8Gmh_5Q9{eHg_m78~%>ErIRF}7NzBeODn zDr~OYZM=_j)PwMDo}1SvkI|KVYke-Cs^*TfZKtp8nR(&i`t9q=j>+ZLyfm)8o$fq& zWU;=pO(VVcG&)nmYw-8{h2x6uIyZ)(Zcdq3dyB70c%0B}*O%yX>nfFv zDDc_s);*_gZ=YvAyzLcrdd=g^{*jB!c$3P|ut~&`akg)+cKF!KF|vD=kXlhg$4x#^ zvv9)#bvx$Hx>GP}U;gjo$LHU;wCRY?M_XO)ac%v&xD^%O4GSG`BkMth{n^h|gW_(L z{yIINS8%@DcGDhZ^xVBXXyNjYXk1g>ovxZo_q6(Gnxq-+V@B)5IM~GY)X->)g6|UP@l5d<5X~|S-r`o!G_<3 zi`c|#E{`oY_~MKq`oUMLzv|+e^1RE5PJ2IOwtaIh^vQ}6ahs1OSKf8y#k-WrPrdi} zRQu6**44xUPZn)z-T3SKG3yg9s9Vks89uPU@9it=mRw%Ed6N|ludX;frPQ*uS?y{# z2Zg2;+nm|p_s~OD0h^oG>d?H)V6TE>$1K)G7s&7ZIx)5K^jjNxroXiNd;P%Aoo3nIodi|V_sypwr8k+Io?Zh1iqUOJxtDU>685GB2hc{-;Xqh#&RhIYjq^;jFt*jHD+k^y8 zncKN#gKoB4XAeDmcxd_kSzqHE2j=ZuHN<&!K-Ra9Z|~(P6dgJsV0P!Fm!?h+$kg=I z6dJZJDyjbT#0!^aG@CP~^&#KTdZ|r)N98 z_L@8EE^N5AC2YBO!SFBoK6<;_10Iz-5NLL4e`5QpO!KIwSN2S-lwI|A#^4g!AA*j! z=UNftcl*H7yZx_jao%_;rmm)pSJj8+X}|KMT@Fp2|GUbros)Z~-gz2u?&J?pEgSY#E~wMO#;9oFA&|J1qK51Yg1=K99!iq~~673g=fRz~ZY4u^VQh~89w z==7q)56hfk? z^|DXTSPe06OE}-`ZPk~5yWV-ITIN(Y&};s}v%#^K!ag@Xw&eLmhs(>3Et+<7`TnJk zy=_AKY8>13*nh6#>LB06SH|voxUJv3f!h+pw$+KQzv6eM&%>}sgDwa5R)u&!UiC=R z+EjR2al?wjJwtMr(RCac@~YM{{g7AZ7jK-NrMrBiz?moe8?SEOviq0ohU=bvLt?)6 zX=scH{P?I|VB>`MJ4VbYvOWB@&CI)lG)+=o6@SpR-MFxz)t&sZ`&hl%?viJ%-HP@H zFI2ZVG~BD+`M)Z9W;DGJ?S8g$-p;+|e$1@)qgYI?XwQs_j;=4FrUk##+P^*HcVNvu zqd8=mP3gD>r%GNwzC3N<@Q@G1ueER#98VtZG?5v(2|=1>UHxC0`vhK5Oqrb4=-G zTc4fZQMmHDsW&Q}KGlEFyut|+UPi4?TG6v;rY5!inEtP?|F!FD%k3pUr}voHv7K|f zxJpBxor$!%@6mQM`u@Q|KPyRThs5~>=d+f^60y( zd{>|QlrTLX%Z?^D z?J5rocJ18x-jL1B&t>WN`ltIxX!|U%z5Q#5$Cx8`HZ4rJwJ^5MqV!E|m%c9fa*N%% zt`&n*%SN_|_jNhbdBL+@H|ESNck;B`o)z;ij#?RWaK{i;{FcQt`}&TxYGJHy`mk+& zY<;JyD+bM8=bJF*;GF`^>_4wPh&va&pTBulWS4!-m-&9(==?VLNyPzfD_0E+MLBo( z6PvROy*QeGd*?jScW z{=nN>n_9cf$jovt7Fx!0pzkk3$FeU59Q}Cq;<}axb4T3WTFfec$I4#T$Di3}zpe11 z*Nso>?yU7H(DeGOL3bO3JxH~BHr~%~#f2$r)i!M|rd=wrzM;9orA2#Ud!8ElVW!!` zec&%sWXg+o+sd{Y<}&!_&o2*lM-FRu-F0d{gwanlz6MY-|sK1?%RAo^4I}2 zSFS!4cecN#@#ptx<9zyN=bsmIa@jej-fz23*;2iIwWG$W!I3KY8N=i*ip1PwRn4x<1<3?q1u0*;mfI z?p&$<=QS%1cF+IS?rOq&&7>R2hxdJ((*5m_X6t7kKVE)*>pH8JIk`-lIHOd_GGz)F zr=1^q|9E-xU~Pvs9alTM7Wr1!*yiHJvEREn+D_ea`Qh2}r``qE8R^@jXJ7S_)|)N| zjlMS2yl;PI=ZpE_*T1Eb11$`zJb;F!X*7niO-d1%UE z=Z|-4U31C1D{*4cm&e}}Nd5k+)94-Td=7d>Zky9!=A%1Z-wtki*I>Qs+ZGj7RiL<6@#^hw z4sAVT&c3XeiNC*YJsJ4d{R49=HQkusN%hH?^(|y}`Wdg1ef&n0u2iJ%fH?niO+HN= zfBtpv8L!`Mf4ApB@{B=;KJ+Mkmy=wRU>e{JyE;;_*GyOxGt>Y?Hj(oJb zz;&bh;(_;42A^KIx_64>(J>V=PsG3P@GAUWkxY+v(U+%9I%H*9czFJX(1Pu@jY-;i zv$t_;&&z$v9vhL`F?;jUSKZF}k4-dhIM+ozBzM%n4Qc-0=WZ}L-LJXp!t0G;3FlVF zx;#;Bcdlkr$hOS4DQ+n}5_(`7_9;DLO16o;)b6Uu&aZ8PLt&B^&Q#;1llLZ$H#V$Nw(Lx zm|fJ)YORxfWMXKKh(7U&-R;#b1_yMR7#`^s)X3-G9pbn84$;ZU32v^gefsoq>7#Xt zPmFR^o6TldmBv-0aYhU0q`rvOr#QzYRmXTa6Nzc}&u4K-E;(~@35)OH8q>~IjR^OD z4WtC-6JrvRW8&lNm4QRM#`j9DU#;4|drA0@(f{ZM|A2n9SRQ_I3rvg;?-dr2Sl_`n z(BIxSIv!#4oNn#aDi@W;MeTq)igFhAKa7XXv^;H`z`y71jy7%q@!>I%eH(=)M|fyd z8lAIB?W|F^(x}`tW;dWtF3TNoy9~0X* zFg`9EC#li7X#X`>&KLh~;O?sI=YOpCf4Kvp2>}8B_dV#*L%}Mgom->$uwF{0hF_!l z4!wHCgu8{J;!GDBZg!4TMT8=EBhu`w!XM{IQ+QaU!E6ZaYS#X54UZjtecJwlU#`3VWJF=3$!GPwdR96a3dkI6B~u@N3Qhwl}e z{I4HkV-);yiw%v7s_&5E93BxF+AB8M!6PXmB0R|+?^)Q#MubNx)aGWNl$;n77iHhG zS7>4~$hW%sUmF`6cHjT& ztnzEl7dfz~e|}9=e#+@Dr=6SfYtBzOuw>=eoF*~KPdT0De4EpxrvmGx{FO6gPP?2h zat6xzDW_d^rHNYEtoR-Y@ktShe=Mel@~=7Fhbccr|I=SiFF6y>>7~y3>v)b@}KR%k2G47fML7U5axfh15Rqiw??%_r!oK8&ZyRD zbt(zd7!9(WR;4oOWjn1_qZTl|Nuv@ltiwd>01S`({5fZ{QLW}N%v!^r?Tkhp2Kf`F zG8?r98rNu0UM2ctU(806fnX-JN~~99Hfi-@E`S+$Z6=eB)?rqe>07f_C(p=i)|=_f zfd*n7YAnDc_5d)g#38`+5{CdYX{kT8$|%;WR;jfbu@1oWMzIdSP+#-so~l)Nd5ON& zXw_nEXs0(&e;SiKBehD4x1r=1TF7F8>GiZPS`!|S`s2*iDxFF%XaO*-iq@gi%QHed zqdZHsO0Uw<+CcF%=NzgRbJ2s;<@^j-F~KxO8pEL1(Eb^Wd`3nUpOH~xr1cv0YC1Qg z(LnoW0)vtBGimg69wxnt=4UeU-kY%}vOlwi_tdO2(fmN@3?tsD2C~tfDu*fe6r><| z3BCn)67y55HQY|EqrCzrR?D>^YnSj;=}zt+_%rR5T7$!sbJ1X9ButAz2&R*~U9Hv{ z2v5~oGo;g>c&gT^O|%Z3P9t#xTR?cF)|sU|0%KPb?W^@V!Yegcgrp<2-b{F@f3lasD z3u0f4dg3`6qmj?tq|(wDCJpH?8k1h?tZI$PNOY+&vkcXkHKgZg%sGy)Kj>FuhDs^c z0ezSFJv0WX7vp6~J)JpFjm}aF&56cPc3+MQMk(9)u>3%(P}h$8Uu(W&q%9* z;FsfS%tXHmdC>f{Iy22rYeW^xpLn2!JwxBZcA>fGbViBK(3FWTF)W{vo@KID&oWu7 z2XmM6(}Ph;m;oG%U^;0pK!h53?+s>>-CC#?G=@<}yc4#*nfAbF=Di0SqP;iiEVMI7 zyF#rsnTam7W=I;jUbBvPu@>r(q*bliOlJ;X2%Wi3QMAPvV4cLXbt*IIw$Khpx7De2 zB!6{k1L2TPZRT+yXypFsU=vH(0|@aASkBUhh3O1sPp(aikqHJRgkWaEH60d0{Q*dG z))`2j1Xf8KR;|;kNd~~gA)JJWBD+VY2g1lXL+6t8p@Ysv^D`(_ZGZ9u9ds_*XON}j z5jyBxG=|YYHY~UX$pDB|ZfAl)DCYw8O5!~%4L)--v~T$>9DVey*}%AKHj%!ehp$lX zDY!G?5L5w@J$jYNDA%D^livr@LrXFRsyE>pEI;CFdPRv7>(y((JqZTof?y_+Jy2gr z_UN@*l0EQ^5&zR`O~luLx`dN@_^%|s=yfm{aG{j%vX5cf2YlQa2#C{d5me0}zg-xyl zW|`zydNULWY6qcAFeB-Xurx?U8C2|70rrs(09#LIWB~ffap4gpnFkAu^b!M%I(Z(T zN|GrC7#ng=!3~JNz-lD@1?o82hzhz;e;^sTrv@ku60Zzk?GjI6{SrSgD1t$p2PA+& zp05E6OP()WP=rJ9ZmT3u1d5Z+YQO>0oUvIn7Ys~$Z!qd;2k2r8B8^zEh8ca z@_dadC~*Q0lpq1aEcB!OHlHQCO4beW1h}H}DB&`?bC9fAY3C$12f!tH0)=1|D zD}~!Z0ird*d*B>CWtaRBR!k|atytN`5|0J zdvCxM8S+~L`@KyD7$DS+VvA~%k!@J8cG3?_Mgz%xSP4X+kl$*x#Q%U9bmnHQiTE0}o^(REPzX27Fq9=7 z0VZ`W71R=GH^ORENqrpAEjY0LTn8AATH+Njmtxi+7$e!MP(jEi1L`GwHp5*^>wwE# z;vYiW#Is>0lZ|6G=m?*YA3;18oSpFx{x!)rpf<_90z)*C&jXT&c%2yxTJje}78$Qh z(Bl5wd$rlb{xFam@f@=S{~E*=;~!KDalT;0YUv*bOef{4;u)5{5x~eF2Ir(&o;hGT zi5q}Xj1Ms4O~`^m!$0>$$&ivf2QV;WYKP5|Fs+)~!M`SGA66L>W$0V-hiSmpByR!? z-bnc^)B_=F(ay~6U`ElL;iRDc5CWoofs2B^g&|7c!l)BCiI5zuFga%fxVD6WjHo}T zo!kx<9DQqHy(UCrWjm9F^_nd7XEIA#MMklO{@|vjIYSMj^_tDnMuhiDEoBN|2tT=?m{tPz_e0E z0Y))lz@S0PabXloTtm!X%1{^(P)6xnll0vnxzLvnx|L#rpcRLD}&K4SiaYX~37cmO;el&1w4EN?k3++4H{ z_}3(Vfrm`$L)Ze!)6&2*N4No2LO2AEAjwd)lD4S^CMU@##QaGHAe>D61@2D9H52*& zlvE9=uK`B>KfuVp1{nF*fGy;I0gU`FfKkjEFl2a&GlGj&+5tc-M4G6bk#I zAsosu@<+glL@{f?$liz9gH4d*!hb+(WB-9-GLhUz1{LuaE&C7PG=qXA$HkN-O(U8o zZBwuk@^1h}{tdt^%#UOKNJr918x}AN^Mg%7X9+c1>Uuaf;*(0upYRGciG(RJf4MIf zV*WYlQgW{l&Li6eF@NIEO3Yv45UdId?a2QE_DnehfB`Db5@8aO@fel(DPsO4YY~DZ zSqrDaxS>PnSmF>| z8H5{(D}%;>Sxa+P0t|94a9tB_Aa|d?g_BHv3pGdb1B7}>2i76alFl4XH<~jXSPY{W zI3gGZK1-xL$!~G(F6l#v`AeS`vb6LvmH-%xE3sZZ3>CRv#QceV71LDGIb!}qzk1HI zMD&t%YG^d1D%A1#FSNb)=P2j2_CLiew&Q{xYW=?UahAKXQNoLu5$65E3RCpv3&;+LV~Tqy@zM zNxwqOpZE)6{=_%nY9XB(F@M4}#QX_2;Kn4q31Mu~n-KFSKN7g4^hIi5!jk@CP?R6J zS5PEq58&RA_=lK3?LAZ)l9!12lU#+A;XQ>PSmGbjhDm3I*-bhtviZq32X7tkm6DVo z*9(y>aTg%MKe&rYz9HsM@(m`Ag?6kX!FwwGu`tRk^oJ5Qnjds7IuGbvl4oNXBv;|$ zX8M56C1oSL*(84v^C#Yp^dZvC5c8KgavGG~k(@>}RQmMM&O(1kNtNq0DxMH=mWcUV zXlJ26q?AiMK*|&0Bq}J0A0T3Fp`BUgcOuh(Vse1#WNZR3)(K&SlD>g#Y8fX65*;=wV3!Wj*WbMs6Zv% z7VM934H=rGZy@!9WEr$#!ZnixKQLxOdV~pnV98&gwG$2j)np!u24M)|lQ>=CFYv4r z-%!$32w&g_rn!I^q@IIRNzx+_4Iq91Ys*4A%G-o;r6RroF+(~gtU*3YGwZD25ajz; z%4Z}EBE6IB8ANgD%)!Cv%#k{6p&jLc!omji3mi8q5j}#j-xd`Ebe1UjAsLFTB0dDE zO1J^C|VGO~bJrWGg8wrC;fnjjEQ9I^gh-{O-YeurT z)K#FO6Awcuf$-FaXOJ zKzqhNBtp?1fSpP{4vm_0OoSU{%pV9&cP9V_fiCv|X>($)UvjIpd+-S z+;eLyffCGhc;{hX{4HyK!+ynRpB;G3* zTriAcZP0wEJ`^yD-N9i*u{*#Jr4n;N`kIUrD^YgI#}URs28{d`5jg5kL$Nk|OZA~3 zEUFI$Oe6U-VDJFSakWOGEokV{UO<=$lab#d*O}&wYZBxc!Ga(h$5s)JBh)K(I4!Ob zk^B@ea8x-Lq&+YU!i?I{{W%caX6fI6)rgRu{1*9j)E`2#v|c0_Oa81}eIjHJig74^ z4KP^Ba$FNK-6RajjWh<50%;6IIMTOtrv#j=2%w90fJnU^?Wo=qFp51Pae-oEfKhHO zV3b=680D`)7*YNjV2GZ`Im6o`@f0U1{Rc?YzzNH55sQ&~uLSS79pyK{3rF>mfKe<) z39k};z=KD;7}UmV(<90!=L``_bB6Pk_63eiS_e#Qi5m!I@gCs5B`Fsa#}ADGCkl-L zolD9YaAM*)Fp7!iK%z(=C^T=nQvxv3;ShwN*a={y!vRM5NPr=6Q|vRe1L9#&E{Nwq zpc4;+&?6lVf=0$zpui#6A;*O~N1hRw1o0*iA?bQRa*{_{xSu7@R?=GJ`6^c?(OfV+ zh9T-8=gfCrz`#b4glvcOQ|eC#M=-Uc`bGq;EX+?2)*-*uBLYG&3;n^pLG9pNr+tB= zTGAVCW|2N_SZ}OT!=mH)LHyFVC?6#JLw*?Tl~S-F*9N};!%#>d+ku5iy2MpJ(jS4V z7$`qXxt@V|1UMbZC}i#vkAUh;dX7#-eh_eCXuM+1@QO;`7uvz-q;{0QhRb9u^amk8 z-@+!5_zdr}^pPnZWNrrvrf*@B$h}um{3Q-SRLEQ=RNjD_$h9F>$uJB3Ay!G_Dgjp6 zAG(vchFHF|lM!^LSRi09$7O#A?$G>D97$)1pabnaY!ZpPsNN#m1?h0oPoqV+mUMnZ zt%!H(a3_q!dsMKITt&(@@mSnmLOd2_N<1!X5{UNKiCGis6Izv1Mv3%l92;C7cK`ftm39KICB|tUlABQl9)*$c&7AMI7s5vB4l&dEs zZs?JC!!Wv+4%fO+y)&p%#p^)+q@)j!2agL8K;t5RQsR}Ono0UVIzRDFa71p0K%JyZ zWd0JbL#Z_JCP;YcOVfg+rH>Xcw&@VdCqIayPSV;qe-c3mqzlROMOvSfZ_v0bw4;1X zL>wr#4H&X##266W5065u-PSlMl7Ff5=0D%7b{nQ$@7JZM7$2M ze6q2XD{ARm)F;ziP@l~0sGb-RTnKcze?VP^Au3Gm;PsU-sCCp1Au5^+0zTZ1>XYGs zx3FF~+-Y3YCld}KzgUi;T-7PtL9CLjfGSG!LoA>BLqUneKZJit)*4ahAZZY36y$4x z3x)dwNz)h_3-f~!Ch9GA|=p5JH{7aJ>eC+S9HEgStX4N`k-}yJ|u1+ zme1=@lClJ@p?;raH|qDveuMYVLOa}mAp27;fsim92#pKYMBf^zh7uB)>e*4{0Pl?) z13oS44?Zp07x=X3d=b2p{8_omjQTUv9cpllpt@Ad1zIfWu}Enn8365B#+ad@Bgsbg zXThh1bO!PPz&axTB%&mw?_&E%Hp24baiQkWT#$xGFgOMzKS0=uXb`b{!g18^lfH{s zKH0kPjF3L59JxG8)bEqtg!+Bbn~*w4dJ{}o(kBsWBV0pdk!((rfpTY%-p)QeL`?}N z71yieu~2=;e}$|O!bzk%l5K_hebU1a9wa>sSuLb*z#~X{1hQ#Jk5Ed73Gd-9rt?6N zv4o+1pKubP7_!0ODj}T2+CC)DK3eu8s1O1Wx0n?B06ci)-g9`i0Q5n7uQ)wqJ2(&oO~YFUW1QNN&W{QN(%}H3yW|0*JBa|Z zFh519mg7P}6?hMCyM^;$9S*_`Q90Qk1Ulgh=!5nT^g;Uq`k;Mb`at;>-T4C;-T4DI zFzIkghN0Bq6nC+-YXPGgKx9VIJsp5SsS$gC${;BRm8>c$2O)T#T<{jwi*!dCL%HBl zjtggtkTVFvl8y-&E>5OzNymi7O81BWMsZz5vz0MTz(^;=?%|dIIj)lAN-)w1@h!bQ zfQnYN^xp#p)+YOdxkY=AvSh161<}7?K=he<&oNJw;MJ ztrwv-!WUe>A?X8gd#Rs-safa`Mg;W-w#zUSI>!z`>^cAyWbTRqTBB!E#3G%O*? z%K(h>JOHD-48@8fUJOfvcro1LBr6cNx6qFAMz94I`a@oe#AmP)l06W=GG-0Kz(Rj~ z?-AP3+d6>JdvZ7q%JTpWNF;Cr=@vwTsKF=N0{bJHhRQ(t8shfEBcOWA*ent>Dfb*O zs-IDA6(ao#aeLxnh})Cigt)zhc2ti8G=;Zb?u%lf6O8Ua0tp9QBrZZ zKhCvBI}82cts^=QICyEjNRQ=qly{@t+(!DYa__!e8{+oFi=l1EI0;yjh5nRF_rw`N z1tz^6+Mk7XbdMJthrC{BqQu)#gU|gT-AD2v)Zo+pAx)6`g9<128EQM>A4+q{UV!;a z=K*VmWDhJR!c#;N2w!0N5uPfq%F?;<`;u^6TUamXL(&nfY3>j7L1S<&iV{8I^@2X6 zj)V$r87qf~LK2n47hKoJFv^3%x0DA3$2#RL0Y-U7fWeV2$3=me92eK1k$(-IFY=4R zTTC)fxnfY#0v z0W&!U^1iqol2s^g1PL}ABS73<#^}+GV=S=1h({o0 zmV7OU+mp`--VLH@#O;Yz;R=$md=zSNOi8)cUdj)6jEELYh#5-UMciKI1}JI16dQxb zjc8CYDB@tCh&tf{X;2 z|AKEh#)5i#!f~V;5RRkX-a9)X&EqD#c>NoR#yMdn8!B0_f#;IbvE*9DB~Yn2-*DSm{wy<8g@9p#DxM)z6) zM)j+J;U*Trn}FdIt3=%1LOZHoRk#7^QcCDf+6#!=6Mw-i{xaW8xgm;lBxGKau7bEd z@fTc?M|7@S;X><0VhiCFbU4Ygm2jh^b4U-Vb3ss$P6HU}G=R~10i#@YXdt)-;?FZu zv=X_0fYDvRfYJG)jDU1tz^JwWFuDf~Fsh$c+#Aw1RWMTO-hf%?4>k_1P00k1>qXRo zVPwOivYu>gC@NIX4j9p!;*yaz9bi<8f+rKn=b=2KDE*Fr;j&n{4%D^?*#i%rh5m3| z8hwl8P=UKjsRy@%@+0&xD3hpglyiYlW*GTUpx7eGOMVL`OWz`0h0X{*06|A^X>or* zajEAht}m(Q07f=3ZX4nAMZG=Y73%G!ji}sILU;=CCiNyL&y3HAv=QEeEM*)!$6Y7* z24EKE2l|lbtE9upeMY@KottuPtvqu)$|`*=xFCS;Sp<`0`~xeIIi!k;ieJ}sOtd;pSWP>n6+APhwEc_^hzj0fx^gYio~55O$o3w&g>&!7*< z!<4J)xE=F9<-r)aSJ1Ack3uQ8lJXZY7@~qMQPwNt1`t~KShfSA(ziHthOzuWRyg;E zv?Uq?x4X)7Q<_P>hD*++exO_nD}5AzvAk3+x2FAr4}ivn4}ivn4?vy~EH$aOV-aLy z14gw~fLZ7dwO^957{Tooi=>84B=&eh@AP6NM09|Nb5H?^K z-JK5!YN0>)0O(s>0>&^4^MfMG?YKYXLL+&;Kp|<1gV=CzV!fznmG%ONoNBcI2h5q;+R|pgf{b9k>A4<*TUMWTH45QjUFiAcSq>S-85V@jp;nku& zRkT~V2XLQCe1>@>^MVk`r&>V>K@0tXK4@I!0$DjOE@NdF`FNmMkk1G(x(639s+|K2 zw{gjFQTs*fMR;HGQ`}rB{qhJr!BUa^aqSnBD+q6DN3~yQNAICQ(WCoh0HZumz{n>9 z7`+7nLznVE0i!%nz$gzCFvsv#L*R?NG}14mHtk6c<7x+ z#p@$|`ml7Nxr@D51Ox30-j$@>KDuh4~ri?F%JyhUbTJ2--i~b1d;0>Ys&nC}x!FMJf*MJ)HI2&O(2R z6Iu2LhpeP&y!t>kBHZm{OQQ6eXbUPU*`|t_C(lhuAClwZMklfnaeFb@rnn81=BJeG zQGZC3mbifs0k?xlmivNG8{r>JQ#xNI<%z}xeMnkBr5oWX(2D2?WrjpYsIBMzkXS`? zh8JGqGe#x)g}X_{AwV67$P3&+Z9TWcM$>w^HWIxtf5FY=#IF#FA$tp|nT2*BI5|JK z%n626Fos!JFN!y5y+A+OKTMfn$Xb+hK{$%egY)VkrBT%&zJ*(l&KKGN;Q=%xZU<+T z92YEybOCHL_lGA6B%UfEFNVQTmUC8&PJ%H%MG7DBHQc&D`Z!X>Ewp2L18Q(P&j&wqVnaDQ`*CF}vkdjKiFWi$)zB$y^ zQ)~yf|50oQB}6hdrbo>(#h#R~vpjQ{p`?o1zaDy;)Hj-(l-j78ELR5;=<&~iwBK{KLrXp=xDc zlH6!g^uj&^ln_$g@=5yq9x9^_G;OC?q4B2{6((-~u2Y4`Aez0gP-2z{rP! zw0{U6v8TAAO!6GG15>1Sq@%+fLHFGNMmj5Cc#K5$hh{VvrCMLMQ!aNU7`;8Ec(0`I zUwKwg=E*2!4l)i47?QW-7*Om8#*+RGX_jg(&?3fI+j9 z<3j0|v;~PwIF4tqq`y;=TY7A&y~G%Lwh1YF`1P+FZau{$g$L-pe>K zHksb;0*v170*vlV2h76!kO(006q&zLk43qQh4~@aEB64m9ddtMI}8JdYC!>`T3_Ww z25EN#hQ}%8UMZDD1cT)xVQ|dTw{UXPx2PSKG>8XDrTh6oW_$sCNLhgtTxmzaaHd*r zr96u0Qn@Nyu2-q8mwTnu*2}#@ZN1F*hAS8BQ|up11DOYkvMdNB*$&7n*M{19lF3Nt zBAo`;dy|aU;;lSd8*ZAVwc!>znls#;G(V`jl0T!ip7ogCM@v}we`~94g(P$ayc&0iuP1_u$>&btKuXS1xyz>wu$G@)x-EEVQ#Q zKRDCmx6opVhrv-p{vk+TnS%?7OmF%qTu9~!1IFh8ZcjEMBnq7y3?FWXL|?ftNcH1! z`OP5&qLJ(@_7u?`vWcOBNdGCmMHQv|R=J>tU=TpontX!Hd*M^j1NvlZHC*1dq@XHr6utVsHfZxE*`m8a1-*l zNH>#sg>V${7u@nmy0VhmE%6>%pd^z~{YyG4V)Q&NRAAZ{xTOfDT?E6+$t` zQ&89+$q(cKkoc z%eWtsZIPrTaRb6u;vcLxUI&DL#Bo@)6sJQ9y{xT*_u0b!;W{3|QzVJd7}#iTM|mTd z9p#N6vj>-P$@L->O?Z#=2uYX7s-kfbqbI#YDZiBSgJ>jtQSR86YeUqE){80A{FFQP zC2c8p?8`YTckD~qgGeRm5s1;t8a7;u!!ZYla~>D;A@>x~bKV!AmE31UiFscv&&+R}TQoiAa3JdL+-VnwnIzo(|=n}Vp6P=?>o!0^S zkbDwq6Yn4BgXWApGQvqrkJB=Q12cePHh|InqJYtTuYi${M@jvaz97I*jVITJbU4}rJW(aj7rQ5E zU-6<_Xh-*zq8&67F)loelBVHx#099-4hAd1EcAy!r{Fn=5+gBEehZl*cq}qz>CRSY z;}owz!5*|E(H~HacnK;QWu7ItDcSKDmt;JO!2ftZAUQEKCN?6`*4^FSwPj4d2zykc zn(SSJ;^UL;F%|nDdsn}>$as5fk$sS@t6wAgV0VMoN86}jLr`BsO(Ufk$_E#W=o%sy qNZ-&$+t}psKey;)>)~OWlpLCvoRSz3X$yRXC&9L6&BiT!Z2v!2lp?AC literal 0 HcmV?d00001 diff --git a/lilypond/score_template.ly b/lilypond/score_template.ly index 46c9512..fcb48d6 100644 --- a/lilypond/score_template.ly +++ b/lilypond/score_template.ly @@ -46,12 +46,12 @@ "-"}}} } -\header { - title = \markup { \italic {"seeds and ledgers"}": string quartet #1"} - composer = \markup \right-column {"michael winter" "(berlin & mexico city; 2023)"} - %poet = "seed: xxx" - tagline = "" -} +%\header { +% title = \markup { \italic {"seeds and ledgers 3"}} +% composer = \markup \right-column {"michael winter" "(berlin; 2023-24)"} +% poet = "for irasema fernandez" +% tagline = "" +%} #(set-global-staff-size 11) @@ -72,6 +72,8 @@ \override RehearsalMark.X-offset = #-8 %\override RehearsalMark.outside-staff-priority = #0 \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + %\override Stem.stencil = ##f + %\override BarLine.stencil = ##f } \context { \Staff @@ -117,6 +119,7 @@ midiInstrument = #"clarinet" } { + \numericTimeSignature \time 2/2 \include "includes/part_I.ly" } \new Staff = "II" \with { diff --git a/lilypond/score_template.pdf b/lilypond/score_template.pdf index 36f751db6106ad00ed49ec7d626de260405a4392..a14634b2d39d827b7396229dc5e7d749ab37625c 100644 GIT binary patch literal 567902 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

jsuKB%Bf?}!5ma1_HX&43Oe}At=;sPpw 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

+(~$e*6fC#En{hymQp0(mn1;VDMt}0cv&VAgnXg zZWwqSfDgGYvT8d)>0enY_9JRY1&9(A%L>+XL(1Zv+htU-mSB?rwAyy?;ymWr4cJ9@ zuF^8h(IG(UD?N4~3B+`hb8xJ4A7xoRs(u1XVg9ZFJKOfaZks(^-_q~!2|C?I(Q@%BP1_7jox027dN$J z4J+uYK=1LnC>0t;7LG0c75QkRMG3-chA_+Lg;fQ0tY}J_%JzNk8IPs^nSfnNmQUb? z6~LCiMrKss1g)r5X^}S~hq5{VdM{2tcoPUL_vx$0F@fn7h_KRXyNdwQ%!93x6XmNS zHxizOLvfjf&d2HZo^14CAgovyn$oIhNSccNJ?P-ki^ol3k1^AfDL;Y-MYL*abYnZpsr5Et6dSqjH{+wD<-Pp7#H28Z5#x59`s&R2D zTV|#MMn=`@5C_eUGe`8NlUV?AqsL_}(t7$ITZnd_8q^KBHh{04lU204B9gLO7Qa(pjG|o9! zR>NKc@hUF{c2PD1S3Xvf)WI8VMIQxLi#{E!!|NHiuF6GeRPZB}n3$Z5q>*U5+L8S+ z$Z%&=UvPYj;c`cs5ofVmpH)taNz#3|w++ifo@^B?K3`l_H77ge9rbHLlrF+7tohQX zs1e?$`Ay$fa!&1-)zNj6*3*Fi7^Q$LZ>>i$-R} z9F49ahLZqTf}Y4khzxL4hg7;~cTOwoCMy{mht9{p=fvSOS*avA_G|#${%w;w25jx( zqgZHNAKBRo(pgyM@R7o#-M8!iwoN1{Fm*=L)rv(wr7RYSeNfu>U{70x*wCKp^_{c=l5_}f!2@Ja>-N;wMf{gGHvM+({1}*qPk{?F$ zvYmZ{vB~1#j8?9iskCNqBMLH@sy?u-87bji@#+4yv)8va8(f3Zh>EG)>~LfF$n^gF zx2)lpbmq4~AH<9sUi-lf0UeZsX!V1J)261{%-{6oR~meOhxJXrltr06CV6btAfh)M$37VnNVjED#;buxV)n zAO3yYG3I;1RK?Vz zNqJDO)t)a=SiDyMCl^Z!{veW2XxSRo%gU)`l=i^`eE1du6BiQXH3Ku3dXvw;^rv~h zTR-)B_*vL8@~rVuJURFHPN<|RX`*!I6rOv2M1#ckr*nRY3`(AZGlBy|-)7#}zO1Ig9b0=nUED)WeCyfULje0s30_XytDOdRQ8hWp*|{zUFuaAl z3q|ki85gFqk@7erW>mesCUIg|lB^=6X^jp1nebtO#t<+VlF__lZA_^r_MNG^q+pIw z%M+E@GDB6grhA;A4}?#rsg}UjAaB!<56YcjtP$FM$rZOogI0xPhpz)UXnVBAq8X&D z_3TJt4B4_N9iX@5nAtrxN3sGr)p2uId~c&n&>Q!?PBk1@3VEW&podBSW5^ydTGs1S zxr>$WSJ^K$5P!qP1Nz$ar21# z)@4HpAKLc%MIe6F*a>rmpa$%FoHSzL{(hzRTY9B@bLT=z3;|mHF^<6Z^sfd}o+cmA zkT30oNPLOp04KyV3>BAK2vr*LIS(~g5RaV_h2E*Vtl2laI}lEu#zCg5ah>pQk0TQD zQIv>(E4~x@fEl!Rgtv-=av{A^z#v`9I_+dW|GeI1Z`frO*o?zPKwF@e>l2!Da7Dp< z=Lqc~yLXc?i;a$%`&#iwga?HS)y9Si^Y3oXPk8sA^A~~2ay(95^X`~nfo%sPG@!f7 zjy$%bY~a;H_TsMMzOr@L{8~Hh+Y|GRrOqqFfA+M+?fau`Uy`2x$0y?$3UI&rOAm7u zX5Z@t6x5^rohtEg$e`aa&V#q_)NidfjR97-Kig~LAcLOsE)-@x^zF=7N4&xgDWX=m zBG#6y3Acia4^kDECMGFB`WyAJq$APx5PJNH!Pvfg`Jed!cR*GRKBo7-f7jP# zA+U)TrYe>qNv*OVrK4W7P`!p%qlqaTlcD}=1_-5=l9@+sDj~LrRg}@KwX_~MA2kJe z6;80Q&gW@YDjA&+0u)J>RNS)CW4UmE=sc|xM#rpF9Awusow;3H*mwJvfIh;(;lJ9j zK5tD6^LEtvES3O^`3X!uA1qfkFS}-3Xdtj{|8RTLmCW6h`O%R3l%cC0p7o5I^YiuL z;5t6M+kf<=pC~#E!|SXNckr68i%xE92J$)z(ytcAextM~FElwv0haH)wk}0UHFY%r z-(8#K3_N4WS@}YBr#lxEwodrr&)~OsYFMABxrmjW8QY)j2tvqoiu^ypW;bG^yI^84 zyazfJgoI5-l^`9m5p+Hb0&WF1pks7mnE8u>JZw%7eeM>n^;0|>z1naycdr~CuO2QH z@(q;>JWH+zmwI|TaJ@{ozZ%1y))SIdo0aW%Sk=`DZDZ z0?Paq93c3e1JKq8zUh1_JhK)t1n$OF>vk_1o^{4*r@JjsLiN>eg0Dr55{tu#1vI`R zb0<4tyf#@JPC8+^;|1owu&?JJ-ljX)7;P}#0}4>fm?X{)jBrKiG#V?SevH3!-9 zaKoJFUSzy$bhPfxK-x6UIWyy$;G1N7zdgXGyXYQWTFe66G)BhVmg&*n3%@LFTR>h4F=lsa z#O|^>{+sMcTSV}}BRA2!7n84Q#cx_h0#~d=y=)r7hjc2%9=5#Zsf7`(`U)jZ9n$^H z_i#TP+W2d*BYIX!B$AR@N)(dnA$J+8L%gWMj@Xcb5Yz~lUykE!gww=lSM9J)U>^Vl zpB>^jtHUm6PJweD^ao;KjxGL|aK(x%38|KA*nEXLJ@DbGi#SAyTH7@+xT)dpv-_8& z!B63mU_!Taw9EOcIl4=P%Xz#!-F4jc;?Ezj0oHlNzbio3uquAugk^UoH8`gtbGwJ( zC0r8Y;zuwbtm6dBa)@t#JU%<&pI zRI|_g;{;tA1WbX#)oB_AOyNPSPBQd~83Y{nT(_Jy7BT>#lA|-`6b8LlhS7tpZ^ic( zS&~b8oa}y*Q(CQ#NJ zg)mF*s-3g+go2f`ACWuqL2fS2;#t}8k>dZdW_Lzdf2O?&jfj3LJREPNgA~FKecrrz z7tBC4>s=-EA3wMov`dZMMX;eqNnqYf#XqPA%U4XXj261?$^Si;Vqc4Dou8+K5;l9+ zD;$p4x$Af@?)Tk};H^XdWg?hiFZjC^lP?BhlYFH;)3Azdw8+-YMQTUi zl`9=@$-|TGyVPL8nf*n*v8(}FE*LI^7PF*3VbcV0_A)V?dO5y3G-IkEwnwoF|pXflv*x#O`x?2 zJXRNa&sTvl4H9Db9i5>W;+|mal86BYPXk8uD*%iR>@9?9m_d*9$?Yq)8%wV zE9P|HcW#eGbiBOO7n|~#+mKG2(szWXeVoLv)@OP$o4_o zWeTZO#QBUGz|>*}k`^I@YIVAX##CDdJDc9^Y2D#*BrM`UX}DD-R_31{u5VX=~GLVSEa0AUuM z!dt$Np2ZXFkz3Ms6~;h3IX(}b$5DJ9ReL@6YL9P zlkE=$64W3J9eu{C$K|GNBW14yQ34iIH4IZto47E}5+Uer6KJN!Mk!8R2JXxSW0une zweFFdj1v6{fo*767?F?52jEZGYDG1&=T5E>E7h(Xf79a-{_)uIw?FP*KZ;BHV7Y@Q z=SCoRpFRrg%_l(c%_lCHRX-PMo9J2;LiUb1)?5p^4{PQh?*N6yr|dr-3r^E*_DKUr zAIMB3G(x^~0MYLSL(icj-_Y4YWF|aEnrBU{?R!TcML-QhYBqnwVLWB#VfF!?yqOG> zXPaZRPlLgjqzVACAoXL~M}?KCyM?pRcv}rc1Dhd1PqyD7<;Ox$YkzIUu0l>qtRT7H zkcw?FI*_E0N{9#%SgB`TxT0pNu^mnqR|)_fG&tj#hy`4}D{D zq`tXqVgPPt5ndZ?Ry8lXhJQR70(Eb&9Un}soBi60oW!RDk1_~|lWP~;^zPWue&Xh2 z1~?lAD_~8g1Ttn{JAx1km}zplh0V3|RR@p=IpeS`J(Sv-u#z8U1orb^FPs(7HG0^< zXzTSPb4q0Cc9y5{w6bwLNVb$L9;-BMOsr3i-cS{oChTeMCu*Q)p`AR6dHXR4i#DMn zAWeH?O+TEos#)39!MzsFKTdLZgk5Wp^IlH z>uI6gyu8g8L+X#L=z%5OTP`0AqxS+_VnSl#e9fYNk|*~KMctLvC3JLC-gq(N;w3PI zV3}V)`-s6X&78caGmgr!Wh1mz+lLABFUXe?%Ktf@DeRD%o@(CkWM2;KkK-{L$PXke z&B?uhfjh>fmUAct{nEW#11In?0=ZO^0udX?@eYm2!nx=ZXJ0nbFye@&MBX1rqj>b=I@09kqdBrigg4TCQfzIdq%2-}^Kg9^w7H$YP7*{u_{} z2Px2}RI(Lwp$fyvO8E%n$(X=*&5cObL;!Hqz>pvqf9+e-eZL`#^%2U*=Dq|akN1Mk zvzq~c#7Sd0$p+Z3oTCDBY)v2Lm<^1SzR~Qs!p0%E9+3C~o$}mkg)b3dd7QR#*0$0}W$@ReWvurn` zYjN$gUDdN{kI%)k3MnSgWb{<3#R!#X1tEiEn&AOQ&O4~!2O?ZI_|3B!!p*Z5mVog- zRs4T%>W}L})D26_E7@x)n*WUzUr$Y4Gixh~cXu*?Y27r|7Z7u-_^;YFSKn>P=p$lm z6=<6rUVR=M5~511)eSF1G4YaIzuHEMrak(=4aJA_aJ$H-HDaD&PS}R&i^Q`2IRFiTTkW0d98d&V=Ws zKVP<1-d6RwC=yS;e-Q&fvvp#6k<|Y;KVRqmS57U71wvk*N%?D6$0O2fn^h>L(h(eo z!Aj@v89pL8L#&Pn#$S-x8@sx+f`8f_FuQt_CEu%V%9KyqRRiaG5p_q!e%5ibqReNc zJa^!{?+zet9DDT&odC`+VbVu{Y);8!%4lQ$vnn8ONxKZlV9BB(H91Pss&QHUe^CFVNZ z%Wz{>kwoxRrXbt>FG#XUZwBHGVxLttq8X_}2Ygh|3$CawnRhsZ5na%vJK+HfIZM}; z(Q4N~)jBOvUMXce@>I9VY{IcxA#v?5I%3LKN{r%VVdB`f69sq|- zi~LD&&B7CA9ka2_aTX>B+zt?DDMc@JJq*+8LmqX22D%qKx<=;&@%4d?d5|s~3+^X1 zS$Nj~PUa@She@#i;a#d1j`$rs%PVvo1ys5y@fI511G}cdCYAikmJp}(RPZK-JEmZi zyD#~Ndin9n!M9K&)y-KvbRhn9baJ6BurP zYxNNEh*3V0N;Ha?{L%-Ji@evCM@{889N2ZI*ZR?=h+xB6u6WWeTR+NcF%Y+WqkNB* zrZilKcds5*W(?u*mF~t3fwGjBEs7AG)aT5|40%1&#MBp+`uf~^y!;x>%D!aiOUA2e zk|9)yMn~$8pA`T)f|zyOr`aAloVE{sGu{6N$=DKee7y9)A?0+?bkgDFveX|l`n&Is zcP(a93dnblxwBx_ZnP#W#)v*{@tDzv`JrmB%Ufhv0gs2~T1U@HF|0bbtJ!{(t2A{P zBWTf!x&BNfeq_a6&?+F|kZLY;(uF1CjqhBTsp zhuqW3n1WSRW>M%pn^p)jl%|Gm!AwTuAfb|_SF}PeXO>s{bT__l z+DiGBdv12Cre?GbzT)!9W2YlRuH=r(D)SYtTc$?xr9FJ{P_5%bDgl6*&4!W9J3DVOag+~YGYsw~CXeB~M2MU`^p-5Dm2 zewn1{5dW>>J|F&g{l!t+%l22mdoYcPijv^2T04aktaRB5F2L`5=k`L53EyE38@$Zz zc1c`_tvQH7T<3u;#mV7bc#qDgZU4uFJ`r z>3U?I#PX-kT%Q?}z*8lbDiZB3~sri0{o_C8rxo=Q;i8b2a^>Lf8A#(de#npTiI;;gperR zh{ESRbvBH~5TKbgAH!1mmzy~GMIWR9+fcM(v(hl>7mU#z*x7c~vGGgeSdj`?J-ijb zpgDhLlc0Srq}Jbw+OKY&VEDthI$*Ox7#?CsM=zn1w*1 zB2fG{K3z7`eoR7BG_=$1frb!KVtv*yh#a8h#5Ra zhm1b(#c`_!@oE$+xV$-{e;<%F3OyB9+7+n7b43%Fn(%T}lV#{^*~0hfSQOD60qu)k zJ9+8b7}l;ZwAC%hQgOqIUK~6Scwt1q#Q8q}x(?=LLLh?phdOhtl!zb9d@0XXm{4&O z@u`b-3mT>uidq)uqJ=&na5`DL9R4dcO)sI+@uJCF)xyPxY zd`|jZ-kn0+d`io&x+A>g-1lOGb7cZIcyGDZkDeXuOV?;%{ujU$Pe?a&^Z=QkiVCGa;}8 zc(3k_RNh^8v-elbl}T2z`mfmeSa|_5G$A2tl|uHH_(i{nT=fH&mjdNc6bToE`6tFI z)p}2Fm_Nq8Ev~1!S&V?jxndG|e% zJq{pq?x8L=nAws?u9koil;c)7gbnD$x>o;}`S1`xL5oFh-SO))15|*2_W9B!+>DoofNs@akx>&)v7ne9l zNLtVzhFy>!7IE|F_W5%px9^sSu)ceiaT;3I+|vzJviW3_JkA1Ip_}A*@sUc{dk+?J z2Q$ByN>L8EeUREky3%lTu8-KM8tOxMGjzwwW?gYy>p(xx?)^c?rc0InA5rB0w2uGD zB3W1&IsT6dUa#TyEnf_1(GdM(|8Ea`#5eGox{ ze)<-KccNp$RV8i)Gn~5jczx0X`jQ@^C>p2goHb|AlH%}2O=XhGc8_u@HQ)EtJ2%E- z_%HjfkJrnl?61G~^yGt!&TljSEU`ZCPHVrWLp@?sr#dWV`1R$RV>vef0zAi4x&_Y1 zxxLwbUpKY-cnhTV%WdKObYC)bYwtJV^l@RYQ~j1(cd6q3j{Pa`H@&?{Kvg8~``wOB z@&!7}@j~i|!x){{pJbzt5&HkDid_Atik$0wx$X7)ygc=P_j%R+PZjxBU;d@Rw*UC< zt61{ssit3mx*bg;PA-1hUCA**qdHp#wyTH$|)OC$pv=-im zPws0#4miz=T7sfu4{`rZStkH6lucL8C11w zmkoDt2oc7Ac3KtrG8*OI^z5-$X^D(VMY9?MI#b}Ftn^Bt5Pn#GPW!;#baU~^Hsr&g zvUUUNwXr?uL*HK~AK(}hM~&Le%a-x#AT)~o%%O`JDpa4^7j%2b82D!zscKsFk`w-b2>3hj-pznZhKZq=}`#B zY2^Rxn!Z`${Wnm2P4|6Lm2v@XjUgDj5Rc3!pxd65HfXYXh$C!@tn90y^{GRuBdDS(y`*MqiMX=w-t#`8>Mtv<(cSRZ%Le^a9R`2ruzd

xIv6tq4onPbo35UrS?N6_T z_a65yOeX-Q45anjXH)kd$&?}COK3A8+1Ee)2SIMrTk_$>L1SE|&5chd5+4PmS;*!Q z&vv>eMRM~sw(L(7`ZW?xCGISvq@{s=0+#Yb&W9(J3km2J-yEg?xj~8GtI%6zII$$n zQV?B^u0qxm8~GQAv8^XsWReAka9mKB3wIiyvRa7JqE=Cq3sXm+8`?LZ9rKwQZU>Xp zX5Y9#6xoyveJJa1Zej6#Ex8?b?IL)37rf>iPj zH}|tjLHDW_;8M!Z4RQ|W8q)i^!RIctN`s)E9To_We40}q{wngj>moO+g`4MlOhBdH zAAY(xe0~cNTGl<&d`MU7dMHdtZzgS4!H2i~Huri*>?+)0f%}0U zXP)I8YR2J%z9w+KEl;-Gt#9OY8SQKmsy&E6uT?1P{6bm|d5UZiGyBS+peu1>VqDc& zt5MtzRAzcWjl9Cdh!Lpa5#rX)?$*7j#NETo zlDNh{8<)dAr`R6trBo=U!Mx)-A(Ls9HrZ|TG@0-DS~Bo9(kB;AkckKHpSX{Je@WK7 z&HKL@0qWNYhJUz)Y-Gw#YQIcRm0*i7k}>{FsrTQc!}(~Aj}Z?Chfmjia%w24qd|n5 z>6&9x3b&jg2{YgF;c8F@^t1#QP|^uO8aoGDS)#B}U|3j>cF1_MPgbbypIa6KNpZOA zpJVp`;6ItS)}?dFeqH;`>KIG9U6=wtT+RuFjz zMdV2@*?j+^hVh51mgN`@^(9!W4v}9hEinN3{tWT__-%1FWNq zHxAv}^RiK{_AMTK8$Nfb@)9W*PfzUe8|L${1?)t{&q129Y@1?%c(qUj7U|o2bZyVm z#+XrEiCZaF2=Nfs3y<)`q@}bkhpOOsK521q7d;GuqO8n&SKe47J{{^rUX$^)?tV6y zBCyg)b>4er&YicLM_sB`?|SJqJ9$r@A?>z%Df)I!f5-tgssGdX9y*| zR~@s#QYoP~NGy_zq>CK(R0oK?o7Sptozd+{D(!Z!gVrrd4siEe&=|P?t)8v;eD`KH-blH3;IwD?6c`2JVNe6&%OKL_a*O%3y|6s4GVQfa=?1GeJxbt8L&_0(}b8cFm^ib@;7Ux?gKZX~%XEbmcxuO`SzHz?%D6(T&yRPE0wrIfHi@v)>u^mNovCKuab0x?sJB*;3 zqT7wtvzUT2Ppg#SApUm#n29Wx3R%Da_z&v;H9RY zMN~bX+geT<(N+hcB%^yEln`K=xR{qnV8VqFq~KVCVh>;ITGWb%&7xbDV0&kOXl4|K z*kGA!FrSIeZ|Kb1C58%p#8Ls6inXc^i)Yx{uY`V`#~aglmk+i00)p_Z!kd@ELhF_}Q10D0Zzzg0|D zY)90zptW`DbSMym)pEt5oDO>+jm3A--m&++XVHLGN|!0= z014a!>2j|7Kcp1kR0ixzqjwZng0iEyF&a=wE3ibt+rlr?TMewYpK{=;$JZ?j|V|zw~BORC%F|-_uSm z8OFX9V!B$Xv^KYTk9Bqrt2L+`)ZVymL}hH+z_YxD;Z78Voox6eS&hECsh!+#&&`q? zT0mm?WBPyL{NIuEv@N5-l^??U&AtM=)R2ySx8fy{F_w>@D>&bHYTDcHq4s1A z8+cKoSh#a5*StFJoI4fL2`jn9)kZ}ZKez!lp!xv?XA>-YOIq#DZH3r^e7;u1?a4Bl zA5#q=DXty4rbj&xmB5WNskpOH2Bt+!n@@xjIFLFcqp=iH_M;;3%F}oQA+03?iNgn$ z-}Qb`iS>*tIa}n<+MlV;K4|{;jkMDbbR_Ltqc7I2bD^Nrgx`sWE*%D{r2EJFKJ2_J$dTc*-aW%}>A#`%>=0jlnh}+% zXgR-kdvcZq;aJ=)h@G^hH{L-hSXky-MP%OKLTSY;+o98?D>?)ghNY5S9irGo#nrWwlc~7sx;X!PxETHY`8Zu#`{~?;JV+^ zKja9I&}92c0B=%QbPPC$Scg%`tmb*@0NNSROi=R!0uZ{y!5q+zIIGPkMzF?stHVF* zlhH}|jjpuO5o}QqKhr}@GP~s@O62`fU3$@qpdDv@QyIF2d0?E)WMrojNrtm1@ zWs4QPrc5|C0MruG!}SNgYw?$Ott~bPX^(4zwK%@79olq>8E?W<)0q%i9$;%`O~+@O z_Se4-*bS;CIum;tm(TXg{Xab~R3Qj!p_Q4O;Wl=SYGkhB%ju7gfE5^B2JJ z9UNU49*N-(11xjHZaeBrtLYu0d^_iiw|PVFsD3|$xYLH71f0Gp|BMa&mJtD4s~g%$ zQfQ98J8F@&5aaN2a6==c8ZNlgx&o6}X`HOrd&g?KiP z=X8y$@O=AL4qE;POI0uE?#dD-T-d~ynN5astR9qeUDZs{B|#8XTFBQt+-9EPy;GS4 zweW`izsocHVhg?_w22aE05vw(iKwYp$@}Z}=N%=s0F27eX|2iC97et_-)(q_<<5x! zA93ko(QCHlRzEY!doa!$vwZO)@t$!R7EU_2OB=K%rFXfP8lN z<^+pE(VZ6sRm=bZqIhb7qYI@r?8J51!j5Wt z@D1uh>TfltdW{;E=U&6kV7Dim(In5R%7W_37Oxol%G9+wZNA5$g|%O$tgULRCvdx2 z0yR6*NieE}L?1`jacZ1FNLV0YJ-#*4kK2xT=0Y;U2c)lv{=Znq$C|OytOJsF$3&&k zTdB6WND1Xb6XQ_vu*6i16EuH{Y>$$x{)QJaHM@mPShHVCutS~D7=s2$c6fHUyWmU7Yw&?CQ6-=-` zRH+hhqQe}-Q>7mtS}@ArHL){Rr^_cFtjBqTzRblMvz1q0i~G>Gg88P6P@4k&+9-84 zS~Z{_^O>9OJCk}AR|sJ8J z8_~hN@0E=3^}67%_$MHO1?&)l1!u0Vkc5EgxAE~G&;{;n_afDh$>j^9BvF%jkA-aV z)@({*PYw65EWKjf3bQU}@$mQ;_UcnTxmqDVnmTRwvLn`#YrxMdID%NQj- zec$A8E=-6&e!@};!QVVOp!&rtdXU(T68&iVdO*BXvhD4#3)o$Ce;bDo2o366t0u9f zu3$AG-t=rM^Mp_@WAY`biKi{cR+;^ppyo9I`#|b-f3pjS+Ze<^_z|)RvC2b16RNTS z&F%nJp#1$ZE$sqy;d}%_pX9vX@R+6n>f-2?4*8yJkD-y43N0*wb5jH%Z7T+GX?gFg z&+8s*3yp>o)2Xw&^Vo_eo`HqlXL9QFjwaDRY5}tK*Bb6vl#Z~t@@+l+yY{rnWNmH_ zkJhjh+`YUHczF$bP?&d-BymQ+SHTMA6*PyrPz{g4x;FrF-A&S`AH_m^Q1(wNu=nxX zq=QMV1+nD&fxA?ZXc9J_`!}gwgWZBp?@H#5Gt@sA6_n_76}{|#vswWs%ZIKE8WX>j z0%9*9qqdoR2+U)w`Mu7Pe9ia8p#?u^%GuMn4tGWn^Iwsu%AZ%L(D4Sq$|0q%&wp0N zDV9bH?)hkZ{0YtT^COPYCj);N#I}?m;gKTPJ-vl8{AnCNZF`>zG-;22D%#iP6%m^I z<65(&UmA_zJ@mQHCHldY4`0tE8bMkRi@v$>*j52j_8V z9lS z(#^e2f}$3-!FJ|Y#7QT4rXS6fu$7AelkzWf#u_0^VrDy+cT3^q)Y#s-2gX<$lVpZ5 zP@&;t19|cp6RO_MdrYI->FW&&ZiByFY3jMsfc98ndqXqi`+GySPuxSqsT9GIH6ko4 zuV=yh9uNK3dcHt+`R1P2oux{|5q`Z>6rs7&@m&Dz{aUo2nJ~q|CMD?#cvHVBW#VWj zIrn>iBCg+)NjSep!{Bw!#m(7REaO8L^i;MiHfqn=eS~bpCAdau0unwI4R&*R6gYP)-d54i^w?C|{ z_v-sx7KN<>K=qE|?zlE!+mwBZ*+TD*oW>HoyjW~JLJU1T{rIX0`VWMdqrPr1mY)0B z2Zk_^3@46qh2M)V|3AjwF*>sEiT93e+qT)UZD(TJw#|t(v29Ll+qN;uB$*`h^!)zo zS@*?#b6@r9UZ?w>KZWB{M-f?ola;~$tec_XrX8zpiN7<4*^FQ zi;VI3#cDJ`=8*lqdhbvNBuqR1v^_hy-!7WP`=v2%r8=ti7PpMMiyz>izC-c-QOXzZ zE&h+*5wDcl5^%~R&mpK>+eH-1Bo^Kx|3^FUOfY-EeMBgh#|QjxKtuE;1ktx z_?O_&Q(Mw*S3!zu^!!v`@4Q3GL0g@mdHNIAxM658K@Q+vm8_tjBMlxA0xa96aQ+Qz zG#IF}s+u&ygo)ybHe1}PYw#xrltoA>#x}!vy-}5(E#`gtH+iEdV%$B1qS4iMo1KEHZNsnYN z*jk^X0fI?6k#);KveTC;cTSn*?^kLrA;OMfWEZ7c-87!{GqW3W=caLf;2Q*x$JDPt zjda@lm?7(}F8tQU7Q~<(c$dI0MaAUytPeL${Z3R-G|8lO)3*xZF)A+-<5MlB%Li{)zN+gm`wg~BBF zA)9qzBss!bJ$X$b9)wpIt2#0v$YUR^?DPuepyRm_)8L#II~a7SdXH;D|a%m&_;RP&T;1of=l=wlk2lS5uMEq%E0X{lmxvE+Z~mQmpx7}h<6k6>9RuH#Jq zYB`n+fJWzxZJ>&z2T$~WXPJ03&-YI;Kknz@w1eyi)FG+4Sl+RUHPanIQhcUr!8KL; zv82S-y3%I9|^@z<4-<`X}@4|#1%^kyMatYqy9!>!0}y$ ziBrZ9_8$kTLJ9$yE1uBI{U1B5*)kM?`gT1z7@uKgXx2qXHFuF8(IO>&vu$-jwbb<) zu22MhoS%4YDCt--amQ0S0ugxdN1L`h}{0*?nJc-0^k3tv7!6>%uT2rm$@kqit7-Ib`S4TQ9h#sFvus*EpU8sx^_q`e43B z4R&%;hj+GHNCY$?Xl-Li2K)rKennD2EL+~U2(Zp(pz9_*DXnnvAJVn)1IiN^slM=; z{mIuz)z^Q=@N4l+GJ|~EwF-B^(eh8+&nePg>T1yQ&u``ThZ+gDzzproIsTS&B zrl=Z%LRTc;gs*Atk@!WXV<5s@k_BQ`qYKJ149g7H@>0_Ci>4mmua7{>jx2mh09rlM z^F;L$uBzi6DG=v`Or?yFFR%=R+ThX)s`XN#?QpT&&gnPFgkGLl2anPUx0{!(tpktO zy)wHAhneh=H=X{XlEs=Q%Z&vuSDnf8wd{b48~Q3MBW9ENeVjZqmYRi{YpD^3E#@^$ zi^wl5U+>#y|25#eLh{#b`A^N6)_{i7&lhJXSFsFRi`7hm|1wPKOI_R>F|Gyn;&6r??56^T{g}q!-l48npXTc)3q@2XQVg86`hw<&FA%DhKMbs(=*tR&6^1I4T<##6)`#L2XYi?CeTL z$HK=~F{16VpQL_J9fKo^L>GDo>=Twk1L)?|D)0nbCQ?|Yew5l{!9s>N4}4Zs*)RHx zJs{++p>~PVV)GH!CQZ=tj`1m*61W=utU-znFX2;RmYKV5S^LI^IV}Esv%R7G8>eqs z7sOX`D;d(UPtL!;IObiF#M`S$y=+#Ru0rmPzP|wOdT1}s0{=P(`5svw_)C}+#%Fce zNHe&*P(aiTrn`SI%s9jB@~z>W099~I&n8|;8SsvJe)1mF0saxNMg z-!lh0dtl>4{s_e}%*y)^z;>r&aZspt`$z~Al4_#BcZ!navC-N_Do@N3q|BR@a2oB$ zNXXiSV2^MzQf#N0Bb#t&`7!W+>`|)zfrFGO9@N}|99W3Nc)EnizwGA&U ziN!p(1g!2r??ImO;c{?gbjV<>G|%eq6|rwK-eQ+YFfs)@T|f2f<-IfY1-War++^n2 z6s!^oOtzNY;y3bPHq#&eRZvW-w@bFc3h7Hpon4J^98n8-Ec`*$^LXKSoUSB)3w}r; zv27XZo-A=gxX3Dna9F&77HV}ae7q&Bf!K;8tbrW3B8uZUNIjAsPRtjOA~2|g7FH-+ zMkaZ(mGD?Xlgv&G(Mq%4V+;pdm;4>tBSjekS4J1-WOJ-v5e}=$nkNw}>7)8j#Yu1; zaDU+Mwc#h8fW$mEa+duRQ^|D8(cw`~e@v?6r27e zN^s2T^Z@VNX^Mmujl8RuIG4V<&Fvg}qOdrS{iC#)H({b3bEEm|m!QH0x-M_1JBoOy z?{guu1Vb`PbBLory@AkR`nYTl?k24O5`2ivM&89p+YQBpC6@2$zTh-#q-C;0H-L`} z(;vVNwrx=5TXF`K#q!{$eGeyICQ6S0ME`dXrpT-h=*uN8?Cp}DnSa`AeuF=}t5Hm^dFpp)6UAkiB3Xigw|JP6uP0Q~D{vV0t=R3r z7xUSlTtC2nCT;cdn#m?)NCW#0CndJ&S=N>(#HZb3{jw3S&~C8(_zNz|RvoMHx$)#` z;^x-AOsgIrzCUlS;m36&4fukWHudIAG&tWE}3UW<|H1>eReo{q60>}e_$y2c63_)8%?2A zVb>2bb!q~bl`K9H)`@!D&*#1J_vVe}vW1*Wh?Vd2l4^N!oaQKi$Q%LdDs*+V&!ur? z_Yl0Q-2xW(5R;VENafz2p?lnY1 z9_+r8*F9K={TOZL-h=)I)S&kV@QWaK!K?t^_{{5#u)>Hg40(s$3xmDKMwD7Z#J3sw z`>J~0w_v+q&cUS`|7OAUfKD|=He$O*q7qBoK(HrGQZyZb6=9x|RHN7LShl>;_isiC z*=4{}u;-628r4~SGD4dKRlBQ0PgqqgAQ4rTk1TLUOM+IR@u_&ocFh-#4r6nsY(g(u z0qT=>^1LuwmEaZ1>)T1%bcPjmp8qB@m3D?TKOHQ61{QCiuOV5C5%gbYVp@z{8+%M6 zG@C+LSoX&!ZQAM>I_I+s^=bU!K!R(JZ2$ga2Z^b}KQ*TVK*kMXvfJrLT8lZ$IFkmF zUy;SOE1u_VV$@GC@|_E6I;*20Omto!REG^dW8@Zv6Z_{Y;IF7^;|E!H@NW-m_yv~_ z3%4_{h*t)`a5Gf^Q>t^eWxiGM7w@n*T*Vjb^ojw7y1o;votz$1S{I@llVf}t3$`*} zTcwm)iv1G{&-ti9AYr7PR{<519-2^WO$XPu!`$Ll9OMt*mi5^WhTeFX`^BFNqu0s& z0B7fr<7F&rvS|Ul9!9%oDUQw%1too?->~oGcySq7WAr)@F_(K$J4}qJ-n(1o^=g*7 z#TE8$l38#KE`=?})6NdsIvbBc+_HLs@$`?8EBa}wYv7-L_1TXd+%Rf#c~W?nfMUYz z{*Q!Lt8sI_oWbqI{gg7OHLF-E(8X9OwKg8ltiW$)$q{^sHe>vwqne1IHoF;}rL!wJ zm-9ql7tDBcdS({r*{_U=rar$fK@+O~=Ew>)=j;1^#C%nLV1nseS14Y@C6C}B;VFl2>OI6Vyx|pYS-S+0&b~#C z9{V`y6!ZBlQjyb({9a&M;Q5fV7Y3>2=uz~74Bs2-{_l9`Ev){#qbLlUgaiU;RXaqh z4+^dLsL(Dfq?V>Xx^D z=&tvE-QVL{%ggpO{*Q($>llV({|PuUGgW|dV!9Ah>brn2OaHSDQTb<~PpX{6yQbj$ z-rCrD5Pk$o|5(RD3Mo{^c$pHtN&m1oumd(y`G!^2!VN2-24ZOr*?tKPE79TYzMP)ahu>=f{`rW@BrqDdHEg^A_ zk+LKFfeiH=e00XQjcap~@096l;9Q-`lqy~Or)RE2twF7!q~zF~ex|6$we?L}l$ai5 zi=K`-aUc|yH(dL5hawB9KX9Y!S;r?zmy7-RG$n-6` zP7##Pq^(-{&fcbdorI@a-9N$7%z;D~`ys%o6`#w`m-YBEBI&JD6_^E=_22eu(Vmhk zNRjkKP9e!^v-4WlP;g3Mo#Vj8N1hkK>x^zo+M{e#Gou2?> zSb1s{D(<6E%lc%Olnncq9c_}Ef+h&Y@bZV`%WnzS6T}4;R3r-8Hp<*l zm`PB2&X*1GW94!p+`gzI1qJ;;4NmUr2-^2!-L{3MAkuD(Lo?xb@L7$TES_^_li-j5&=Sx1$G zWBy2G?ob3qo`mup`ATCn63kCEktT4-0g+mv={UW~jnC_>sbYTYG-3u`~&Ni=m$o#uInzF*51>7G50g`u4htXeuWa^PQlt`R@9^TD@gkySN#F zP1}=FDcsn(3{%c_P%Tv>G;ozz*2FN;E@=}8^=4AdD3~l_N@9rNxpD`GKxMf#^cRwz z=?(j1k#jDWYRjO>B#hwYzg53QOOS1>ENzzl?q6!!bT!Ub*d{?5NDU~`N%U}7w)*XoD?Unx4mI$EFN6}uxWzm)|&G_M9{ zv4QAqrz++7O`FsNjNstzNVQIHXgHAGeYBlW3@tW?`bRI}@e1~i@iK$igWE72#SS`h z4Q7=SSI!DxK@9CV36uk`JKNW%TnoU!fsYmo0z;E^E5R%q9b!F5zW^(rlgbIgwK?Os zD605D8`*XzFcg(5AcS~9q7W%6lAya~>GiAd_9qw`T9=G2eD~QPAuU2!vIar{NyMfJ z`26tiSfv1WTA7#vW@yJ9bFLo0eSAwCnKm*kuwFZiw>D~;9P3hHq{@^_vG(2(U4!>) zz2Ah=Y?5YnnX1(eN#7C-?0OS+97^4Iy#m!;egO+n0AxTp!!GwBuECR{v1cCUBgIPN zJdo|yk4K-K&K>c>zmMoCn4oXPo126XFgLY8!^zbQ^tGr!>^cw@Z05e{sdpCrl!>n| zPZJeL#IPuExI^vcq?@3}00trjMy$N69f8*bG z1CF1c1R%wNsHE@CwBnE5xksxNwW>K?r`XdMS@*qssUigXdai0jGyl)`hYo0&(I^^b z{p#>)3h@5qO)KU$gE68m)h>b&Q?NfwV>EOAv*eGRDMsS5TYBPYt~m!&9DQMs{RJB? z@Ih85F$Am_jcH&wBbv|)z%3;;fFo?x!cF~?bP|&h^6lgz1q7NYeUm+ZwvpAfU!K`i zYmx7-EU8Qhk`I(@Z_7V;Fmu_BuCv;1M6upXxU+{*is!8qrFpzIhWIswdKMaj9Yx`H zc(mD7m5u+C@W*DApk_pi+sdbOu}O2;D{z6W0ZPYJ?(lPtV@B%`W+I^ma<%Tm22^c7 zJXTce*ZRBO~^2T{g2&c6#HlF`UkUWZkAwlV(} zVf?1iD+uk=P%<5?+;+)9S7|}*5wmBKhuN%rXJ^BmM>dvuNeEV-kEu3u7t~x561Wqi)Ys(ANn#Z zWK3H8HFL`Z_ zg_1&`3x)wph_qz+heyu&z9Qb5hj(@)F*Og2y4D6Kf4*m#*?2vR^fXvaSQr()dvIvcIgwy!c5x05@jYf(I!M9Ct+|cxzHK5V}c{Qtl;JqPvq$| z;ywT$34+cRmzem~F^3S|-=odjLrj{^84QxtKva`)K4!hUXyGc5}ZBT8#T`liMoJG!?33+&B)| zLAYxIA`EK_4zyl-)-lvqZ^&~qqBa&QjEKWTw>^s1MWWizgrgX5WadBmZfJn@0JxRH z`+@c~cXzPD4d0<*8kHeTwErU`Af#=mcvZZKSmUP~Zp5ts;V6Efv|MY$N5Yv%RDr}- z>o4Sz<{iYxJ2oNXDwDN-PeI=bAfa2Lh;L#OxQp6r@CpOW43hXZ1^lKnbs=tof#BpHMcX#Ue0kF^XcaHW#L|otOis3!*_vwFv>5I znqvZyGb%T;bC($RnwjG+#E!UbXz}RSc>6Fr5>e8>LiA2FLYxF+VYGXi!__}^x4S*O zcaol#r37}=ilw=QdRhL#tNeQto{m5ND@#OO#)JYEMHw^t9T)}UN zEyPCL1ve$-Ncg+J%p}_f1QChj3Zhc6;j_tO{8WK9YX$%xX7n{z+#)clYAn9c-lV(V zy81?$X${v!N+ibJGaHX#5K`B;&+voCOw%*R3sR_xOKlk4^(|awhn>)`Aiw(ofosxL z-Vq{nZ0k-c3I$bDYMopZ5Q+Lc6o(o<_q2qq`nB)9CQX4EaLk$ti?vkyd-+-t3P$0w zcGGK2`)uF&1h-5J8D<{J)#7UQKDG)uaN;U^-~+cP2IldZe^+AtzAnzsf8Ct)PMEcy zBmLfJaP5w_j`WgyqaR}=*}K2R(b@=7T<`+3OsNqKm_%3enu<1YrbL_Eeg4Ej8J3s& zRUGl1SJ2LA=LuL8(i?u7Evd~+?7La=+_K@D+cT%vapEFcN7*Aor4?0p;8{LGe&?(p ze;ahM5*qJ&Ze8KnaVoRb$O{OyT#i6T+DgLW$mJdgu4La5y*kYG%hsH@lEHe2lJ~6@ zX72KuV7Zvl>Y?G=5|icmfq!qSqNyNA8JaMNd+L)+;=Jp{g4s9VjJBy zIN17-9JHH0Kr$1Thw*r_ZyDHobX59F46!+n_kVS8{jV+SzYZ>TE-udhzk`dFmHq#2 z;R1g6|J1{^<1d$JCg-p_o!6;V+(J6g5GZ`RY+tNOy^E>`9#I&~ox;?E>uvl?UIwKL z(yC>?9_<5rCh>uUe0HK{vMPe!_*YS^JX9z(Q5=k9(#P5Vy0|v~8usP2J?#~Iy_wvz+Ng6CN3{dj6$x)c1IIxBaZ$l<(Q zB2NEL+wT4Ij9TpZbf4qq?J4y?ZM$DTg);tW+r3j4+JytVxK7sQl>XDUqmy|5U0~l= z(nImPyB*4m|3vMms)A*JO&S5F?WIx2{9Wpov^HdP6{MR+cVaVgbD zCcqA`n4*~EF81$PHve?*%GeUj?&Vj0>Qz9UM%gU$uvCpM@QJ+#t1Kp_6EU)~R8jUY zCquQNxDSKQRMe5H+apqjc!s5P7fYhMh1r0r75zL{yoI4mq}?@?&yB*fD5`>tTqZ0m zAv(cO8M30wHqOXh8AFVF?@CbX;X935vkD7dsGXOa#P*1LA4I8GJ0rTyB&W*?B`p4P zC+f<-(8BpYIlUQ3mNK$<=MJv{mLm~~qO7bc6RIk+Pf7}f6&7|4mJBvEjcIueAtkj5 zXj{x*TMvykvhH!0J;A9L8?04&U4trWy`~r%1#zOBEK)t?u>eyAm3v?CqqAHez z?1&yje{C?h!-$6MUu}yb7SP|U8srtm@)lXUt`4!bN8X~VOf2Zogl5z+*;W4aZixd= zn?^ohSrxN^oW4s|Jich5hE7}5x!`6xcFkmP)wn8wPA$Q4MP55r!;W45tex|mN~9*< zoY1ptPx|1cIY{MUz@uy8Xmj_v>Dk_E$ zGgiv923bzC^ag^|zRupKoE3b`g{nPZ@y2)tFxe79wE|-sG6qZ%!@oPF$@0vNGzwm zR6D$#Rf^DU#o*ih>iZm~7WSmga+6VuJqrZ9G2;CqpjA@!IFY|B)P5IQ;ANjDdQ1%L z$G(nsY3oEo{Ynhv5!!nL9WY>P1-XG_%A&ak6%wAjksmA2ZyOK!3rAx^P7M1+9Q5}v z3=W|!IW*|!bmTb`lv-$nN!yW_Y$2Sq?;7$3`a>kl!Y8pPe?V-osGMRI@#9pla`M-l zGmJ#na;6z}VOUf+T2Xg+Nc#SWcEngc>9XOM!h#1f9^!=RlHfviw&>}=W4BV^^9If) zl3n;$$VLAW>&7BQ6UUczn&-E6i zY~B~0qItuqj$_4Nw{ z%|}(Df_G5Ix#nK~Bx6ZvU;h_~i_sA(E4-BypB-cVtgT;BS*K#8>nfHvhR!@)rS1;|XZRbt^PFC86JBk-dNbnhXzKPLzMK8CO_RcB=15Q~r(|QsgP4U$Rn;kU5 zD0K9N!Dg2(*Ap;+m=06;*{0Ra4 zfVEAk_t5bsx1v@zv!D}-h2%~n1L1)`ofn28zW`BWNJ1RHITmn`>Pb{{jWlP(%@`6k zwRpZ!Zz4uky$+Wxa+=1tIW$|)Y=Ls`Y|2HoVbaHaFHCQ{U;y9)wD_z)k<*X8YXpy~ zjA}4jN;~H->}n_pZ>tsP3s(!AJAX_<5X=K}S958zSNmhKj|kNig)Ij&i)~@hfhFK} z36^?R*yuGO7Y#RMb^k0_B|iY63ZU;<-rPJEF%zkN4dN7`txxiA%}s48imzpK&!KZV zJdvcWhXj}L!By3Sg{yzMzSp;POdCs*7>&VesbzfAjZQzRsd4!mv!ok;Ia)oX(Yo_#0+n7|}E0BaX@kvfamAt=p(CzXU#jk$?!uIAoTI0T2G zhL-eesjR)1KH?Zh!pNrR9eNCk*}aX+8%Cx?qUeH|U3v1pyDW*Rg_gPwUnmTR#V))U z1R@KCL5kUUE+$W)zIDd_L4^%a0N2`hqNV-`Dhcc5DRSapcsfSAinAU9QCGVsCmra9 zU}j}LczVBSe}8?iYHJ@am256h>If^z4Jg@q)lS6BOK*Pr{>8T7lj*`c_P%XQGcCGV z$5Aa0@bxoSb|UGW`+ez;QJ+~)O{-SR7HSTj!Dl-p6hSeUWIB{5fVlW#HHOKTypM%g zzT;H36ls3s1f5zr2SzUt-Do5orvjmyoSrn$I3Sl-EI}lka<;%;L}J5!T7?od8Cfe> zbxFd+6rX)W9|3_Y!9W#ssC`g6>mBD;Lov0iu0%oRA-#t&TKZlyoRhL{H`e_EFa~qr zfO$fGa*g$T)TQof=dhKg7GM8>|A|)a%0XOBeq-n&=o^_MRc>U+=w1uax)V~EEtRG2 zluGjNY0~X}P%-l^W9#4^wB50KD2t_c-!$7U*EcV8D22MvQ>J%(I5Mm?huJN~(Fnh0(WG-7`ojA4xG z>J?s)Gr*9QLyn;JO;sLA%WYiyFOuI$Qo-EeeyuEtVU%>wDd+MLJ@JDYg|t80WS5dM#^~ zO|HZ-!fX1deCUM^0}XN0rk^1&xlVV^3HPvXRLZ@!pE20>AGsmv-Rq;H{p(Q=>WP$l z;WM+pKr&?bH|q0@Z43<22zv>Lw)G&7DErz3>T#-cCigM7bRKGe56YIUU=+ig7#in^ zUS-q{&gWt$oc@)DTEIXQg*w$xz4*U_uD0oj8DniQ&!5m*DMlMJF8BHNH67^-DXeiQ zqYKG}YVik~2jptys{I-myucN!H;xSs&q1P^Z#o_ZwqCC>xlyNP~4`)aR5}sH-nqqo!(yuQ~xS z(rm;}He*>tdX|Z22ZQb#i6VBt7F|-xoa_r~@FO<;&zg`SF8Wl=AN68O@aBf5gzf0=BD<6m_e5UOe*GXO*VXp^I;0?CyJ46L zS1;^c7}K&SzD&kbL2zVf-1FAJHhdN}i{M8-%){%k+e+6)#B#hTx(OMQ!OK3)*5XzN zLm$BxcO=B^s@;%){c{(^>|kJ}Aw6VOo3c)AyQ=3~)Vs?z%iBY~*Li94`vAPilW%7r z7eS)@+sjC~j<;LCit-`MJWaITMyEdofkwn#iRJSPRMt5;VxLP|bU<9DuDk9RjQTW1 z3Vz;TU5H!Bty36fQp8nixk|1m<17B{Y^;KlB5U&Uw?Dzq#4`(1r|h(fHr5<7%AiU| z<#}T{$oI*vXVl`I4ShCS1^4KTn;eLrI^Ba4B;|D{B7IyeRD>;__WRM&ot)%svI&mX z2M~YtRbs38L1Jr(GRrjUC7B2bSX??c7p z5T{nzB`?!Pj?eoNYnH;+zP1&ZG{sAvE}hScr2DybgRR@l$F;TwF*jmY z$eB#q%jipLgp9SaZ{Kmgj+O@+3N%@Z&~hG5?0q&elW-91qa@CjmvU=iyXoygyUQ18 z4)=M&X@p~~H108o4+7+am7?5FvZ6jjm)ppmHt-fCOgQbh(UCY|u{;Ouyng#CesJjy zwEVfR8vf7mPGM_t@>VquwG7SBy?XV+(8-rbnQ4Irc$psEca)JtfPI4P$nWqQ>7p&3 zO2Vd?4G5>GP(385cxif7x?86qr$g4JSOqoNM${(uqEtGW5^K^aLa&?IYKJ4W+4zE@ zmY9-A)2FE3_QmqM+q5qKb&7t_T_3K zz_LyDe;LpIHwo7&5Q(Q-4$o~maWb>QF*=|-A8$1{{*Z{v{tiye!85PE-IN_dAAu!G zi@s1CV;O!XyCoMEnPk=y6$51I_u%Q;5d`24tyR#B@RG;-*bFMiIQRM&%Vfk1u(}iw zZBk3JyP}(TR`tq;S5UXv+QrXY9a>wmG$MErkk;mYAp#ozP4Dd!rsI!sUU7b?1r#3i zhtBtMLRQph6k~XV^&$GUc)z|O4G1R~3_D8;9;_d9&aP4+lTPGG!SN9;lCsHDPvAvD z)DPc-Bwf0aZnNadulDS03}UW zU21;}c*s7_Q?b97jN%q{GGY)G9_2t^36bsM=Rh`5fPL=#C2+oo7 zaAqS#%+;%hX!kP6>aPOUpE4h_oEmO5>{;Oox&` zni`;Ts}X0qrT&UO$%}h(%{d=)>IxPHIgRd^s1&Z%ZP)3?2XqF^du6mkS>%#ADTuF; zVLtNnt=@SKEhuQ;4M2kCFF)+Fl0F*G)!=|>$B1K3(a)Ebd4$U;wL(d6+b&G9Cm<0 z%ZskF?ovH!ye?}pfVL>QYeKSf`UyQII`t!FD0W^Il-cyEb~+v;a_3e^g5ZYP-BEIJ z3!Si~K`sIuYWuP}Bl^|>yC(F4@JTzq$IHF%+eV+k%3lDk!(96y6F>K0yv?%{j)Pkc z_12X+AR+NR#78)3Kj+d|*VysAnHwf|RkAjgPHIKgUFH51xJ?KZUti8e@uNk?HG2eg3c6I8R8{Ig zKrA}e-YE$y#3K8efNlWp+AkMItSbK4)RvG!I^6`YXtahm(X)a$@BTzCM_DzcfPOtn?VKDFF{! z5_w=&4oYiGdWo1S9yX<;gwhh0uX*?fo{Tb7+GN>cr3b9lpa@uYgPbrr654#&H!!>% z4_AY{g`uM>Xi0y6>8t{Mq@rM65>Q&T0rC`5kld z!)|65rK)4VeV7}rr+xtgVa<&X-;Ql?*iyVCv*R`Hd%EO0O#J;oX;fZ z-rNsdKmAi7XnZY#pKls=P%=kk6oZg$9@W{SS%aYZoH-&(ZwT1~kuSEKG!y&a=xuqg z+8y^;GnVr(1=sgHBCpyI_7e_=>{fWhg{XoH&Nxm7p}t*!DRwKq0ugdQF90o9CXF=~ zP!mWcZ{`Oo7tB#*&V~<#W%fEk%4}IG47M0Qc718#C+C=$vK^FyCA(D^a^6{?WH_?5 z5RydED?;|HHs-cXYzEhYe9tH0H`1%M1r4 zLcXi{iXc?mtFxx@@KFUvF-t9@ zMukglxuP)fQZAK;g4yEACa@AQFmvRu*bw4k$}9` zdu=$vG*1Ic`q0T_{HfJ#XN86Q#xPcxEPn`%c9IYy5m&gnTUFIENRl0SE8b}BPO6w1SqEzqi=H)&z3fjgJ0Oubc{TU=?NXA zQffjatt8I(os=L(S{Hwzb4&-0u z0?4IPz9-vHAE3BG+24=~Vh>lDCSH$8iX2E7+3m5h0RH;cCwN3M1KG-rt z)8y|Z`2v?O<8@H>oc;zqLA^JKWdhZ&WT%unP1HWU4!nIqrFAqd=uTcRX4ithS3c}p z5XnEW4BxprWBu_c(c;T;CMF(}1s|gDWibU5dV#AK0r=D+u~P7n@Y(748XK`L61R^= z_z&7Fsy%gfB%*p02ZniAHXot?-M7GI2D)J^LToc5QD|rd+jpe zv5pj5cjG2A%j>?J^3MdT?L^bZ+WIYl*%|G305w8?C1n@<-HF1?D9-&VFI=1vlYuNS zrvC?POgC0E|8qG?;eAkaR+Wd9x9}N$wYXMZG(krw;&SqNP4+N9fo`;Yh8@(B2k!kg zZsDWu2Te5nvcCbC-;*GWxgjM+AkaC7_7;VXlb*zt0fJJJdocPBJb=b)Y2Y@r z+(XMU@HKN3LF>ZDu zrk$iOUmZ5VrvwO-tD4+*!N(sEz)J>TaOkNlMdbX$DN6gyHBZ4uJB!R(w`*~RI|$4H zc@A?imZ9aczP>bU4Bx}T2K{rG0zSC!+u8vmS+BYmz0gb-J@4Utc%twvS1sZCNdadM;0R6Cp}WVh z?CV`?Q%+riyF{23C%Tn66i=~lZG(lAmCN0#Vu-?H9FOKz>4g=6z=Sy~<0YsFcUg~c zHeF%i)259io44V_0GB-EhlIl&F5}p!g>Z~x?!@Y%3BWb5wZC~FX_Ahi%DS$l^mZXP zx3)b8ZO>22>M|*D_3|iR;3d?*${iaAQs?Q6qPB{ynK(o@PF(F=bGe3VZm#{~R{>M{ z`;(UcOxI>ipMaTPU32pQ;{sT-HT!HCu;bj$A47}aIK7tC#E7#3H}GPBxkRTOV2;Na zgHqCH8(IP%ZzRgSSEW;c$`8hcA~G9=OAWR(8dm+~k8{Hy;lTb}!-HVgA>#Boo|0^s zt3(gB1}K{BZ!=0t^8J3`g$K0$nXa$H{a6wtuHd=8U8)byY3NY~8bS2xJzD{*GF053 zcXi2V=5owX07oy-JPWjW|G2boSt9T&yv|&`bMrnVu%44ZV?FFe>{kcm~qNg zK@#g(W#R!Yb!!2p(+mYle8AprGQxBO7-N;~Dgm<^bFD9$-UvGR$pZ|Bj+~JX^oE2( zfuYF3u!6u+8p8AiSFZt*vkjUfZ#n9J(DS|YOv@KWr$R%1lgVPyu1wsDIFe>}+`?Rr zpNwl=XX~)SQw9q`hRhtnu=c-SZ`1S!&N17(Q3r^woNf49t-0LH=n8k11QM}SYzwPqyNw7VFbRtxY~>8p4gnFTfS`ViIS;g%i@a0S4?O#Q zmNZ^w(o;i`Fcuz4R#XB}E5t=p1D;;_7C9($>?zBJarYtq;5bB;ATd^lRQ~Jr5ls&$ z_`|Epj33U!NMU)!{m@wJQc2*qzgZhz(*483ao5`XAwpV~@_%?iu3?C>L1-cjrv7G2 zuV)Yc7wT@=e33Nuzb9(tzFUwV+i#0w;8`v>ci9F%T>5rxYyX!P8GI3au)7DAat#WG zQ7n_8N|s(6!cQQqkBl^oCC#LZVZtJ?hwk#%;h>p)FZ_F?^B=ow9T$^sG60+mEA=@V z0(#|#dB=GqW^ZEu*)ofaivoIqe8N7U+A}s228kQ5v@iO?Nt^30J=DvG3RS~5LoZ-v zs#W0^bh5cZqDgTjb2os$jDVWcI}1j4WyKdEPPj*gXEUZZ#A+>CL2IJ3gTC1ViD=TH zUxRS6b|+5xGI?&`tp=FxsB>9eCZ>hf&B~Pe+#l5uw?{r|8JiHRQDM39;OfQIXJtH) zW*mCx$C!g-ZhgT5-eVOS1VpEYtc4fR-GIFzJ_!2L5XzM$X5e;BMqfhu`=9;y7mz z$MBn3iJ3r;H3ArUynMu7{F)-DaruwwxZH{HHE>5xN*=|WYU9mNMd*FZP6taMEMOFR2Vl$08( z1pBRh3y-bg2eyUg0AC=bdw?tQWjD54InXGT-k=8kS z(%81`G~C#3Y;A1Yw#|*xSUua{|D5yUId7gns-x<++l&uRf7n;{P&D1Xd!-%#?B!&eD1WoWl zU!t7#h%YoQR)gSXRlYtnzXP@e-vQKXe-o%0#&QtKCLDxgP0DKD^Y=&k|n`I?`BJiqlHV6Lhf^heQ7QQMQ*!p)3G!( z=3VK6(02LmEt!Xrv&K=kWlordD1#ksKTAU1j&C!cSP{&?hU*p(qb_pbiak=d+??Mc zsN0*=w{1ZqD@ge*LrZiOLlqV-vTG&-FJcBXEV5lT_-K;7q`OUKnL}Cq7LPpRPd<+F zEaQMy*=;c`NN8yl5UQc9Xmr^~+15mc`y?VM-tHz1C;))Nj{r%O zpTdpb9e@}T8zoE9Hd!fl_6Aq`GC-bA$#7*T^Z^_mld|kHj$1e$K)< zkj&d|Oez1aeu%bD0wgr}{aGV^>l^QE8fnaD7=1 zIpI=V_+94;Re4T7b!gbckQI97ZFW}o*S^k`TM;H~qQA@#l6uHGuOIoRwPAmNhD$=r zXexeq6}2J0!?^TDv@Djqt$4-;EaND#-O5JXQ44WyKHTD|tdvNEz27R^QCwI=} zrJxh#LAaBBO>(6tAZJ60jvURNLj3+ZYb~d!pfK4IPrC|ZlgJR9>*VXDp#5Y*%^?duazBOqw2J zF_CTDOPfl182A;YjouYKDo65;n^hAM9kb&+UUMVl0$N6rw^J!hu4uaZ2>fI}`8aUa z`YMN%9uvEZIFZ91_D8-hmU`~8oSNppItQ7U1bX}x`T5(JAXV2pNT+#ilLDmH-X0T+ zy~=rJt282^5c{t31Tx+AQb_m}M8nX-u@$A?PUhA3o7;xIs?@4N_5SDgb4p)2IL~9i z!B=idcWa0aBgHO(>F>m=hp7!akz$X>r_A(x?mq)zOCFNY^chdF#1E5q2GXyCOMnEt z@2VP5^+nS|B0}xz6eku_f>AV6OXgG}Ca7ZlH2C=LgpnPgsAflfrDQQrm|_tN$(jfC z8(J^FG~Vd|E1&ZY>?QzWL~4-tM#}33g;oUUcWcmlxlO%g%?AN1qJ;rmanf34#wx7$ z6a?UJGfH6u3MTj}GNr0pzSRCqZUMOi=f?rTaezyReFlAxah>ydjqra6&_9A^y zuCP=_)5_IT2!p1UcTK|Siy45UPpC__*b$kZXGFvw?Vhn*654em`L=Nh8L}P(KE(N^ z!#SLJQ_wv4V+ctNN@D#k1{Zb{!**kIC9XBUSdqv*qjVaJ%xVKmsh?0zEZ%a0ntq<` zVgZu}Rp-7#j`sA~^wxL2UPehiQL%Pzl3P(=P@3_Vb{?%Bc$f+`8EHXGM4o|4a?h)53ZWtd8@E22Ga@+7W zQkI1k5QR@%ZFw-#bI!Yk4W8iATZXo}%e*WwW2lN?LsgXFOZ=P_ent-+j zU52EOc_?I-lzxYdmJ`E1dMXS#?pW}|?xK?rU&JgZ2GLHJ*QBW)%B!gUrpYg!WK&XC z5n04aE^fO*1BzQ=0Lq;5LgT(YI%@@o;^V>l``f(mds%B1WX z3rB>u3U`-ipQ23Lbj;q{<${#y?mf3pTF0>rXe@zkr;q(#gP0Fn?{XTP*NJAn7_g$ z@AlY($)!}SW3^`sO$r&qb)%bXv!KXtkg6UXjT};ST-Or@MpEZ^)9 z6_Y39;RN$PjxpY%`LYB|FvMjs+17Jt4r>gF1R@d zYZxNCA4%)tAR9ubO<2s4(5oq8$aAg0(?9)(8g= z;8l6WNajV6g`Zh`z;ZGLwT9a)9LY9IW? zP?*#+C}mY2dRrv@g1ZpvI~S}Sq-xqpDNyC-(}`pQxcHg!?JGk7LLduSF?p77uad!d z^{q)85ci9gjcMGpWxs(99}J)B+WIaUg(kV$p1cPu4G&`9iQ>^eH9F$FV&_@Q{arj0QZT)D?> zCHa35E>x}!5`_!+*nxcpk@vuhoF>u|92h+cToq_M9^x#g}uW#!L!!4Fhr zk)5`{iVqDYSjpM3nG{?`8{TnQf=G7(Usfp=evz@8{V0&sFgt$i|zRdHHiWJt(VPx$3h zgj0|OiT;AgLoyLgNVZfw{<_JR;JvfUkLLZ2%`D6uZsV@(;I5j#mDg6+I@+;xFSRUu zkzbI@ZX;4Ysr&whW$sb4rprCBz>V*py|ojILY`u0puY)ls{G8jo1zz*G|W4A*m28( zB+_I=)4v`X2$QG2H`5{4K+tnC^n#y{lCAuiCZq0VbaCGU24UqF`Bvu{bAv(YWTD&v zX#*HpbOr)niN&xxXa{K)PhbB|)(PhB9>)-Tw{yQdNgE%cgX#<9<6W5kcI3Q(2E%P}pBHB~ z_6*OsWJnZ-Q{ErBnlx(2`J-=AaKU9+%qsOsyT8Q-|FweO;1bLo`xtqfETz6J*%RAp z@Y!iQJ{^8@f#jJQr_&z55*-HVne2}X@2>0=O<^P6lTqLmBbz?iNI-BL?rs{e;v=?b zVGWqIk`7GtEK~GmV*LZd6oz6@lJ{GSk2i)s<7NCUUZvZeHk4<1YpDp}(n^^DrecJx z!7!Vf{OF*qtN__wD>cqf^kC3t@)|H~To26Kv5%3Nr}X$?PQp2x0Sqgn+>(AFvKG5S zq&ng}U=jSMVRd#D2>otdYGCeZoZYXMpx{jA!A5K|z>LXxPfh82VElxr%z#scS|)}f^sjBkbMXQxuAre-^r;CilIZYT+4r(6yq zgwXc%NDm#iXYj-xtZvLMxB~|{EIxKzK{drp{j=YsCmMtJxQxf}3h2yB4!nWVKFRBt zr;mnW7+=Xk>8Bc8qKt6}dw0@He#;n<{lS2C)SE;FdEY2IwHiHzoWz^nVTnm83T5vL+k=16TO6)zCwC-6Eu!poU)#8l%3m)VOOxE1WOak+U^ z{gEYsM)0y|QT)7Jb*zwof{ZHK&3ku5tdh!@%R~N+a^9pb!*Pd~-v$e5u5FM3 zv!LU*c11y-CKt2LV8!mL0ASp23_tXJdKw+{9pMe4)_7f>=bIQe9LLYGCq&(9hiMo) ztad5Y;&%g+PI0c+Tp+L`_-zB5ESGLSXDPK)&{gr4PR%u;b7ddU4kPvoXm?5{fPXb6 z98Ap)e{=VMJZEl&{4S5|N5Tn7kDEpsq5YYj%h%R_rll6T123!Ncs%;DQIN+L=KiQi z>Jz|5A8XhZPW8>c?zMMh_oROiiUX0Tlc!qjG|qyLmn72xhp5j`C8{^f^6fQ9*n@Ae zDxnkDUfB@Qx>b3@l`(5L09vbr@>)K@u3#i7HrvGL{KGDoj}OJi5r4Ep%2Z04k^i{| zTC8-Kbx~D>Nd5UAT$CI?@^xRv_@V~ep?=-dJdZ2FkeOe0Eha3aJP&z$uaUhtJE!$E&U+gJOYyYC~BT) zc=N|b$3=!O4(+tWB|yhcU{@AO^JzU!8}~JKO+2BG$Q#bvpb2%8;)U0+af;@n7Y>x~ z!|snI?fq;QujdUH{=UYHPO(BE7gAqSxubkc=yDH6C=3RRhb>QQeJrp4LAlF$Hx4;n|*&7(kA6P_C=57@*G6^*H2u1dlyWQ?Ma zMD-s~&J!CKn{tSkhiK!gydtVF<4Ct_i7VJYz)C=Z(5-#S1hYL|Aciu`h&!-PVmd~d zjU@}6%ClZy3WzIggoUx}r>m!xsO)Wl>>eur4(tKWsR9W+Jh_)r#&vHSiaIS{VZX8DzTLPd z33T@B#Mg|`MuvRiX`~#BViu*+u%SdUPC`e&2wgi#qC8EF*LyHV$wC81Bf&oF1vzZX zJB7KW;`{5*oCu2ujA4|Ve&|FO*3ABIKRG}FC5}hw-%q+i1>XPA6mw+Vc{3rzl<6i$ zOOxJlgZkza9rTC%eh$hw0K~$wei#qLtaFPM$q$M4 zwwP({QwWpp9jml1QeKdr?)D$fZ&AfXkiLvhuL#b+Ssh7bl6>75xc~5v*obVO^x=&f z9~X0vjG_8=b97=tfTpI=5e=fY$4&mKhJbZ==v9e2Ago*~^0BX5D{^vzNf`KVu}E85#5%&7+RL=*N34}ADwJvqLiqA~18S9)po&WQGj!E+(o$JGhv*)=o^hw6(} z!3={>%eEEE+;T7q;Nn7hrekp`--xUSSORgx5>$HQymGaxp`pz z)A?h2P)w1MBBq3Xf0Hw{KA6e*R{j3?8away(LOJjh3Gte zA-L_I`S)zPYoc4cgz_IgJUGL+Hil+&j)*H>;x*zE}b2mI*&F=~gCbDq33 zsrdKoxSQ*}IY-f7T5u!n&-VK`jeZmTlh23Xg7n|_gU-C1z3I_35y8_pV~0xT)SW5D zl5U>WwA(>R%0+G%Wo8OzX>sX6sVsuA?~SVtG{UlYsSLB~Ws?VyvRX1+GUaFZ#WCVoJ-6?f^WSI$dcjAmoQ_2odP7BI0 z4F>@Qg>o*qJ~9z%mXqnBVpndqGFHu;Q+JLW%Gq*3Ddm}(wDwFbTIEhuH1&s(>4o^_ zDPJ*2%*w`E1qhRraANd+pvb3#ZN9Foed&miHwWyk(*N!W=BVm#@Kq$#5kyBx|GO-6 z20w6Ro+jG%hEN@yTzUe&6Qwd-uJQK=wOI6x$rpQL6s97%jHXFR;cTsS>4ht7ze@|z zT^;sJO{8@HxQxf=oQ+iCmdb^aN9Mfd__M@_**=;1dwpeeW*zjQJLgN-J}EN-1q51I z_?RZ1Kab+dV&r&q3;MnmFOYZ+@Gf}mMOJE2ea2Ek>JWkD)ss8@{-dibh~ z|2|s&0PV0z7WS^O%-HWkvHSJmxM46n)u8_G!}6PZhAms)`|6w!W2 ze}4RY#RsFGRIK)pA4-6e?tpB?P*4ro{7GkvM#Q1udw#6mm8C~wG8u1QqO%~f=V)MD zC)wSlA7x~Hk#F-7o+&-FD2pNS{ruZ3i#nSXOY`xr!qG+dd2wwx<$MY3;tHX^gO*;k zuR}jcrcU+B$LP^%)^?ZMk%Stn@woVuG+w8Wc8f-7{u+XJ9*_Nw=pH1Je;q!YgzMxp4dgE^#{HYE~^U=<+vFf&F9Oy<6VLpz1 zW0-Rf@+O!yc&GI)vWrdXoS~MKxv=K{;i1K+iOU3v)Lp(zrFAnF$?{x885?C6EM3j) zR~?VLlGR%FAMC(-!TDkd*rmUJ+RE@uv{0bKc<@J&PgA)T^D~*+Exz^2>dbosZxp6l zKOWJhdi*lEKA=t|##cwbzRE?ImL84h%F5aR#$DH+J z>ek%Sc3Z1C(tb;#_Jr#E__WYlk217M$__(@|! zF)86+%hqS{+UzL~v*z;v$!1{=9lfd-D2HXqWd$x(e?KZ}!Qy2yVN4_L9P>i&!Vf(; zS#HV48cM8^uQR8qsxjI+*eZBgHvFeU_V{JQYCa=sFhMQfiR{&d%1o}P6~i92&1`7Y z&{|T!=mrvV4PufZ6 zl0vhaHe8YP{x|t+T^YU#9=gtkw!5(`*Su3a_?y5N0jh+4@z0Sj2@{0H5VnCLYA%iN z`+p`7e6E*N5zX%6#*Ll`oYfY^^2+JaWkchi}Pr5LIROn0}=+9s9(8cd0uNx`Qkn zo*-qHfYUM=^(0{D_;;g5L@nwv9QEm4WCDswww>H#npY_E;@gJMsSV|42-j$!bVROE z-s;*;>O%%1O2p>*Z{_`tHSmx+3kTgC_qfy*?=-6!E6zOMzRC)?-@I^Yt(BJ)%4)r6 zxzf5L+XYXo>E~3*-s6PE%nHsX5YgMwws5bYOzzU}tm)^)e=o#2M85*29zse`E>9&jA{v9aSnvjmvu2v|q4SG+3OiN+~m=`65 zbDUTTg~c2Gi^xbdZzb5S4P}^qh{9)t`a=-aw;-m z-8)2#U)R%|v}o}ccNzI?w@L(nTV;Wi2ygk2#I!BP@EIAKr-0#2#4H^QQ-986EsqaZ zBVtT5Y>-0H6hEHje_df`=d2QB;$_?TFj{aT(z$2ZYfz%Qr(&^LQdQ_`Bnx+p!kyqA z>+PK97*`vjxA$s!*pVrLhu_lhlf;$7%d+u)EC^f-9nCHd6eSa1eLQMUZ!0$2^v(Ev z%yR~gSv)V5R301Il4ZjEsaKR?8mEDh)tHJz;dUjwL*qBe+ zyv8%(K5@}z3XQCB8ba?IPBex(J=i$vNZM3SH2>1989YZL$(DE%5k{Ra5Np06skbu6 znedRS`5cF^e^>~QDUeBcuj*x4%gu|DJ8YB^)vNI{rI59aO!&=U&P@z=jlx%+f4U$o z4b{*E!3cFXEuxMzs32+b);7 zMKaxm?9om|bF_8R%#Tt%;5@l&TLe<41b1D2=Ll!Li!0UTZVMnG;q-nLs5W z6LJh8Q^o;0L$Gw{P)!b(NmB=*nxC$2i{G&D*J^(@{->dK*0tV;Z!0)GQ|W4R)#aep zzuC`(EEAGZ_Ne&XS4W121i?##eSpac$zXw&iEfIFU;PF-mUF5oC9`?_t{Aaq|GkxR zD;~tI@chkMfVYB^+bDM;!Z#*1$H79-aJ;b;)ku2+%r2V6RRcZ(V8H?kex}!n{;XPp3Q^wFfZj=TfHoUULq?Uwm6O)V zrZ0TKR33Xl&K}kI1sw(QR!0~)8;C|0GHWR}b_s}^d!3b;;@I=)u zRp(<6rIru8VW*1Y7&{Pum5Z#Xk0?f$9`*qeexKRS7Hz6(7%-7$z zqTA%JAb>khy~NnT_kZIg2cH*rEDyo|8DaE#%OrSWdvr*C+uI{{Ls2UN#m(V#e-jBe z(!oSX;nfYN*tl2!JSm%9qDILZZ6n>;0&Hh4GhqkejM9trCN@^3yt$HrP7)x_g+&eq zcl{n5mSyVrr>#BzO;Ybhv{WU0!UA6qjy@uZllMzlzg3m<)yC;;NZC zm|hjeaqYvIv%BJn_T@1u2}mp$Z5VYVPM z62;iy@!D)1k`#ohag~H(T zMT)7zg6m|eYGVdzGgOAp#iwp2iO+z`RIg0g?m>v2Kot9ss#F_bPm8NHBJrVeU_6-$ z7y(?j@$LuAd_l<_{q7lEwDa8)#gOojORI#@F)m%gr4D3Zb{O}yQ;L5a@Bfa%fy8-} zu#o;wOk4HDN^fNsA|ZspbG`TmNjK5#1r4skp>KWD3IEldMC|!RULrOsF-xs9=e$7% zM)&u{F$;om>8zrY1o-3`nXmiVUQ8yxs(k9$E? zlzN7c#dMePERMxr;l9n8KfF!K=C?js0N$|tB4u0%0b0^#)NK(88Mabe_I8yp8lr3F zq+$P0W$m&K_X1u4;u52(DdjQ8x{yDte71FknqGb#68tJ#l<+4d<@PiRh1p-NCs4UV z1HZ79zy6_FE>$}DpT`>PMe#B)g1kR2=ENIOA&Hy53;X0`J+rt|%2@B9r%-_CD___B z-^10;;R|CZP#^M(ki99RmhTQjV9;^H73bycw$taH5gQ|wDan+~5}5{0bvoJWZbkl0 zyfF%ZxZrAW6AJwV^M(3H6j5D2#A=QWGZ$4i%_$dxf{^vy=#pxlyC_aLhz=4)NYWiFTxVbtgbE#0?Jha-xY3z2LOe({FV;^D$>>icIV!BHcQ3ta#I&5ilGnrwFgjgK;q(1{uLD0kl5n)4!=DwQj_%=_NsxG2kRl0 zj9;1Mae|mHxN(WKcdia}uCN|r?NZ*gFs17FGUq8X!xEUN8uIB#c7sDQIL*oR60j9B z8htY}8gm7ld9{U--N^WnpKZtap4?V6x>pERsU@v-uP;&6XWA(^2C$ZGMk2~oENX`d zN~ldk?Cw#l$B>y}TxpG!3xk$;iRFX1Ba@euA5O%BL-TB2 z4Jw6}Q%x;47EntqXF0gd!U#0T(&xiV-<327;AOpb4GZ)jsvBhT)z{M~B~$mPWB8QX z954;?B9yK1j+^3iwZJ9vLQ1fK)Ca@=WJ{SjScgh$K@*Tr`K)zaY?WA=0b^qK!*cO!;kK^3!ubFEN|tpivvzs{s^ud_u>pYUm$=w39{y;cC}!W8@WID z0V1?K^~q0*o3R9J$QFMrt)G>xXrv|p19i~V9)Ur}!Wdb0P{ z*q77&*liLz7w#iw2=--LaAx2_e?Hd_$#R2}=>H-F6VmI=q1{qApe;0 zvwmXdVso0Fo9^DASEN&=9rsy=ffnI?Xr?Ii!r?wLeu?xEPdJIJWIZk2qpK`e&!O4W zYR?~;6=i%rj%CD?OSs;3$;HH596SpZMl`}pKD#sJtYerP4W<7k@U)Hwv3Uqamll5_ zJtRk8g^COIO23vzeT*lwgsBy1*DD)+L-#HY(}TXjK7hLC;pJxs&l!Z`jwwx zGPDlN6Es5jG~K7tG9%$!-^jhan6+66pelSEC zx+>?b!bj4MxwSA>JFZu1rwyjHMzHhZ(962m^RM=Y%`%#T&=_uAH1avveJkOWob7{zh%MTx-&mKM77e`OCNpE-S}d9!A>)00{jl4-m=o*}0v7RKvZ(jm3bW z3G=9E8YDu$9;zJ;m^prU(_OrOv9gEX?ZvLwvaA0{o8FQxTE0z@g7W?YmXEriw=?0X z8-=9gkOwm8p-(I|RJ_2Rcgu7*@j-cvimQ@v=k>!wG{S zDbF=?Y3rC5{V6K*tfe4z5P?ks_#kna;m$70A`;KBt1!hWMskO~HCDaeS-Jz#6)=e2 zbmwquQ4ZbJLZ_K#mPfaI&9Y%fFwi+OMf%{_uBT+G#pM>{-I*U4_gBh9h-9Opx{&ut zeIYLtdN}kGD!a*Z;T27SZmvGhWT1Xky}@MZ!}#Iv_wdRJay>tPgym|G9h~oZAkyxl zz~pCO#+eQ3_qb_ZYu!chPzeb)q>fl_VrlO@MQ9g|%o8UugPh84a-ao)kQ=LXHch1Q zw(aU|ltVUUPK;A{w97Ba{&4^WgHuZM@b(tlMM)2x_H9XE zj-k53UHv%f(y8U>j~<-sRKO2=MXt8ask81H=LJU0trOssQs-c-M8xIu6nC65J-np< zV4!`m_Bo+yDx-F=HCG{zr0n6utfPz!7mO>?e-s2|^1q7dxL>-Ki(d3(Xlcr1V_zQH z7r&s#WC-=)W0X1;LyH6TRF9*|+tfs*xLzL?R4`*MLklRT@353}DBpf4aq%2F83t zW|bH44)ay*qBJEgod9tg6INw@g7ZZOP2$qx5b9UTO1X25Nr(|-s@yP|`|J3*DQvr? zl=2$J(uqZ))202@S_#4(wV>glbg%ZA80rZy8S-A`c2(`CzCWS-sp~pX<#0lo1rCtJ zM?YJ3II3-}FX;5)AvX-U-Q@gK@@KxPvPfCJy|73p&rl-KNQ#>eZ+qjrY2Gl!;fU3d z=Ga%HPtikUrpBvGdJRc59uiiK3!(hYSw(%c;;$)LNhX~n$_e*+vYl7LpBYw>0(1KY zxdr!PG>CJ5uP#8|J;!)i$Lp9;Ru&fZ`u3z+NB-U%)Y%naFaEfn}if3KWpB^@4R_Q|!E7&`@OqW;Lp z8u{&RHoPm^03i!OML1u2;ti45>9>^^Gxsx_QP^1ak)c<#nRrO2Rli{*FJ<{ve6H#f z+74)1Jhmq4^+)Okp)H$^V<(fuItHFr5HI=E<7U3<*(X#9f=?D<`tDOVm59Wa7L<1@ z#rVFUX0q$zF8@u0d-4m~yGy=Hh#iP=&MwaxCV|^Cn3rY27lvJjvfh}kF2pmziGtrj z9Uq-!m;z3_5h^xZ&5!$i$XT&~xSF6;z(C%YmPgI5_W(rU3YL4) z(QLLTj+x+$O1C&VyPHyMjjeBzoNP9Uw&R$+8X%(FHCc05vJwxs-Mw@3=C(z^X^#a` zKWEIe0~30=$tve>)#_}@BR^*frS1HXb&76>8}yTvdPmPO(EN>>P;kR9oj4VxTW7BX-qy;JiIOAdI8Nr$xMi-oa8JKjcf(pg!NoJ zhH!a~mRR0!b4I%k#A-Ac&#t}TX`^$6ub~&L?)5dht!wAEH=WO(ZZ$-fso&VrY>W`^ z6cWr6L-{o8LV^Z_lqn3SJ&D=DXw~Y_Fqj$`8cnO;h(&9mB_L7L9`GK>wQ%ZCI!miZ z0CYzu-FV~|gKX~N-#svO)dnO#7vk#`KiAbJ)Wv8^4gxC}!qRcW`+4*z44=*ERw3Hj zdZ-=uzfbdgs*ZOLMYMzK{ZYIYuFyUrG_8GA6(UM6n-2Wq^0T^r-nk;d_l?;_SlOa* zD3h)C7H_6zI4?4UajzgBV%nnND*|Bn2Yo%n-@42q8M0Ik@LD#Q>dZhv>RV_)NZ5r3 z<^27bNZ7qo6HluLo2UYbWnnt*x4gu z4*nmZ@+(m$Ugbifx^~w2cLK^Y8XMlKzbBC=eBoHH053<$N9NB4H zCVhwNUbgz*RNgsz9b95)OhdGY(Q}fbTl1xD-toRyedgPm+{nYxw-l)SAXuKq%_PQtHnAx@{Z<-JN*EdT9SoSkkkw z$3%}^|B+E_W269%sraIQK#;d`G+^fNc_48Mf_psK3v|HwGsksL&MxTYJ7M|E=}A05 z1YRgU{KiR{lIt+1JpQzC658PjH6w~x34#ikH2kW&yog%I!J|_Y0+#Q>OorB%$DTI+ zM=Qa2_3y)_v2?MO;1=UIVeg}Jo|whC{y?s1bz+k9MnmEBQCS&j6+exBJqs|=WN<)< z_KYkT{Gt#deCr@@tHhQ&9+}>&ml}cuQ79^~I(AYFF{*ZpldnpTd79}j6_tZVn zgu@ey&qUkUk7`$&SIyHk$`1RS8;?MZmyH#bbs4$ofw639lLE}v1fRcfY=JNU*e7!` zM3FQ1zNVje-P1l6R$spupLM@{v-Sfl@eIEir|jHt#+|S=&_d}bF8qN+jDK{&Y(JOIMs15^R>%W~v zIvDOMgB>VQsb06{KX(bkvdI-eYQTswMaVLPch1&Zb&OU4?H2@;JcmzGaK?UveQIjp5s9^fu|@Z z<%1O13`-1Wm{4s#6fN=drM zo&2&jh{;?9&X3^YmR!|4#Hr?`mLc^27hi$u#A0B|*73dviW)XEpucq`8=XpuyO3)* zUb!S5gZdu5aJ0{pJDO$W!io4F4fpfq032TSO}-<}#rnJiI)^MxXW8kC0Fe;PeF*fB z$DTNXvccVdw9{3%TH}(;_1k`ag{Nq#pIA6KkQ>=5gh7F1OzvP@TH0IToWsicZX^3{ zxU*3M$5x?cAH-T*KC@%Po{6fVw&;VWFX{|E+~$SNivGn{Tz8shsWqz)MZrizQ5Ai~ zC2E!j)EC{pq2Z&e+kQw8paECXP5`6wR!Woe6vnuVzAz{kQ%c14x}JxVi_+#0hf$Wg zd#712CNX6zGnOSe6Z`^*r*FU?byg{ljoFmKudU6pQf-S9@R3@+*WltC)5a6Zoy$A{ z^B?SMUf}h%X31|pxL(Y%*ehsrYd8#uggVD;$N9N^*O*O^%=6=m=V-~9*OH>@*C~8e zU4cLT`k;7$bBCO-S*(i9VEVK(;C}GNv{t>E5jT=((6LN!*8by&WZ4H};JF^-*V^@- z-2UKOQ=fQaHy@rK6gJoc`}qrMu>S$v9J4}f_1LT^RO)F7^}wfjwO+)QRO+=3oStEJ z3f%e*16YqxHQSP9dmAd)I9e0r5CQ1JDGlB?g}1%VK4O-JW@uu=aS=8@$?>-!AjcL| zBB#woZvoV|*YcU?R)kr`^4j@kt2Tzat!4G=wLqv(-@jgo`ue-P6^^|&mxybT0I#>; zPXu9;tqU%iX*HF2!(1UGWRJ;cmlyzz-s#yDr6hUKZ^trI1?yk0NH`n+-nDpIABDT( z6BVaI*fHkbR~J^VPGO)PdJvpScCN4IOg?jVCadJUYKb8Kre(MXTR_uyA((@ywzGF7 zMM%co(LS|WJ)%%Ivjzo)Kx@6qf^h39Y2t?7FNm+9jusSdh#pfI3$ zQN#JNhu3S2B%^WYeCqS{4iXlV-(8@r!X&; zJ{Lrr$nvgu=?EF+ni!W0F@5!HF|`ke%EjuxRm$(@tyxHj?1d>|c9RLXJvgtR`F1$^ z?U6g$c8WRM*EI^yrfI!8Lg-cu5659l^RLTaL{X%*d+L!9!FWB7<V303;dM-%P zf(bam#MVPak%JQ(5c1&{2soFb-ra%YMg3Y7D!k0WEF(ve-xZxSx+I zu(eK6$?2s+{6yYTPHPNa;N3Y)E~SvIqg~V~GNqw-o*o#Tgd1)b%!J~Kyx^hk0CS@n8nV&l z#6ofe&%R9(+oT*l)a!wlw3~HCExOr=CATIGEWgI~PA0WX$(K1Oqesat0)5#<60L)! z#C4r04s<_1_Pr!K_s3VbSgXn)@&|wB_eu}M6$f*#B@&e3;J?p#54gY8s158la+D~S zsk*hXufZdNGn>bhp(k*OTiG<&If9~jt!hOGZF+lHuRWwR7FOYJ?Zb>mSWbTo`N7U) zsU8hy)%-H-E!|Ovt&$iD4fw6Jvh0`;ZI~RNM0sc|i7(}-^yIm<;?hMnX}-CAc%TKX zx)mH!y|P`Te(RsGTd4=-G<{H4d>Z_xPJa8mXMY>PcWyt`Cb-(}ua}#1?|w7aHIakv zPru}QIubK+ZuA!&HB5eHwNtGev!vW+g=wr$(C ztGjI5wz_QFwr$%t`#bmlU(U;YiV-m)1DQM5-fONo*IfN@-5h@MCMBK#v-=(GU@h(onEO@tq`p+XVfhzow<9k^HOPd9?^Rnp>e`HIp7XB<2BCAH=nOO1Q4X2Z zA@%iXh@#QQ*PEcHnz9OpB}!h>rn;Usg*C_HGw1fqfRwmj#Cytq-uXx#A8mLMCQky{ z4|+rCwmw1HD{#13wio>7-$~XH9B#03Mlm{-8YA9*F($+sD!z2QoHr?*Io^1yo@f_C zje$z_)5NsF6aCr!8a*-7z%`?7}`-pLuP$`=Xr^aXXdEP1~#F93nnQr{yl?y=n ztfchO*fSA`4^Qr;ZkYX0Oq)V`3`8Tgc4U@9h9Gy-nQ*>aPV&AN!OZKltOi2nO zN#jKSTN5m?$Hc$EihVPZPV67fBWPsoBb++R~VwH=5dDh8=48-M(Y)^h&LD_so!f| z=gDs0+-+S4;dX29cUs=8HD-ye`Ngw>>6soY)3;wU8_+k~lwUifjTC&=JB1BiEd|S^EF+r}tGIQfK!DwI!uU@5E)hzI zJwaJeJ#7(im!dII?B`r$Qb@D-y?eW=6#E90sNzVY9zxPgjq>OPC+!opGv!$&fTfVa^g6~&D0n?Td}I)3nI$*~;{nY42x?hy;Bvl}A~K?=C_oo9dGpA#~AL20eCJx|Q1Oc6Ot&W{xjT(u8n?U$We zv_r*A-o)`kJ!HECC*R;hXU?BKY2vdmy{Z+pe&pmOO^ZOW=~ME*0XAG~zS%Nb%~(-Q zAL5J@WNAdL;N0DJU9=BZ*#x*WuCGQX`%<^NiO;GzvK|0YR;($ebI>%%DZWhI3*Xr? zs>*Lza3taP?n&^C#mXHeczBV(gBUcdWK2xM`iBqI0&Uu!4sS(;Adn#KzYfVGR2^V6 zT^lxIhc)E@O)4U3L8c#7chKNTNQz+f(xAP}&|hd;S%Pt^KAYf9sU9Q!zNdWfM0|J5 z-%_(W>+Ff$86QcD(bO2hgZ8;8WdR+iiLzT#OmM_`NUR_ShKHa@Sa&RR0g+-@kpTFM(`G%CEE7~smS(*cMX89euJWB?6IlAz6CL9MK;H5kg> z40q`U#<;!saS~kEq9+`iaUF)Y4?EBmD3Svx!sA2of=MCh8NA($mu+8Mf1w z-z9F=-2rqcmk592-*zjthUkrVuK*@-t5)<61g4S&OcNl)PP}rGB_JJQ)xOj5-~8jCxW>GF)A1rKw-)8TF{`u z( z8~Qu0+?GQA!qA!jlqb&24_(x6~x0?oj8T{IL1X! zW+{nH4BTxOFY2*enjJMRsrW|;jr8Zc1w7-gM-m!6)n%v2dwqwKJ*Q4#44gp4qcUS$ zxb%QgDgq=uwPns0=&gPOm0RVUUOL(qkU?9Z3NZMRGcc(V1J~Mi8?de%)v0ldL<#u! zbzKv{9lO~`KE-AZUX{&149Mc8+m{%y1%Ep}k~sv6``!gnp{5UkA2p;f!%~Gncu;}N z3-os{Yn(PN0w_=U<8AxJwJ}uo*mYISDgjCi=4C&JM=9TewVdMrGohSfZIB}HkkebDmV05f}Bc`lf!LhGx@ z2n9(>dfD`s{#sb5Iasy-h})+zq4}{sC`J! z@bc<{U9G3OSWlVSjDgFMFfH)CIBlt#>})bA~Vo!#Q~hT#xwm zo1Zrv7RpG*1%a4<=?0@a{l_#UmFfYIg~pNP>6~Z;*?oV_?F~WE?9iYK{sr0`tu+cT z@-Uk>y<1ieOyo#Q;E64QrU&BV44IJcVen71E~bJDR&OqzLtktd*ZvdPJug8U;65Zj zT>wy|l7KH^GtbQWYc8w8Vxrmy(!MLW`4Hr)US^rkV70t3CV>paClH)k2fYrvQgw*&B2YYXw zGgq8>D@X>6;o2qbNwlDuBx1&AZOF=dU^BnqKzas!m?LLZK^O^?U0frs>8TLsj3zQg ziEc*G{OK()TPv~o<#`$8#5&AL7oO&(Eydu1ksv{)_EK+&-n+@tcef)m-P!Qjae??@ zL($8@clc?Unj9^ZR(3{eWkSk_Z#eMInnXo`c`m%*F z+hRZ2T@^CQUdtGyYB(kQM~ivNAdsSpiem$@e&4fs+U~2BEhu#ac5^3(=>1^;^jix& zREU%^Gtr0;ogZ}`6NDL?BALU&Y^f3eabJQ!$cN!SXB&4z`aI~{9m@*92HN|P>z+r~t|;hROP^-7H_ znk-~H8_!nwu^SB~YtnYO94S_y5O&k|U! z&oMAkonrrK*gi1I?)k5pktJ7nRW;6KkRFE;FUJM6PD3!++<)spdounyI*)kwWZJ>r zhcXU2pPn^8&Fu=@#N&+P9(?V!wD);FDU#yIK-(hl2X<5_G z$Kd>daB5yc&0&z9t7~HsZ^g=KdTO z03L=X6I8!;JYHWI-GLR0rl1L$Ins5=P4VfDM{UaiUiUPj4(soCC1*f4`y-0P-?H}- z_`s`I3$0+)vagH`j!z(>UG=6juu&-wz(ai&<{pjGt@Pe@fZBmm1#aUtq4O)y2O|OX z0u0ZiqTi5IC2(D^LXg9KGCO50N;Dmu_=c?!Ird%d2m-a>F1?}&)gH%@`NFS<4O6aC zF95Hw9naBpE&PU%f*@NfDa$sB6~cumxJ6G8fX4D>{b{xwALP{>I;Dma{ol0)yw-^B` zecCUs*ObV*Dg7&h)!GO7`CYS#RVi7JYNulhZ|456T$kt^aJ~M8GsNA0>`A=-EYP2<4UN$0 z7euA3%)_V~V{B}g=g$&%@~50gI)a_ov}Eb*xKGWol3P1m=X38)7WX2g{9JPioN4Gk z66%KJTVck|oN#|K=it9tp}h*?wL)J<&?HY6KofIv(Y@3K-Y;U)WxK^2tWigCT}kez zHU>hPKzn6T2IHwm{}wUhufQUzCGK{tPXFp6e6B8M;lSd~Y%=$R{S5AmDM{+rU41Ww z7y+}Zx}`h`rYK{)I+vCha>C`(80G7{t5fTFofKu-h6Z%!#jt*)Ey{a$tLy!i@{2>{ zXXhdOBfu_Ad8}Ym09d6gfIcrCw3bAj*hLc841Wk>jB<#>DG|G1ujYQggX{(YlWGE| zD-}MM*33EuINgQ6TigOmPnged{iv2=KoGQ;q$fgg&5y&8Q=&WNh-N0tFBl?FUfaXH z|0U3EzdIv$VFGP$I#uwG;XS3}W2eKrvOBDm^6CK|FGG-v9WY4w3&F8i=AtDPaf~f+ z3r;{o-*0knmOIW6{d~jOSkUl8(y%rj`A!ZsoQvrd3N#S>tCoo1qC=u_>{B!NhBhg> zr)<)~k;G|NCJzDFJ09Hz69?fpqfuC}9Sl&K8cxJl`H&Gg1N=O!2Q@7yu>BU4N)Ia9 zTkP73!?eAq-DHb;Z42s~=NHlkB^#wOHcs=R)W)VpK}GH`T!t=8SyDSpXS>&pb|^6) zr|1;jwkIQ8%or>NN`<$({*wFFlGy+Zj?qjP<--?#fVz9d?+Kvyx|8TIX-@`^UM zt3ks*r$lt5cPDfb3JcxYlZ)AKUsm6~AI^-&eA!=*#+U$;X73N@FMNPy^V7A@#?<;E zdw1*ob4-cmP_|Aqe|G)t^5pydbB-(@_s4pORGaC3 zz3<|8eP5pb_Wk|F^=5B1{rjU?sS68Pi1(X|W$v3(#At4@)v2y&hCGW8F7o~h>+|*W zpy3aqHJe7tbBP9z~;4KShb=Iw_GoUF-$9qj95luNqQs^(x=o? zY$+}+1sEomJ6&K5D%cCXMJvp?Y1@TGE6~iY|5XAQY%IoB7$s`sE_c@&J+OJcah*S% zr4pCVBKgnK%-WZef);2A+7|#e-3*+RwWrC56F(O*g8UV5z)IGn=-WC$*#MhzQf>3R(o)cZvciMpPZr}%U75MEYJtXvorR~Vb*t31E}!XzrvOR%@Nl#sZyMF+Kz(H? z=M8g}-V;?D_C+E8Sss#>*>!&o47~u!$D!Q#CoJUxwkH>tR%JWq)+OEdLNBAr3bi#t zB$}_Mk9DPuu|;=VdCO#0j(rwbSh-SJ6{Jf&WR*c_}Yv#s^2)i=z-FK#IXriX{u!IT0XjVF0`Yg#Yww+i6ji zQFQ4LKVl>vEnG=5Ywrn|ynR6@Xo037v4OX}jq>UV{n*rKqCK3tytQ=jdW*r?Q*D~n zR61p9R7qiRT}J0x8Le1Gj?Nk565!iVCPP{jUJ&bwq_xD4xn&Sd(SN|$V8s%#&9_WV z3s3$-BL{GnRuWO<1~^Kml^NgS0Cp$g&dr@6c-XK^i=hjB-~L%pmp8;saRE%6g%723 z`IuGuCzR{75dfd)Qm~tP#Ktx)4*xpq7gk|lQejc* zb7M`&QXds2CYQ6K=i{fA56rCznn0*P&gy4dQtAl`UsF;V38~$lDYuVq55d3RM(4qM7ONSQ8C z8E9#9|A1kU&sBA`L<)?x$jgh)O@i*{N}Q02>zQ>AAQhDK=B`RDng1mu1xpiFAnRvV zjW72ddDV`rfhR}Em2J*ExXy^|7@3+2@LK{F0f|qpmg#-)TJeMuXEe%|Er(63H&ZbI zGs~`$xe|;YHjDB~pEjmLUpq*&xMpA}Bd{Q1E<%=m5Ba{^eg9n+>>%C%pBR}mTR?o0 z5Kjye0rsGVJnff=TuBa6Y%|!RySHyKD9;wdhzY{KxVn>OWwpf>cbEkyeV^_s`jo}( z9RV(SYu^}L`fcy|qG9JGcTpNpafU`zMFxcjp($jJCIGETF?DF!EKIqZ^9@CF&pGQA zv}N8ESG^u&ixh1VCJbAR>1;%?@`L$ca(00Z8_wxmef7#7_dwAQ)~i>4MJlcQHIfr7 zyLGJ28NZHuZVJq2&QbzaM#VgR=feEVb50<@ALOy$RE35rSk#J6C{rQ^$3@lsP*dwr z*Vtp905*AyoLZ)^_lOhnceuby^KZR|lz4Moio-&JS>ds>`28srq_-X4A@A4^ZSh2DkqjRig6LI&Ne>Nh_q#JNkkq&H7l8=tE&V4*0Ch@4XuN_v=1pVP` z{40gA>1TIS%qM;%^jIYJNHQD!MS5f`{MA}tUf;{K?4i=pNL^T|QOCRD1q8Dyh*Zgr zsSAPCXv{HJuDGI$+ET@(Xjm!izndgJW~|O%J_SvutyQrRMs2s5ZsF9-A^SEU_x?9R z-2^rhX;63d$+3Yw8Hi3~$WjJIFIyksH4`N_I{W9sbf@s0`m|UST(-v2P$vXOw%v-O z^T?q^0exH~%yBi^_%Zpaw7Fl@ZSRs#58AtY_9{dv^srX;=!(o6R?ZI}A_~urpB=&| z^IT8Ba+*03A~B)(cwNL67N5ip_+1Kf;MaMCw!u-JH?&h|TY=`etiaF0dM!#G4-Bm3 z?u|uj7V#YzR)bWeIE_Fa(VN^-v@&hXnYi$#c%LZSTLvd75(qpEI=gwQZ7m z?IucRdSS_sZ!m#jM^Vq~^_~^DEbq%I>Y6-Zpj}qpakx|gCD#RVH3c4W%4*<5V-!ms z2K%D!TAzhsFXQ{Ag+pdsCrej@m2sv55Bdv84HL|d0ws3 zC_mGJ48~gbYW<|6Ph%Ti3P&1IfY2U3Spid>z-U}NcEVFpwcq8K&RLhdW2bu{6?KKb z14hMvbB-*^Q%MDzVo~He3%Biy&6@PJ@ZMRjI9EujjA*KsLUUa^8tEG#Y8Sy!!AhXl zQ*G^Psdn)=>Q~B6)+#SMnPkw;m-9}9nb*9Mr_!sb;9vBPj;`Y`kQS^_N z6N@sWZq*So44Pmu?b)y7EqXLX16G$$YT%7L?KC670(v*cNm^7@vf#2?o1R*bHMYvR zIn^k$QW@kf%o)v0Z7cgd&AEb&BzJy$o?!Pv71tpSxOmS=d-U=d#fo$K&R@tYN&+)(mp!f+#>Z|H%LW4nB%e&l~ra;vR@>Bxjw>3^64WUX^#^5Tag0Zo zyK73&1kWDY8;M@D$G`Xai4izYy?hFMTD$1*S}1w=7(R}sCd_bMj<*IRzjONBWdbW-JW)R7>_1PxyYM#}ciKYR4xR^KdEPwZ&N;tS56}^v52oHQ_ z04sso#Jofjl>K-qCpNcJ)uazy9re9CdxGBG>}A*!Z(B3XB=%5$2Q%OPK8b@2)Hz3o z&*HF$Gl?A4mQ%IN;q*sL9!ZF?G~88QXJO&~e2SzoLfDqe8xpG~t<_Cw1AI=Gx_0^) z_UXM)k2H9Y%c7OIKi)8uwD6M?iksr2Pn7djMF0Y}m|7pjPTt>GN3Pz`3TMxC4SG3p zm0%;m|M`WI&SZ@>ild7h0`>O-MWP@*D@@lUq^;g06XC;%R34vt1w;>B_NzRgzV>eQ zf5!h&ukVdHcDhxQl9>ryL#~w%IGGeQFo66>!|9>F9!KN##gXq`QKUok(U9t$mLNMf zFPn`2+hA!}{}Rj!GZ!S?TbsSbeUa=0m+|oP3O8;Tow*G1^M}IJHBx#*d|j2{lL%u2cU}a~7gXP~ZqPcR=9XK!?aFu3^c{bn!q_@( zYFeHqrlOpgH}l=Jo-n$1#1Yqd*+5_CI#(<)7)jzzVdL$2@i=L6@tWosJ?;VrkpMYK z%l)Wi)`*Rck;00hSQNxE*@DS0!1%QULrieROH#4lT@pmMrS9L4)!*QW6_kG!LeBl9 z*{H-xsl?c|gMmaURaw8b_D#_H89!?~NbLf9cM~p;#eS=qp!J#E2;>fd-m|x@k zHOJ=p$OG5kNhPwnl-D4%zMhPftY(%+$U>$Kt3%(JQPzi&rS;8 z9MUS)pAN;aEn-}8zr?Z3@;klHF`{inVH&Z(wLRp+qVrfus>+vRWyX1gQzL%P*}UE^u>oM<<(pGe`TPQf-8Slrac&e>P$8JC`5938o}~sREE>Bt$BwWH zC6ZTG((Ig6!>n33NM#wYsJ@yc&Dc-QG3;=FoEKK8n2Ze{%>Y@0CdM@cd9S z`zXPwn)m3+(KxOaG@ftD0VDp6Tgz<{l2Ck=9yFeb_mTRcu2}&3f71w>WfIM-xqq6e zQm1%?R#Pw?)JtF^c%vZ@^e<~IU{djZWdX~d!@BPZMnUM=jEYwR@xu&;UN?{%j>)K3 ziR|9#op!!GQ$6Q-KllJHt#jl0OZhQ{Q{Z&kDXUIK8e1*jwrR< zCB;4y)$$?!Ch9SiGbEhHoNxAFVRyzT)?VHZr2VpRF+FIWK7|JxuOQ!mr~h5G9aTL%EP~jSYSx3 zbHXi(7Eb|%S@ex=&g2fHI=O#*(dxQQ;e7+f-__fnfc>FNbG~2B(wQyH&SFo8`t+rc z;#Tg$G4K2PQNnkr`>QYpJ%oynojrm=R!O_PNtfuXx=OYocm#jRng4;8JgvW%mlIDd z#Tuh`yWs&2to~8sT!xns#`fW!)0vi=#2n}RrvtMyErv0-8=Yq&?h|42^N3(ybBK9u z$Y+4jfgDJ^fwuS-oMs0AS>VVe5~6Ledhu6C!~Bu>rH!I8j3W<7-wW8Gr_h~^XOveK z95c)O?^#YNjdE3*KNRdy=WH26IgkF7-XljIEj#EuMJv?7*ft0apKzm9v4N`$|Dv=w zCRDq|CrwGjQSPjXDfJX`o-hxsBjlGy2A~iM$Ks&bluQ5nFc0_e>o#dAh z0phH{Yh|66Xv{t@W0Jlm1`KFXCTn)m4*iB3xRL=RN}6POxLVM9yLo{H1_)szUFLt! zY~+F*scRJ-FF%NPPgZD<6f!mt~oPLyku>9M*ooeoMe1yFofUo7G5? zw>Bb6QWdr~DFI&{Y%!^tAV0e&yyRbOnHpA}49n9gGu$w==weYGoK~tinq4eT&xlge zh62c^l`kWP%rW&g#Ui|8iO%q8gt_gNFLS^}=|-ereCKGGz_;f7bDYN`FDn*nngn}K zCfzK|1|9O#*EJj#ggODoRCd`V_@0B$a>_`Lw&Xtxn!R?}o6LJlzv6UkA7b>Czj0*d zEnJRH2{3ppxQ{u~LopcUr74avGJRu$eP>Wm8Rkb&u!K>W6q1Y`oWvAZCZttf?mCLg zF=S9((<=G|j>`XzYoo$5ss-sBmD|U*hJ$0QQl^&@nWq0Gd`~1RPffF&bVq|{%ns5S z0??dqsV^9_!IEyJ&Blme<_x+Cu@{&25%4+4@(s#$HD2H+a-lH^c|D4W_B9fAVtZv# zcopW2MfQQ?un3Y;53KO6im9A=G2tNcMq9ECxUQ{gTV?G>Q0X!7|&nIPKMNfYMIh3z`4;n-fmX_7U0 zLsH^b)N#H}NLX2}`5)12wEB3qj%^{Ey?XbnZ;m$*pZXD8F0P$!Eaw`UTISO4*QC;x zQYX7snCNC6vNagzjn_6kwv(B%V&lvq)vE53;50&J3gDANAJsLh3yg#UuaM$ z7y_T>E;6|Wgz>F@!YA&t6U2ZAwFcOm(m|e>+?|PLfeN&m+D`Z(18=};g& zmavLZ003BVxfYCXZlXzp-zqM1;3K|h!-F%qc3Ek}#1*u8K zwsPE9v{^Ir)Sc#^0d73xo(bp1o}k$aoi{Ot3IbP@va6-}-+Gv|b>3&BZfn3ntMaSj zWJj6k*)wQS#7VX&J zX9o$@H_Fj{3h;;pnZ>4JIpG7S=&U18U2;z+Qx+_3(#xo%f{!qpW94%xl_PVCKYiPa z{lIEA_SA4xrY9lF!JfO^mX$LT4old!6vOS{ntxWW#;9H^@-y~7BvhwznTk~d!-kLt z?XOBsSf8ZeT9`vj)DqBO8OI+PJB9&G(mL!ff6loPj%Osm%YS;TSD-?iURalBm&CIF znNzfJDF?3~1)Ee8-=f4-q~^C%1E?$n>s%wF;@qMwo;T*bSC7I*R6q^Sp59b+Fv^JQ zT&As4f65s2!FUk{`XrhEUL9W<5ovoofRo)eINR}O_MQS)$ORDvl~yR84&QxOQ7oop z?;Hc4;yzS71FZN$1H-vZhOkZ~JO&@>HS36~gW~QI5DVD#Hzr{$;j{n)FU8MIS4E>Y ztwh_m9YR7Bx{y$83`cdc9SDxJ&=fusC$G<#)J)cThDw7$JZ65phtBzb^4${twknbW z5hB|7W5$C}afbjLohn(spb8WWM@Z9=*@UNON~)HdOs#{a_((L&b#&<7zMufVAvK92 zT5q_f5r4eQH4jzTQ9_fIUi)M$><0VH_5EbWNM%bSnsLa4VbO86(~s62jp#ja?Z32I zjYw4(NJfdZ?ug=xqc>wNvPG^|8s-Sh4Z}9}wsW-j?4S90QHhmNBOD#({e4wkRliaL zAiSW?GQsYhu}sV@#E4pS0l1agsD}%FoqdJ-i`j5!k?oGvFJ@r}7a$AK)+Jyw?c*6C z*Iw={Ps|mkmMlsaSNEeetwUO4feQDHWQBrcNr9X)ujbtY+@mv8aV#v@W!@cC*t+;d zqGEf+NnN85v+OytXM)jG9;561*+p&ng-o>Bdy#&vfo{udEqaWnI2P4 z$4&8-YIig;qM%)~iXu{vd2!#Ill!?6nWkO5RYo~w#~N7fxcWO%a= z*a!7(S4c?Mrx+wJh_x)Yode#kU@3!H{zh3^J|tBb#z?0o)Q%$m@_=9SM^8pH|C%BsTXt^OAE3 zyY*uQt5XbeYX8ITSlT4CoZe#>n68SnE*La;;p78NHtX(Z2y=cN^02j| zuP?>_T_Z;xwz8jD-%O}vem)b9dttl732-?3&@lYm!>iFWou|FK_%Gilh;*dJB`N1c3V2gl^ zPXnK?-LgGweFKIY>Njq80P6bE25gj@`+L|}ot_y}6jKS`E&ksCw7&W`-DK4(B7k;Y z7`RMYqQi}(pldW!$5IuJ(BZkY3~EQw*bnYlm!v@5=mR=cbl4}ET=N=xIBB*Bn|62= z`|+e*s#TR4!ZW+6?I8*su+(G0r_~d{Bdqy*a02SMV-E41Q_$1Wq>U&4WmtaH~~G_xSf(%TM;x=y&!2N z_1fl&sk00wx+L$HxK3~~c?SiFvoOr)nFYG>SuRc*j*>5+e(B|U=zU2HK$2Lq7y7>c z1x<_d)o0iAHeeG;=n#JB+Gv{jbQ0hujE5YIdxbl#ET!6); z4z#}BRIH(!b;5|C14nFOcoaq~k9C&6LEh^f_030p8hAE^7jj9E##I3b-8aXN?k-Xp zo-c`e25t1ISZmjkz}j>_;69}<9N>cn;zyP^T%bUgy`h?ad6=-yMusfBbsWH|ajgo$ zjZ-?&57TBsoXsiKN4FH;%`Y7^CjW>&Z09d>PGfrA0uSPYa2yd@50&{GrN?w_Ki)%1 zDk@964Ve8Ija&4EpE$X=8Is6B0h6>F8N_{yzru34UO4J&u(tlyy_25^xtx4eDtXW- zj>0dEmVCBLX!pr^(wh-5GK|p&QWn^jJB-#I@ia;tD{2<@dFtk&f?i^D^^*Tdb4&Yo zb;8!{TMe>$lqOwK77_H4ejwmQn%7>t*sgH$4n-h%+fnYxU z8w*FES?xpf3un&$+S`yO;(SUz{o213J@!~w-3dC+{Bf~V7m1?pEA+PPh!@uUAu7ab zD$%jnJERH?D*!r=Y&Tm-_pxPEQ`-wO%>lMzLyAe!^U@YP-_MdxLyTPx+Xc_oq-Y39 zl**t#O7@s(+_n7gvfNI#G~-4xAE)e0*1^l@>pnXb8x1mdOkm;!>rEHX&67Hkk(avk zET`5~Mh<`T|BDLDG4HX53eE&Bm~E$2IEo?j*~Qb&EwupRC)&h}-^%XD_^1K9g zdo9VeG-?ShGYdK@Z4j6?-{2FT3NKYHjph>LCF}bU0cGp95sRov+1|%*_XSN-lQos^ zOT|xx87H|v#oJx4wvWd?AL~e^~_0jE9-Ztk6nWx(7di9%Yj7=2HRgmZ-!jnq_FUXNZxxopK z{m}gMCkRj4{#Q|A+AmzMa-5FLm2qp|p;l#zz3e?75SUTHU5&Nv0RjC68V5cG3zmYR z(3U(VvfonUrA$wqnH;gKhbxSj-3(4UjGx0my-|dk{eTeQn+h~*uPKea$k;@Zcu!FW zGQ7L7RQudS=)4r2OdNrh{wK@Dc+!y>|BNZum=txKjnY#EH?KVYj44}ZJKs>4FwJIxARK{O{MdGltI9i?s?3lfNvQ&azjOCH_gr;ac7xm(UQ}C7;)mF%F z_Q-z*ZqYtGN1noW%B!#fGoCFFX~UzOzy?`n@T3OWwlfRVfuQ-UJveQp7O0cRPlcyX zZ#8JSup=4@XJ@x{swshxckckH&08+5}$@NDmUasVTcUkI%!I836V1+2Dzp$ z*FyG(Nc|C^<2$#oZA!=p?g61=JGbzg(s80Cqr~tSDWr<9DpR8*^MvmMF@9EzGiP|N%g`FE@2 z0|#=-T_ieuj8;SxkBaDm-{HwyTrY!Wr#e&Ej_9zIYTO~3(#nt^C1n+*j6Xo`giY9- zYraGygcS)Vm4Tzb3d@K(&XD7bzp#YkU!|02&JD3sEJv*{Iu9BxN}k$-XO%9@nde`Q zv1g1HAVp(nBD5hripx{OEK?X~@CsoYtj74;b!KY-1?>$fK{b#g>cGb|w zPd88^g3}6nq$M2k|7F24oaPAe@M}7A0$#DsGneu3oJr31qXLu>c52d~d5a<%Z^7VH zHVw=AAzO<(65|<9B#jaj`E133y$Ai#SU>qWe?-&XaGAC2?Z!TP)Mm8xlYnX}w7&E3 znODWUd>YMVVlb2JkR_cBg09~wvl0&-awn{I zhq^ATxuJBpBA&gBAcOnpwZ+jlbP*P%+Sn{@0*M6ME z@#tp~sr&~PC9iPMG3S8VYkwZs&@+tiHLRHcUKXfIR`OM0KCN5t{)Z2xjMCj3OX$PX zhwsfs#|GEr$T)CoXgWG<2w^=OQsWonQSh$Aw~P1LLU~M3(NN^C zj58u(TD#01YNHa*n)85sKE9jQ8Y;O8)B4b1@$+{o%iWRb*Sc2j&tBb$&HKk7p?P!i zz2Rkeok+T$JPB}6vUtF9w#*&~+Wo7=ByUn#)LlVjOrgK@qHf&-j0H zQ-$_z7XpAmz>GQ4B$ZE12wdIk!%t$Kx5>2M8GHf`JN|=;8IXyS-JC9z2?-nwv@VnV zHC@u&3;q~R`tF-xir*xUR9WL;jrHLE=H=(MG)_yshIE5`4hUKx%2Zq&_=4G|s5dw&FQaXdpv(lK~Lm_}zp7dY zYK1G?tLeseX3m%nOa)2mvg?2k+hIB8hFdMx03O*a$1fO050Ezqnj~PQ3^uMX?^~!J#~Xf zK+4iE?U|2~zv~hlDWjyvE5NG{re+$|#bihS0^@UJbzIN|F88t4ysZvy3ASNpjJ}Lk z{RqcAV3;x%zt;YONrIbwQ7I~mGy#c}hd$zx`Sb>wjnU-V(uz_*`j=Z(uLNaJg&d9o zT)R~=j4(t$n84-dm7}x$5l8co4XHo`prlPrrP!yEqv+WFJVeUH))H}p zih=bp)NkYL?5`ndl|9v!5p@HLMEcmmq!5;3&)S@ggyM|(y}u1rq$vK)4%72z%y?QC z2By~@dlG%4aWPE_Z2e8kOFLm2?^oD&dej*w9U{~%k6_p7 zvZ7LK+%@zkr0+ny->vy-7Oqet{X-D4Rb|`=hPLVMPwxE?5ZkEYi>XyP9DXgU zTjFtP1vfHJnsOni*sTV?VWy;>Ti^(lH({l{jJ{aHea1>WMRX!D;bYxY=EoiwLc{Ad zdI^=A#Xi~L=7!-c1FAffRRsnm=eRe+--#ItJ{Q6=h6xAt&9RUpT^PgS^t$}OFy)Q3 z7?>ZNk>>o@7wq2}(>W_&M%1?bnS2R*JhOgGYinTxI33LR_Vv@x3@2H~A zU+e8G21nqn`?=}Q6qOu`?L^;_A3!6~;gI67&+ebj$mLMj2Smk1K@W-u3o{$;?knuM zpuQVaa-i1=A(33=f#Wq>d=TzB{5<*UlAhI-V8!Z)-i)P&%GjZ64YM~y&dhL)61j|E zO=?EI3badtY{>{37tjU>U4~>DwYJ0f!(Z7sr166c`z*obrnQIU=b|BHb{|WZ1aSUd zCB?Gr6=Rg8>Z8ru;qOLv&#a@f@~xAW-17(CmYjkC6-*77LeP7naymJ`zADcwZ+4iU zUt=aS_MNFS7{OMdJq*!fLW&T#QO=b%S!723;2w{}B9Zj^3uI$c?7#4PE>PS|G&c5S zjockA{DB;NP;wq_7E`k@Cky^VX&#KFbxrd5c0&f|lj8uvWJfrt=9Sf$uVD&iNV;^2F0Ule_^U zQVwA+&KXy?#}yZiqto17u-d0# zK9An5j*!vO2D3Dvn!J@(SQ>V&%*c+0&g-8#o~cmW$gt*JZ_LJp(T*ecG6u%idKDBx zpP>j3bC%o-H!us9d^qwrWqwUDK31fB2C~->b-ufj z)eV6olZCkl?%eWfpRe-}3l-?E-@W$vn4F>V@>)3?TiDQ#HaRy=bvrlL=rmdzm<=ye z+cYps+v~*88869~0c0~=J|++KiqJe6CquLN6jzL!FWIMLxF&6J+Vr+Ucoto5UHaK5 zWKOZo2PqCv)h9DdGmzYM8<3)oE8=h<)!d@V*v-4H;&P7ru@^Xa0tT}?aRx-@`a;tA>eAf86?Gf#WP0R|0U@kf!;LYi^yQGmP@l6Edl~h3Z2nfHB^M10&xd<(Mlohzdqi?#ci3mmyKHDC$6XAK4YC>Y zjzW#G=l|$gxgB4{eM-wgw*V85#`LQs>;%=_;H{5MI3ir%(-IRVh%M>9^uPRZbkc^j_f^gmJLf_+`;pz>;R1$`W%SM; z@{+n3xcP!W(eMD~C+sndg$X0JWWf}4jrJk+39m6`Ri6WqfK(rO&6KMI=f(>lP>1OU zlXyRbf64(;$1#A3uGaV+pgoLO#Ud5I3ewvAAK?9g&;Bq~uK#u(3LHld&n(p>fm(*sYr-%~r^AP2c390; zMKkhh!hT(xb8q6>F}{02RZOv(c$`wmzb=>*ezMxw=%vbHz2ZUef?*-1?RA5BTo!up zyx3ZAr$gDa%Kg#$HB3j2zt_fq+e>$zNE}w5!p^5h~FW==4hag*(0=~WhxP8y(XXL>0r&J{;TxS9Vt}-0%5wF z>r*cX!~Oby6WafWqy8VEoq?U5<^LnJGcqwV{4YW~;2`7w8=+k)#+b`-Yq6tJ0yFvl zF!oO2m2_RyXwtFK;f|Az?H${8$LZL%jgD<~Y#SZhwrzIM!N2?c&iQZ7&AF=Qsa>`9 zDy&s=%r)j1Htzu&ZENC1$lC`?{y!!RI1(5-+wS^KlqP#hvGQgOeUo>8pF9U5vWz&@ zm!E?h_nnAoh(eD7y#8aj=U($k1&Bgelsw|`{NFWVO6XqQu&wPv*A7YA^qw0=fmKCPGfVE zsh=%p~Y1x{gtd*KcyR(S!7uF){r7y zrlV8dUUI-dP5n=hbJ1h}Ye>O){%xpUcEQ70XSK$$c~@ahbirF!^-FP3wFfyH`(TpF z#MNHInAF1p7d46L1Pgt(%h6u;RGClYm=uEA(6@PKKoftr+k)r36x`@>4B>v6Tr%`F z^l=`C+IW;5EHqeKsw~Gb?SHZh8c~)GWM=ugof`G}@I2up&KKRK8F$V9wS+#UROR~b;t$K1sd{rQ zxZWP$>Kg2@F#Td65pjBO_lX9gAJKXWznhOhVE)VLZjCT-X0K-(lb z50P@mVtEs~>AP|j_9?nU3xQ*bva$3cJ{M57{bF^k09xtW!uW_g{dSEq?6`C6WkyJ8l$ zW`Qb1Yk?g=0V%a9y5uqrGf>Y8CsLHWr2mQ?}xIGc;zb+(9RFx`9-Wi z1V`qVCDCPu<@&tb`sJF37EJ9=3w&HX+@$J%%ty2fPq5Jmeny!$<4vSPmRX&)*QXkM z_34mOg<1Ie`JhnQiggzmN1lH_-|XHWPzn1mitTM8Ivg1)A$?ewM1Qo@qG6xMF>YH!onTivH!#2ltLn zQapY)Z^DnR5OkuC>)O<=0(MfPy{#EaPq7&t^MnN~V|OP9xs%BzOeP_a@4^A2X~p7$ z3}H8pI{#FE@=>8EK?nWh3WxC-`K;lxKUX|7&_ykSyv(%@W5!T;@){=EG=Gbjx;saG z>Rzgdd8N0Em$obE_3=T1PR;Gt_*VQseW!!(r$w@5iC!}Y**-}eH*A6D;UD8c4w3I#tE6&vjVhCD_l+-;GY4{~ zXZp-`As>CU{V9EI&uc*T!A6JnldvClqdR=_;>5!k9))j@zN7=B{{1`|v*tPdrfJ7* zfo)&k5z6mw_)+(E`GU82J1sbODz_CvJE$4w+uLWwU9<1*b~6MqFDF|GqaALh;j^A54tf%`lVoz^>|(7{*&-AOtp=&4 zB#SFXrX_U7i|jwDB$?;bAPO{o6oiyWhuZfQzG-pBA_kGWp>~~X&BK%Dj40H4pSWJv zy6=c(X79yM{=pOxCvIuTKj2O3+oXHqjq`I$lfO&?7-+cXKJ!bSJ+-)|DU*lt2Gw$8 zYl@cOyRmh1O4H4cdxzTyW%zIr;oQI${}jb1TX0IfIJaA;EGJNWJ~lGtD3C!-3RUWl z*Ty>qRPozZLoGtuyc6Js8q!b#ssoOQv^bGs4Mi}eGaH5G>2SOigly{VOXWN>=?8#>(TsTVtBB%aoXD?+{W7li(Y!>ylU^mqB$Bq&~>N?PVb`j-NbNB1U-HWQn^C zMb3ash2F*!{x*dpOjV!P1o-`;aooXnX4d+VxP`XfJ}{0C5l~+ z8Kx~shj8Ko)V#|%L;cGo@~I)`*kp#cIhKqe@^!bCf*uK(dCuct^`vM)o!0Fa!lHEH zZx18l{gvSz=E>RCP5YFKI*-T<7r(>wy(O1w2j%qfPDk~ z1`43Q_@)ivdYplSqcx`Ph_WQ#;4;X*j=ziziU%zjqS#84GVrjY-?6H;e277&-u5`1eV>0S6v)&NGX zT3iJ_<{+uNc#^M99!`vH*;wPDvqnI%ZVrn6*C<<2ac;W|UYq_i@VyF_iZWSf&dV(u zf=X}QLj-m>ZGN_wc<^f(i)N*we(?^vvDLtz|+{ADx3fcuqKo8Zj(G&G8$36!z^;tM05HRL!dr|IQen{)CnY zY?kDlPZ7NS36kfe#dC}ruHeO<|frttH=_>b2XmCjDSKCTj19{OiQ_K8< zSi;tQRn~E$^gg3%?O4N{Oj*;*l^AwbPG}V0&$(|Z-PM=bm#eGMcG1w6j!x4S>6KZ> z^O8Z6teA9~@LZ{@X9o;y`FagMNSQ1{-Lwr6x^=8Y%l;%J{xWhx0BB9%o6pX>pFJe# zzk4xMEe%$=ek{Zt^@y(k#qxF(I@pQt$Xc25;OfbZQiCjs%x^eB~i0GqGa&);ss%U zS!9`gmMJGoN|}jX%Gu$u@ZLN?r2S{Du#q?;9w&W`%i%~}w>V6260nx1Wc)BS1GTmo z2m$&p4yYC@$DR?k$>q!~+-iK~!jdwc{dkaaW|=bCQ~vmT(>W8J=+(2}Eof*aq1us| zuVW{)++*#!q`O4!u%weS&`t}a2K`{g{&-czt)6iWnsx~(mLBWBO@?0T%MT#8sKs2j z=UKkHc+j!5>f@P(T6Snel9jUIco#<^1cEe<`;rkdYlW7pSzUjEMqlCF_Z12nh2mvp z?W&CkhW#4_i@<(nAfDL;mwltC6;n)Z$Pfwbvd^;d?v8m`krcUs$+ZW3R}weT$EH?l z3*q!U*z^qmMU`b0_tN_#+Lztpu|o6uoSyzN6rJYNpKQ2jHO+Syz61X9`uq{|&-zo#*?x%h?j_mLhUz!q>dK;FB?6m2zHwx zZXK!{{_7Z0lbx%F?O74pOHuA$)||PH?=8nTWTtY+IMu%y;8;toO4R!MG>}Gr%(Q^v zA)Ge(q|Jr!qd%XFF!1-!5K6*FG0u*1(Uy)(t#?M2MM!pOVih;{1COyW$o2Pzm`&QS zwuxcz&7!{e0ELiBjwaZ}a*BM}jvO~t_QQVpxD~%d$g|g)l^}H8<*B3SADE%)3#_lyo*;i>YzmP5=^ikotmQdJ8M6ZZuz34*1 zkfRvkx~2nWwde+Zl!L0}y$Uf`DIVU!@9(uVE?~(8O4I8oG`(1CY*p4pij)l>jo+Wb zbkjY#aYO%BzlAr*DkMG_-v2`NwumoHqGfo*d2KW%+vd^8-)>p5uoYANN_}I0{LCayN35JC&cg+V=~ z{J}@83b((qWV3;1MGiGQp2@NgKqBWtY)=WWDYVZz%oG_Vu{%VcpemTvSI|X>Khavk zU%D>U-g0X?@U?xs8Q=u+4~@S=bc+Tu4*;6vWW|?Fh>=}zzWjfuf5xS;fFaxd#hou(Ex0bn&0R>Hi6jrOh z%PHEAET#zmZawzILuh30?2POsnK{|ZGwgr$g(F1%V=)6Bk0kX%UV{&y;zOFeTA&sG z@4Lj4&NF*hHPyFNpmJ>lenv<@Sx~llkJoMC$c9W`iFrn|&;sGw@|G?_wOKK#r9$PRvWIB;3_=z$jquJH4Obb!ufOi>QW?Ji4|ij%M9S? zm-8-(ktH=zU+0{aemXDop!I`U4`{wrF1Leq%eyJt&UIwD`{18}m{900cc??0aP+xM zZ=zT+ucg7^Qw?MF2~O!Uhg+(NEis5%f9WJ9>6`{^7b;dFInHn=24jTmVy2Ksrkd-U z)yb;dx6)2Mj+R|uwEgl(LZUAaK%9fbP!5{U{afNqOUSLMQqgVa(JUggRD=0*X=j<; zIy})vH{YR^Ncncpk3|OEm3U8+%f%`urcFYY9rH)dpXTzb6gdu238@ z?Q$Se@0wGOZhO2=0@Qwq=$s&8Fb8v+!MaqnD;`skgf)=5_lfEkB=JaugllUM@HeXN zQ)vU%2EK-!!hQ03m**m`EK zS{fsUq3%{SqK}Kp;Q(ad;ZdfQ+?k}OyQ~K~H)d@uh1=g|hoR4+?R;qogkPl=le%Hj z-Q?$mj*CD@F~O3WXQFS7v7|F;VS};c6#xP9+OVw|8Y;~oS?Jb+d(1$~-?9Pq7$1X^ zB3#L<3u#&Fqu9z$vPr0N=$HLNcrsk+Q`nT!yO8+SNQG1JtUyb}obQ>oQwPoEV=KS# zS>B#XE*h@3AP^8hY<(k=S@chaaMv^#Vk4@ye-aj^757J2W`2c<9<}+hk?J@z7dxK! zK~~NmZV5Go$s)HR=@?&Cr%NtX6L??$$V$(3)kafPvt{t-IUMa{mAsHTn!695f4z}0^X2uM~H|a zUI-_Se8Q%+7+z_I@p{`_k{AHC&7@W?8=oS1gN4`K)FDW1*b z_x0+A@XrrVNE~@TRm+ENFroJ|H-hKQNnT3?jTiq~3pM(T>~efLKrJAA_M%tUeo0F3 z2hhamGQx_TpdwCjo-il(QVQPk0?0smTes<{%Hg(sH zG7gI}A3bvS|H3E5JwcrYP2{lO2_Pl-(zI;>VZc*Bj;1Pa|BxoeiPqeZOmTv*4k^*!`6b~N{5e# zJ??0;<(+9looMz5B8ir(x@gtIGG2mgrB&KgMifB~tB7HJX@L*=U zC72>!^9DI}P0?scpjflxw|j=vpZ?|-N;Zpg@sSJwHJ5AlB~1~R+QZ^;QYCE71pmJq z;B?7u)MVV$2C@tG-oJ}nDfCc#G)kI(nFHQ_6oTapP6Rx;D(o{mtK}r?NniTIx#c5} z@}gD-bra$G@8dauam}Rkgl8+uG97VGGUpYS_?LW62H*_;!-PM zG>)nuSu;KfDPk^752GeQ6uKzs0yrhK<~kZOh2KK)DvXnGEiAhWAAZd9W9A+hk)gD? zlh_dO^QOp&q~BCX-6ZX9`_L0%t#z zFhwSie~eBZclgIMYAp{izL=Vz0wwEeoatW9bIfIJIWu~n(nR48_zGe9fB_c}LNhEr zZ8G)fpe=`kw6eoykVQK$KS*jY(eIQ{V*gwPE!IEio5dp%pAI4C3E=lr1EFaKwX*|$ zXYe_+OAEP58PZ%TFFTd4YA6Qc9rWxUNZir)C-H%7nn1AP6AMyAt7MS&wX(@>H;Qhl zID)1m+1qf%v=8fZ@o{ zz?HTcLZLvZy{8@*a^6mFxSNknquG<_T%@664$C%h%Zlvw-@1F2G-BbAW3tj*#2QyX>gjKc_ zU~fgxT`I`kc^Uf7@dPI{m8l!!3%V+0;S|$gS~JO-v7Nx7#h^HjW$=7>oW`1NK^=fqayl zGXzc~bO^G2UswtTB`E|mql|K|nAc5*^%#1W7Mgo3gyJ#j++{)bz}zY_hSH^=ij!ga zX%l$!c|P+mGZe2#i3jeOb9aHKb&wJ}%aG8mIL@ZQLQ=is(*r{D4{YFSHFuQ{I;Db~ zn?V$+WHB5T91E;X13!UT@pl%EhM$zbU)tN@<@jb}F$zcez-^TkjHYQsP@O!gI6z4$ z5l!;Y8v?mKog)#_*!jKi#FjIU^;1Ku$3GOB!0D2l&>x97!sSQQpt}sy(2k%xBVfI& zE0Q~jFAtBO*;&*cwM$Z3Xr9ohlqrq?6Q;lyJ#3f{dL}yM4+(!~O!)K(_)+8e7N8-1 z06ImW#DDf?drB^zd)OP6qt^OmZBp~6EMC#E5*vJNFoS*c5XHXj3$20piG_--(yi*& zB~6*(=6FgylW&Tg%sXd)_1_E*f41Ora;F}P;4X8!_zK(lc@D@Cre*TpB7BkhwrsEA z+ha7!M&|MN23y0nGIa2ASBE+Oi}Q)U<_Qj0PXYG|ZKqkIpP(t$Yw(J0E{(k}abnVY zarfiRA6cz9&Gw+Io<^C>H;JHX%gv`g*U}*WMq+g5g+OfMtuQUH#I@vlw~>uDhH^0D zS6?v9xZbwek18HMJ&4{L$LMlR z2glBeqH4pl_RMhjx;xL6JFpbSSn#<_d$PYQ zdUnG}!8eRM521)5gGP0uONbzi`ZHju0JpEnIl*M7Nb#CyVfxWWkVm>J%L|Hx`arn0 z>F2&4+fN>ah4MuFfXaP4VSP`b6CX(y=y$&0vL!z?TI^Inc*n*3Qt)iUkQ`-bhnpa2 zIQvC62L97ML{%Xvy>S%Q$|)8&HiU3}+nmfE9AG+y8bEabewyhBbioZFLWssA%1+yd$xD<;>H^+iCC&|@H}!myG4=_*Zx`4}0EQX8VtDbolGZE_<()mw zP@o&0*oU{r_Pde)ZtJ`T^=8{nL&*HRHK?^83hG79v2e%l{x5=gx!uz~zY{HHk{vn< znXVy$>H%*%;_pNFZDT8voMO^Vu882bf755zQGur2oIsvvm45d&4thlLtx^PPqjj3N zjMp=k_bWfNW8)9R@sZWjU^@%K(iq#6Cv)20AEmmC@H6;23bsp?*>`eKt(@ziVlOOr+P6Sd9uwwK{ z<*OK*4?awmuKu`+lxw6A>26FxxhJU-=coH*?~ANT`X{w72dUB92*X_l8E~B_r<2Ru z5I4iNY@r5Un^N|010Jrctc=nQgAMz=zD^Q72_bqeh*w)F~stoJ?qV| zvO7=pzFE!33!g@IK`|Wo-2zIC{HYlxVr6F11zZ>|q{)y1w(DdD_C?(C;$Tik^q8?x ztbRL0*KBT)({G(hO1jd^ZIX{1SfR>e68*LtWV9dvV}8Q*#_bu%KuA zhQk(LS8rK*>^ur$(M!!G)Rup=%MJ1e6^Rs(4LfG;4Yh7)uT!pHf<1I7wyqnjO=X
{;S^!;JGnPw=w_^^LE%-r^&$4$Kzt<$4PQ0|J$Oz93U+d z&GYfrnSO1$8ZdbPkb=Fh4o?HgDU-t~j*{oEx{OKhP;S0lZ`&puU+IZ6j3xFH;1m&M z#%>!K=P7ZGd-VHh@*RIz?*HTJ-!R9FJdMx&#wfNy$>m+(0OUS{;kV$q`4>&Z zi(Qn>-ms~7_?*;7;Z_EC4^pD!0jWiJW;s^m#;({|n3eB*=nSH&Of0H2mKn|Ng&y@- zb8W1uy%yBwZ~2EwI5_KQgdAEf1}deVc$IUSA7a9fmGZ<%pvB14q}^9k#0r>tjFcoQ zjGuhbGFvl8w))i|kLygRKl=ib8b2bN7y4MJxQd;-s~V3{<2E0AyF=adIy{&|Ttr4kSmq zpsV(esZi=#~QXjanU2d~;Mqe9#)O`ld`NKw+18kqsQR6&i$*pS$N z4-z1{GbjKZSz?bXq{{RsVyQ`ve$ zh5hgmtR4AX$s(I!#mo(#LN3}anGYMxQayV4@E;oKtfxI_^*LpGXTov%AT zGlCwya&jT-6@KQKDGfPXz^t$?T(DCNE^(h80!wryHHV{5iUu9A_g zK&7XBtD%g+Ae^yxV2@GKZLI*yAbbNwlXJ000S`FT_z)1q`T1ZoPM&LFel_J#rA z^?9Q6^*9z#REId`eGeYJyxN#f5YZ+#yBEmx&THuAZqPh70SbJ0%zsbLb=E-!-w1pV z^81oFqAL!?hfPd=eWebZ2iDbZ`s_RSaZj_Ee4dmW#CR25V0Zf=tgN0Rk)J?hYx}5T zV{+^w7+qQ=9V6lb)q8vqu3-5gxr3g_>}X`Z>u)F#6chWFhM=Vou8357C=ZiO;t~%s z_=s4PMAM7NPs&dyX%$OD;l@F7g3MSr_WN>6=x03sCNyOpwjp)q!1gbuKOC!^XW>>q zQ565gU-?rARtnz5pU=Hv$e7hz;~Lj7zBDCL%!%w#kQ{eBjP6;mxuhnWS$Q#_haN_= zr}AlfQN=e@d=oGEz88LblKcUoy=-RtxYNNOFH|)h^o-`AftHG#_xI&FD@pMiFC znxZwSn&TXJ*jtWq#8BR2k)L%!GNT>r3XvwC?>jijDvs`IE>4KB4UJnzH`8NUeU*o) zWhKYw0q{VHRw=Ztr2f9g7hV^sJ&^GflOdnK@ByD@p{ow203fi25YcrTVOz4<*Id%3 z?dWG=@-UNrv2$CCrt&BwpN4NtgYQqNXip{2-N1gk&{-71_0VI<;g~ zx_JHDfwv>f++hi-go0mgb^DQ(d(5GwV);?P-ru9UHZxw4=X_NeWi@q4d>R^U#m(A8 zC-Zy%LZrY(2;e)3<2GNfdyf{aK}!|Rsg~eYk|_F_mJ}7tl|X?aE09tsWNt~IS`1Sk zz?39bff;un&OFqafz>xEiOHyOgV_nkz~;;I27X%s9k=_WVsVVc&*~OkOtz5%TWdQP zri!3u%T3VeIaf)p5eGXLpGk^d|aI}kuXPk*`bJ(HY}!;##ab>B zSnH(VCjlsi`i2E}6wN$U6aS-p680C15VFsUo~Hg9OeC<0)lK>eyfkfd+>ImcrrB!M ztSdH(qX^|F4I8~SScN~hsgkVtt*bV5>P=!y&AO+UNlpKVWnfN1P1fJ1-r&^m#*Ryf z*>3V${4yJ>?P!J>YmG%{f+Su=jaD3Ni0H2FmIg9z8r=0IEz;e0OEcVWquuh4-|Kj> zEygOA19=E6=WAN*u@EFlOwr0DKp_-Jvy9UNMRQ@C$)v+EdYa23XcIG}u?IUPmP2EM z#0K5FoE*o-K4=U1RWLnMm1~CM$x4#ZMO{>oz>kR-&X!ov*of_+T*)VC(QY*+?@!IX zH1O593&&MV+-U(@>urKUbOR46MY-MF;M%?rQZVuUv&J`vw3AnEUiGDr`SpAaXqAF^ zvjRg#MjsrEw3=cUZXQUOfqYM@q0ReT4ZhL4xQ$!c!Dqf>jnyNa0TZqdcgPvW+0*KuWVyIE}Be4kc2S!iJ*xGzh>F1 zq*sv!cWF+BWL92p4&Q1@Ly0^)j+_4yyoi77G4ce|?b7-HWQP64r|E+VSSh?19_Eh!SH>h9`ZQr9?4Dse5>D(X;o;a&u!T3B{2 z(J3{MS*Wb1Th`a+@;PQh#KYqMU#<6f*zC@V}C+-{=@`$IWSnRz>ctm?^RpeghL_dy~^(nui^gFApTcc6IFfe_On zVwh4?hNUzdykdTYQk#iZf)3q6Z8n{d7r$*`Wo1v$L{m<4w}LNz|B#l7vrehMAL|V& z=MG{=w^%RK8&mTQ@V9xuM^cz>n}kFn2S?(hPFCCjeb7?}Qn*Ter zw$DF&&iS5?FY&ezMJAs~GBd~#GceK1TZpc;*VY&GNj<+bHd1Xf2YIHgkR}Ju;)ew( z_YqPZ1*BO3n%)@}gc?}t%j8A%{S+%S(O(NchjMktm=jI_A@gd}3Rq*Kk|TA>-CN7s z%?qvupf{0eh*TJ?LPzgB6KM=i5mj%vd(s6~XcmoYehMip{*4O#sfnDIhF2YQkHloS zgIbC!&)u;X7&3UF!(ffMxh=*TjE*ULJdg?ES2mX_N6uyKwPd3^#l(}58PqpaFv*M9=Lrvx?^B8Yq+PSKv{gK^fQC#o$nt8;w+bB+Pt!}M9i=rf zy`K^hAX!{1Rj!MoK`0&$GpN^J-Q$$#likrtU;!Xb-gD1WDHJ*Ws%M-ni-DtGSkO+H zrh^Y@5gnPUS8!){uW+%^MJ67-SrVClUSe0)8J5FI!g;x?lFM(Z>@(44AE6Pj+xJI(xxJB{4BP@I+a-gWTqgQBD$ zWkI*Dww5pi^fA(+nOd&?4CqcUdCZ2SrdEtOv?byj6WlA}xxu9Qu~W42CJIWNkt|nO zEv71rXl5I8HC}w)#g&y^kdvv*b?pY)ty0r-o&vIU${w6wODbXKj03)>5x)e#BccEv zo^Y(DbZxApcga^fdtZ9VA=L>L0d5D8bqSu%EyN_(D)wbJ z=KlI=?1{+NbL2C}x7)-4S1AgJx2xY+NoLvIEI4hS7@)l8EbI+EURiZK z`vo$fcW;aK{SKXCtq=r`cA?9AtKYR~?%iMkUeAfG2L(+BYE|r`UaF^wR?P-^7n>(TibeQ zn+Tg(P79qQFp3d@D(FkNgfq>l3~7MNyevO;`>1!o5pq{*zQ|y~&9ix=K)x0{r$g`W zneYul%yl?sBe8)h(*i)ev-0xi8*hB5X;ABZWe2}ujP?xtJ2U{V#@F_DNkBmp+HXZY z`BPnda=VtelE*>D$M(gaBaK8XesJz411DB!2C?eRZ^4z?ptGruck-?+B1ox z&#STPc4Rd>ZY}>L6Q|2+AXEAsj$saHBfu+0`>Io>C+3?k2neC0O&2+OX{nLlGOAo8 zR~=PP(B;IoTaeNDv4b`0AC@SrYddv5a?7vl1+Spr6<-uF2(Z>$u+`$myA&eL`YPz|T8G;gV%|6^nG&$O z^w;*ZjCgjn0G${Y^9+~X=-prrtSqYCk2iM^cL%}@yDemRGT7u0F#;?iXAU1JYC=96 zVPA7cAaKwzC*e-0T}U^TBaqo0McjXB;6H6f6Ry@`UHxTv-bPQxi&0T63uHZA7xVne z!!)2`4n-)1uv7NPpk@ZnP;Z%zBdOnqmQZt`opZr621NGsX+UG0ea^!vkXbGA2Qj`$ zr9=XY*9~q$#f5qwg`^?r`|+XutqC{f0;;`BX$jaHa3l#a-(AtD@cQFwerR;$B85MI zL^MRBrb@P{)40Zn&J16@Q|bgxiR4`#e|NOjx|(~>o~Iyq4b7&I1HWp2IJbVrchSp! zE5f=Y2PU+HM{GBB2INWht7QK?IH}&g^JQgg1V{4PydMZenu!m-N5x_Ilb$-bW8J5` z^E1M}hYhC}epj_nBFq~RB5RwM_b>OoGhsn}3N8{5%S2o#ctl!` z4*Nq94fz(V(aH-Jl`NXbNNHeBLMqTaFj>p%H*W}Si7I>A6g#D4RZv&WVlz_H;;Iy- zB!DMImd(s2lX3|fX-{UT-ID&|8m1m1$QPj!PZ}T}aM*x>$2KVHXGq|!-9PFHxxTR) z9ZTZg8wkLIX1R&%XP};VRA?!%&6?*!lD9$E+F1yKpSv`mNkxR9(ot^Dj7DIw8tCTF z^q*7rdm*<%R#S~Du0^D$^B)iF{-h!Vj2!BGl#+6+sHXOlHm3{Ls9eJ0vtlRsbQ*tr ztsY8ExHZ%gH=D+W$rDv@QHDtJiHifzk%y}L6KF%#Au~9=>4Z__$HJLuSxQ7F;Byx< zAmnh%uuxMJDmmonyK^Z_PpIAE%U|V;t5oXEsyzEqfH&!&61qadwzz@sQnvw;eox;Sgl|LLxJee(m26_MDMCLQBkV#gEq=$(V#!s9@@sf|O|zAwZ)dboi??83 z>Wr<4<%@e;ew|oVajmDcwhw9*!0`^bSk}l9&d(esm2GUF8Qoarwd_}$(%{9V?8wJ) zL7PG?F`jw&)0H766mN##N{vv7;PHL|qMSYg_W}agTC)~9x-_DlYuE&>`Pmp)3W3%uhV%dBNxz z5NfBjaiv!t2DR^JF}KLn(&3L^gB+F6zN@0{7G(#`J#MV5sK3P6B96;aWpC z-ICj=jf3HC$63gN03}{fWTpj9H><-*ZY35!R(9u2pZSzCf1udoR^-*W!{u@jmn8n2 zHB?WVEF)4oq%DHvbEwYBcY3qafS&(5k|=3kmvMGfcARnie5LF{~O3Vo+a~9A@V*h5ns3(ELmc5mBeT^djAo z8^{tQ^|oQeW@9E$G2^+TjKA!mwtr)zq%3Gcepg{y`fq#y#zFP;0j`dxeF{vW{ytoYAJ+-5Vct`ZCNakWkt`@SzX1hX^C~_h^ z+;}~u%l%0)GTRf2c!yA{OQ*oFHX^XTX;$ltw*A#@I|xyoH-eT`c(e@Vcn2b6w^d1y zwg{duBOWXRYv#gHjK??^cb@}>)`>hDXR*s?PuSN^+n%km^kex!;vFy;DO?1_RJ;9)9n78=SWw%MJ z7mM_;{rBvKSA|3CF==Ov@j>BDhD+UCQ8?G@&(ItIsjxnSBQ(fS!naL_u&v)<|t{v8kUu}u(rK!eS~$?X zWBN9qciBr#peR*63Xq%|A#%(1(-N2sd{(gd(|2F6=aSpEgX7JMPX6G{1q`olz-~$~{EXtRSbPP9j^n3Vru zEdRq?7l>uM`=|DJ+VXEFw*Z* zUY*q$p$If4U#0g-fS{C$`o>}7p&DdNL}+Q9&o(J)VNwzJBV5@7CnA#(Lu5FM&Q0a0 zAIFFyJ;U}~T{^eAhG=q&IEaj%J(5;5uQ}3&4#bndd%(vZ>Q`O{I`ukif$D%z@IfVU z6TbAu#-WSnZ!(6t6SVUOoM!>*jiO5BBDT1Qd_#b?8T1;KQ9TwNj%J#0Bo{R=5APzk zJ^DiuBvsDu>u+h;|0txi73Id(B9Db?L!s;mVH^>wUc-S2T~>f$cE1@@lk1A5CEe=`Q^ z#Hp|lZa--(Z$-UGut>#`!9yk7GS9s(WC6kEp$A&3Ll4k#!P@=A66xyk3-M&oIFB+t z>tM z%c&i)!$YmlMr>s=X9OFEf}@gy^90dV27 zP4u=`O1V}OU%It6S{__tO~NDyUJY?1%0Yi02s!)~ecJ_iD5i7q)F4FZD-a0gg477u zYm)u`Ny`(~CJPk*T32!kGu={>yL3Ag6cMNNfbh znmdwl1ZGZ`dO=7|k-!+`QB+sgkzl8UMGqeJlc*8BG_p1kJ|v7>Is84(dP2{WxT#E08W70XGSnv#Wd zz_j|I7r`1mO_3OI$YBRLD9!t8yPe9VOV>1$=Iw&_qWU8wOWNx)&(tc>`H)E#;(vT^ z>py}*<&3|q`@d=9a}a9MrD5+g2<`KlsWOaK`@lM@-NJ;X)5*VV zx_Xt+?S-8b^aO)(on5PDhEca8?w4oJi2^1F<0lELwb~o~^dZE^ME?2fl;oekvUdrR{JU#=oyyDMzltQ~ z!-MOyJgA>K+ooh z%e^v#s{PN?*N+4aT}Sb3tYt!#g5u?@TII`Sb z73dUQF8bv=k{x1Z>hT86&k{2uKKL!wDCv%7eAN^dM$3mB%)mO#c7#lrT|lk==JZnM z#3DX4E?5m4$Jkckn-#*Ju-!^Saq1M8KRV7$^V~7L@B#UUThC^{n;E}rN4j`FtFape|z<9;bZA@?`G2GDEM9^4TJhOopO9bo6P)299!rga$ zb@nXa(9_LWqx@Nnw|dyQ4lp7br0l)8$C!khOuV;Y0W}stALe`>;k-k&XFcu;st&tB zg$cuHlti4xy>e87G|Jcy)DJ9#^QuVolJ-yf9<`STO|@YwG;jOGA1S;j#~tQc*+2ks z1~Sl_BR48A@@G}qmX5i7w0NAzKu8T=z1bd3*PeJMjLwT-`4PMr&=Rt)dL%;nZw!l# z^BN6k+v#6~UNk-yTSeLmF;+rbRLDwmOKGy5ozrEcm83DIu*PYRT3u& z)&zeSIV3(==lw^geGwV*1hX`|Y_}UO5ZKA!1t_L%0%33zIxu zRjjM~_d1|@JzND|=b+BIARPU3F?P&~ILm`y2zXkX(9OA8kDB>5S?D9RV2@cH8Aoa^ zE4M4_T)Y;#P=5mf2aPQ9+=>N1ZGuf|XDJsdJuKj_wFKT#^r`-&j_8N?sKCQb3O1@% zp1`T}5e0=~rL+64^IS5I90$*9MtQ(!R*gPJ#a?(RY`^o?iBCvv>_ND2M4`HJy6z~t z8xfO|DORJDO4*Ob!&a*U5HdQc6O-Em;5nynq}#&2J3 zH0m?n`ZaVa%mb{fWxk~TQR!LSl~L&SjJdh>3H4A+8QP}yLZaYayZqgjnP1$S09#`0 znOQg?xTO_p5&(w<)^9L-PS9|y&v#r@WfFjgAv`i*_!Kh<`frX!d$iIs1y-ui{TYZ) z{gd<>|53>-$mP0Tfyz!pK}2qDnT@q5qri8(%0E1NgbY9Z8%?l2h7ELvtz0uNVymHgZOe`&8d?!vm}M%si!aXl6hxi9_QB(xQ>s1sk9 z3ZP`T>waf`RNy3tjF5puQ_X{uwSWUPP~%Bb&1CnBTsri@7BL-6;e@!2xPY#5y{k5T zrntQ1@HRcz|5Ah#;l1Z{kz~kDqtmQh!8rc$q`l6|3w|_R4kZPsloO}aI2yC0j*{{6!j2jN`}3}5`FC$ zP~K`*o96f;2$~i*o8cvNwc>esBot>Ufl}c-8az(_awq>%;U0xzSU2Q&ARcy7 zwiRx0VSBB<@A>LYp1j723JYeBVnZIQY3Q<$JdNl@WQK#vRosMyp2St-% zg~xUJG-pODuK8N%8s+1x&3jPlLGi&EJ!77|+~>Y|5qX$ZBYRee!6(S*&Sed(jlWHa z;si{l=fT;`_XZV-lwZ(%#?oLf&OccL*@n88go^RUoF~Vu#3m^jOQ@v{xURn5 z{c@q(mB|FuxrYP$Rik({z9@PDDqqSN%h%RDRo!lK`NnBE@+^uLA_7J(jRe23*bAw&EHcn# z$y@?QNn{t>bn|{MwmHMlH>q!yD>#+#$~u$R-M;`bX`IE?v6W*Ln+>Cn<2qW;f=>p@ zMY)_l!;X@yxLgk+S@mr_BaIq*0KmE?`LrLTC10=+Czli+yEK@XGc7P`TqXA8sx;1v zKgM!>G$8d-jQm*T+zJ(hX6 zH3HP360T9#K=ZOj(2Cs$Cd(wmBHUYS=<>VP=AHX&{1_GyFG#T8VD5%* z4qE>kt;t~TDJNK@3V^h zX&;Zc(s$e@t*K{mE0pqS_o59{?r_D?c2*z^YR50EK|sG&47p_7Ok?dEHTJHkIl!DL zXEz`t61E`(_dADrVxjT+awF&IB!c8P1w2P_{d>_dl%2!|la^y7itL62DMFA{kYW`& zVi3tOWPV5Y@t+Rj=kJu$JaTy1#ww&!RoiQSXM6~=gP9dR5}w;)IEj=J+^ET$#VY`` z#t7x4OgkTEZk;k4&{~eb*Jrs2wQ=v_#yl0=?e-jOglnd zfYmvB)NxJ65RBp=0SaO&l+ZA%!!B?$@VS6r-Z6F_Ij0{}^whiP7^I+kd653HY`Dk5I>XG1j()D*Jo8?|*c< zE0Q-@atsD*t4I9tQH5d7D?F8+QLHG!Tn}P|bPjZeY`iuoAaN(SFy*&$8!h3&qe-3z z;(y${pk)6-y_q+QfZe4CkkY1$o>0C!SE#o9_-MZFD!Qrxq^3I}bw9i@QV8R=X}SKY zbP-ggAbA_3jKf*6yKR#Glck;z8>q>4Vz?E2%UAgEzqYBuTvzx+hU6kWaBk%MNAi6v zj|QiGQbhoW9;h_?W89Xl7^UrxYm}brl@NnGEDMiWj+FmIi<&Z9Q~}A`30k1suX!f) z#6a|bq*7y6%yKJK`N5zPW3!U0H4lY5>`!S{<9L<>e}5Hd)rzGBmc_d!v(1#0#ow^^ zSFTgo{xP1@0@}W>UZHd{w7c?_CX1>TJ?E4ZKRW_cDn8BWMJSf-CbF3D2jS^OaVcr4 zU4p^T7;w4R45IT`mEk3H(n9me+Q?GZf8@{->l_$7@l06wGv&ch1<5sG8&I*ohtMXxM1zPk%5@xRU6M_weNBKYdo@CmVSZw(LL|2yXB%rg{&WSZTs`tXNkrGrt*1 z#>YBOJpJs#r~OlxPyHeD-CpX2JoEhovbP_YZjzxxTwam=lD!eR%C_`t^&M+EG-35l zjO|)wr_d^p*?Vz-Avi~hlMUsqW|!LZ!!UVgw2Dm-K_|4~KJ2k%QGeb>eLafQX9B+x z+O?8(CaHD$4fcvNE(|3V`xNozz(x4|{61SwTqhPXJ+3`?bHq?!ljK=L0NTjk_P@|uAcI6R088K(yPTF8!HrDi`osdS;chW9H=a4B7AutlmXsCvrkyQoc&<$$fS$kLjMYK#+6g(AIiH) zEcc}xE#Ft5`Or?24tq%ATwObyQFa1YD#Kk?9C{O)3q^?Z)i8kygYPqO%ejVOM^r|DAb2KAGmTCL8|4_M~)5o3hUIfxr3p@N%Ye}^FLTXxW-&W z=KQ~KVkM`XKaAG8PPHg)$tg}69N=2%K|4J_6mhTriNJGs z6GDVPK{TYyZQ(-2nnf!zZhkoq(Pj)QTp3-m;=%cMM(!&Rp@)abj^K%|b!;PX5H?Nk zo6wh08x2gROSB*AA-yLeFSnv~W#l$KZ&Ow%%1blNeSd>ovVJWD;KzgYHg-pS-jsvi z`AbF~@fV^v5Cl&F++No?;&FQ(L)jrpG^QvJL(Rm4e%AHOa9BY@iqQI8G%<*oC+XUI z9SIV0Apt*^p=!BvB#G?>iTS=^`x*zGF2IR}(eX%K?xiuN=#(QI_2k)SLQg_f)=y~S zp3}h(gh!s1DuNUWOn3odx$OXF@=T|0mnD*QHJ-#Ab&N28A9pSU^XEVbSVTJUf5Cs15TT3x$63m>&aVAyC-OEGi|FAnRyUxKl z)8tiTwFl=31?7`pXE;qsTyny@t9VT)Vg*qFe+buw8TmUMPRxI0U@# zqYS;;Q2=t|uzJQL=ZbpXWqCwzG#&9Ioja1>|M4x*v)x=^i>(?*rgN*RpWNs)kb=9N)VyqOMX0q zNFbEx(Gi(=n0^p_;1TB~bY%X7b#81yjEoZ~BW0Jd`pM{-VS%kRy8vUEGp(U*^-R5B zVBsRh>1>ZF14p0)gh|yJfKCU+9R*7J{)e6*d8241(Ti|54Pmc8f7&&xzXy@B3K5cR zvh1@QH@??N&(1gaT5=-g<9Z2ilYwE5P&Q?f?&Yc@V8rM_A(~F~)b?1H*Iql>1Da%1 zs>*`Qdi>x)3t(qxRA1XdmNynu!(oFy1>(_bn)gR<7uRs1&hs4uViO319z@~-?)sc6 ze2rcK$%a=7WKdCm&Sp)tn8LW$M=^Z=2L`XOc!KiXto9ag+07zo$qvB-&`mwvat81L z4EKJhN8${~G*Dpuo~dY@55Vo#@>c!=R_YnZvPo<2tkbmb{Wwtg;1zj}N#$_tc=k1> zD$&bF33)7Yck{O;eDy}RIr@qVwv2Q!PFKe*KMpYi^FFo9Y?E>I{D%bb&G&)c3NKmw zPj`m?Z}v#*3e9k*zgc7i#4B;)gC;lJSIGY(ApM&}3zm{80~sIgs1!)}LhrclZ6pbG zrC0UPYdK7frp})wKV?_Mrv|U8f&VHR@swVx^j(2qpYdV$k=dHtVf`6rMtjpLzM>Hx z+_ij&M%EiZ%;bqn_S1fOq`M~2DZ>`t9Y)eb`&ayOBjT6vbd@$c8gM)O*r*arQf<^& z5wfqS|FJDIfX03h=Ab5tJGj9wh3X4|g;PY4PM^3L2X7N4Z0E;5L4ooa!KzpAHAp+y z#k8ILTwS1pzos)5?{}E_kTL4E0_O!xXAWAE=Uh>Bvq9XCvc#*f27gz3UTBa5(%xY* z(X4HU(D5DZp4m&5iN*Z1RMcR+t!_s+ zg94+n;hqEo*;xnxqT&sL>H`M*nv_#G3&eDPUKFmZDQ3Xof?71)D$`JNsBq$s+f+xZ zlaQ^LPl7%v6Sw#<6riWL8Q=G_#FsGkNcpZJP_!IW)}*STzOcIOd$)_)G;H&T-HKHs zKr#-P)ShX6dhK8GRdfwm&hp`o@QfoY$ZDJyv)9HYGXO* z=UG{7D!*sV(tgi@W?A*+QGNeQ%d!h6;JBkcZwC*BUY3~6hSgD>VG3PH?PZnlGTLn^ z`FaT->||dj8w;D>(JMMB>A(}^R{Db$13gRxInZ-=3BISiyQC&QZqM#+b`hU@bw^5m zBB~C1iz3n$YQZ8ynEIKvsydVUgg;I$LgA*;e`MwrtsRiD%d+(HjCBDFF9;tQ z;}uYei{WwEM0-~Fft}jT2?ZxEIT@A%tz{Wem*>#1qB=Z>q)g&h;|KXY;{o}2cHIsZ z-U6>CoE>AJ&!>4I6B+cT1wpG?6H&V$`yd>4r!E|$1z8Pr)=R?k1z{MAPO|m?J%8;T z-#g>7X{qG;yG6(}n0X}t-@zd_Kd0pmxrri6#dQMm#u3ld`|cOPKLe^Y1bxRBF?z@X z@thtf?<%`eBmo$Uks1M-^KmzBavFgx}NG^J{*gY6_;j9OH@@@`^kR zMD@^SNzoDBi8Wi|+7de?K&v=nY^dSm(0x~QV|L|SVW&WiOiF~Mo zpJ}#ST;cXsB425J1b90d2VZ& zoqd_VvcKCJz~(J$TM#>MicU9e9UM;<1!XD`vxH_2o-JHyQ9A9nU&qy6-~SGmR=iq~ z7lZA^74~!!s3&H7w6nQK?>-(`ScXgA8%839@uy}C5M8m*5MQr%7TePr394-Ex*7Dc z;V*}i`C(*&YEjv`Zgz;>yz@IIlPYfhihx9}Q-Qz)W?7Dw%Du_jk~oMr5kAe%r1#By zS#G4T2-kFGIkVtjm6;~y%*{OKxP~~rXTDI%S}n=mxJo!L)-kTCK`SzNd%Y(3VJXFs*ZA=)z;uIKcMLXc=kG#TC52Jia3h=oMqRu#(C< zM*vQM;7z)mjTGyhQ{D)pkM0S2>Xk!j}}hr0AbF-w~ST7p21>2z#4RtZ=!f@ge@4|Fa_& zW{@3yl_CCK=u7Z!UucFysL+ddcpicq2dIoq`xBnOtx6SrvB#M|a?ik={l_{!VLm^n z9fe+9bq`wRNHEL$a)`k3sDCRwHcxE2o{g~KiXPCkN+HJ|k zK&yLy3_bra zs`hk?<#VdJS2#|nILLDWWYS=CXxM!_AvkAJ;bO=8=#he?Zhqx6df)pFQ>dY_v-?B$ z(;RFrl@8MLw?LDy806(0Pb7q&8UDl72SYdxUfU$Avk~!acq&llHMKjM+xZI~3v1d* z2h~^FuyZr)mh3xN(_GMN4NrPP?7logtx?RE+-qY?kI*2bjD{EhWsL$g;Z&xOW1zCf zzjo%1LkJQ${90IuZOqz8?(@t4rZmn8v>)Ae5GcjBZav0vAJA{rRdb9J$n5OK@^qR9 z`RK_guI0(A{Opx-pT)ZSt!|^}M|YR@mu5a5a(j^hc%Dxn5p~KH{p=|ON2kS~DRy+E zz`IetX7O9f7|;P$mxO+;~@>OK@s&4DIXOl&4tx=R* zw>*X?7KEEH5dOSyH-|Y}xLL1U6!Cm@_Y2PZcIEEZ&veMa>`I=%Z*4|fTkL?1zVf&1 z^`+vIg8xU>JBG*ghF#xnW2>><*jCfnwrv~DZfx6)ZQE*W+fEw$o&N9Vx!(`Zw;VYp zlRek$xn}QmuHRbQFTalBgY1T?p#J(KW~v6Q{x}asjDt=%QS!byx&37>a4FqG=DCl0 z|LbV>7}|a}nUaT$0ca6dBZO8!Th2c<=$Kmx&tV^b&!hSf_T(GV;AyT6=!(+?ECDNs`9Ap`7M+7|(=ld&`-mZO$L~lRvdduBeX}N~(z{1|h*4 z|51iKVB4+z;vS)#_x^3z&?Q4TIH^n6C?G))%d{C`&sLjm2FQ+RIFR`x3niq)v4cTO za6@x?8+99)YvB-v2`igWzBG|BDKGEyH0lGyb37 zfFR-j%LubEGyR{+uPSRUTU{^uduguW*FevkWAL_G=VV9s6l>6 z@6WGg@E-$LdBUMHnkp{$r!Ear9n z6zB{T8I$pDIZ-1B#QboL6d66G*)wo#{HF6{>;a>C7}1garV4F#uy?XR%F-x{I7g|3 z3w120OvlMh?ljTsc zD*DQqI%31(ibY8ohiv$71{b@*PXrCZ*t!I&~J2WEv_X<2&#T2?g7o1HP*H@TVYLOz5^1r}wi(O6RKg9a`jr~8~SQ2AhP=yI9dy}1q zEe_m?G45-kK5JqEo(xrrmrQCzfsWKeihiNU*dyRrWBVW4ETUXmLT#E`n;&M2rqVa2 zTzd##8unQwKj)%-plL~;A*;Tq;xYW8{4Oy<4nuk#0mS?|q?b@bDvx|uFLEbO3$`#F z!1WCcQz8G0Mnl--E_mqa<;xf<^hQWp+;WFZp>loTku?i$}NNm`(rv;wjdnHzI;omiI)C_zgU_&FilD!HKHoZ zigf`^cF{aT;*{e)=~B64AGC+iDp{55&*6BTON%6?Mh0n4Q&OKaN>O2t_6K%CP?j=u zy?~hu2hb{CCJkeS$dBc>2Y8x3cDL8`dHRtQo4XT+bYLyz9%Tr%^e@`H#yGG>x zS}{5IY4ht~-eK_&iwuz_>aQG%a5Rd1sUDIWfH8?bVv!|s!+9jhh37=}3I|Km?eAE4 zQu`T21e{DUlHslN_`!^+%_=g0`qOZaiyrp}$w0F{8|;7q1T!mSO@IsI^w)-t?!{RU z#1=_1$If~PH3ZAx;!{ERh#beOr-u&e_9maJ;6N3Sg2Pk|6c}P0?5*Edr}VmaS;+#t z|6*dABU#R}+bnxK7(sr#OvC%+Ufd1Nw%66W%#&}8A{85FL8?FYidq5|L6&D0{S;}X zo!y9E!6LDrr+{ZI>qf8K44X<}R`vH|yGf3;ZF2|fitpUunI*hUy+~?FOqTX~i&5EK zuVz^J?9|r-(dF?Pt-XVsF{l`e@yg|8nDS+-?b9$T{ zRHb(6_Ggpkq+9nz?qp$c8Lot4AcXvGNg6gl6sl8Zg$%)uI5Td)>9aqQ@GJHfa11ib zM0bQA6cB(IW~qpHN;#JFwl2j@Jt0WFP+3up4~{Wj)@o_RktMMFrC=AOe{YKB_l z&UMmYvW7M{IT}NHkv^mXxfX5WL5!uwm&kDlEAma4f)f<76!D>-1mRf#`&KV2W1(D% zG}=r(`PHtw!s3(7ZUHaZTG>xrXt`0z)IZaXhGzjVE%das^H2^a%-6B}GLjODz87)4 zd1!F1q@8#LpRGyW@XmS<`KMcDp@UOq3fQ!QtxhkCeu&>mJGG$JZ9HxNw9-1ch*M2K%n6lf4c0%LkT~iS|^u(jT(( zSLrN>VK2c9Nl~AhjMRZTeAd+RZvAQ=dXx^Abt^{SELMK%MMg{lY<_jAzT#)sbQ<^$ zPxYhB>w8D9!d8o{1<28}m#R7Mk)R+d7LRJ>rw(P_x-4wOGW7Y7PKBdyg9R>#4BLd+ zRpviS;P|I!qT1goM`LjfEF_7J-WDRKsI2Bz5<@gT-BA+{Tqo}ujARlFXkQQ`|2s)$ zs6j5RT4yvVz> z$(5OM_Af^VdD(s_{SH-c=Fo%^@!%BYfxe+zEA=%1&}$1q*xk6^9PHR-6t{iad67xW zNi5okmNk{m*|vj{8LshpWh9z0R5`N|4KtrSb{Ri9Wn4lC_CHl`4*puyE?FC{t0&Qx zM{^var{nVYxcyrwgh{5l;t}_ueO@atq5M-3mi@Dn`{dejwey;R4cWyUb&5qqcJL{R zg6u;j(1B$4!AI9Mow}&^vDtBh3E9T;ae3T#f^95@FUqD8^kLdOtK7ov(OFS~IAm;i zNy$e66b2rR=(9xzb&hjOK{Y<^M<4{R{P;ajLX~}{Ek3fbZw3EcZ6{Q;$b-7U$_T0|=xlGRbLI*YK1~e}WMt(A zwl`(1kV}~Rh!sK~c|xS?dQpja>OA(R#6AijlG#rKNJX8#ysF?Iv5GpuMjz{?K{;sAm1{=O;oPYx~RaeC|`2>E@@=L@8<9S3^?U~ZCCbG99j*{2QQIHao|>shv^7%Qt-A- z;0K;g48(Ep@MOm(N1JtqBU_4Qb)alavZ^~Zk_NuMFaByj3T0n6t7Z=#n5#>`r0bsR z55EwA#Mu*>n4h5Pz9!iu)Vx(CK!0jF>Z4l5W4r)H$^clO-D2_sa@jPY%rgf$NEv)4KdD znwwhM#hD66B>6wGFcQ`SSo6)kLnBtirSsmC=^c^7JEtJ&LSA1Ljb_td`DWN%Hx>yQ zg^zO;Z~oT?&LZm+c+cyJVa|I0LFg)?cF7t^`*h?AA^zF_rlkVHJ5=$LZS5`B)944U zVlf&M(wsGxTuW=^2b8Ohoc&Q0FY?Dh_Op+u;&Q|ycs`uAJNRrP0B)CVhaYb*k|h1p zfazR|bGT`g zGtJ9HXlVGmZ~$43NP?+)uvUknp*ZS`)x5%BjnwsjLz4xN+zmGfyGFkRYo2o{go?%Q z@Ov1Nz{;Iqz=n>IY4_zs)sIYrF-G{$mIsb##lOQTi%1-b*-zAB5NKNIb*44$BP7V~ z`NLUq4>-SO{N`uco}UyfwcXBJr%7)tD^8|5ivgM`J9Q-5KC-gulIhgMk#Rf!hD#9qvtmo;FwoIMBqFBm0YE^WOag?kl7k(@UBj*z4}B;0 zncH^VHtL~k2)T=m#B}|{Je-_UFumVMw|aJIT@K#n9SQP^R_AtF{k4dR}_ zTLOe6y^EUu9n0C-&uH`>gsyK0YHWco&+8j_T6sYoc*2DGnbicm2aN_`ND)cyhXq5k zDL5FE>h1xwy|M>uk_oB?o3`T(uUjeEX7Lxgfp6)6`MBj2UC?}@V^Igv^BW8Uzf$k+ zch%v(l<&=4_Ccmq@B3{8M|bIven8~35wLA&Au*|{hTMf8DT(%GSkd^Q43^mVF(yoC z_%Wj8Lb*ZjQ#KfXpTOj_l`+!ELXhkk4ORMn=D!{MYZH=U=FhaDt9mokY%*eL6xVM@ zi0JH&!d(APhGEjmS*mJQUlaW)s2$MY#Yp9a{jh~eESBu2w-U|-I~Fe>f|U{S3V^@Z z^ap|}OH7ib6i3C?M#_O5`c?9bN-QDBc@hwLY4yo?>!esR^ZZ)#-!k3h^Wt2prkCnX@q0RZ6b)YQbX3n%>jvPC{OLS@q5G$yC(jsXmh2q+>`?c~ZV+X1t z#>eS0S;e$aVvb>dD4Kt+r2g5N7MoL!%HK1{E8apB)vGL~m8fK#jXA=vNRC~ZMqojJ zvJ8~U2*F~SmEO+5%J2~r0#4p-LQ;bcgs9OJ2DAymEwPgYe{)Rbacx~kX#!3{(z{H< z>AQkt3?ZNup&lX(_;cMR&-G5E9JLwv=bBo10&6_~$?#zJBxD{kB}t+IReD{C&#fhQ zyYSZ>y586F zFvjA`x%oXR%=ma{bDqaQ^13c4^-lOxhFy^rUuR$$pRSB76HxeVfs$6X>g;tTExm~o zMM+8H);XI?L&Fd;q<`)~R0%#~Gh_TkCEyA-X^YbOsG9Jm=;JDHUEFFoN)@A%AIJDl z+SBR0>~u1A@Rdz$uz3nRjAuo=2y4b|P6wxxR{HNCwXY}qaC-u zuO-X~@hqej3WL{h^Gb*8GO3z3=C5(zj^F%g8<*m}@FgBqL&e?qCl|J}=?IB%o~efM zu!fZ1HV0fSg^&#*hxVI0qpLA{e_d(L|0cj4w(63fSIXPbzNj0RVG+n8v! zQeAF>dY*PWlVmAN!`HKzxx)i`@jFLtG&Cm*wW4*O}MDp z1mJUmc8|V8PQc!d{wl#p_6n^kLhobP(Ztr2{LSH<^<}a_vJ5m1awig5$rF+qd73w- zHqqx{Y3ACrKC)FX><`(RmLl>Mi)EzA3ifQ7xhxDlPa3EO#NUDhJHfKwUTmLO2ZaQ zVu@Cem>+fI*lNXT{9@!`9a8gMF*HP@>c4@EZmxh*)FC|tLbsyLW(P84i-b@FBCx1g z&>thjD2WX3WHtFea~_N*YYlVQAe@1whe%(O6jq!IIDdoa!|xhByjNn2(u{>ailULV zugk8q4bsE1=^-}Ax;zKBMYR=SA@|uqntBZ_ zGp}1J^Dp%^3fcCMKgyq9r=6Za5@NMEKjyLX_Z!x~U`>b=Ql)~FlvJkRFif!4m~cHj zU67M(jrZ=KxE9D)7w1zL7V#({u~I519IH_dCAHZ+qA_1^l*WtMbo+*`bLrtiA&{WA z$5*0yhsBS`D}0^u2j^(1Wh#+&@7B78cj4{kDgRngA-2*({3IKgk%k@ukm3#(JQ<3n zRkOrolsAVAX3v$87iw4y%=03x2lJ|)1}=V*-2H48slWI`v-2X% z)9@v_c*fZR6$QMCzA*p07H1lcz*c~{PYz~xKn4>psTTGvcA>Ko6^PK#!U8EEhxB4y z3|1!XRnu>QCc#<-kv`(U^yQ)_Olc5OR-^$G2nAet*kNna)7EOlLfb+1(EW#S8>o#fMWQM+fJTfoc7*q(-b{lW)$DY|eba__HjY9WK9 z9TI&i6+CR+(u_P)pb&2khdfi>1y7`z-n)tlJfqi3B*$? zJr2xm{Ts}Ia-m4z8ej#CchW&&b2ld3UzD!J4JQ-vz64KPGG=wEec;jy#?fNM87IKt zi8}m?gs=jv5}{&E6a>SsUm;U73H7_Npl1;SAdz^kc=55p?KGu^ZHcEhQ41d7*%{L0T5F+C@MtcEc1l5IT zASyK}7s-&7%(ARopA{qQp7?hPf8u6(vdHg;YlXjac!FWk`6wrwz9RlmBi-FMJ>{q! z@w5DYj99CEuig}8iqg3%VdW&-JsqHzx4z<~=_J5;^MN8jX21FBqlH+I;z4AUCSXNp zGYmN;=Vmecq588~f3=i`!dpQwqhs1b2F8#B?7IE<{tHLT)Y_{v+2$-3M;R{d z+L_(SoV%~b9o{x`NkM$88}VN8OY3WdFEfJ)EhQxuFGQBr8}+mr;g6(g>T*HPJTe0{ z{RB&GDDBfkR3X$Jc!^?xEm%i_e~-)5+6Sp_O=a@Z^9Jcm4n+Ma=BVf2@_`~W7}*yb z!En{Db$enCz57ptIqnuT;rdrH2G(_Y(Q!XNPE#xh-xzf#cl{~SjnsP|Hz*bL+(#Lo z@P*qRdGia$4!#p!6{cSXa;7y;x>`NU_zQXYQ9O@@3F7$a2F=!g`!Dv*ml1TEY1ZDV ze;7y{N+Ue3iFX_*?}jf1fLr_;%JiQ#q{TwbLl3!=ZF4HSQq+?wzd2U?P5z~bGf#E( zWMtgLnxv&sYjC=!-}RF@$0m==g8!J`Q(jemtt7VYW?q|ODZUvnk{>e}B!~2oo+J(+TwShi z6`ph0R&j-D9Km%E#U`Os;40X4=_cln=HCz3|Nrru2>>OHPP}bX*LI0;K zUV~@1_~}$fBL%XTL($+3??8m0PNJmC9aTda!=)5-BJ?oi_KxbTrHNj{DWcg>S2VeC z&-W1B!3MOb|A~M>%%%nH5nnI!@l1bOpU?nlXi(L7X<~`p4J+Gct%gM63`$GQoc~~1 z<=kUFKeE#=(QSA>hdS%>oD$t9VORLV;-iUhx+viO?mmlgzd_n8rQj%DkzS#4&HIdZ z7m7F%l9vYt^qEaZ`JM)o@38cIiI7y`e2R*^8o9+Jf7!iG>AL#mak|ZA`XK9#9$;^> z>pM#q0G3z9!5_6aVMq2f(=quZ$x0(ywrWX%U8+M9Iw3G_DA*6u+;rvfbcQn20^ZvwuIt8SJ)*_7Ta&YH^P9=w8c$X7eb{`XJ;eT0~OxK}#KdJbH}UGEw=c+@r@e zh0+rAX&dBMUxczRHxMabk2nndwtChj)yZse;c+<^mnN)0!eti9Y}zj1!u!R{;sdE~ zcn3A<^0O(<$Ov`(NSGkC5tU*Et-q1~A-9$n2pBa-8G33hi_I7a$welQg5N_%lkTIs zQ7(oMkH8jGyhVi`l00!g{03T=`k}*7CQYGbP0buzD+_5TZ7Y1&ICK{9l3-K3kYT|rD1b4dZoYA`4n`3z>}(@;`@gQ7OTGzXve=}<|24TpDeG3c>K z>RQ{X{@jJ~l$7;W24OfDGpD>&#JUPhG$BOylbR0@0w-e@(8<2}hHU+V73!1o z)!+#9SF4dUp*d-H$G?suN0NkZ+2jN51cRfEuH%S8*{-w{ybwb+a2tn6Td1-$PN5B~ z@QUt~$RkAILK=26xwuxo^5;Q}WBIa@c?UUN1G@5IY+N`b<&=1~wga}UQnw3H^V7OM zoMHE0IA=|tmHXshn)bMr^s>4H5*8vK2`;Ls{6|yGXmr1Uqg#$oD`shZO9sm&7=4jZ zBICq?@Xij?rZWf-s$$*-5Bgm{T*+g)m*5>{Vb~&gYnjT4z(zoksQ!{vCzL}2cK(4U z3@p!8mP?dqqL!{(Pn-u+8dXmvkYA~@1qJ=o&WN}rqKo)bokD=T%3f^Z>Z zhc8UoZdywr-!t4t{VUbI6Wz_$YG5q)A3*YHulW1b1tWB}n-cAZH6fL zB()S+O>to>0z^@AxSvZq`&5>AQn;ZM+#8uN6x?JMsLhXsv%~R9lN+m+L`>5M+p4*K zZ`L+n+r~NATW4B(WW1HOM+>GFJdY#FU+@lI$PNy&As<)@tX(MrIFS_*QmGlnfnjf2 zh8kwXW5JlEr6--g!|WqSKTglp{E))Cf+=yd;FXX*3Qdk21LL1JWGa{fVan1S$qL*F z=l-^7vX*PG@|Ul=Rg@HHwYbL&sd{^&SC`0;B>S=91;x`K|-8ab4>Zc0<@(;#vAAXCb>x z3@Mm_BcC}!d$fG+u-1~6wB>Ly8^wK>Cj%D>mYDcSD$>sJAhk~)J#nzK(tus*{a;p+ z{h#8vaU#}SWngoT6jc#V-R5o{(r4Ds627dnETudNlv6#fIVIK4UMZk*=+##78^=wI zCgZH>&ir&~F6fLyCB;tC7Y$=Xs`JFA>gE0iNz%MnYiy+9F?K)J?VpZ(c3J3(mPR!H z*rb3m){99(obu>@^hZ!&1bXuQ@@`Q#`K7PVAE>b8fDUB*A`5L%E2-Rrt6tW56u(j3 z$2Ov`I0(pRhlT!h#Hmx!Urqda9%D%CbwzjBx0kjGCb&Y^4kejq5IkWnqvu!#No~0f zS9bOcp@Y{9!u!WMK8-Muibv??cCWb*;NkMBwT!LHCG27+G3w0*0?ic%?L;febhY#A znG51dHjN0jErtdC!vr)~#?j{{BwBA!ldud8VYrJ%!(TYKI1e&)rvpD*q*i3OXLgXf7}X&eAj5o*R7ITbGn27LUKAEG5eRTDukB2mDA#c#yQ+` zb7@rn{d{oQ=`!pkeicg1;RKhJS@Jl2b9+;cs>Qbw(k>tw!OQ_aywv1KGAv%AlY{+p8Ei^>W;i{K}&XxC(mqhv*|$Pr&$AS0Iq4r`VPSzRIMeU)>^cz z^;wVW-JG<>0S9mirO=EXoz2X|cn2R&APyf)gU)Y*jA+m)YPCU8;Fz5BbRmhfoS5}h zhMMNF@kt6e_=F!G>X`LZ_8EgoG*i#?-SXGDa8(l3HhR#!7uO4=IP*GZ<2ewtyVjthME#DdIsR{b)MSthd?_{JrWFHtDpRt$A zO7qh&Q#%n5A`mu+jOrJ@4#oz-{yboP2RfoY*btVhk`Z5av!YwQ1}_Cenf3wGp&fJ_3=dc-KBs-{PXO$Q?WltlIg18^YmYUz2uc zK2LkSzEzR zml+CeQM^qm68)YHW~U4t^D@EuxgRMxDmNiArra%s}Jk;Pg0H2Ns8b=Y+t!YTy)= zPUDI$9y*owGz6-MeN)9-3Vv4=Mqomj_si>?uq>@gnp2KUCV-VuWV^)?ZSVxDxp{*Sy2XW!hHFK=^+4>J^H~CVeaT}bpr|Ed&^C~UEjPN=ZPOqXRG32mDKbN;@Db(7{s zDA14eeGTs+9El5M%s|oRnQie|T2y~_7yJb9%5|fVfAB77O11#FMShXo zlPhZIWUiSO(h;UCJ`~M@IXz#TkM(4d=I#)oDGj$BiVrK>o@JV@qIJ|QuY}y-Am9P3u2w;)j88W`b&zL!iI;-}d9}TliCQ=2N?;iyWf(pf4J%l|bJu&VqMlaI-b?rD#wy_#U*9 z4IKhzlD{aqSvh{&VEP3`q>n#zjV{5@SKC@t%A>=sA8(Av!OVAi%v9` zF6EL85FXA^>ObElT7EgYTKM5S+d0%Tq|D|JvMlLvm^k)l=g@L_5?u zSMVD{4!VE;Bxgt70RSLOd7ZR7QEC?@ckZe~Tx-PDk#vIyf|?$9HGoi5f08a{=c?kuPRT%r~vICj7v zu*jzWN2*n*fCQImYP!V6gx_F{dSBs&Ky`dp)}IkdR+=g%?t034@(NqfeSqWEYk7j2 zO-9)t#WkohqMs^FD}t$2s=>cir&#)xL8$+N>H9H95=tt7_}?8D{f$@*_ycQtMUZZ+ zzwA5iYi5C=)k&W3XS4o$Y-tSebMFq}3O9R@;#p_cg+w&sqz0z>Tf};mx0`b%2qAx_ zdSZ4fq`1?@o9fdlP{isDARb5Ha9XC$N9)yYu*Ky_Kr)4y#6J}>+7Q+vGE`fS!}r~{ z`-WP(+cJR(gw4}`qslBm7B5O=l#mDxT_Os^!mV#oCS`%Kw$hZ+(~|Vh0CbA!vQm&t z5tLOVOiw3E@k4{qiWHMue{P5T2vQOcD9zmICujVdo-{?Xs6Q(UaBK*oyymc=$*atF zzRp_eK~e2EU@S0?<8YS+Q@kURaMJelE(N8RsUj0%h`L$aFDG5AGcByMJ84aiM31vA z%{nLwEl6DQNSjGTF_Zo$GX>9`V9- zWLuO-g^qv4WGb8c_e4%@&2JSnaw(mdjW7<1tlxRo8KjSvQi9u_Z#WA=ln^XgO5zWM z8|cjPqWT=Sx_KCY2>|TwP#xQa2KsUERgsO;a~NZ3fW9>2)e%D6+~uzOd0kj-<==_$9=Nkr*Vi2W;QE`sZ~kCDMg$fel};6_}r7CosC>;ReCu+p4gm z+kO#yE2j;rGgK8+nO}qK@;;xmfp2S+nzIfDT$Hw&l;(};^_?Nu!;?OX3Kpx1BUlpt zJ1JxB-uF*MY$^LFf_|-(VF0Sr4g0 z`t_e~&-8zjOVEDhxrdNowQMgCDN^nGU03+7dE5n3A!`NiNRq$?kp9`=5`ZyfP$rdO z8AepU;WZJNpp!E+RPB?ckweHy7}1DpH^fD6OY-md0Z>4o5|w{&UOlqQzjUZX&a!A? zxLWquB$h{A5)_vMEnT!_V%QqeO%kZqTF%ZGp#q&87;r4tCov7O7fU~y`3 zE)r?O+Nis7*>4tksIqnfuAoxvJA7gPctK$gydzN?o!M5oyeFcN00G43H+ zXI7#;v1o;jz+bcw)5|%Pal$p6a%!v1_t3klWm?Wd_;x03LmD#LQ7lCzpTL)YiI?3b zcanucFTz{Gt)DARehZNhgIhrMR4kKTpjpUbTnE9{XwOuJl@;3y-ac`$Tz-Idzfg^UH^mJL`NN2 zKBEBqi=z{B{-DCYst62_!WakBL#DZEw(B1tw9#-6{o5ThE8<)>m>9|Mf&qn&6P3j# z0D`g!6Ug1#nPe!>+Sr3B$W~HT9F3LD8z}hYg<-&Gr-LCzlRme+7@zxl32eU9O78&@72|E@UDAbLiLDDi8WI39b5Ga;2FIS#4 z;OO;e#y~6(+ek#7-5S08;ro;hsK+B9A53z-C*e+_M*YBW4=r}vIzu`TN5D+|yq1b>d!; z+YXPcxj}U=6J%Uamv|Tawpcaoc!m~hvgcq1WQI5HOZ!7wVdp|Sg(W??dtFJE-4w=O zIAxcoOdA5*QXXcC*L<#^yIrK%se_A_XLhT z7gVRex{nh1IYM(7Ml6v)CabGCj-!c_2`{C$BV;9dV+Uov3$+2}&l$l|L@1NYFSIjsfX=0dz zTbSIAbu#XWnyFsk1Xnl|n$b~W5dJX{uhj45%M zpuSqJC7S%v>u-HxYGjpxkil(LEb3Dx6KBk?0R3&g@rz_kkS|dMblhR$%@#-%leLHk zS(sbQx``@C4DxWX8O1k;hfzqLXt~#zb;Uzt!Gst|p@IMh&c3Ca|NMSjxI<>6e%f#Y zyK(i9!1fkF`Y!7lgxo$YGhQ{iST{zC-jNtB&|~lCuNpuB2s>+o;zk=}M;fl6vEb`M#zy|0Bx!`xjvF}xuQWV1VtV&B zohf2Q1LsrH9|JNmMth5Zk}*=YpjyB$R(4ysu1nBp^D6}&WZkC9j>hVdJ`o5I)V5eKDN_UiR7#rtq6>1!j@r?fPLioK%v9>)Ur}6i$-ul$G%n z`@nBY$D-;d0(cO5RX4dWB-VH2y|HXpzs&6r$_c;=_?g+25MyF#mDk{-LNZ@Dr&8tMeUE$M@^#U zxybkp&zilApa4(T-{(0VqR0T5l2GUNfYX$#SbCoC2Uf$H>vgaBHu zUJC(?G{mjrnNTe)tS6d%b$F8h{{A@JHx-G^q`N;%l)^I)elH4uS7w{w?Sf0CWZ4&@ zhW!mih!L5l6w*6)tE0{ht*aV5E%qZar1%S`@3*r1Q18m=t1|UTLVcj~&(~z@c)|=- zE6V)h;msk7@DXkY%`EXY(RZOYv!5wMEA(|INcNzyBD>4zMsYQr9O(};9}%?`&qr`4|D*X#YMaM}eWeQ5i{dBka>)=`jC_*Op{>$W4S4R3 zoA&Z`a?d-pS&MID=|MmeOe2q*8R_ZgPyE)TLiAtIEO+Aaf)y2CTjx@#i_GbNJbx;`z?z1!a(E*U<~fk5TT7n>V{hsDcm`ih9QAiB-=vc=i~E$G|Xp-}({>Ek&Q zj-zSl>Z<7S)ir!s;5Gd9x@z++`x0<_BHYw_&!TqOen$Fmq-wH}s?q+4#CpueREuw$ ze`~elU$<=a!NbD*YZJYAIC{y@Q*@qm!p5U!$Az3|=ndWU)wJ|yQQUyyzP24POX4Pn zA#oZ8x{;=`_MeNSvVs+1>YdyZSL9fu$y<?@411$W&hJSY-e=K*FoThB(K=u$Cj+ z)go!e$PD9&%!|BP8IqFH)hu7nI`1cNk6yE-dh@rLUq;YZqT{ zpq}$BF}z8WvNQ;=u%xsm!)~nXh|#=v(vd81p-L>Fxp)_~@++Z{lPoHI(#lawj%fc5))(BU&@v^Idf%RAUeRSt zxWNwbi(xUhY2jZH7ttcnA5c%P@G5~=Qn_j}pCfjFI{Nr2G86|bsi}z}6POc$ODl%H4&|8CMDV;4yU{KyD&{{@F zydh_QF_5ombWEb2&6p&XRfg&rQ+}yX|BO7AKdoKPK}hkhADDSO6112U)X$>NeW1gW zMhDjZ9Y&wOeOX{>;E$&vsWovX;qvC#d^)|*(q6yS*~qUpo$vc{k5{B9$8|Fy;^psu zi%w_53rSqc@_b1eOyLKh3zzjt3nb8j;0J=Uy&v8L{5CX3<3iBbBuKB`2uG4$tE$O4 zE@y=vFJi%iPnJO7TWo%zBDM0-CH>|HkW5J6^Rk||Y8MLmvJKo^l1+12AD>ug(;%QM zy1iY*($4Q$dD!Rm-kWWNc|E$(w|NhczDLxzb18b}aL?Uc!BtNtS>NJrBk5?0`^M~? z=y?9#CV-I1?eP$bKJe}{iv^$gi<=z*fI|foJ6`HcOk?fbgCI9HFt= z9UzH9E+b)GXJER zChKri9H>Y?UJG4Biq$jj`^@4@9a4iL+Hz3}8K5$?LMFbCK4&=+hsk)_rVHY47e7DAg=ju}o3?7B6h6t) ztghS`_Sw34N}Txk4o7wja$Fi~#B4z;O^NaRG>oUFfK3WX{i2Wyaf%=fOfM>+tJj(j z1~c^${GTePIyd9`nu5D{{=FpFI$1>M zE0w~?F&%0W>X`+LwZK&EgZM0UT&%%jO3cW`_gOLzG6~nGDe^1O8>wYzPEL{6i=Ujb z;Xxb^Ju3Pq))%uVGNA~^!`Bg_>#=&91pzOl)-n_+8U4l^+k{sOn8}+!WT^0Ie#O4O z$h`W&CqWW6e#wbvpZ{jp9`0Wp51CVf>gQ{5+Pdsk{Vaw&06OabBkL`r;^>;F(LjLU?(XjH1b26L8QdKPcPF?7cX!ty!QGwU z?w)V*y!U?h$Ne?EX7%dReY(2NsoJ}0Ygyge#DXizKPvQo70k85J2Enxac0mp(Saj{ z<9Z|!`{O}>+!+Y)IV(v0c~WO&#T&zlb8B*Xe!XE0YG^$$evC2q#c!Rl*j=%AMncP) zz|lri23`SzjeAw#hj>>UFJ!K6j?bTNFOpCUtJuofC|lQhf|7Z{EDe~oQ6nH)wb5ZA z99aWgn3zVi(i`7zsaOJowR4vvMs96%%vGlQujQm`AR(L}QvT`{K3)O4F7wfh$5mfn z9%ivdQ9ZBGUS;{p(>s)C&ef!H6@kQf2*8zai=jf1khH32l_m*Z`YY0z7896qCJQnJ z!=QUoIS7EQ)UUb;QvlK>nVT^^97>z+M1*rz^>D+9k&dTELyGD(fio{`xGhj# zFX&yxdK?D&keJ$GccguG-ArY<+T|l4trpfjK~zDSa5f!AdG(}|;*1293`0%JTPt?) z5v}1#96hqik6iv94$!R>HLOYRmz=M^pe#`Y}0fz)GYgI^Ir*bi>%zS`6RQvd|gdzuLlO6+L&K5^;-q*7EM9`XQOkQqsMvl zOH9Px9Y6H!e~q|XeuJT?vyZ-bgA_XhC(dKGNb@D1gv3t8Pi3s;$O~O+l&t= zvKXyWx&6=7S;T4WH6=n3^mJ?o+>m_v^=V-YH`=6n?Sal&wNdzg4&4=%`el@5~);kX?j<&h z3CG0luIuFMSR9A!ROqdmmBzj>dn2C_=usuD6M(JFJTyw(82n2aq~^-0o44_eYJsfo zvi^*~_u1VnNg3M|Me3C#5%%q4iSaTt5mGcp3a7Q7bA}c&d;MI%87sR=M#{cIK%NH^ zxETm@{{24YY;E)tX6vakCJ?5kUGrmg%NyvX&u*KDF7YMRJ*S9L5EmXl%bfwhp(p7| zvC{r3!BGuMP1!cFl6;)*ND|F~f@u4Ki{|^D9asrskLr_Y!s9NnHhDi+mV+|mmHJJW zAy~Mr1orHYwv?CGu0i>AgP3t%NL`&k<+j)MB#f`})aF+HeAZeO=#KV{PhWcm%y#H&TOye%IH;}`o_>E;?{VT z61bW)W8CyAGc2N{^5rq7u6;#_5cfA4y`+#78=Z0bn`Zs|8wbFidEb2FISTr#`W<{_a;06y!mwmWwxU#>L$Y0EPyu`89lSTt!9cFIYz`#X*qY8SIR?u zC(wjyjUP(z?G`0WuJ03ls~MX#6i~kN6Rz1-1KzLd$12?wS(8F2=mA={K@T8Fe%3mv zt>9>{UE0WH((4T#8S-j9VY(hcn$8Cpm< zC?N1uT&_(th&~XOJ8EI`U*g%^%W1Jd?IkZSHa-`gPuJKAPdR%IT!zZr&?&9xHrXA- ze5ii2p^UKTUnt+sW_eKX=zl6c|Q&`u-!6TVgAP-a4qG{(iJmGkksa zP|uSRZ|U>piY%lrbnat$m-_G=osPX~bM;lKXubzUKW{CC&R&me8?tHA+qx-wJh4Fj zMd3zA+c?buU*SA-DG-Gk#X3}ResH^>(F#jaz{-@e#QaAIFN|I@6?q%R)}uQ$YE7i) z0WkO+aSs|N?eBhsSwFv_Tw;h_(0>;9QFX}3?R9~ymK&mph6peb9yQp`qN`tlM0tZK zSl<=+9#br}z4rumM}^KnLd3!ROwBN8llY&v`Ovyn@btpXjzQC<3AHcUoz;O%bzd~o zX9-J=5p}3e2yE{z7TSu9=89S)0bVMIG2G;TZcUxPxWI0tt>_J{k~gM8ZDgdO?z=#c ze0&O5ajAE)^x)e7_9f#&-`XBS2Zn|=;0evPv2=8;DLWC?{^ltPr-!K*10z~ z-gDHV$3=0~E0Sn3AOqErZ&}oHyFS4v=4l`MsF}iR$H34}?4lXRay(Cm0XZbn*uy;Z zk7eQUiSEWOUm#}JJHGWug(@OTHW5D|6{Qx6`Y>A+DNdC4_d>+%sH4$Gt%RXRP^4#b zFz9CN>UFMQLT9a1JoG)3iqZ7$?z?B#+m89;(<3jF1`zpAcK?kSF9;#lIppVD0#5n` z=tdqqa=INKlz~WoEnmwj?=H6rP8YKETm+50SGDNTrS<3<6 z)+|hcF3Krb&RHF3>!ep}jYmL9L9GWJ>bz>L)mvD;y*z2K20`H-3Dkv8mlT@>FLb8m zYmsW4CZit>Im|mR-)u3*WrW6~65&}+lq{%SOuQ97^9??WaA8uYHKpg=2n0y*Yz+)? zutX5al;l!f1;l$xzy>P|k8hFma<8FFIt)w``0{YCbk)B~)_J#FT!xT;=Wj19yJuR# z71xn^htnlP`(}W02b>C2&zqr%rS|2^Q6Vk&7NVQz^&{!R?Z<7y+4SSX`t%e=Wib1( zvRen&dRjBH9{ZX^99D~qgVPhB>U}`S?NxmJl7s1;7Y{sj)X&kzZswWXZ?=5z{{)XK zym2hv&?Cb=Pb4$`@zX(%`98LAA`Zf;WD1I@nsM`Es;jGhaN2{z#TWLXa0SQb>Abbz zMSb+QyARh6t}@7eY#tJ8m4@w`od_cvvyhB=bx1lesaVejc!(g;2pF1crKD!r8t_q7 z@a5#Hyny8dO@C9M>!rC;OZYtrX%wtBo!i1A1dQk9(6I_y=~r@XZKk#1jY$^jjRtpO zeR1)PUV6+dt&C&c)*PpKTJ#263|(Yhn;Y)8_>RGBV(B9`UPHMX9JJ+-GO zrK7Kq{$w3s!WD`%-oWT~QVHVAk@6WO(lbgHv;bp*se8=#_fgn>F;bFw%})0|ljBjQ z;;jO@Sk9e(p!3uN`ab_!u{zfzPos2yx+LVyDdw>`*L%5cW5&Hn@ZAZC-@jx4y@N}0 zV%}1^e`9RX{h_P{1T5*YzaD&tCtb-;14=JRpYa;bd8ZSFn?1@#hODA()1QW!lbs4` zOaYbZPQiw{>88B0c z70U8ioO<@hZlT6pRL8M(Q($MgH(8btszveS<1)|=H&M6scdOuBrpWM#uoRMsL;=s= z`6^Ijs(&wUx=G&(h<6%!w@ZW`C-N$Tl1Ga&67ob<>7TPLjIyAn`RYvNW4@4NoBWIB zWw^sCkcuTml@|w}n_yVIU1>W%o z1q{m^XM8bQ>?{uM*f;&+q&FQ=w^6Tb1!uxi(W!mcq&sc`XTo))T$k>%Y$9hWY%&I) zI}Z+0igdIB5_$qQnCP7_Z0O-A;gJk5%ovQXL&X@KRkXu(6lMJyBXYn>X~XIXYo_#M zD1^J9`U#J0W6(U(m1x63-tn}91~RZt%&zwM1yNmlK22X=9suQZ(D1k_ZX5x z^C%;hU0`Ng%xn<^<`z}Qhc`XkklXq3gAOU}x}`bd+0IT+#vc*rU`dNu4X5BrR%387 z0^m_r46W+uiWq`PZXF@w(J=^4k8j3|cpY7ZCmhmxZH4`-i@o0NPL&?Sb z7tIs653~=}os^^*Uxg{!k4rle=G*khlEQcE;nPNKB@TfbVOEnQ@=?Y4tKno2viq5N z8$Sbq(CW(yVV(RcZxtT?xS>m3MZ z${tkZUDTp*B_$|+U&5CZ;8??{b_)>Ve~)q>!RTOXwr!8lllHq>oln>Y$A~f>F+O{V z-GG_BIWPl8;tczcc0EV-L~}35{=s!Oi|tD%jaLT2%#irDbF#z=9>bt*L592jf1z_l zNa6N3Cg@oQUh^t&7F#KJzgXz=5wq`tD}DiDnou9%<56HlIzuD`vE}vsvRQLfpt!(B zbuhU(JecSiOnsXX%HPYM1v!D?mb>$i|M;gc&^r>1bTYU{3>!VW0-a1IfBRy-t`P}~ z#y!p)o7w(22qhR4n$5D7J68}^tM0Zh5*j;Fb#*x*lWCwE_Sz!95Q5dqn_W)_)`K>~ zFagfzvH1l=$Y>|95Ez(n)iH<_+TZcZ!ZxEmgM>Q}8G@F@Yf6R@r|qnt=LsBx`uxa2 zvJFXMQ1<;Fbkc}?Jd$Q6`IiKaJ8Y7L#8?w|zkWC|SIgzV*H+7HO!!^jYLrX(r%vjj zy7>R~@8u-?`%}5yobR$OzHa)63zB)A^gZKS`ioaSi`Bn8Q53fzDh`Lcr?tue;dWj; z2W~DfAVt9>x@nO6-jH-fNb*)^oQ50d-oQ&wcba9v^o(WbrHH58f=$}FJtH_sW`!x4 z>+23=LZ2@X-Wk7rY&Hlzi72tq~y!ZxwTdo#;(__6{~!x zx|C|qr812X*`%^pUbrOaBb#z+@E+%3$s(86kZ?F3DuU1fDTGV zB-*hcSlRe%8W8hHZ0BlhWYi&#lPBsb6cvga%G|WCTAhaZ8F^xd%r26NwD~t8qutcU zO;2_grwLw(t%VK56>?4dea@vvf*5hO(27UV%kQVxq(Tn9iTCa?<;247*g_LV!^cZK zIi_wtu7MGsQ31OuC*MR=x}5pOdx;;QJ+W)*)G(3jE$}#x$bkF%ksMs&dfdEAg=%il zG%AS(e=!0sZ3`d9dn}!DZokw~e<$m#)7SZXqv@BAW_4t&Q3+I8Qw~xk7o%%VlT1)= zn3o+Sc-9=*;lH3v3<)I9H@kH*Kdi64V-w!>f7)w4xO*P?mwVc4BU5!*vX69r*I9yu z+d*ltTj2W~=)=;6d}_08t3vXC5{O~Ue^!{PB^7Ds2K2Mk*qFh5f=44$aT z{|f{zK0qeXRSiTc#oheNd*o$HQgXoo!Fu z__RTVx>bd4c+$uCR$<0E-c-ot(smOLID-}VULXBqRANX)SXCa`q|l(xk$@QdA36wuW3KD)vIqPJF(| zo4W-=ny5oV>E$9Uq&k-}>X-QB#c{;mH%m}8I|>^lrkkzgk_>(AUA^w`dIvth^{>=h z2$~QY#CvkW2@=~PqMP~M_{PvXPT#Oj1Yrzn8y3NLDrNBE7~rO$AA{DD~rI-%*j1VM4w zBBseEjhoVVe zI(55n4P!igoW#8nTKn)XaO=w(2h?PWtZ0V-qVWy|%Z` z6LIAM6>cb1(DIzw<%DlSoRdvOupj()_A6G&@V4V{ zI(+zc576T+8dq~Dg$WuUyz$M9M{ES`ywD`cChg?hyN6sIz(X)6;l4DLL2i_KjnZL* z1bm*Trrlsm1JPQ>#h6DoNX+?5Cfq=)QSl;AdH~dKm1i7`uH%v~RuB7Xq zSO&`h4$*zxn`O0X)#<6b#VIg+KUT^b2W2a}ftr^gX;kt)Xztks%V$zPXbE2I7}7q4 zMh+UV@DdP(00*lIjj~x~)9^ITBM5#_I#{Z&kn1vuHMGV4;@4KLiui7>tN7J8){xWy z>Z(V(o_s7qZdSJCl+W$Wu&uNE(IgFKOQn52c{nEc*)B+KjUvf+BLDtq`CyF4=S(6C zNNQGNFI^SK-r(fyZC+LOxGYzqWo#!GKHn4mE3}fsUb1Y+bt|CMs{)f)hqVzENtMJn49d6_?g;ZtSq*y zPgSA%eb4#f2zSXB$6u$CWr=)vMFi5$1)2&(fUziUI3Rz~uBeWS70t*u%tLC^k2OhO zvyz|yOt~8whHK>#WqYXoL#eToS{-EVG)!Ny7=9zRKfdPweX##FBYK&eJ&n#Ucl37?cO)#JcsOv(@Xk9L|)J5EaO))0bC_e>D-- zKWG)i;fTF9&m~7O3(yP{f(9qS6)0DuVr4FaFfA`SKnCx}CP`2v6f;eSSAH{-B_Avj zONtcjRYc)rZQF-G5^*D?p>;Lw3!h@zBN^%8+TYIvZ*GgU`^A6#6+QnsM9;9yFb1`m^KSbA_!1I>!M{$LZ{=?iXw+m zF>v2&jjRYJB!$VGHn468S<2xGXR~v+p@vW-J>I`T822dpILHYBu0q`A^9W4e?&$vn zrrGdDx;{CdJ^F~wGyDY#7X~iKG(z3JnG*L3LEOG2fAA$AlQ2d$!B?lxF|O23T6a1zwUjhw&9HIZ~B#ypuGC zag}qVveVD;y`BWsMd59-G~tT6V=M4c%`md*L}E?c3xi#C{NpVs6R>);B~K98Pj2kS zW$p>mO6kBj$PxcyEh1MwjS83uGK;_B7h?#@F6%0Oj5 z9ji?SZNprbiQ^qfm8vXL8&mJ>i$UPz`gj`$jBI&?L<-@dH{DZy7{7uAM}7JZ zya9A7$uq$?`f;;-=Y5iFgDf%OJS0RcDOy4ls>*WnX$ZWyG8LI#Fq_uW8Jlc)F-I{i zr2^v{2s7|O4Y>EZ))tGnIB>gW{dR5qw(0?fRJIUqn9W^O9B`DJIMVP~G-k&quToY{ zMTMITRK{>nx_FRR%t^ep%!$3NGhqd8aLiuEM+BijuVSLO-e-CM;AT^*}+5Eas+M6NYfTAQZ3`L#c7c;Zc-b@&F=Bf6V5|6htt~9<%*s6( z`-Hn|=5g>#Mu&g-y7dk-AAFWMyayMN3y(s$)XwXV+S;WyE6ZNQ*dnzEYVE{IQgD9w zTV?tPppoZ$S`W{JMKr!eFQhmQ5jQ3M=eyrbZ^j1!x&mGeS`);>YfyeJkvaB%Knc(q z@6l)190fA(U4o(cnPlq3RSOQl->8?PKA({6J^d~tqimo?MjF~^ zB33Lf=|SF%O4dLLONQaq@+VqS&H>&PuI&x~0mfFfTUR^Y&22e50RT8=w>g27Kb-X3d=93`pIj8Hi_G#Mvw6!EyT;4E zc53)(U(JL@OKPn7xcpc_ScX(PQGH4 zXg`wl3ukr50WLHG9m%7KrYhW^Dw&H&EK%boO2Sr=?%TIizTUIBH^tqh!DcQ2;`wFf z&71e}vdaFFVy_9{c}pIn=M?+iGfp_SRTt`J>PuCaD&9g&n&eynT@tVkg5hSj!6cWd zM6P|7ok$&AFVj}Q5d=|_;L#u5JYFl@GAv6Ru%i(QaxlmH-rW&6p83(R42v>jqtOJP zuWG>-{{w6(jz;{hgQ$ji(yMk?1kwwaIk$Bsv{Eg%_rdndSgm1(0F(a!z^`0ogrXyE z?w$a3k(rzg6eGmhJn_SIgOLOtCZF?VO#md`+^S05MV+;JbS`{QY1aBZn<` z@y{gg9ZC;<2Rth&;uvClTN!=Wtkgr6zxC@&$()(+5xGVAU^6t6xgj|S}+Wd>-<+n?< zv#uN$L9;Wy(J`FR6vl>#_+vY&I)`#^8;_R56)(3IIxZh!E6cjOb$V{Beh2%CZ7fc0 z4(x~nl*v>=ywa*aeC|Uf_@%Rt0&Z_=+9O*P%*27F!NOTXy1xBy_uucD^CvycVy6i` z%raE8zsF2zSb@5C-pkwGB?|GpNcGI#c1ap;)w|NT#KCJi9pO!@3Qvgb;&F?~CS(nY zwr|A}w>EaQj{d}OQkJZ~Vu*-9XX_Nd$Yw$f^Ktunshp@{G$aihwohIRU;9${8*$1` zX7ms!;CMS+^H@*nlrn6iGx=iUgnM|ev7mF;V9W#;kF%(-1sl#t*1H$*_9PW}6B@Le zFlI39a?r4_lHV>q#`ON_+f|=O=bTz{Xmh<>F<^*Nio>qZ=+CH-jGHu4g$dg9qx;wB zl9CH-bsVK3=)f2EktwJ$qlVJ_!)RFc*nwk8q+ZL+^6^8;&|b-uy!->~DIysMuuHX8 z1J^C-GNV412Dg8OhSe|+Ozmq%2=<*U7m0}Y#9E@x=BV=21*v%b+{6p2pBKoRiTfUL zc@32%n64`6Rt#0s!1w*!`j6jEeP3|y+!j`Lizj&&&i#0BNHP_&btr-o;X}XysX%DS zP@g_SCT7wvIiCHQsM)leAV{TsjEDbD-~~HB1F;sdF*FMj{ zM?801UHm69OoC;0%I@V%Dt^E*jW(uJXAg`1`o7N3p$4^*p8)F?HvjjfG`Q+H%O65v zk(X^ZW*mMZAzVL<);j$BztJd!#d8j9N5r)K#1gHshce5)L-9LUUTD0Ji6jQ?A zhb|v_`BA(baS%Gy9GX_q{Pn`Mk?}Eqg=jFBnfAWFOFgA7rI|-DdHD(iS7ZOYGgEXW zfBh|hvIk#RzWLbgF1Ze_|8RLnO-rj7JNmabp;V?YIa#1D-z}-+y=T|DBppK2 z%vsGW-@D1b=A!RAa4tC*%T$`I%l&x;4X0(Pbuz1Tp2}iL<|bux=j0A0#r6rDEC)-@ z%*UQ(jsq#4*NkxdsBj4w@u*5_zPx|o5obw@f8myT_9AtcQmWOT?ADvMZ|SfcJaX^8 zhtiEm%PQ~;KbUD-gS(_`XCF*%o#N-K5Z59odHY&tq_PIUykhYt+=7RuTV?G`$jQO? zPd!`=7x&~?=Bey|gISF|6xAYa0xqWb47pfY)V%vf81-ib-4FxylMj5Oj$`wbv*sgs zkoKgm16)rTpN2e{#%07xPSjyu102JzVF)Hav+~Hi-E@c!ctqkM@i zK7gtFg-E;)#M^fm+`{kn)_-VUg zQQ(pHdA)j>rT926G)DCI{pAYyviYa?-T4KtVxjF!=zX5T;f>I@=M#?Q+K{QntalcP zX1M8>?}wX_3T>7wh_AhEAW~-!rwl@Ra8g*zWffGlCI9l4G%RH@Sc)&QM9IhuCrqS9 zRnQINw9)?zqdB$XGD%K9+7Z7>p?(v{|QfbuKmLLfE$@Xo###o!Y%@j3+b4CK?Sal4Uv90d;A;3!`J-dz= zBAz4EtPtA(IVc||mhA%y*zQT{x)2|9lOAJ6BaQI2#!e|R&I$9Ax;rdp6(E6!@acS_ z2Q7ZouvF(Ssn5GjJ{ZUe1BBNP(v2!#z6AC#k^ti#k31KFmhloqPmF+(8a!!U3;T#a#_brlOqHA><(tOQ%%0? z?0G$NqH=UcCk24J)$*V*f>l&x%uu9qeMII*PZL5-yxDdwKX|6ZzpAw+G3^&+_ zmN=H<&bm(@@-{o!=?F`r5XEi%LOk0wNxuvmZ+0i(@;dTZA-vb&P+WyhMT4!@NKDG+ zW`$aH56Lo*e~z%RP^T$vv##cp!JD5WyJIxI^6|<{e^un|iFK`)fS=?G45GEHOEPqi z*u6sSaQ7A_0sXsf$eZ<8qY#khDgS*g*1vx4EWAz;Kl_Z$y@ut}K036j;g{2;)DKlp z#jCIYKux!u`VkZ=0UqMyWX>D7@|E6ctsYsxiieLJ*jjM?$x`$uneqp3wwm};uCWMy z9@qRK+d(@Y=0s0TGB+DSO`>AN7R3}P&$qu8+3T4tydT8BfgZ~~fHa_2oV#p| z(K&10r?V8KFBIG!j7#7jO4AeAHMcziPhyi?sM)NHH2_?AM%8eVrVZ|X42M=8)xyP> z?!EaF0G{`=gtarV+f@Y;>w>c-fPxW!d@N9`l+{PX^@lczN~c)0v;zf|*huw(oq)w| zP#)FEQE+M+R}Ts|i4(9+u&>-uay5ygOV%;Sje_JEBmp)7lR}riVW4Vk{fAlA%X$P? z{EyLDOP?0@^DK2i91qFq1&l1!@T5kNTEA8Y@@fkr+l~%;DvSUDZ4)`j|&v2`*~4SSTO}SZ~T$Aep0*P$wv? zK+R6V>bLR&a8ode6#o$~3+sZms1uh>*la?F6X7`es&L+Dt-##T9(M*Bfv``f8@De^ zDQ8AW<{DR#sya6QEPZeU0aq9vm4*ZR6nj!R3%0NzOv%n`4!=6J19a!Oc}vXmMW`Ft z=>5ll#Sk5NAYH%Jl&_!W7I+=-=N@-#r=&XhfL87g{iz#X|+_{or^4C+2J|19OR zBc{f}wusAqsu(2kL1ML#2NC-!I#Z@8Tqs**L_paLB<2ixU7HUi!(nbyBZ!5TXxxK^ zu}lYvf|)!c^Ij^7jC_!|Zsdi;y@?*TY3A>fQLhiOvLny54Qiq~y_&IPEU>r@Qu7Bw zrHmH|XRxYfd@)22H`^ttrM6YT=Vq0%y+Lfb68rN)uBhszLi3@QMx&(7f#C;>UXT$b zfh5%$`>3PXNmFoHdr04up?gF2(nc?;SBd@sbCg*BMJm%9yeAMdmDRzuX={7KkSJ!71X%*t86x zFvt;_%B%;~H*F6(l?>+k85IwujYs8A6PV*~h^zmD%BS*qh$hG9Av+o(wPA!Q88(bo z!J05W%4c2S}sge3&29z9=roeyq$13%GAl`T+ z7Qy#aV>;z(_cu-6(ik%Y)@QI_gWBu3EbRSb@T$XzdBGdx*0G;!d4~_-N;YdDoeV%h z|FtZ@CRWkaE`)UNCuSFo!tU9{0g=A!8z06*9fPm~CZ49E;(^dP@v;;>S)-#~?B6#q z!vL^M*n5RoyK=@A!>~+tG7x=ajzNU|h*l3_BCsfU!=rN|Z|;F~ZrH?Q`t{y?+RWEw zm*U*~GK-)ec1WLr*Oql0?k^2P~w6I}!$=@s{*rq?2$1M>Rq033v}pBH760sF4V8r-nrSq%Zr|1oK3+5--UgTA;|!k#IXkFY^Mf~V zC`jq5$WHhy36v}2SoYoz_QGyp;f!DN$fuRU9Nc|&YzwBP z0H8~1O#B}+`PtpV-JJTF2KBuhe1cjufo9ccH6}Lhf|~EBM^OgFJZ4&Bqp&%rq@y@C z1Zp_*m^zp*15w7|h2cV$O#S)jX#a|F%*5FB{)6yZznU!N-Z{t8D2akDR2W-l?216FD?R;M z0oH<-yQrR^W9e;@1-9n;g-4gxWdI^ivdNBX8<;`}!=wl4W*pNCPr~q^sF&i`skUyJ zZU~cI3wVSB>iq;ou|<$z_+l!@3CNT}ewPji`WIzrugGBM;A7Dp(?#T>Cz@`f9$@x= zOy^`?q7tCedy@;yS-LD?aRc3!SFuR45*w{t+ZM`BSdum1X)X)lslwIWK%Yu;@w5-J zL2gH2sRE8sJcXuiNp=jB$c@}>b$aL@R5e4>0P0h7ilu%KqETe zxIwq~xdIgK+Zj2swkX6fZMy%KEYtTGdTf)TwEP?)L!VfLOkG>&Ti_R8;y-}hH)~Sk z%^0E>sXA_O`j;TvwEEWpSiNt;urbCc@L|Pi()8KgzhN2eT0T9Y6>?wSDf9vYWjE~Lep^GrPyh^Ci~3%ReO zPGnPs?Kn5i%`H*}{Lkfe-(rJ!C1NTjqI~=iL@12-i>!58$7n};XO4JL5<gz@#qy=C7cH(pJj$LM9XiHJC=B<)NdIe|^&ZdqsQ3kAB~_;1O(TMa5^J+MR87u_6go+-|l@Z`<*tU0-Rfp>f|!?E2A zmLuT%hp*HkfPptS)NRBoGmk&E!)Hb8P5?iae|zF5oYVVWI2EPHbRydwf9jg03QmKN z>(O}u4~pM6B>5`Usq{!~FV(>!?qAKl*Ck<|9CKRxm@EaI-M2BmH2yUss^8XkMGY`} z&7&RH(@*QBci-G0R!bY%X-2>67i8Rlm7f9`qv%C%qEy*}df zS_i!8lAV#UwrMeRP$fRdnZ-4{*_UdH4ikcRBVDF)9YnhNr2B2XDuT_9Uc;faE(_^O zelRJ_Goy@T+tJ_9nc85MtTZyOrZq4_hVU(o)PNFj1H>+oC)(-Ygxm;9v(}f8fs#N> z%6_Rh3J~nx9Ge&#Iq2i)#K5uBju5A1W5@1kW_*gCGp;lEN^mtgK%RjR1l#q|G2~=T z`}t@uLJ334eW=s%ej#!%aK{39U~ij0Rr-?dT2OqI5kK|`xMktt_ep%gXbyvcs#&<; zS(x{g>lrbZ?jeoWgps@CN#Na>djo>N^Xri(sT$>BaeuI?Wl&+mA`j6#=+!N4))vzi zHv8OdZ7ZrnwaQ$LKa{9UEZEXWQFM(YGW_cM*l`Wc`%(JJZ8diTJ0eC%CAQtsLv~CV z%2f@!f&zS(bHP>Sx}Wr;&>(DAmFfdbrE-w(e9*$B?&f?I52t#{u@&-E2Qq{(cQ;^e z{OGNVx$5`B$u>8H?*wgmhT&mQw%h<~&OqM3*)_ux@x#rvEWes+dB~Y6qBS1vW<^l3 z&i`2I#4yYWBsN8-Zq?g&MRd~Ml*!v9=0x^{%b1{8np&nDaM3PDnz~$@mrxd54WOSq ztJ@je7ggZL!l&_KjARt}0O{BpJ#dX8eUpx!>say&vJB)dDVhrimQoz4FsKhm^Q?b% z$3{d**3LP^iB(Tx)P~0rShf|kp|M#wg<3flpd?SxvLek@ia8LHTWOQvTQ1oIFWeS4 zeGO0Bdsc|pGTP3q;BEOe>=o`PrF!S=S1eBIJ!#C?h)nIp-7FQ60ZdP%$H$3t9;bg( zMNpQ>7pEq1#O~OXXRVL3szT{GDaX~Tv1G0CJ&+8*E8#|j*{#!LHLtIlvmoTsTXGGV z=A+-i#mjoZh!iG=7AJoJ>Ba@|*u+60S;iI$L_g_0GPiP-;aU_VC2_~rbfilQXzhJqjxTZ_Xt176q3^O93s5Gj^_Tv;4ZHx#tb!&rpyXs zc8nTn(-{C22xflZC9?E;^YPV+I_lr< z#r~A<$57t>a$vi{j4EBc&^BYLcaeAT;36UL772cECkJ1}QWidT6A7zkq73r1D=tRG zVT1yTazhk~k8*E_O#bWTNuW}ko~%Y=A)jIrSFSRVP5Vo#;)jc|`kC!unKtlq@z+r1 zR0r2AGaA-tVDf;NIw-cx1dL{z;j)Iyi5`;ACkU9~Hqg$`yg!hBv%av!{& zkIS4xb0325;cVY}@V&`I$K#cRHe=MUz{B5e<0Xes;Or8AO(EQ6e}>Z^s~NW(HM zzKuT!7hgM(XBwoBy$e~;dUOiY24rueN^==v%#9pYw%w#bID!_7;n~U*onT_YY6vo| zC`FG9PU3j>Jz2Q!7}_mdSTbJJa>@Pdd)%G+zOLD7fT;sPQG5AkDj-zGuW)9Hl zQ#VA*pQ>*Bie|eD!^X}eO)lFuRb}B^erk?8dWpr&0>saGnmT29&{j$Rux4w+Phq>k zUs)YvM_We`L$W>6S^;>#x{*640tu1Z?&)+8*z9VZ%KTVT(+pFEht_%-Zv%|wZrR82Ms0!kMp0-~u@-#|h#0P!T?z&=`uqokpE{uu&2gHj zI1T3MjMr#Qd8xCZI~B?A4w(@!A|CoPRFjCwd*}pzXfLW8FD4EB^p{(=@igMJaG10`A7puiOoh1;9QMqZoLpV=rtcA<$OhbHMhw<#J&2nGd4ZjsQ zxol7z;F86_2)rZV-qq3(WM~vdHTU`EA*h7W6&+Q%nG?*;8)JM4X|}-!F3LnP+V`_V zG8TN=u7%JGTA@rb0RtTCcX0eM_byUv^sz>|s&6T=qp_vSuhAe91#g^?qdOnO>i@uK z?doNg0X8qQ3Vukp5GHcc|$^s?+Ap@2Y;F;o!s%?90V$` zMk2hzu(th-A6z2a2QyTV@$QGSf9G4e>=k&_Lsu~dOKE8v`$loEd1sSJqq37?n<%n2 zx}z?Ev-q6tG4ytt+=>?d8#9Ay!K#<`&o`F=?_5e|eA&<4^fWhr{z3AEatKQ}|6+nB zgk@1jXQd(IopzfNNH*uTGwH{OT4HaN3YJx0E#?)caRv_1n~)MnK<)LQ*MPH!_GEQ| z#Xr)sPVVgY+U_VWCn*X#Z3@%8H&BOk1B%LDeEe(~(~tx6+RE&iG*)F`qS``ssxO(t zNFSkUf~g>3-vFE)3Z7a!I!N`rkm(o<&0$W%Z1@MJR|-UKh+d0y@7aKJ{(>R= z?#L__bu?s?;edxBXH&G?42qUPC&N)eoV&sDx2}2r5%%;tBY|O;*Wr7x%kPlB-r6au zsh&mrKV-dSP+U#aEsO+rcL>3qpo1s4L$Kfw+}$Myf)m_bg1fuBy9Rf6cfQH<-uJ6p zb$`v&RM(mAKD&4K>b=)qf>4rN6Eulw^wHk1u)s-);If)I%9a-I?KoOZ*b-qWVXXXX z<6V$j9R;G3w>}B0-3H6mUTW4xFTI^sInIsOw_3geCjw_qw_1+hGnviSPZm2p-Atdu zqS6;ygBf;B9zHI6yb zlmYBX#if4NMj^3%?EP?8n`!MOrzI0*T=}mag)C#M=gog9(-NlOD9-W!?~}d z{XJoh{E)|8>64K;{9T3H{9&+HV>01TEY{-#A!H*6Y!d`OLv_>`DG?cqimTGvf<+nd zVI=O#F+4T=^s|&3@FYE~QPjfgem-;pck9G$3R-ING(VBIkqfl%$X{;82N?IgHk?^`0Z2BKwv#8gNr!BuuA$yrjmRpOo_&ZIP;-i zN3tu;_uyq^qwznudx<_sCm@$h_d~Js=%e5#7gC1bT)`1`D;8bf?sD2;Y*4`j8o)(P zkL?pYJ+&Gi{azmait+30YijQbx+kZLoAB0Xv^JJNB{OWgb2QXavnXr|+y#$T1&^Vb zAk3rfG5FnD3yK~WRQ#SVc#9gK2Iuv5M|n$Frt}Ui`wL9oOM3W9)VAwW;)2Bi?5qt% zkC)-8>fw&Hh}}!olb?!b}ly|d-r`n@zu(#tLQT6qaPd|k_SEVc^1dCyDY(j@fN;xz*V4*yGjVe82APqK!cd2{UF_>><+-$xh$`~GD6M3yq zae02?xZb%Qa?NUQLBs~o5h{5;8*}(%C<6QvF=`quk_~&=ZBpWjKs5!{4yjtDxP2!bFm?#tvzHq3pZwE_CRjj`<@SM~BjLmhl(`m3lOMnGe1dTja3c*T zhbL(8K5Q&`9t#ZIQ^`hkrZ%ZG$we_Zc7%33D_v^ zQCFQB+af^?%6i*8DUT&sOd&hZDn0TtW{-ByVZU}CV*=`+881Qpj)Ql4&v>uBb(N+zQs4%40n!^l#2pe!xo-DaUmLkmQ@Tbc`KiCPo zuS+nkfK>><1eVCWAJYF%T>M|8`+tj=v9fZp{cjO7Hcrm}jhFvlVR24Q?*9pkFGpDM zIOt5sHgLuoE_OuOmK)|wr@CIv`H-7s;kgt3G=D4-r}|n*@dZ!6efWZfS1sx*Y?G^T zda<${br|fEktod2Vk@j)S05l~i|4p@q4#`$cx=x1{(6|H5ZJVTH!-tt4Lm>I=)DIa zJrc8|I!|Q)KLzJF_D<@Zs`Ar->phn7sm%6_pY9J0Ed4sNH)osY?Te>dvEC2gA1`h7 z-WDbR(CdAs0w9u1==$~y2<(p3!(>hX)G%*XJHLnU@Fs?m9Hh=(ob5^-6F0_L3WPHF z5%123xrvymzDR@m^JH!qjp^2ZQ}l_jC8|gkI~t%SDyCrXroK?lfnos_Ii8y%;=IJ% zS*37xsk*q&G36Tj@k&jN9Q%2>gc4H8JKI#nq3D6da6fL*umhjk`w2slL=Krs%cEH1 z1l#JG758P==a;feR(X`4>s%C-!gF#d-!I+MbJ{De#Un8y%IV04`xNHr(kP0)Wp__; zF1Zy;2jm>9xaBAX5MX}^2DlCzhTBC zSfpvtC&?t|(VHd|hgue0(s>{}h`g(FW(DNH)n4@b;6~W+?~hQ?toC;E#1P6c60i1# z7o@0znnMD(!5
89DGsE7B^_Vvf{RM1+cKD}c^=U|l%JPW4b#3D$^aMmlZ1^vd(DfT zc36G0gq3!EA~>)td)bYj;6v!!v1uikDBXl!Q@+VSl7;pw?3aToLY&Bgg(_#*hPZD9 zEuxj@lA*P(Xk%)c+GUYHs$R`vOCnSPxXDTj6ie?W>QPs(f`ps|6-yWy)V zozwtzvul2y0MxBI>{u>OS7fMey@NELZ>`aJEzFhE-e>yUw^Jxrz7T#J*p~<4-^s1I z`+=fMrxL6yG71Go5Z4MzT8UMeO%r*r{MKv=)I)=-fr$1wk&vw3?oltyDS0 zeyCURAA9NU#qbku)wL_MsNktXWrt1tB)BfB97WsRREbP0w;YL!AW1nW~**^24$0+U6joIH*OfNh9I^Dmwu5^A8!p`mQR zM8*HYNwFu^4C-~A$0*mdcrh2JC9)KAM;+q}5J}DD+1C*lg{s>1-pYs1K`5F%{!U5(|Zk`+X`{ox1u`#Lt%%t!ip6 z$t12$*3r@ERt0k54eT5&_dp1)r5}%im(Ko zaJEab;)E{(X+_)CmTIMp6D}?`qKP8AXe}q9$IZ-Ir0#8!;DT6L`gR45<`6dbPTzyF z{F}7Ys?T9nJ}U7F2A)F5k~Kd}&b$$(7^LW?^SNRcuI@N6bQr<6M#&D;Z`aCLX-~~4 zGk6_Hskt+3S>G#g+zAzT48^$$n0m;%23})=R={)QH*s&IKzCRB0>7zcDEP1mE&lmz=Xcq{WYwaeTZHXqsab?tjPY9=TC@o60g(u=CgYOGa! zQ{HfYXrJ5^OtB>zKEd}J4PQ0^(2x9_i^q<=XAr>VM)6UNYSjP9Uioy>gmp^IW2S3L7uJw?bjSJh=$NjqBQ@-~-x9o?o_6(>o$F|_R2x|?*L3p*XZ zdn`K-p7JKbr|No&uH@`N#${U8KPBw%36p13m@^^P=2g*Fd1R*aZ{3lf2weZHmMXjL zkY?n+b*zLc%&2MRyX{lE?G&HFm-5WVH!^nj#2-}r0R1m${m=ow*Gp}HyLt-VuQi0EgKNmco)lYi++}@C zoEnpV@avz=d4yVhGFp@dM0^+Rm-^g>IgmL%5pKqP*7y&h#~mg2w-%Z<_x9!^4rEAK z)*i)00ZxqL>I8GJNE{?$4=pXsOz;j#EJ&^)^|9`l)j640o?XHo44O?j!xU@mT{#e= zb$%y>fCcSV#mObH(*i>mI_%J6?u+VA*HJp$?~Gubg&Gr$kk5zGF6bqizsgfy*~#Lj1twb4Wz$y7l5@ z#F_Cr%PrJ}BF|*Kq%id$AA!Z<5x;f(gxAbO|^FY$CVv)?8b7TP7L-IgaB7xhS z>OpTAE!-Z$fbvL$_GKOZS(%XbzOMdRZ1*Vk3H?fgKE_^n zu%$Afp>^&pIGB}w9eqHT1F~}(Ya;zNcGM7dJC}Kc^Y-G)Po^Z=fRBL!g<$Xnyv6;B zpzkL-Di^?!bI#R2pQtp~pExBZe03iK%iNpKlT9RvL(t8fBoZ{p1OcaaWDTErprP~i zV4hG*8WS_N85$SBa3lVOG{^{AuyZEWQ2^_zAnFtj$VY=P+=7kKN&(PW^I3G>aZKiM zwJz#N+T`XT*d@n-wxcCh5WQnd*q=LV50DZ;CM@WEcdB}a@(mXgjqDs(E?_?H{sFl} zm>f;~r$^O(LEE{QFT_6m5uZJurU21FM7pehX+|jn>&HOSdi>A#O~306VK;4CoM;*T zT2Q$FW9t(URgL2IO%)s$u-ugwHN50AUiTQXw)nYfTtG&uKkE&(rk z8{SEu)%2*Zm5|Lbp`u1<%&>O*6c{G>YFkZ!xC7d#>1u*22HdG8pL zn^(MR`wUyyTg8rW7K&I7U?{`Iksa$b;X)-Zr1NDMAhZIU8(+_t&TqDs2_AkXlTHmS z_b{3BmnAfNhj@u+L(yyG1Ui}9GpKP{32je7a(9p9+wEk|2zGlE_m+u?3rO94$HDpF zrCl+7v4Ly{iqIS(=O{bZfTno6=MK(52Tko<7N=)JAbKJ;A^LhNv~v#3iYTnq+c&`| zP}B%2WgcF+)`F4<&TJy^JaLG&3Vl)hcR_3ECqbJe{P1wE#UgtOF|(N{W;1oa%^^t} zu3tQo~qihD;QT zxE2VGla8T5CX2^*C{R)f$*NX0+zvzVuqM%FOSk(9Fq6-~xs6R{=b3&1#Kl3Ikt$Xr z6)K>VSXR2i$APh^yM>pe__qd1aYI_A0?*)<-|Ol|di6&x95vzAB zX>#ox2b?gRxtqrrWzCCVN8zS<%xN{(lE%yHHjc6Z9~BK-Co3A5=K-`|sn4wIi6cx7 zUwK>ueKofGFjVR$5;z(TNb-;5c=EH39xf4FJSVvNVr!veHBH7LUi<24kaDlW4Q2P2uSxkECY1H6zidjRj*e1k2Pk z901^>mF#QvD$x>l;@nAA^D0=%(Lt7O7w zaoZsI9&DrJmnJ)bZ<1VatWM`uY9D|Z9)hAzRs@|%-&RhT;s{Qf3hzuBq{|rj>k^|NqS)ycT$PWjp%P$qLR23@GyY-(CT`u|c>5DbG-g@tlC$`_zvdmV$k`hX5ye0E`Gukdx zUnF@Kh6$F3Y>LE@=R2ngBWHsexdhH_!aP|j$w&{U@J@3sq-PC@>L=&GQzp-H$X9wj ziYWU|*#>D=?udyV)AX57gPuYnp_~`A)r#)yNlr99e-GLOufRTM8F9be8EYxkUvS=N zK9|a+A6R&qmX@ySUHb>Pq^y?Koo;-u`#_w>HnvyyY}@!58LMkBlmk_=O@@guQQ)p) zO^z~(;WBU@u;hN5X%KXN8j4HUe=%s^#X#;yi?I8z>hPdVaoU>hW#ir1rbl-^06C9W zJD(T7CN0nP5u4G5EY&MZ=i)Uh%S+(bD-UJ@fc^iEv2zNtq>I{g*|u%l=(5c&+qSx@ z%eLKR+qP}nwyV14^!HCpOvK#G)j^!hld*H<%DtcU=6YRiB@VS=Or_NadWe|B9nOyk zYQ~8Pw8o!PeN2#QC^Pn=@<(cfqLL8ew_j7lQCeOsdBVzhHq=nNDIY243l)w#atL8V ze)f1Rkr?9Wt&ustAIr|kJ{op!Y{j@sMn>OM^aMV;tUEprxcK}CuHE4Mnzbzvcyji7 zSac6DVu2cPvE=XuCGO#|py`g@Hz_-p6)v z%sL)f_F!kG5?~9>5l(5*b(#I>>v|IsJaAur6+>~`{FMg$-Uo)jc;x40IZ*745Gs)8 z?~qlrH~Lmil5R}4u^nvUtP}h=Fy*-QUNWUbbrlp&?Wb7af_wI~&_4aA7U%5qM-C&s zpfOWYK^BW00|EZ^FTk>od~InJ6F)h zT?F3N%Rr0FBR_HqBxM*03pIO{v4xx>S#xuo`TT_#Af$i@%;*35ri0uvosIFDEndgwtF0r^B0Qq}cG! zhAWao!qR6C07{;4 zpfC<*0&|j1FgAYk0}~x(&y<7IF@wf+h+1hz zHvIaJ!xYkg_z1*tkoID=1Xz_aX#rPCn4jpyE}}u-RZ4IV7F#DO8p47N%wH@z@CKUE z0vgk;M~&>7%7yPTr4L68C9g9w$LbB|RU_b1BDS~G>kqFL3E$2xz2YQMES{j;?0E(x zX0W4b8xmIOg>ZBZ>Ky=3vBP7zI;BJNz<(oa3q%N5WwXOq!+Ozxj}$lXT{ik{D8hZp zd2#R0XFRHE5wRtE;g_0Oh`Id-cf0P1I(6c;1{PcB+cj|Ixlu?*%nL|&9GD26C)I{} z4I2tULd-(|1RK3|&E1J=vP!ByYUapLcN5A;lPdw36t8AHHGa0OC_@^{LRMr0)Jg!p zM~r#i7um9<*O~4qoe(thoYkjV9Q(FE%v}4k80Hp%9{&q))I-QuAZ1cx84 zUbInl><(yv!@cqYeeQ)6rAmp`-B=Obf0R9VJsOX>Nh#@m^SG1SkAZSjNA-xY$jqwG>eVU2 zNBg#{u^=t0d8f~eOQaV2nI;7E6+WVhuZ2225&(-_+tMdPB>h2GoFdK<^5}C07IDE+ zrZM8clr%&nqv{i~pAIZ^)#SQoEtMq&CnOT4Y`icy4qfR{!EWjuN0xb|t{%B1Khru1 z6meTOEZrlScG(H`XtHSzz#P3KF`=fD^hRpyZ2-gFw#3l}06m4cEt$;_f z!^F|?g&U_%wi;G&@*(6_HGzj2T-m{9jDQQkYjtE7+_MYbRyQO5M}WCOg&v2&zD|XF za<(;Nm#|52<7Z{lbci4NlzI*hde;Z3!@Rc%l!Cy5zQnC8zZXh@l?<*F7 z5SK{^q$ko&DqaBZ$l;t7D#S7B4i?~ru7|z4C$WO)NCn%MfZzJyuyb%cLBjdK zD6K#D?DS5MN6t0HZb2nAY)c^@g3fhQwkkU%28=r!^f|oCFATzXL#^ zS1n)7U63Pw*&SEly6lQB_V1Kn8uk%BM(7hwN>l|%{4^0jjpzcLXKYwPe^i^1Q}VR2 z@VYw0Z8dP9zmVpEaoWIn1x!5fFaJfYIQTO_G-#!qvyoW!+R)ajE?CM{rE@9=zpT4o zNz2Ad>cb+AonH4io(&8&xntdH^0$%-kXFquq5+j1{xlX>Y@Pn=vuZye=)OUg3i9i7 zz*|dqs9p_5uPxg)2WhwW(ck9Knv!bv0@S>sCktQAKXMex5sV;n{+&SW*oWkR-vkp zihsv#M}UV4yD>1a&!k6uI#H#k1@?nL6h^+QeO4AXRttM*0z#ftF9vIYnJy_#fCsKo z-h*SKTlyy*TGpxZ1>qi+4*HMGOCG9x19vLLNdje-0k2 z7WS5^Y70lwPw|x{Zee|B2ig|SDBrPx1PaA>QLPmLzm_{ol-LF17gj0V4LC(sX>Kpl zlDt7cK7`v0gg39pIof^OQ4joAPoq?W?9V3|8v<+rs1*iz4T?2OKL~C9&DuFfMZ4Oz zsmyMk)Enu#B<15Of(S7SK_XNRy@6+PvSlmkY+Qdo6!Q4l&=8zfVbD|8HTMF1cN={W zgZP+gzjE^j=$0JuUh`2Yse0X>c*(p3*dN_$F6mrM54gTcBSmnU0O=;baUuv}X20-> zmw}|BYap9O#2xWcMqNyA_rR+W$b(E9T)V`vWM$kr5)jTngtgBIWmbRQ7pHM6koh2R zDCC*zyE{^kw3bSaVEV)=mi&j9b(wkPs2Qu82>^Mun%xPAmhPi2ZhUzWiapsVhMwSe zQeHFkyN)Ii8(#rJ1sU3ZVWJ1PiB~T<5_UYN)rB#}VifF|%o5~j)qXv(>~JQ#8A0rV ztXmVcU;I?6{NE#MvK7-&63fo=tK&u?a!g3Ob5D{=x1S)6Cb(tlX23!>xkX_YbMXd7 z8GT4H*8)FE531jvoed25bD@9b!_u-F5AtfEv3wnyUFMJsI@9uP5)w=b?jWY-Wq!R3 zkpoo|U7#`PRar@TUa$-ttxQakBa!(GrcXAJ=IN~aUtu@j!cQPKR>S;w;N9S&4pV3U z%v~Lfo`IiVCTz-3PW?eo@Kr2Q4AZf5Al3kyhExuTK1F=K4`n;!RHC!8X=9I(0#fQ9?#VZkhd{Sii;t)?0jEeU!AW_z-ME7kT76v#>qx2-i&?0qi*Vrqzz zM;8&&K2J2)MiA5n6Uq(ZCkJr*$jWew8SV4{?$5mm``aq0sJ*9__kC`^ldrzCH~|wT zq!gy(^nqL}H20n&jNz{_QbBV^=iMOv#@_AVYBKYIGhsUk)!#k3lH99H$lJ?9*t?H@ zSjOKH`%?rG%4zj);N5i2Gw7^SD1{{!YoFIdMJ=z5A{e!owan@iBO?07(~xBIg;NrI zD`hMo-rj;e8y33tr0xUehj0uT z>S5`TUH!qY4ptv^ck8FV3mdQDBqzB@mzdAfe~Wz(c$PrO>yAvhZ6_mZEb#1-e7Unw zk9uJ+Zso^l2Fo-C$X3!>4KDiwRK-IxnIg|VKG79-*rcqEcM#0Hli=;9=Z*)<)%bgc0{>7PC*@lcdX9tQ(((mXh`OK)<12! zZA@*t*%V?ZyZUPp&%h*bGqSP3V2oxXFl5CEf|{4b-*XmrbQ6Wf{@`=twdW01s@7vsneB1a2PE5Si4yr3dz4d1Bs0#R z!1r!RAUTrWJbgEo&J08dqd_k?**n6Bp3zoXyh&pBaQ$H`n%DPG@zzJ|gcWstYBHiz z-R>%e_Z_Azeai}eW_SiLS!S%7ZhH~POr_mVW{s)1Dwoo43lHsRcRqjAW{oGYN~rH0f~c$`Jl2Fm*J zW))OAbW@b27d+y$OA13Rxh(&12R(TTC)`tqTDs?wQvKU_3MbJCzeIM43}|)5{f*x2b)OIuA+b`Yd$kt9Rb>3M0l?ueGlRZ%3EeSzaZxK~hFH`S`RD<;&TX zn-5=x{%6JvK8v{ns0pd|OMrAO3M>*tdn}S`UFWvx|M5OL86pQ&332<3+TQZ z;~8ChC;CSdL!IoI$n6!pX^$#^JL6I{OyPI=IS6{n8ho(@yLbz@b00txSNtj6$;Pu? z3|G-9v9qID3Q1Ej+1~QhOCLlkAShYM(T_b^Gs=j*vdpFPj(wQcSz9KKGD{!SX)@*_ zv~F(Wou2@nhkQ!h(fzS(c+%(Ud}*^sX~Q16dRNCnycM^lx0N`Yp>2+D`(Vqmg}uc; z@2x;p>fVtNNm8#;x`NGGDE`EQ!rWGmI-y}nKSe6>slK2k4 z+13Hl(ykctofY8o4=|2*6{2!M#D(aed~v6PQSg6Q`!%Tq=Ys}*Lz_>T8o#vJTr#9a z^N*SuySLf6luU(Jnk+v~p8+j#<1c^wBx=v)l?|x`eMGCHE|)*fzcx%75j{*W5@lgS z00H@F88tRUo;^{rbXw)oDxN zzl+XIa>}}S5BjIEXX)!yRPbP&%bJSjZ74~)XFrRFLNm_9;-)-KMK2$>cyus;s|t_T zE-Z6l`?47x<0~KtSZ;?ioUqJmc8ID$bYtk%Ao`z{*;{Cb$m{Yo#xQlwLY{75C0H;X;EaoS5f<~_hGGLpyA!9c9zsT3LQ+xkdoSv#SM6M}?uZbaiR&zC43>nBJ7d_%1f=X9C zd2M6`5dTxpggqg_>{r_~p%NY^Vc!l|_9jY$JMCjRDMfnXh=vxU4ZBi@;7vN50 z(qmP8F8r4~!ztbX~GBvtA5ju-fiE zm^?q$cY-YhIoJoi4_|(|`b)9L!oU{tlC|~j${o@#k3nN%#jwr59Qamv-G>GKz<*d| z3^oeVidLTTNb1G@eWQ$VEP|;B%CW(#AB*UXeD*|md=YHqv$BWo{*^ZF48ymL!98Ha zy?nSO;-!60+i6b8dN+9v8(Es!s8JiO-QfFq6rZ7ol#BF*Qmi;$9c35G!}tf+s>(*c zY`NXu=SuzHqHB(M3+;^8@MjR(@0ZCT(rhfdRDLV>t6v>+*HTzwEL80;e z_=OtIv0<-6m+mR!s)O0+CA5^Zvuj5Ih4dSFpSSls&4UBiF|HZ&MtKZNDE)O08-gCSW7J~_8r>Jx!%vjZGZ~0#1|W@xb3g;%M|VmFm&7L zHqYNpG#8-5DbJ0w5 z^ghw-vu=M#@P-Xqqq25J8EB6rNt~)zv$o4qxth=qgt0;`gJyA#=9FP=-lS}6m_tzE zu+NIcto@9oT7Ze%>%98N@PLs7_nea0z+kEuN#XpE$TRpHh={3?U)GJv3%Gx;JXvZRPX{X^6C7Qmcgs_teCoxw8OpWOb7qx(hC@e(TGo zRT9DE1CEQ{Oob?a8m1z~V>zK%5)hBwALW2fb;u+c{Riy?LmMDJB)lk=_3L-@Z=Qnd zQ8M8VC)1pSzSa|8r)=8*iE)1_1K*batAk`iVq|QPE|&}nS%_O%jWo@;a&FW4@Snyi zS=1e{=Eo%|DnCggH{?9cWcFrtJ z6-N*c%2bI{EeMjDDs;EE%NS%ow zNnPPMA$Ze~SB-s41Z~np1ZI_hdSsejRc+fUO^)jT;FSV|C;m$=o+&LoZQb|7M9;Py zr)HZ=b#??gC?TIs4qt7FLBmvu^d%;FG=zd%ACyUug#h@Qn&gBeSKcN>fs!Ly5N=hG z_;TYlBK*3TVAe03K!<4gWJ_z|#hdk78sb!yA^PB7&B3aSF>Vd~1xPx{%5no$x+ES6;-P*p|6P)Xqk(?do;joK8T*KakwvVR?p=7u(BIx{fv# zltH-}CNSlgY3Eo8|NN$D`dx%CJYK3{;!HRqh7OGHfU_7s4gy+^{2= zJB1KUo7A9k`P>6EXfhQjJ9o?;LUH|@k8&;&yR$&mY2_`{Y6LD!dd_vJ{AP@L2U_qr zx!?i4fyyP0JC@@slmCN*m(h@}3@4t`;y_85iTRxjZGD6QR$5@tWfb`z1zuzTuUQjx z=`8m(yXgbE?`ooDeKX}-btlxqk(+NUo{rW82!H}L+a}mKQ*)rrX7x`Z2RCBuP@MQ$ zx(>XQ)jut5fSEVG0PTOnVVgM{cpFf))`v0OzrUqnJ#?7)hD3NIuote5USKGbuMV8K z2iIq|T8CJe3cu$DD@(%fgixB_p!1W)K+_B=M68@> zbLpoNfX>Q6tA9adIb^g}=}t&p54Q$svhTE3JCwprtW`_2A&68k4Hp4>Xj(=0-{haj z*QJ(Fcqg@4OkF=ObxGaG!?mr*_?G5?acF<;K36Lo4d225jqGlgL_3wv-hS#4VT(n z+{jd;=rg8jwybM`{tPgK%1Gu(r^o$IUn}jFGqQW+1p_r7r7eVPpGsc~N%O&!>dchx zoGd+;VfCUn*OQIW`yi!ez^g7+lUxF!{hFX~Vw77(r78saGjT>RztBG-0w4Pt><_K3bwJ9mK4y)xm+ z)D>jh^9%@-qsF6kL?{SwO{YzLRG5c)@|QY3@w@go$Ukwdz*1ETbaVfFPHDGbX5__~ zlbePg!>#$A>MF@mqQQVSclKr1x62M9E)h^d@8n zy`A{)x+2RNSL%ht;;>}k{sTq`A+{J_@4D81<;=pKxa ze3g3W76EcP0$33fC*|9`Kx(M<)Qnk4S#+)a&% zDEF0IuzJ`ZtDn=l~9@X?Dfdp_36km)Sw zV_I1oHvIQUS(Tact~&7>19{^Irg+mOW@}nV%X_}+wQ$0Wq+QF1Kx-WaMirfuc5UY9 z&S_R99RZJ6(a_rjH_s_hjBP2<{*;j5POTR^{y_{fK)y!XF%;t??Oufgg=C8xfIfjY z?Kmv+x(XuiV@oBeY+`i^x6qOK^~Qw`Q6@Y4oM>_M>9H9@5?7=4VRn8M8?$a$DsX4z zXZv?aNZn4}MXB9a(7NF;Ppn z0I_wQ4F%GK*N&&Ak*lUcF!qeJSIYhs^^clmyP!3w#}S#+!7;%* zptCN7{y6WfY_sbcH`(;fPM9F-O|BL`)}lBXl_1qEVf|c8>w*u#VT^s*G!al|3`P%w zVD@o6wJJahKiU?TVGqj9>v)GhCKNCX$MNcl=8&ouAS{> zFU8i6AljYKJweT@zi#2pN39jg9xKFDNa$G0O87ku>LxiCIFl{}Y>%RQF+@syAf8pYV)Q5bj za?;z%F>jf}pZ3Otk3rO5I0X}2p2Sh_@U?W`&kO&B)arWwz%A}c?^g>U!FP=t+1@5G zPaq9B9sT7R`fz>49`^`L&xt_Q(fWi)C~pE9J+gfPDd~Ol^b?hsQDeZ2$cDLZGbb7h zFaMF$zJ>4zW5uuYwFXJ_{l@k6OX|Oem)_Q{8$9=P;E=Uon!WZ;^(sB>ICR3!B6oky zMYC{b76#nT0n@($uhdpf5TF4x_4Ox)uPy?5v=)7|unKfg&I5HsF%RZTyjtR_Rh5qn z1lrgmpn*qX6W#G@ZP5VjVP#y(ufU60Hk|S$me1L{ zv;Qmd2!-W2{U_OUl~;UT>x@D(72h9|hF}aND5}UXc|AW$0j*TSlIn{B`-9I;cVixC zL^~rleKsbLhiK@Y zcrxxE{WPb!D!rb6Ep3Q+)(LnFry1g)1^1g&@sIMfBHemNR+a-i!DH#H$C^7aM$5S` zyJCMBBp#uYJK+V~!g;?UV@0s(6o03qi*1vJ`hb_$OZoWJ0<-7pKKJv1jgl(N%R3~LbOve7P`=# zqga<6sB#D~!&zyJ77z7&bu{ z`gVRd@y{FaO@0(Hj@5u#z_TUOpy<=fW(U9tr6Kh1`}AvxBrZy;*>|G8H^7sQ?dI9j z0#ZEQF}T_bYdvY{He)lD$K}D&d9~2UCq*lcLS2XVIq^w6b);SGu##S+d7WHff4VRc zVqASZG4tjsk#U&CwbM~cOEJ?n9*n*Cv`-*~8SE74gsAr(g$by~0bnh;0MGIpB%r0V zdyoBClIq0AG=W_NV<%Av1xenj$ms7E+kM9y`M@v}J#0nsoDHet0<7eT;Vp!W0BXJ- zt_loQunA(EUaoIRtudc13&TZPJ^kYzs$J&X`Jb?Q#4Xr~@=L9Jg*riQVo41Dj436(St?0?2W@ z;ZvVdODp4B#ant3j_X&wn4Y!@%$icKhb2Rk6zM{PVWnVSj zR!ZRtkdVOuV+^iu`k2V|dO&Ipq4 zx5n%(%K^WyZ^7^T#_Yd;&vJ9|j1|881izi$YXtefQorMyJ=SM35jzCG9`6^&TN4?f zM^)DPJrVaF7Z??KKJIJub06Alwu2e{T0YZ7o{uI7y9Id5TM7*<74<xXJV<{&j1} z`8D-6AxLe?c-Ue>-Sg|0{0YjlMFmTt-}h3gGlO<>&-a8zPqy*1hSiJy_lbhv+vAR} z*Sqz*!-+h=s9E8t)0R4A;k#J;{YHWM%|ZTynpfj2QND+281mhZ>zDU?X31fT&vw71 z!dkX7c(Q?;RkLdPxarOGT<-H!iL;z2I}^j<0|D<+^PIV?D!y?k#J3PT6Kc)0-zYm% zqE2>C-gz46Sra+LaAQzXqbfeD(o@2Rd_Bel?THtH=dmfk{8@2m>gE*DHr$_?p4s65 z7joF=;B-Ujpf?Sts3=+Z$#_wp~DX;s;t8Z9(HkGjF9{JyqIiE%!JBm|Y zMjmU1J*VM&u8o^#`BYdUO^GC6Rs$TNgVDwL5jim*-1nHg4(f1>aHh^DDDY}jW4SF{ zDpz$`?&f9B?b$EsR6|!fHo?TnUpg4&wWt*)Ws=nodgkTyls=_-PRu#ZIi)_XT`Ixj zD@k+^s(cgN2_y>~O@HoKo;(m74Hzh^kV>14RucT{bbYwYd1vUYj)!B?%@i>$7w{?m z4aU7Z?^k%aAq7p3*l7SDl+vZe5~iU zESc2FlcZIR^3Q1uOWUPoRdvbX)HI-F$Z7Ia^HEUImmAY*jEAy{Uc%p_y#^HxpTi7` z?;GRG=alE_AV^1*+uBv6%*&c>L+^i<=PAxxF4!gV$}u%tzt9IehyCXn9ZWF;IKvb) zEprKMO0JW#;OaR(@j1Vz$Aja(;Kms1{tLRT2A2#v$4FZ*u*0$kD^Vbe;B2~T`=+uW%=0E!brEyBe`Y?JNtQELes_33L;RO9a(j$c0h9XHni-d%8Er>> zH~#bmX=RJ$KG~O8wh-q&o&;BU&y)b*`<+N@>`NSEQ;x7mN@F50IzOAO!?qpP1h?(JL>8ftikq=$IS%&zgR9aigD$4#hdaCk=ZCV}O%NB7T}aZYd_tDH-+=mM}OH>r{aYJr+riJEBj zzDPhw3oOh4^_1occoB1o5{w!jVq&S~#^U<&0#()7fUUK_r|`R_W@5sGp6d`_SMuHtQLqgfqNtHs~{F>eJ7>G%7#HJQ7=F5W;H9s`X4o!BRyQ9(?$y zbA9Z7*~6I7TBNJh^x1QbiO-$D{4dF|&lae{zrW08@>|8h8BF7p> zPFT0-mdrilapvvf%|?8mUHp&b*X0j|*|6QXF(n@?8c+6VyN8AR4fL^@ral+Pl=n|c z&_&p-v2j$MOg!8?s-I4tlMzWKBJH&5VkuLwAy1ZTv6JV=C9I^MX4h)U&TzvRGID4e zUqGrw-)XaygB|S!=M11~#o$&K`fIJjb8`W0vM8w=?Afvn=dbzDbF8oAzKQB*Ys(t9 zo;6(tC-*qD*l9DCy|Xe-SMeN$)wrG>glU1L%m7=dge;#X8bUi%HMES0NE&IGB(mO7 zHO|G5mSTZC^YC`X8zr(fV&pxDuBt^L)VMOxJ84KYianFLK~pzT@*vD5QR<+}f3eL< zmy!i2NtMDieT~(EwJvkFjQ%3`%tL8xU$Jpzw`t_PESJ)aZ#FB!VY;-QD?bk)W^RPT z#ZNK?P36&!)@L|^B1|^N)B2G~x zN3s23|E` zajiJBiC7EycqgE+;qb?_^gH&-WY43-5{)_8Jhmk@gsK5~8)^+$EJu6qqZ$@Ia1-M0 z{CEt=9P8)It(8(tX5*46A~ct;LG7||WjMewEVsim-T7f+(!a%8#oWwu^vDxG-q=81 zuvH3E9OTv{=FE~E<3Nt#+>xy=yFSyMDba!0h?=p-=%LU!rf7-ejh*2Ptb zUDDCJ`y_WRuEXY`i))<6gX?vH`XH6Hx`#3t5d{Z@9huM1Mx$>2be3@Ytz>}Huol4C zEsSoWQ1w?4zmW|B9-lCp$kjOMpe=7_JFc7qY6x1|P5WK=PV7qg@?5Z2&gUu~edn)S zOnGEZM>cR+sMOf~N!d=o9;J{ox*R2(&f(CrXl!&n{HXOZ8dROZFRruv-*Fzihd-0$ ziBTuI;A&^j!OY|3zaJJN@{(=Q@*0ftn;aZ2Z`9QzLT*-Efvd*EC^A2T3HGoI zV%_Q-ZIZksfpXe5{tTAVcWs*0OS$1?W`0-Mv~V<}t?W(bcT!zYhl|#uS7|jm0yG6( z-X=jLiL^vtQm1a3kQ7ug(PWy2_ngR|R7 zA&YLegz!rniDnpq(AJLy4wp-ft7YV?&?E1O<|b+$91)^$^kNC3WCTjT&gciuz#4-l zZAc-O7)s?%2*7oO=VSZ>DM2yvP}PBk)ybga%vw-lSmmDKfI`NQX77^0U7nk(+NC|YAV_~S$yZl^NXIo=KgBv|(aIX;gnB)nhCvx&D;Yo>jH+D|#LXCD( zsFPz&Y?M_~4J-8zzm(-ql4f`Pt4u*SK7OP9_?W?J^kYoeL#~0t1q2P+9`d1w5_Jf; z9a_K?JjL3y)9ASzZNn^D=FarpaPfyFO9cYZVRqnTf%yu(awajp=zo3YXSu1a+88U`( zS_~{OS0}>K^*m_!R@PIOAmhQG$!HQ2nzmQ?n+M?eq7C9F9bQpp=hB&I`N!%E4D#{B zXz&=}Mi6FP-HgxvWmnOvS7j^EWMol;GWVzsbYrqL6#WA#fYY{CDo0xb9l%sG+`S$7 zksb3@=+=J>90g2$+{EDZTf_Nx1~O7XYOg=^i!b0(S4o~Hc}WFz4wqSFE3Jk|OBfK) zu@jbbGF>uEL#|j_1`oXB9q&CE26(gUluVMv5`|mF=am&GKD1%efnU0o=P+QAin+Hb z#emHGPj;R3VvUh!!GBO1i>21v6Ual9%SJW}IFV>RGU0ObD0lj4eN6?~B;ISy#@i8k z3VJ!gmwn;|6OQ4+(GHy@t;J)u}I$BsEOoT@VB199+pEe&;;lT4zgk9?UO z3%i`VW&PVY?x`U3z_EtjjR?rc`M!&Y}wdBCH>A- z^8~TP6Hc>)0900y=_+XZQf9JUW{m$z9zos%(ble3ZC;Zk}z3zyHs8nFq(x18BKm9jc@CXmfpcl z55J+yOS@#FevsRI*vdy!;X8Y+uollvrZ@8yo#Jj!jQm~|Zhn#B%%!ZEc~wO4Wq2H! zUJqW8@e83j#Qb=EmfmXArGF3+UA#I{(|`2zTyz%`GirY}P*yv9=M}wVe9^u^LL`u7 zuvN9=yZ7nP3KeOR*S6h2@BFhq<=p15eb<|zc8Z}ic1Fs$=R~3#>~+BGH@g!04E;nn zcG0NR(=C7S&bnFA+z!>&DG#bNP8g5OXa>?lZj2BY@9I#(;AChqlM7hU7b-MwsHcHW2iI zC&(NS_QU7*qo{U~#*Nb9pO2|nxNu^l;c z*wl~HMUiSricYzGafj^@3f#g8Nu$3=S_?|Rv@W%eRi|1?2F+JEk0`iW%JH;!521kr zw-+W)VAogWtfJ?%5NK}Pr9MhIW_IUq6eg4V0pxGas=x^^YRii+RFTgB2{e^*s-s&_ z4Ht`av8OppQlQ!qpiq+x=of4c>y^cMR}`vHTGZV+K;VV8+Y9BI zeY&+JEg`sCqbDA4pGJy zQv|$xn!AltozqzzM>iej9k}9JOqYmOry}ll9u5>T$QpRT-CRq(;^D!Go0#xcn?3iP z=)nFegx4^rkYT8*+CWfh5F@529-hyKg*aiVkfi8=cl@dHhiZmGcB*8I8Q03#o}V1Q z8zUBYz!EFm^ROi_}rx#9CG0jvnwvug@5sq~Vbh6EJ z3`d?(okA%G1Pm}lX+mO~lnh804B+cYlBlyg1ajkrcl2q9Why&l-_*G#tW()dmQy$1 zVv9i#*0*B&Da5jh;dle<2fI%by@zmwEO0Z_yE+*l(|zXn#3=Z1By|#ZY2o|AWWdUU z$7%dm3;ZLD(zjzgS^T(4okA{J*&c22NPJiaeq0pr9$iQ?Dklp%Jw#1z^-$ z0siw+*y}j+hGL#>9%W64zais~#K^I`)2M={r=YS%l?rqt_gDLXF8sxff{0iFZlWZn zsN6XJ-3x62Q+GWJ^uZlG{}}yoC!z^;Vv+=KItg%MJ2ZI)BU*ZLi!x27#zISMp6?tu z8HiM#4v`rVNnv^vq^ZUhtw=CzlAcsqhkUY-x-NyATGh5O=RWiS;YXH6+Pr8nbE;k) zef#KtvtC1;N=1_q5#v{6S6|R;b{xzK@B)_0+JfHT2G+}7ot;gTm&E?YAaNXc`qhaL zQ{!7yO)J&VMQ~%2-;_%^3jMX9&c9@2HsvB-uIC&@emW`$(`$Rv#O(OE@`5lA)Aqfc zmWsl93Dn#6T!FD?yI33~?Rd;fjjx5oX6}>PdWWW z*l6S6SM0x)Fi+Iq6^=d9Ad^JCRqdYraBDo6xaRuY0G=~Pbo!Kb>S5c`%_>9AYaR43 z><9yR)!eSe5Fv3@%)aqoliv={gRMeH5b&9CgwJxx@E!0V@^AcHY^^8GwZ@`4ak$vEqrI=D0 zzBPjr!%D5$r9=KI_ry6~xjM+}o)KV(xBKu%&QU|S1LFOZCAEsQ85ovY80_h?W#olx zdDFFz-8S&5=cwo0oZN!yY9lCg_=9Mf)ow5T$j8*BMkx6A3$wVzOtLKgi)w{v{9rnK zi<8lU;kpQ73dPs4eK#Y#djLEYE&-Nw>Cx8OLO=AWqWEVqdt(hs7cYY)Q65FSuTJP> zETl+rRWLH_i>do5-e?Rzrf4ea5s?;;NsKigvTnLl@TptSp-g^@!glB~vVJ(^wyK)1 z^b>?a7^wGy*yVb5N}e$;H{3LMjI1VIWO`kWqe!DI8}sVxHvKL;g?G;YNT7KU|L&7L zg88Vtlw=0)zEj!B!u2#Bf|rh_&NUoD7=t@RpyX9AC)Y1d<2nTgmhE`mKg;B3HH&7| zVbzh3_&4z=mccWr8XOe9bY}BAamq(wKQw>!Tp}k1nJl(<_MXm}=Rv=qiOGi-Wfr%d(;)xCl;|gk{JEo^A;f z+e<_x@|-d#G|-FkMDKP^`_^1WaWFCIPFt?dix0G|oBSR#5yu9mal5Dj$ zhL5tWRB{+)NE;ZQr?|qBVV90!#KU?B4p3=>7i@7`=-cV3Z z6SofBxo@=8SOUvayiRE&Ze1OdKQpnB8ge+MXn32-O+vFvU>qmeKx@rL7{70IkX@>Q z9-byKQL2=IMX@LlPW6lgRE=l!M>62!n!-<(FVFSgm>Z;^#x8{|8FR>ec#q+hwtcH9 zm#lG0_I;XP*Pn9V($U3!p`|=IJjar-QS;ElQRvjApqfm_s3VVMk^TmkOgH3HNyKS^ z#5Nf+OzPY%gL>QIyxCxPmDOF#6;gh;7C@g#x>9<#cIkM1Mxm*D6-Rh?vP)*{+BB`dt{=)WOI2_Ep{uuAtpC< zu}s?Ow-9D#nN+)na;hcEnKyC)$VA9c>4GS`+*ExB4k0;@CDrg>t2d{DmamDbMhRoD z^@(P^n=~m-68Q&IWKy#XYC?v#u+r4q$A;Nc^Uom{i?;T(Y(P)<1!X%4JR#f1g%X*%6&%|+sX$ypoI zM3FUPn_39IAiHc5kI9wsOVqFwNJwV5JW~d)ltjj?rNEqzmt3(lfZ2p8u|i;zlPM0qMuwycLn}5+%neUW9JBTf8~w z5`!Jdbu3{ywn>Ly2Q$;ZJsVgBjMApDz?f~t_J^4-Aw~cQ>v=T~k$7xErD%=Z#9SUL z8N+#|V`vncI?Qrs4tldZ8HFY+M@kmE^OOhs|I8XJDx&aX&>|d9e6ssh_tb3}|2Rd_ z$ES?q$xCnp_??qoy!W_J)!wRW7+PIb4|?n}XpHP=br2sy_0=MeB+SGET%t%2bl*?B zLLj-tk1>GzxT?N=IPU}yqknH5l^XBe-)d|d5(aBaG3$yEAY<`srh+V3i13QS(U|l9 z){oDNIEcjI&7-sO)Pw6`PYrjfwQA+#+@v8$m62?0$+^8M!Oqs33NX(^YmQwUi-{IA zEb?(Ycae5nyF_Ho{Y>t-Us^~=MoGIt|BJDAiju60mW8`)c2$>cv&-tTtuCVrS+;H4 zwr$(CZQJUb{hf2i|8QUaryRL6bMLWME=A0kF$KnIe3b&{P@j_wLaAZ|sW=i9q>NH> z5vw_k^KPolqxOf_KyD3ph9hO%+Z;t&3!C|u_#UJL6t$nEYL*p-y<6n2ap2y;Mt6(JT{dKxjGeRc<4~BJ{h+njK zZX?W_R)7C0%NMfr@x3jQ4mwdRa-}%CO$(3#+$;s}R$aK)1LoB898K3>CwK&ecO(U) zMl`>J#x{%kF4zgd11k_wU!e3{(GN;Vy|8GT#`5*q7h8Jr>Y`kkz$q4%rdVEt{fdfL z1?Se)_yz?m%i{R7BhE8f?lVktab9wTJYH2`gF)? z*?3No^}lfL?BSX4T|$UQLHNgVkKHJN8LjrV%1S6bK*yPeV`^Ilir22>in$=RESotv z_Lkt{is4N6K#n6$IZn~p=}Jh4N0@_9H6+Re>Is~k7l``V`sYB{HK4-VR9OPTxkqo9 zRXyf$JVT3`_ETi*0%$gtTr9`Y^T+uTN1=O-|IyBlTb>)5Kjx{^wQ!>p#m|1p@U#FQ z);?;O3S=gFQ?ZbUq5h*LRDsllDSDcIXXn&Yq4L1qv8jK95u)b(oC>C;1se+-sNDl9 zSUgS4S##Qin;XXB<0nL*mXt8BE-B*^)Z>H@mQLF`N zvD#ky9{WmO?H>P;x~x~*;dr+dF85)Ux|L4R+qvsd8-n2DNj2AvoR*RPElai`mV8ae z7F#_hQ&9qlbcK_?-xMTb5GwWN=y5eR|F=p9ZlbIqyN{tF+H6KFGkDlb) zVQTsr5igg*TJ*$`>H7O;fOWVP&8_31VnsAXB11dn|BS0+`B83^shICY$TO{B|BxF4 za>$AH;TuYb4Um(mGwJ&B!h(roM*^Na7=h(He#MxJR6 z_`PK9kVgqsY87b*zemuBsOYKMapeg2=WMbn&WR+c9-hQ*|h|meubhbFB z!>ox8c9yl)^DTtq>U@$AGfm#9gUNvEN1Q^RYP031I%#NYU6bV`>4syLMB8TbsEKz4 zAE{;Z$gWeFfw;ev7$=<)FXe#%hCPn|k#d!&B-2%Sh4}i8E7=$rC|LSUs3y4>9u-yPCwpr7 z_~GvoRW6-vY*Zj9>61dCW2sg_AjH~bsfg|`Dp9VUeI#P{dV!q5xPXVB9t?ojDX#SZ zYOAh}(ORMOdA9urP|5Vq&ddtO3q;gnx*($_&WOMHXnCot+5rR*SLiuEzR={Exy5olJ!q<6Lc*D0A2du44-G+kUf!MC# z5BlcNn|@cioj+DeVYrh-%b|Rz;K)($v0~lEcmfH=9qKIhH__wZU;E6ye>n_@!XYq* zy3{WY6qsy^U3X(f7NaZN8~kZ(voNZ}OsxSjd?>k_-E@NPf)Rwn)#Mlx?EX|RSt6)7 zyt9&E;T^(q80sVqaH4zFa8QAoc-XnTuDY*$k{ms)JSLU-{n)vl^6*qR!H?X)+k6^? z8$8E~y&1J%1&5o&q1w#4aOfhnxa{uoi2UV(cf&JW(QNR9@x`@e$tVX`!Pi5|rG;QE zsnZjcKg8@j7BBTT3{K`czL|PXJn%=^o?RF3xBt1WE2BhhVO@U7Q6Elv@!SJ zy-h?qt4SG1BtR|M1lylBP<*<1MaFU4o&1}{6j!WqueBv(2!TX3mQl_2CZmhmvsxpr%ng}j) zfn9i_CT<4XcctKRE_=Cz_4u4zi8QUQcE-KHBY5-Sxo*1E>=R3R9qM()jG{mq38j>v347k zUP+)!p@<;L*^#YEz?;{w3fCcrdM$u53$SQSUajlt`6RA%urDsnnLc_uvb3Muv>&-! zY-gP3`0o3{XmW)1y4f+IJ%xEhSl2c2>2dJfUz|idKS(o{-#-f^djI$>J0DSm<_}jD zHr0m;wMT{)>EHzM<6Er*ny&;gMGu;J+O?Va2ITnL9aSzWGv=;D`2@YFai?m&w#Dy* zZ*G!_aqKk@vH3_%++<{Vc%My<)#B6O-_o0$u^zUkpRPzMKx;ao)FYBw+HCFVzLJjD zmAY3I7KZ2Rq-6s9vdNA6k*?Ihe45{o{Va4(_CIidqK_cZ?92ktM?<`*Y#J~@|q9q(osWE!#22BrY&?}6&_+lL}^%)d)KhUk$Xd% zFJ?z->$x3SzG^dNckP1uCx3-k@P8TBmp}$FQa^N^!=%P7nZk?n!$xKvRW7QI3f~F= zu-)X@%gwu6G3VKZibhkquvjiP^&i*|FnF`1celseM{stRtxzIw%&!rTuWDCPlicV? z-1Y8{D4dcVj%;{k{IvQbs9u9#b-IlHOgCT^y1frQW3|GrwlO&LonYA_*Vsn7M5p)_ zQRk7_Oqbf^Bqq$KbT~@!dRIv; zA#@jSk}?zWt|xuiYRe5Pj=$dc@wykJHob$I=EqFApXGbR8`6@1*`l?#~&{S#S~vbR*; zk4bPgXLaUOk~9S@PhnFa^Xz~V*n)fR6n!CM zr{hX9kO3--Vb5tl(;fz=#7DcvKYh;qPBU01dnUq9TcdfgBKJ_Q6NhRvCDi*KZ;LDY{WD8i`2@>*>ziz|C)? zqyvPg@$!t%2|YZiVXU25oC8(CAjSngL#DA4SKC8S;27 z1}Eel*s5N}6UT!6QnWdt!1j(aH19!Ym}fkc-n<98_4g{~rALV4i^{c9@`Q=oRz~iNm4Nvz zV=2fYrocY~ZM+(c^36I$O)r7|$3DjzB98<@NzYFtcGUI|WpDf?c8*VO8YhqUhy?C~ z^x1uva6?hvzfLe-Pu3A;fF+8R4>ww#6ZZ2FaBP}QbnTbea;={kxpwedvQ%?a* zYkG_+_+A|>r~a#W4DlMe&Eg;&>HCv|lgQfiRs>umgvuHn9K?y(;$nA9N0KiuAaXN`t0CY^C!->AYg^ z&To`=J#;#<(Fn}7xIbCF>9KH!qhh89=ciEEUyl_P-*#pg5&4^u^c`Xz`Q9{Tqmo@U z7bt=qcr9lSEO&=>sKyPeE1!mSUL$C^-f0j;*uj55PTQQGGf`W$8ZBvlsU4QUV(OYX zEb}VU$RIm9v%h#vD|O$NaEY^oo~X9C2C5+0N^$D{*4_i_mVLNO(4se4V^}DP#N_xvUaAOt(*o{i%O~az^{s6nj z*CA*lqcFjtKhn3@SpD2M&-Vc%VhBZylFdAMI@UqOv+ZjawB?sQcrGzC6s3>)v(pqK z4x_E{KrA%g0A=-`x~6N0H-wg;;oxO4j^(%2gqWj{SXGGdMbM(~ZVe8AT)vW=72}>w zxfOKV*tOt@^i0{`C-bmsqR)}!E*93j_})UW8dl1 z)39#wZ;DRj@q?6jo^(&fazYp_!k;2p{vi8ZtZTD1K*bXPi)RK2c>2}XG{T90P6l27 zfo584-eeij*>u5~YjZ{QrhCwm2f9D&Y?}{WkirxrI7V2oEAiXOrmU`c5DX~P3ShN- zkKzOslg_APrr%zX2}H|YtJp)K&(6cXF!i4JMe6>)l0>@r5(>GoI$xh<=9%`ex9^g9bb0fs32~nRHt6bSi>tuH zFKJ!5JdnOM&s;y)s_S59PN=?F&6brJ)<*&i9tQVuXDlzz_~$~ZLtH9ruviVhFNA(l z@5Nogz9SsDvwW|@ToaCFUic%<&Ef(J6#JMw0^_WkwN!@P5d3b+TgwQ+K0)*;g<~RR z-phq%J)Zh;sBOwHqRG_3lt>cG)Pcp4#Ul4paq{g%O%546Z+Lf{99!*#cQmK0#}TS7 z*&kV)=MMqD_(-Vcakmppf`K>z?F}l{$O0%2D&bh?hKTiRwCAGaojsM=Mzf_@B*q$I zzDx&^Q<>7RljG#$`ZoFdk}<~Iy93P(=X#I&%r+X=tiGP?$?7<`6KsoJ)}NHj%S(ev z{1?~QLXw@s%>~d4id4uG{qAR{*j5tC=S-YmDMKh{kM`j ztZ_R@1j6l-v$DAp_Uq_3l@QJ_9{pn9KcyWX zI`EjVu-2NMMk0O3BW*|fNtY#7#j0!I?L^855X6Ou8Fv$m2{H|Zp9VKt>1iDT%J&F^ zn}V$B3Xv^CUGLDdVC@UrM0Aj;Arf~oGJ*_)kGYPYTB?ES*qxu_!Sf2Ra`!eK7*$|a zi%+1`Vq%z_#9IXjPVf_rbe6UhSTVfq7L%orP$Ws;s*#@;CYm^8NuY?$<9l!?JQ8|b zGJ&*fgS0`n_dn#TI-327S!Y^~iFaA}0w3n%nOWXfsbf#6%}5PHAh;XG3nYkv^D)tV z+(1KQ%O^_kCVePXJO!~u4adD~4MKlF;7XulT_Fk~t6WRtAj&+^Z^C)MIM`A0#nUw@ zvngLRJ@-@iweoT#8)O9bzkg=N6QA7_&f)^v8qE(cvCtC}M@ssh4V~P7vb?Ec?O+{) zUbQH^taDtzHGu%?B8q+ULb|OM>9eY8%cFm*rUv60i(PERKfW`w5xBUWWC;&jYc}$3 z?GDr;Vd`lG@#;#IO_pl?d{ zfp)=7OSF`Ogd})hup8V77fqc&f&dC^k0r?ppGm~~PPe{Wy+qa}Crn);Vs!a!%_9O6 zY?>I`$0{)kAg)C8_WQQ#SkP>$Yzy4G+i}auvN|bV6$37h!8T%7pgsVX{LeFgaH&iQ z!}yo=ga6`N=t#E?xMPe{wPj7X2=R!l%-=#2OJk-*+jSzJ)^{jZSuydmA#_U`zOr&Z z+fHpQhr$=D#~4p|;NgXF+RvF9XoS5)jS*_GHoaUAjE*Ikb(_jhEZv7cKRJ%H?f#Gs zVF``hR97B8T?E`4y2a}p(^QUODH#(SWl@mG}WzQ=EEmnT<>Ibf(b5;Wj6ES&Oa{Be)b!Fho`yE(R7u~GHf$_@aYNB{5l05 z2PM(G_!8N+-UDb{&x8#v>-%pPWx=9?0&>^Nq|>i>6fki#9Q*1K43>9H1kV83>n|R~N7H>9 zOoD|cry%bPgE?tV!XdD9u)OF)pO_h_rcrMW7v|}4hv&YZUcsAk$;DLJ!PnP5?ZwqP zVHKE{hWpui5@;^CO9H zg&Q2{$vkF*shF=^X>(dLHB&y2AV=%zOQQY7M;a7-k)p4dY3Ck$s;}Q%gz$yz6XmE_ zi7c95eT>V2C!XM`8@}7$e{gqWD+lu5j&Ijqk;H_YBU@}a9HK+`*c^>3gskL?tb@G{Ob z-fz0%I=CGr^RD!gAMIzMQKn&jSH_xiXDfx6XC;@KWQrAFBeHfqegr1(;v(yj_r|%(7StC?mV`Lm)G`wmW|&rxsywq zU@@2nCM?}GNK{r$KsJi96o=aqgxQZVv}>dVKbo=&fBNT1&!55wO?qgyC-J1I139En zBV@Yr>V5z7F~D!n#FI@(T0^+{SV`2)W zDpQyT4ZqPB7g8-$PbboZORX9sW|CdSl6Ctbve{?UGnc8DH>)Wu;6WZOtO!1sM-A9`9bvzP}!P+NJ3B@Z5@7_flL0>rNg&AXzYH=3AiK?t*T?8y3So zCt04eUW;(LNgZm*2 zT$t*7ef0~*$`FWArzhWD6#`Ig=zny#vVq=**Or`rZ&Z3fj*7#}aWPSVJUmfq?;E;h zqxUu+Ow?U%h6`;08|GI)y`^CCjY>m_HLukZQaKUa<^!&%*JQx^4a)q@&WPOnjO+2F zbx4iS*IhsptY-KA{cVD0(fm#ogjQ+)m7S(p=(#YdAHCZx}V&R7Vhd*b)pZ3{H_&bhQsk@+Sk_V!RN_LQ@Hg zq!6G71x88`Ec!upj@Hp@u8HsUm!Yobo>-Ce89~QMkSKiIWLZ(cF+z@$eRzZlAet6u z>=J_BHY|mv)Gw14UNa`6gz{ssD}MzLH02;56eS=F(cE|<4<`C@{U@51Cg{O1!50Ar zmY9dTV}ZKu4YRHzLZLt0Hq3azg(rS}6Z0q7m7%cYNeN0s6n6Bnn>!!XG$KRe6v@k0 zoqYL>9Q1rO5u1D%I<3o8xlhxOu~kneJFCD@7~pe$EC9i*`rmEWG!K9MalN+fWDqhg zeqDd$e74pfW(}Xd{tFWlc9Y?GJ8DehW`n(9;O+%7@4g`Okihx%W41hXABnmsQFd+&{m>+b$LNsJdE(}!=) z>Ca!)WI@SF&zE4MWV0sEUpCgTOLM*N#U_ZM7com~xY=GO&*APz3CsHf0O#oz-GfBB z$>qqr4X?>EH&)Q7kRfQyesEj-I~t+WIOCh#z@ge#jd(`!wRfJmJA7n`wfB$Oh7SB( zw;htMplDO5;0{g~S{Yl2`L{6!)WW=&}@g zjz>FM*zwp6G}i1XSI)Uh`En@XWD@$7c_j#d<;;#K|fmJH*1sZsJja>2ck zC~v&|B_Jd!ovD=2tr^;`KRtPQ1UHkcbEP(EzVRf;Z8Uigd+ zCz$ZSpr^)Aw~qjfv0b;XNMj?3s|RWKqc9$h;qL>J&|^TpU5gkcmff}^svoAkz{A-8 zJyLIiWj0Z7;`$uUsoJ)QLBs6P>M+Q0?D2=z<#rUCqmxMUJZlBDIpM`I>WSvvs20}W zD6gI2A*R{1p5e!N?zz!u`O9s(!jF;-%o~dxucvR@wnEC&JPbO~8{UQ+N6ph=4NEHN zt6xt`uP& zu|FeIlukWoKNF3j@dGd_kUE+KYTEtySEa=J9<9>Sy;lE!?S~2ze-C_ zCV6U+CxbV$ zy}fuEnXfLSK<~7gY*vLh{(d|@w9EZ{dnM8xJJNo6h#t@8{G-eF`E~D~?<57A^z`vc zq$7CO=<&v%eLlFH!T(vW_$25hm2`J{FVvP$BetGE^x1EsOW$g-`t>zD?bSYTkqy}N z{@UjMd-SmF&G*Uc*E^(DToBk)tVoys9gZm%qO^s$3EBvy7(Q>ZE0MC=rEanr#D{Ug3K1)l~^D zR9lL`BBYORkq_X8g%li>QjA4aX<(2wyIy+m&s45u%Xa*XVvY#L*poVOKHUbjx6TZrkq~M0t&8kpj)H)+pbjU zLpfBUMW?aY_la0#$8?p|6Snq|oASiT#V6}0@!ploKd}#LG`|WpNIw@P<%>&j861|; zBM#3^iRH>!XZh4q(sJrF#Yd!R9T@c2xL)q4`EhGPMB-kV0J@kgCUl?%FUZ9 zY&U9MyNM%j%{l2ym~4}KN$_~HP#p!g)@U*iJ4#sNXuvO!&1 zVch9&Ts%Kt4j<$;K$?&CZqfF2YKl_h?bn{9rjC_MN_@tsDt)Ny`%f}*ff=-1>mY0j}cwi%rF^^VK$}8D5vGwUN0Xkk&Ik|F4@yo z&I{i@Z{FvN`TLP7AW>~|e|=dO%i}T)q+?Ywyr&MCKUQUpd)Y?G>Uw{OMQobq3G!No zOhpssY0xA+`26M#5s#&3bt)*DLFXa{ZWqVwu!M0(=gvowT`e`=yat@VCi#`icfQk2 zn!j;~?>T4V2c_Zh@y7^u7Pfh>{gy*qCnH-6_4;a`pZe8^Q-iJ1qB_FDovEa;k5kP}%}mt`$?~V% z5|%4Ppl~70j=o_5R1NQrGF4aQO&7k4Ktm2)0}^^zQS&%NXB zA~O8w7#Ip-a!Q>m)^}9;^z!c@=D#A+i-|0Ec5u4)(|^Ew#wX>1IJ2p+*_hSAJtMxj zoExYC(zi`|`B;`E$m|w*S(Z;R-t1G)S!e&g31=&1$W>2TD&PE_2)HVD*)r=GFm;OR zn0255T;RgqixNQ$O%XwFa^8uWY`ZPN;B|kP*6Z%lE>j10cW9 z?9`#gH>Jzl#hs#xI}!?qi57l?MT!K33;%Rk9^`hNE+bH(Nb{BZsG#FUq#ik*R`9EM^5ABa_3xYsH}QxCZTs_9ARK5Rt9@T zhao+((1RHNV2A9(5zIadRmh4SYVGHq?e(Rm59ie@>ZPr* zYG%A3I0Q8Ev7gmHd8HmyOJmKXO`KDP>8m>UB~t- z5^MM8Zp$2Jf1)_YqUMGd9a0noK>T=v!0g|Vt&ufo&S5C<7K$pxnuG|dwI(1lwPC=- z-pGe9O(_U7&jg*WYzlQ^=!l8%3zs3o$pC*F_Z{10eQufBmnKq3O*E7N7)*7TV;zo;+KUf%!eMe#SZY^!+1Bh9M@!9 z6ips8yYzj`2aH`O6+D&e+X4;r$_4os93m-l2q-$gESCcx&nFsl&|MhQaa;l$-*^NUPDfK)My%Du zxTfQpcFt2**TIs5 zl>@ZT-{%%LYiAqb%}0SlPOGq`OF`dt#m!BFkf4Mpxd%v1cG&V8l7KzIY~+N=C7p?v zrFp5?`dw!!&`EC7Y~BK|BdG1Lk5DSA&dAF!IZGYNNVKPxQ z-iM`miRxzKtU_cvEx8%7-OmyU0laK@gJ=evFtdS{O<7^h(JEA<`x4^)O#U5e0|CrU z@i*g;vd^oyrq6%BG-zsJVz@?YX+-*R@OX-Zm_JT*=aafeS@y7XHl2tH&PGJA^)kl+ zxiJ0v$U^UULb<(dz4K&u|9Ti6hVh{|m&-)&SK8M$!FCGzP`lMiA7h@kj3}M;<2k%J z7>%IQSUoyPq4TM!iEp=x+QAt_tJV9f_} zuO^gU-XhZx0Q?J-WM=*?8~0*qrP1{OuMOh&d)aFKpThtVNSfk`3a~5lY8`x9%zEs8 z%KFp29AGchv23Iyvp@OgOW@Xkqz9gcqgIp8);Lz{2uKOsEId-)vK4Q zK=$tJ1X@eYC3a=W;)N!uiS;34Zc(JNjdbQa6LJ?@I=qYnY>3eO$5nyZnU)=$lW0oxg*B;NI(6pGW!|k%+qz?!)VJSWygymm z&KVAr^)|BR4`yZ4f{PuqxT25j&tnabvq1QW~iz{wM z35F{}L%&B76anayXfV=?pFDYqfZuv;X?4Gne?5=YaA0hJTg1bHA6F8Chg-&4LB}AfX@i8{ z-{5Nt*td&;7c{D z`;Z(y9;h1o-&ho-W@i0vhelTm{|qKYt@W&Pa#*NxP_dV?U-v;NhYSlKaRVhZ;H7C| zm5Ya`Q@saSA$)xb>+@zPdX#zjI8-G(QC_1a?5d)R(#C3>JxJ&n@-wb)6(4A6?N=c*7ffWpdd+5Y3f0ej8Mu&BE9OIJ6UWixr~geM|dWG z=u`aLCU(%MNkV@W#$iOj{P9EzHWVj)pxbP90Fz{(Xg5-X8Eg+`C4b9_nR z-5s;5XUKvu+$Jd2uUDh4?ZGK4U!FhRd30!VjWp_iUobTsWL< z`_0{$TVv45P%hXg#(mR`^UPaO@{1}Ubtv;wD=rL8tp1ruKFg$qBHbTL3_tup}ge}{1Aq%Ztutq zbMW&uW>P3@)77d~cHh|DGb?SYNGySK&+EOvF>QtAyFrgGM8%>^gx1gVORBw2qMrBB zEc1ID&|LBiLu6wKw-pb`kBm+`ts$v*`P8eL^O&g{5{y-XZ-C|P8HrnF#<5E(EgPmGY5t8D%f z!*Nv!zo_yOMFh@z*{on+e5z_JZ?~Ux@*z#qgQ$y9h9NqpQl?= zwL$lQeovjU`9-n|@;jN%pjRmQ(>M-;FS`blZAsoJS|kf>cQxGb*_52c^eTf_KVA;! zB7Z(tkW`_Jx95odmVN?w=@oNAUwYB}zjF zm+Pjv9vH{%AnxsY*6WDGZ`CO+a=e9A4Gs%C&GWhBP=<4jD52I9ztFf9UXTg=*gOOS z>@HMwi_TUKlA08Yd{CaSyHQ$&@|?SLhcwM~NEmWgWohL?7gomFdE2AXo%sSAZl~sj z(Jm-Ygs%?)iQhGK^b!ZCD3@>Z*2t)1a35Z%-VV3<>jLU(oAjhUvV8T@FvsY zFeE9Ps>bhev?GXkZ3W(-gPg|#wyssO!kJ^wh4slLubI9EBQsxUqj`Sf-v#yL*D#IR zJ-q{#I4-bfBupCyU$yZk^evYd6?n+)uJtjHM)aHeZ#jQD{k_mTEC{qLCS%VaIQb@? zo|Mf%u>FGB(oK)Q)Mkw0ff@L!x~;wX-0_32;hG3ph|0BNL|dB`d2XqM^(G|08ZITn zf%e|vqIKtjS&u8>5BvXOC@TN-i~7>~{-RN*emi&iA96Ti!-}TWDEUZ#XPVe~cU%MY z94+ix>mbswFU6SDw2l}R(vQ_%s`_3jurQ;S&M9vX8w|2!i==(0{+wCd%$Z?4W#0JJ zj=C2e225M82=fYJD9OdU?d1ES;8?IXR$xASP{zBMFLQANQCp!M5Y6m;V!0g+wt)3Fle~1=J}N_Y_IA%WuZPMIbFZD(Uy%N16!MS4g|JMD^WU^q?ckBt=4i zEelhDvA{e_R0EH$Dp&;1y>JDf)xzdz&t0c}9p*E$lgDkfylOkBE4K3&#BfKaf5vXU z)BOj)M5uu{+_0X?6*s|Fa~qfw5v)fn112|JLp`4g=;>UPt+sFgx1W^~#%-9&??aqI zaB|(q2!A}qyhub*Bk~&d`&`sB75}NLy>ZFb?{nU7rc|htfI!Z#(h4kEM8q=%5{~J85pSR=TC@cb>59O zgZGPZ1qG;gCN`yrp@z^}yXZfo=lC6@itt)zY3tC)iG#>~xeQRvJq9l}bmyYNsiJ@D z3Ln>8VF?SAC|t|nt*843sBdwDh5x|`v+wUfJk7xoszB>O2|*W1&iB5{RS}pH2DWui z77aQPBI1KY6-zS3qG9O2%x03hkrXf1gw?+)_H1Z@?Fx6v@#~H@HK=|ZR;}ddDWLYh z0n%#}SqikID%U1=?t_ykoT=SdZQtBOf$4ycoP+2X+dz+swd8C|uEIPcpzFsjEREl7 zT%=C~9{Ovcv>4Ov3h%+XZ3_=!#FQ~sluK`9j~mL;&-`4t05E&eQzjaQ!NorgZC@)} zT`Zc}db7@L!FFHa5%*tLcNg&KwB82e;Oo$Zw26(*hR*g%fPedJmF@-vMf7Ep`J4lf z1ZQ26-?Fj#-fo=n4j*Y^G(^8tM}ovm)IYd{eTmu%Co4|OWG!QY_XJYWF4OFsjEcreO+^p%Srl1A-yCWf(>#&aP0>-F@d9r>3+GgM{YThm~oMIE0cIOaMv-6Eq2> z5$bX292W$zAcxH-aIj{Y(rn2>*lQu7V-cijMEiUnSplXOadqsAn?|j{?VbLSTyQF7 zKzFjSQs_h7$U+haV+gL`R)G7HbL_K1kVLJu+imr9gAOJtnz}Y2oj-**T^S|}oLnM_ z*g(V5UNd|eFd>seaBI+(7NJt3v;zuhiOKz)>KN!liKPsr*gF z_<{^x&8}Wc_4|3wtQDP$luH=kylid7N z*o#$HGkqp(_iv%RQLY&}4Wx!04KP6fxLLq-G*FJcUA|%l!P&RZ{q(?&J2;#8_jhi4Ne?1cf4|FA7$VAni{dldQUF`Rw%tOd?xHyas)Fv6acu+6^n{sKlg-A zVdmdGpe!n9aEX@oSxTpsw(B`0u%T0A%KRJZnI;pJuD|mULaX)sww82-944Yt{+N>X zj`Fjq*?LLlrSwT4roBDdI`XE)QT^nOHdyly!naFAs;i|?RFPgwS9+aTeqM6KQ`=f( zgBvEovHgi9^poTaH%s?owI_A|{8Zm&P<}igKCg%HEMox(*2@NX+mLj`MMpkb<;ujI zGU)v^WIv{AFIuau@T}@LZR+$G7Ye2Ko;Njs%0|_8<*NXUlAsVU)r+LxD3Za~V((Ie zPLHb~bA0PU<6X;@n8KqL5X=N+jZKKtm!TRi=JZ<`J0!YxH}NE{_MTfdfD&sGe2>0) zo0>WAmrwiJhoJV0dI>r=P(pRSr=L|@&qwY&Za-%CkcbNxAKZ2*zvYs-9X$%zP3cp4 z-r@<8z!JP767~BX6jhn!9+-;%IWAJ84!+jZK#f6ef@|-e&0P&PHI5Qxq3y)JCF4EGP!{rKhF^XEG{xRUbsRwye zjeXaDP{3f}zORK~OkY8I3Y-L)b>?%l!SS>F#R=~s_#_CAf*AVyNrIZ`&uvmM?19Yp zt;(S{%Uh;o+0C+m9?}>NX?-lY?1gS9+LQ-#xDx1=#SPLez>ZAYt8$WN~5PB)z711AOvX zOpn^f!#bm*PIyCp1-mmcQ|0cCg7@!^x}^@Fz_|s&Ph5J&R)n)3fv$5HD6Y1AgEs$e z#xin++iGP}AJ^0Q%P>cqaYB#=EZsu1WK!qY=YPgN4CqiGY_#CLG9RHfT~u&`7;zoZ z9`7-TWPavW4bzsUIf@z7Cx;oDiX6Eu(aztqVmxpAZw&HZ04o6FN?xLI49byxRQ zlokJMyit-HD-tU#dMfV1oxT zt%-!x(b=PvF4I^NrBS4>mDwlW2W>L1$N21#~Q=?OTX*9n%8Oe=Iq-?4L5Y@Z145G(u}pv z&CU*bKec;FbPHp1JKb=@`yKTMROss&`T4^+@ssxTHr=~?>67ib`kr~G>{@<^$nDeQ zp~LeY@^Kd@HC>c*?zOJo@wAByoo8@al)v-6i7d5QwKlEJ*Bz(Vt!U;b)3BbM_us7k@pSO< z_;9zP{8ZifH^%?9`@*rD4|QTj&hf1^q*ab?sL1y%i>Fb<>ZH zzw110NkZjk`u@(I^G>z*)%)OBx614nk39|SC)GUJsKwB|pKNNq85o>v-96lY!Jc_a z=l)BprPK{eXu4@-X>H}m_Q@@V*2>gLIncF=iFIYa?mO1hyEbn}gpK98b`yIx7;s0> zvCc}HZ@H$Z&@<9@;C$8Ieit4HBZjOl8F*sMg(b$-Nb)RR? zd=vYuS<0*jt2W+|)a{$n=$KB*`;JQQftIm}OS5A<(vH(PNS}bp6E-$K(aJR0w(_7U zMKdZ-xR5t%e$g;L*ULZK&M#;o-5&O6+oYw{jfz4sk9EDQ0bH~T^Kvj0-ua4%bmFl?f8&AlrQ4l6lb=o~+6e&n94 z`a=fXwXA=4cy~8N&9>_%>s~61uPi>LGCJ%)|M~DfXw`D}{p%*@$ZEC^YqoEgXVS1~ zbuI3Wy)Yn1=Y!pk;Yq{(qCbXayf&(5F=BwplWjU-)w(y@D7zMSwsyelgp{1G3oMWS zY=12-Iw8PgOl11W+SQ+qH?SPAp+gm&*DK;1&EGI}!K9|L&~0PwT#mi6YP)aSSh4Gy z<^y7lY=`?U_YK*-PU-gK$$Y;v9+z9?G@CGF`^l8NCaZG9hezJ<8+MOA2x=I1)Gzds zv#>vTRIl7^e;ul>7@q7maaEg(FDvR7S214raQe#n4T9XZR<2;M-g%|@mlu6QqMt>r zpFYRvhxuW}xr5W{NG+c|oan#7=AYuJJ!F^Y?tZ8uA#bTlu7Gj4ZE&$t<}jotN;3s);kIocVF1K{ku!n z8^)j9mA+9wyVKc-tuLzHRnFSCC9|@B(vmK_(}(Vm+4f8bY54QvsT^rm=Q9hIe0>ue z?>nI2Tifix%YJO0ZQG*jQ{|mk1FYZa9ku$ZD_pZ1({}Ij8Ye>Dp2~7kOkA^hnesB1$ZtNR(BKqYU``ob}#S7H5}Z&*S8*FPjsmBs-khnCV^Ee(Hx)nTIE4oF1K}Y-+Rg-mV(2C*NC|(rWee>_rC4 zI=p_+&}yqs?wE7O?Lw_T-)OPm{i=4S53M(NwC-`<#TuJ7CtYi}!m^>4QAt6@!kD!^ z&zP?Xsq8*}NnI;hm+%`uHogpwPMMVF_BDRrg`qXGEJ{@Wkn1vC(ydSKYCCoEsl8WYC?h+g-&=&ShA2N;+aS zAU`w7XknAR6u$-bF%cEoN}d<&a9y)Ru}A$T zYHt<&Q+1r`#%`E;)#F>*w?@m`o4m=Y{aQyfEM(rNOTFQCL*K zyzkM0??0?M{5)lH?Yzy$B*)sd+S|WYHBn(bQJZrYmsf0VSM6Q??~Nk-D2*{rhgp|d}VcH z#I=k`w}O?4TaLz8ONa{^owGs5q-xWsn7Y+WHh=zPrE|ae+HFUTB6OEu@R#4M=(y2g z#}pI8VR~=(wwzwmxU==Xp~;!sPra&jytG=Krlz zH8pm7Tyepo`q4kG`s{i$zlTkAvjy+BR`+jLwgoo+D@VtoPy1(Md?T{%TkqRcy~CT* zdW*yT^mn^D2ggfa6~4dy%6M(_;_Y@#8z|SmPd`V-`-~E-Db@@ zD^vsW*3Ig?edwSAlb=tyKcQ;gM4?m7l!^OY77aKjap|}wi{j05)zi3_Mc)oS& zn^SgrPEoVEG;I92cbNH(*2$ymCNxd0@UYK?sx z#m4#m?mpY*HW;;FQMG;xCU4oOf2GHiSyK5?A?et0o2PD$yITjI>2Fr}Y0CC@YxV9o zmyOudR5)?YY2{VZxP)ZS(8C>kE-x8VGsvrUCzISws)S<$=3TJc6BCf!B-{0YD&u(B zc~PjrM|z88Jnnn$_rFr+OsEqbH+5H2$FWsA*BQ9qwzjhOi6|XE4iUV)&1r4Zuyta8xBh}lMN0TGd8`R!p;p4G{g70Y4^Ua9I@%M{J?p;dvgcc7f=8E$v65;XOs5l zeJ(mb&~w(geg8q-p_Q>q(pR2e-91o}d!TsI z5(|%aULUP@Jim&2^(u{zn4P321xks0@DLzIo(o}sWWZa*%@nr9BUq3!C z=xMR$!{9v&DlT#eb#oClajk6jWxT^GtA=!T(8kZxY2BqNmrWvjd*l{%>hz#a&ETOi ztCx14@u6-;|D)4Swj9|wXlzcUmh0-)GJDed`_5rW_YTjve|DaYr~f5oc-xJu!;6EO z?M-{vVp8_-wBp-GU2-M85^gt{Q|a>JVQK4|&fI)y%EI*>lI5`_ zrp{evQ2nF7>xElxvXGJ*8|ma}z5G_9R~DWmhxhncpa%g}dW7%yf9$>VnS2gA=FK`TAo* zkp8&p6Dp2tX*lP*%k=R!r_C;}>tG{N+;y7lQD@(n4R2TOy?V)fRlTZJi$@hD)QhyJ zIqyf+Elq1B)Ehf6C3^Ox!iOWLULR21@A0gg^^@nEs*R49IWm4z%Z4aDW@2pCG9lv{d_4^KQN*1qNA64EP$P+1N zw1`@KHcNVc>Eb4{XV(~_465@vDEs}$>^{ZP2RF;kVqVlL%uH&s$4fM!mw1zra~Ioi zyVrArPn}-)WXHssZBI0QR^hpw`pl;Bo}3MhZFWBGz5I0BxFcT!kJrcwGBNHQ>^}bd zsAC~tLMocr#TFS{-c8qjMHz<&Kd!RUU~0T|UoY#t1G~F6($}48dgAe#j1~8*rmE@% zM?Rmpt?Yy>jt-ndS6^A2G4SA~@e7S_MXM{XkHrLKL6cP7J{~q#F3)|T`KQ-jd4FnE z&!_IK*0#^tXy8=8M$ZRzyVbC#vt?8FWjSkBre%5@Ee&1zxZ9b;eyL8azSPpmsrl2b z+RdeObbiSz?p8A@;buiAbOvPx9xYlrJFlMI^1ON>W;4z-amntx(K2&I5uJu*Eh!AX zdU{8bb_&P3Kko&beDF&#vPl{LI%e-i!@OAe4xR0L>c);AIkHEI-j&mXMwl-YPrhp25iRAC}(K+Y{ty;@>jGzPX#t zZZ?|#_}+JC{jdW|Zag_SaJHBm36+!y56a>_{T?^ zS`8LF`&4gFn}~+7ek)g;D110#dhheL3wB2sw(q{QMN09K690jVUoP6%bH$H0&uhrc z(u-xuub$biZ;@GL`}M%f!!oi@E=*Xx*I;J1_+IbQTwhkq)t_(VQtNK0&fpW5Iy=?P z59uD$zjL?T+C2v+O-rh3-Dc^{xTTZRwpdM{Ir>Mv^iy_6st-;xe|jMAritt7jAH9| z;o;^>y~5tlIk+g&D0WUzgQSZ69w$EYIK9n2C|Ku5%at*TDYciyysXvy?BqFH^&`gI zf0Vf{y7+9*lx1_z=M|=0NxR?Jxc}#cX~m2BcszW4c;1wyqPFK9cV;=a>#N`9^Q`;5 z+66dtT)xoseD}}uTXyZXW8sF(%|G+rS3OT(itP8{>4GmiJU_Tv#btJ0_AYM!m=7Np z{TMQ5z|zI~!LhT?Pp~aa?d*L1N1NbMed`V`VHH0-*83iRvrhc!kdY${TU5FC5CtR%(jc>SG&r#W7H{3EPy<0+4Kyf8WNxv|NC_p?6SyqHjs`1;lGSrfu9z7Adx zoM9IK`Smrgn|(`SV}b{|g=7aRy0y^hy~?`!-sS!GF08brW$lr7?9AwEg&PkU?tj7K z>!L%$Tlehj8ExP+CfdG74vDe)ynaP9DS!9l z#K0QObA+z>%RB8fdmFnWK|k`w7tfSU&z^61d7-tUYa`o|!_O~1PWvtj%V|>i?Xw>J zUsl&&?w0m=ig|AIQT1Dw8hS1@>5Z!%u6w=WrY+TSvhVh-Z613) zYQ*9ZmMdqNs8?=5gZu+LopK|4)C{Ys{03Pp^7CEM|U}!{Z7c8MN~4 z_v(vdAEy@q#qS4qId;wO_BHeE@2;;~x_`~2dPRem^y`tCW7apji9vLYZnCriYuyWn zB-~C?ZCL9&U}vvJlirooKW1j-czBA@!G@IvP7SSA>0$5i`k(WaL!}2M2KRgKSiRkx zzMq?=M};ef)y|!2aJT&}$2eu_Q&V^ID;*6M+}D#FnXKxS{mxz1DdY3X@DX8gp~JU2 z-n-dY$Do$S)adagb63{K1 z;JG`+74K}0X)^E0bN>S zs+yDTY|rfje{SvPSK93T%+!*5J+^Q5-2Qryfwe`|nNiES?r6K}*Q{4M>qfrZ7rWo| zrqA(;n{~g1PIBEm^rX$;vx8!!M>-6Cy~X@Pq<4#|SGMh$7qjW>!RGt-Y*Xpw+k6aY z(m^%rxYaTX2}#IX2Y9TL+n9z%?KqI3pE@_+SQfmeZmdrOz-S@Br0ibQueb4Z!)7c8UB1ByfaPv{C-#RgZ54H+q_tkcKA_v ztwHiOqyGBkaoaFFr07$(uFZ~~@`yj;WBBXa!)d$z`fJ)(nN|G9(r;%s-Hwl#HtE~A zb_LxA$#pz>H9hNocD7ebB`;@s6ocYI z#5Zr>Tx(b(j}y(I0H}PrleVf8Wq5>-*_n^jK)R!C0CseQRRB;_L2?2dtLu`{y74olv3}AK?|ho2Wxk%&qUt@bHg@$VF5F<;XX&KUV}J;b_g^)7ikN~`Qyu*_`!zL736>HIsD?oEsxwA%5svH7<83u~V+lnA}2e6V#l zu&coU+&bzFY?NYoYD@$9NL{a_qwP8z_jH>(ey5~bW=)B1+_>eLQ(X54_BplU zdfz=CpS*jX{H0yQjUQvup2ytz`hHpQLOQW`3HT$*GGC3f4Jj1 zTXMFr!MuGF4GwKE{`itue+ExwPn8aO#@ZsPTsc3gI32p%wL)Qwt*@u%(TNU`#f9kq6@>` zM3{_D^|#8eaC*c3Xyd-YeQP$-cPe;uD!k5&k(oDZoPP9hYs8|^#H5FDQ778FK2IrJ zDH*xb)^W_vv4b7M!~x3|o$(uf<$Qk3L;H2~XTPe`MG`;Rm1~RI9a|CfOmsGS9qzbR?AJ8^{ery76ym%sg@`xr*TFctXw#w?J*jEhc6(FHR(%WSnbKc4 zvE3}A{}lSi^FMBOR|jZ6<+ALg|Ajsmv+kLt?5wh3Wl-#=M{`qKmsI|hbz2gC+ozVj zUb97syG%t@mvng5@Is&bPwh51F83KX{lEj0l|~zq2Hn}R?CRvRIwpzxSFW);v0P6w z)jetS!R$@jDqAErm=iMRxn9%I-Bo;JmQ1*LqC?eH^~1NEwC#Ma^v#s9qjpL9^eD_q zFWl_;LRePsO;*b@GiQBDv#;L7^Ki7J@Z$LXN#CB7ys!UtQKmewoA_%2XsG=s$6}Fg|5|tyIgUUTs}r_XQtD?wa4cBis$S_cU z_pI7=rhfl?&+d3h=kXo;pA7s_)A!k9f5pbFbV1m!n+<>Mh}k-IVLQK0sUbB@bK_R@ z43#S!e|_D3&^Nt;#rQ>8gR5o_dY^YdT+?_?2*P3tsQPAndyg9Rzke`)+-LIAMpdRy zDDd5y?NYgxZuM@yx#yD)HO$%5-|zULpuujAMk5SoUz#{>QQfa0em#}nql(+xPd{F} z<+=`Gw{}m8vwYCYw9dOxmLJbdI9L+gKW)v-7b`Z5syA_rPC?y_iuDJ~4BKo}SJ*rD zWge21!i<0f?i#)pRQRLNr-rx`Dm z8AR((jM`^ezu&UZFCJC8gj`ID8r(c^XFDgS=#3Yh9ddk{7Vqo4{8+K$=amnpZ=N{Q z@2tZxvxx_8tBxK_wEc0xv`hPpPgSfY9Cj;sdCIpmu+RO`o5XV#G)ea;9Cl^S(e)J@ z-3ku-v}6f#-)wo2ExJypZMgqGh{_kq>vzzmUAp+omu-@p|m)Q{8(uOZL(W?3g_``k;G} zv{L$zBfIvv+It^d-=*iQG+Fh_wyj#9UQvAHd!5MBBnS-hZ#iml^zu&Y;s=~?v)cIN zNz;6{=(xoPMxI%#ALP}eo6E7HoL63E)ao&pH~0?C+TZ*BxY`GTbT`M{*k*X~_#q*~ z_1w3N{$Hjv3wnH_@M66Ile`a3%BwwPm3;oAXz7SCc~=_OK4Y`Bmf1tylI@|ryGA|e zU$I*J(^qZ_+msgFak+Of`&pA?!u}(Z>Q-A@@M`Dl^;f;CES?t^A(-yAZ`RCsfS-53 zu@%RA8%xD+9X)q8t0^pZD)cV$KWbMcq@G^YKItKzp`l%K>*^RwtzO(JGN~LlaOacH`3;~4v?QR&`gL+*yv42RaY zmZr_=d(~o0;M`8ryx%RWKBTQp*!Guq;`64C-&w&X&hGn$s}Acg=-L?i7fa9iF5l^xU}m+n!#u|?-7nAZd|5^GwQ$l} z{{|o0n_tP4?b&&;?6Ewxnz!S1n5#dH(#iQw2dc+;oV2}HZ`sA1ROg#^i8)!`vMOu( z=-a#ux3j+7%gus5$TMcf#16g8+w3*pvhL%UR$~fRNKKmNXZa)us{*fduXn)amMU}A zgR24i4v)xfR^v#$gM(L$7}IffuXRyt?XIdEzD_>X@bvclvG=okR#-k_UWW$RHP@x( zCtiqM-RWGbBR!^uCt3H%T-GF^hWCYBk7q60HJh-tT}$U(^X6X-2o06z)=j&$_`vNE z`$n~yaiIN?#tt#5XBt(CY1c@#cwuNj@L^GI?W&V12_b9TpNQ@zW|j^YrCG|y=7(Q0 zI&NdW$nw0=)Zt?d*ROAMN|bAuR)6-49eTAg`+6#8&uhB%aQ9x1ZPwmcaW7|!o8I!-IaSxR-Fz26L1^SItd2K%S;Bv^JB~p_g z_j-Pr^3Yb4YF<&!{y1@{_x`$dye_={$|F+A&VZ) zGjm$%v|w9)>6bd|qqhYMPwqF;YxTrxt5;8#jyJrgM(0#sv+Ik!x9@?js+r4TB(uLo zSU&0O7|_RDI6k;zw|NDVEYnk~oQy~t;u*D^KJy($^&se6CWqT#oP z$L`7x5bb(-a<<;7wTj>ehu1wkmhm9{LF4rWbn~3~2)#zPoR(x(TVgP_zIwho7V)TR zy_ac5hL^XP48iT&Jiw%Hr*^EN-*dezoyc z=fM5D++E_U>Fd_oHEP7E5v>(2c?Zw;Z`C5Mzv@c$<^u}VV1%FQZY1Rb5&)7RSu%Q0XWA=TcY`<0raa5gtn|^S=t7B~1IjidC4rWyrzHVaG zKws=Y_`lBUdSKOvq?i|TpLz@#YCEdy$qrj`ti~iAGIZT|aZt0u{uS4Z&}r2Frt2}P zy)Wnqysdoo(CX*MZM;|RFK8ssp3$jP*Y;^aMqF4)TT9)3ruV0IyVxKwEn;lVry)gI zNpE7>Txk1Mue8_jZ;iv-_^IyJj4~VX?pRJrq({~+*WSa|I7?DRdgUHRVjMjG^Grv;C?!+BGjUGkJj^ABS(ZSe0;*e#KXPu5a4@+ccZ7v%K z?Ji#$`rYo3NdE0j-Wacg*$?E#XKehl(m%D!JnW}mLDZmY$CW!)x_mh@D}tn|0pE`I z7W;^=H1#g2r{mgBH_~s)!J}F2tG5UfPw{wm6zL%Pv10KeNEIZ=ZHfJ?kv2**{~K&DW+wMn*c-*xPz_ z`o65B+aF(V`I!H)<||d~$OS1Q))n0`@ND0%vDw)h0|yQ_E$-bt{YCS91B0`H@i&it z`}U@^^QklGjb`ZW_R_a<^AZPcts3vP>+{svZGUuZVvu;ZbkNuA{DX?M+w`mU3pd)< z{Iz8EqlPitBO2#;Uvbd4y}H9cblITbaod_lO-(S1Z0%b4q~)93%?I;)osQZdn$fk+ z?S`p7*Q<(!fIFMd1x6R#-P&%IedEOsvoj)w_wH8tRr`$49;1OgS4=jF# zFTVcn^Xo~!BxVC^ZxH2vkk9~Fy=vZ^MuCyut#`aUwPQ}AxK3`R0;>!?-OcASJ~`I2 z^B&l}p6&WoPSW-zRh>m!s(18#cC)(uz_~R#9e(|J+fIM8iQ5X|S{g)V+)EgdXSu3h zMK{yGHZ^?gI$giG)%{)4fM7l2v)4A-FDNQ@k#3uCaNEw)pTDJUYSt`jw~b2Xe7n?g zSD${lV*e`B3p31G4j#O`M^trJ$@&7Hc_|g*e#G}|7E*kqU}s_fv&Jbm2ba9sG^>N- zoU4gL?%&9|6*+lx{hzZwdU%%(F`BbCa#`%GUJv#0G z`)T=l)s-$``qx$*HeFqK*6HTPDx=*`4qusEbF7og!0iETR_9-C^60kH$W>!fZx4^} z*87^_ck8oZFOwEE&F$l0WY~7 z#krwJEXHJHc;5f(eCPPlyA9_|l@5J5a8hJqh4B%0kGt#5ZW&~0KPbNH$o}ZtzdAf9 zFz(at-tfY+a|*9+h;{K=cDupXHN&=Vder3Pz%Q2~njG8{HZw{ro#|!e@^fg`y1q4x z(jD}MzHTN6iHiz`x0;k*hh(r0Lf z;_Z>6%i83-4Q;o)#h6QtiWTcxhEJs4CgIPA!fuGRa8Q+-^H!=8^O( z?*=d59$5XU;otGco62`|+b+XMBt5wLWTmZp4#;dADmkX#QaFkNNw?=zlI;BfJl7^Q_6Q zBQDD;iWA0}eh=~KI`>vJp^<_8d7E9+mrOb-nj!iW-(~*3mIJdr=ZiLU4QOn;rFiT5 z2(x1gFXj2qIT_!sTbq@|84D^D+Wjy&xUpu3l4kXXKk7BIcAI$*Z@WgGdpoy4JlfH{ z-k$yO15QQ`d*}Kke)-Pp^OW1a8oEttxcI@06^83~L^n9%Jo?eA9SNaDk6QGt82R(S zl>tv($4twyi9KPuF7@5PEeA73r?$=OG`6z!^x=hOU4^uQ9?h=HV*)d8KL5F6Wz!$m zXYE{H96k4By7hPCFa4j@oo>>TE(pB(bG+~P75DeIGY}Q69dRpSaLsPHr6X^;k7%=F z>hQp;@sX)cgGRi#{$tI&qWJ|i1~xi5V93-K$NR-}xw3fakm}!tOdnYIWWGb4OZ#<~ zy^Yx_A27Yn!{-$<+)oaS={2LGWJTJUz5UkA(=Tm*(Jdw9qvCnC=;z#mfWt-UCg1(z zq=O7aJ;t86VKQW#Xt+_A(NpuQxz262DuS=f$0SuTdDCRkkzPS{k0?r`vSg^A)a_E_E+{J@0EnkI-4|22cNzA>CMd zaLFWpbNe;6TMFiz-J5Iv?P|=#*|wL98kn>{@ze8@09b zwyNLzAK?pHeJTl?Hl;zgSgG8XEZJ zb;hsCLlX-M|KC$;&B3$!G+HKCDRD^sw-f4NGp4v&44L5WYBA8&WzvM6zSE5yEa|LT zrjm)oN+YFI5Ghq-_2^gpU3~(L)Ym}S=~>vh2KWZ~Pjn6F+}UD?zwbnQ*FXo0A=Z72 zEQYyG52Ro3Jw33mec*&ZS0kxPrTII3eChAYEY-p7^tyJ{v*_XD;~N;@Ac)H>f+n;e z*ZfJL`HxcbA593c=I@GyGNV}Y_r#jNCoa2-N>5yN&aNlcL=kJEP(RfFrdSh2qKP8W zM3HEsNHkF-nkW)Y6p1E^L=#1#i6YTNk!qqyHBqFRC{j%nsV0h46Gf_tBGp8ZYNALr zQDmAZGEEejCW=fGMW%@&(?pSJqR2E+WSS^4O%%B%id+*#u8AVoM3HNv$Td;qnkaHj z6uBmfToXm1iK5U%QD~wlG*QalY1rv$-eTw}G*J|qC<;v!g(iwp6Gf?sqSQnwyFJWK zPjg?Go>J2mr6!6}6Gf?sqSQoDX`-k!QB;~JDotBdnjWb%QB;~JDoqrXCJGNZfd`vl zsfi<4Y61zCnn;4BCX`^Qi6vNSf(e$IXo96CoM5SGl^|%EB?uf3LliL9;1MnGkQR7M3p}U=9@PR5Yk|kLzyn+0kuC7h7INgzz7J;fWQz4 zOo6}{2+V=NAP7u?z$ggJg1|5cOoPBU2+V`PKnP5Pz(@$pguqY;OohN$2+W1RU9v0 zWgGaq8+L(F`LG2v@xd=0;1%=wt~G3#U6$Gne;pZO3oA7bW1%zTKM4>9v0 zWgGaq8+L(F`LnGZ4ZA!a_r%!ioy5HlZQ=0nVUh?x&D^C4zF#LS17`4BT7 zV&;SNgqp&}e2AG3G4mm2KE%w2nE4PhA7bW1%zTKM4|-j#iOYP5nGZ4ZA!a_r%!ioy z5HlZQ=0nVUh?x&D^C4zF#LS17`4BT7n%gF+U^5?L=0nVUh?x&D^C4zF#LS17`4BT7 zV&+54e2AG3G4mm2KE%uiz0WV}zl8aaFdq`;L&AJWm=6i_Az?lw%!h>ekT4$-=0n1K zNSF@^^C4kAB+Q3|`H(Ol66Qm~d`OrN3G*T0`XOOHB+Q3|`H(Ol66Qm~d`Pe|!qNz9 zBkkfyQ!gc09$|fi1rkekT4$-=0n1KNSF@^^C4kAB+Q3|`H(Ol z66Qm~d`OrN3G*RgJ|xVCg!zy#9}?z6!hA@W4++-~3G*RgJ|xVCg!zy#9}?z6!hA@W z4+--jVLl|xhlKf%Fdq`;L&AJWm=7uQA!R_Lhm`q{G9OarL&|(e znGY%RA?5lZWj>_Lhm`q{G9OarLyA2FHWAoGU>l*`M`+fQQtTwKmB3yCn+fJa%6v$f z4=M8@Wj>_Lhm`q{G9OarL&|(enGY%RA!R_Lhm`q{G9OarL&|(e znGY%RA!R51`F1?aa$I;bo+-IPCxTt+$GK zv?$wptC-5aZM|g-q>O=-F_1C_QpP~a7)TidDPtgI45W;KlrfMp22#dA${0u)11V!5 zWelW@fs`?jG6qt{K*|_M83QR}AY}}sjDeIfkTM2R#z4v#NErhuV<2S=q>O=-F_1C_ zQpP~a7)TixEExkSV<2S=q>O=-F_1C_QpP~a7)TidDPtgI45W;KlrfMp22#dA${0u) z11V!5WelW@fs`?jG6qt{K*|_MItwaW;K&$A83QR}AY}}sjDeIfkTM2R#z4v#NErhu zV<2S=q>O=-F_1C_QpP~a7)TidDPtgI45W;KlrfMp22#dA${0vGtkU#{fs`?jGA>v$ zE?9CdSaL2{at1`sXvn!>$+=+3nGZShA!k11%!i!$kTV~0=0nbW$e9m0^C4$G|K8XFlZ2hn)G4Gaqv1L(Y82 znGZShA!k11%!i!$kTV~0=0nbW$e9m0^C4$G|K8XFlZ2hn)G4Gaqv1L(Y82nGZShA!k11%!fwnYp2KZUiz|K8XFlZ2hn)G4 zGaqv1gN}sDxREm-3g$z>d?=U?1@oa`J`~J{g85J|9}4C}!F(u~4+Zm~U_KPghl2S~ zFdqu$L&1C~m=6W>pd?=U? z1@oa`J`~J{g85J|9}4C}!F(u~4+Zm~U_KPghl2S~Fdqu$L&1C~m=6W>pmKM_m-$dI9}4C}!F(u~4+Zm~U_KPghl2S~Fdqu$ zL&5b!!SzGId?=U?1@oa`J`~J{g85J|9}4C}!F(u~4+Zm~U_KPghl2S~Fdqu$L&1C~ zm=6W>p^Pyxul+1^c`A{++O6Eh!d?=X@CG(+VK9tOd zlKD_FA4=v!$$Ti84<+-VWImM4hm!eFG9OCjL&^Pyxul+1^c`A{++O6Eh!e9&8^vUx|zd?=X@CG(+VK9tOdlKD_FA4=v!$$Ti8 z4<+-VWImM4hm!eFG9OCjL&^Pyxul+1^c`A{++O6Eh!d?=X@CG(+VK9tOdlKD_FA4=v! z$$Ti84<+-VWImM4hm!eFG9OCjL&a!sTfifL#kp(RSc<$AyqM?Duz_Wkg6C`6+^0GNL37}iXl}oq$-9~#gMAF zg(_|ueO$Z@5*0(LVn|gCsfr<0F{CPnRK<|07*Z8Os$xi045^ACRWYP0hE&Cnsu)rg zL#kp(RSc<$AyqM?Duz_Wkg6C`6+^0GNL37}iXl}oq$-9~#gM8PQWZn0Vn|gCsfr<0 zF{CPnRK<|07*Z8Os$xi045^ACRWYP0hE&Cnsu)rgL#kp(RSc<$AyqM?Duz_Wkg6C` z6+^0GNL37}iXl}oq$-9~#gM8PQWZn0Vn|gCsfr<0F{CPnRK<|07*Z8ON*_`y8&C9B zlwV_7av38FUW{@fBMV-Qaw#JVUXC&+WWnoECWYR!A~Lf=7DQ%R$b!hs3t14Ei6ILj zGc)w&7Ll16vLG^ZLl#74a>#Z@>|m z=^_gvGhbvuWG0L(h|G+U1(BIDdZ&)a%o$k_nMorHA~S1bL1dDtSrC~CBnu*gL4rpEBaL#Sr z!NQU0Il;n_DGRW0WcoMQ0tWx1QUHSj7!<&u00spxD1bo$3<_XS0E1e+f>yAgRV-*F z3tG*BRywwRWN8J3|b9?R>YuH zF=%BBS{;K{$e>j+Xr&BVErV9fpj9(yRWxWN4O&fuR@9(XHE3lGT3v%y z*q~K5Xr&EWZG%?apj9_$@m@_615qYgq9K`yizbx@2tC`KKmkFRT{3o+^-#1VutBBKsMA3-ieMjeDif?Q}b z>L64SG$kM#sDltnkPF#B9fVebT*x!(AmkF{LN-tbp_rgq2Tu@n5TXfkAL3&p2!Os~{J$fjS6f16S>HbZ7X7LE*|1z9*7kXn$1+YGS8(wM=x`s(Wg2k`| zlYj)1fCP(Ss6ePP<8fdyEWsoo!6YETVi;NwD&u$@SPVlBLM}WGEQX;7Ar~Gr7Q+yQ z&~gBe1B+qkLdb<7gvBtVA>_h?#v}lB2)QtXFbO~)LMsj)_K=8>1#QM80F?;2&}K{m z5Q@-(1#QM80IdkQ&}K{mkc*HDZN?-3#R$33W=sMQjnJA1ZN?-3-3Ynx1ThIfIzldt z4NL-1kI>o*PY{y;1SI4_HZTc5LqaZO1Csz`B(z53Y(Pjt7H%`7BxK>p5R;IFvjI5? zS-8y*l+dCNkueECQ$jAzGgKvH;cP%xLKbc_lqF>0JVRST%Sp}#)Fos=WE5fuOvr^c zqYy)5LM}uGgOHifLKWEngHW1~3vC925Sx$-*#Lu56k;hDl!8Gi3b7OnLUcl_W3(9z zO2MEMg&4{cT0tWlD8vw-kPA-`g&6u1av{&ykV1k&D{(wQY)GL(As6xt1|dWt7upO4 zp+zAV@(czcN1??&@(c!{NFf*U33{Vi@Y zBqU@(WH1O732m4-&(M*Og|h)A30b(!(2|ga^9(f!?YB4^(36k_k-;D&CFJ5K2vG@H z&}P&@=t^h6OSVnSO(a-q#&5Q-CWAoZOvCwG>+Kf5~DGRxfXVgKcS;&QKpbkRN zLZ>pwGwL8TE#yKrPzNDvAs4cNItXP8o$eqTsDlum-EBxD115JDGnAseWJ(7KQd*+3nH+=ULJkPXy9C|<~gY@iN8^g=FV19cF(7dp^F zHc$s4eIXaJfjS8F3%QUD)IkVf$i>-!1cr{vxXlp3kcA^d216Fk281wV;Wk4GLl#6v z9fTT&4&gY@(8G|0vjIg6S-8#6#E^ya3{?!B;c+&giy;dlqYgqELoT!#Yf-3U$c4yQ zi$Wknr-R4_)}qkJkPB@_9fVAVT*wCMAe1t6%7`|j4nizLF60??5PBJMAseWJkj#(^ zc}5+CYK9Inkqy*A2xrKJY@iOZcIIz;dDqw(`H&0QKqZFGhfcFO z8&LX?h1(3R4_P=e)IMb4Y(Vcr7H%^XKXg2f$f(2+{g8|E4A~D^I2#cDkcHa}=?_^r z&k+C6!8>OI@*lDwGAc0?K;%N3QHdb}A{Qc~5<>?>NBYPHDlw!$;-kPTE~=!3|GY@iZDB1A4^ z1CGmF=RyKLN-u|p(G*~vVlqr zF%i80;%wma3}oRpYeYnLdSv0qDliB+54kup1U>X3iL(Jo4_Ua)5cQCS^9)%JSvVUI z_K*dU!639f^oj~?MkR*4hg^t^N(_Y$x%de}<3kqCGgLnG&I^&jAcQ{TLS!%qtq-{n z84N=1L+{Rz4KN7B54n(MFbL5PxsVMo2;C34&}J|Q=?}f0L!QAP)Ia3H69j`00FeuM z27}N5(Q7_r0}Mh2L@s0l3_=M+E@T4?LJUN&3y}>l2t5$FkPR>hNf5b^4KN5*5V?>I zFbH7~y^%yVz#z0ir46hic76WIWR5DAeB*#Lvk36Trg0E3VU(Hl}t zHs}XUWcoqVX8J*s4f;V7nSRi;nSRh@gMQFNrXMtIrXMufpjWPl%yp0~h|G16EQri? zkSvJIb&xEG%nZ^yTtsFD$%4pS2g!oS%ph41nHeMtA~S>ZQW%k$L9!q+*Fmx%GBZdP zL}mubg2-G4=`AxNGlOJ7WM+^oh|G16EQrhuk_C~OL3(YC$Xo}>g2>DuSrC~SBnu*Q z9V81PGlTRV9FdtpvLG_oL9!q+Ge{OhW(LWE$Xo~M#X2H0gJeNuW{@n1%yp0~h|CO< z1(BISdQ*?cTnEX5$jl&F5SbYy3nFtJBnu)lgY@bjk(oiVATrlMvLG@uNESq92FZfR zTn9-@z>y&pA`3@`RER7b8B!s#aAZh@$ik5!6{2ez5E%>#U=UIv`W-|DgOCc5i|K|` zh%8JuX(Gzx1tfdmc>_`*vhch?ukrCaJa0fMM8AW`U=UIvl20Hq7^LkP#{q+o3ehhk zG8m*6W%y-e0}RsZBX)s7dM5)5+6)FE6(SV}@(czc6(Se10S4&|n*)MDIw6Jy*#Lu( z3XwhpZ3cso3Xx(2Z3csMqQ(KiAf!U{%g6>8gj9%J$Oagsa|@0G2I+VJ7PJ`*LMlYU z6=VYpLMlWqWCIM+)`bItK}dy2_kwJIK}dzjg=~O9NQFowgEoUfT0ikW0S0Mx0t>PM z2B}oTg=~O9s#_Wt)f@c4k!d!Eg(K5k2@7X~W+GTPGI7opFi7ygg2_2B)bh@N&{{Pz97LJ|yYzv3ae>>Zv79ne>#M&!hAXcK^!Slc@0I?E{TRacU z0uU>a3z0DkK&(VAJP*tQ5G&F6=jQ>j5?Oc*L99d;jtsF9S@?NCtV9-WGsH@yy+dSF zVu+Q<#ZMYyC9?47gjk6z+-8WC2uvmlVkNS0Ht>-cvLG^M0i1Y}3vI?MfXiZtbVSB1 z0Id+YkPXZN&1N@h;Dd7 zo>7UR6(Se1fl3Um5V?>IRAOj_XmUd~P>G=xA{VlO)i5rUAs4cN)iCaqAs4cNN{nk| zX#PYtuo}kAGUP%wP>FH547rdERASsOL-$%C8>qy%VuoDE1{lOGGvq=xP>FHT49(}r z1}ZV`njsgmfl7?)X2^wXpc3Q88FFzppcSG@!EJ_Ch%6i#S|PGqz4 z3XuzWMkR(;i0U}9fl3Um5V?>IRAOj_$c1d65<@FQ>j7i~l^9wfav>Y2#Lxf>xcD?}DVMjeD!h+Jqh z>L9M5Ar~T}4&oLXT2CSysDsc7kqd1`9fVehT*wCMAhbdxVMm)$2cZ=r7xIic2(1vg zkPXy9XoYBfi#($aLMucrWCL{&S|M^F8>oZO3Xu!hKpliuh?daE2I?TRLgYd=PzRwE zA{VlOItZ;0srHc#)In&4$c1d64niwLE@T6B5LzKx(jyzFgU||*3)w&&gjR@L$Oh^l zv_j-UHc$tl6{1}OvVl4Xtq{484b(wsg~)|$pbkPSM0Y%LHlP(E3%40sA+m5}Xobka z*??AvEZk;jg=jm2$f$$R3XzNR46P7ZI2+Ikk%ij~tq^UCIM2`uk%hAXtq@rd8Fdg^ zA#$P3sDsc7(S??Xj5-Ld5V?>I)In&4$b~ke4niwLE@T6B5LzMH%Aw7ugU||*3wcHz zgjR@L$Oh^lv_iBcM4nLxp%o$*vVl4Xtq{484b(wsh3FbjWCL{&S|M^F8>oZO3Xu!h zKpliuh+N2qrVjpX14;WXO~k)#AT`(H{I6{waa#m$An|ti?;A*5%tM=PWDT!=IE0Kk>fqQ(&g2X-1#ra=-IS3$c1cRHH@2p=;RC8z-kzm z0g(&Yz-k!x0g(&Yz-ky*0+EZe0j&^ew7AXC3Xz2)Ln}lU&IYtXWZ^bLD?}DV#%dV% z1Cj2F^9-#JSvVWe3Xz4|46P7ZIM2`u(Fq@C16m=nATn0NxGacVXfsyBxG#uYh>X=R zt_-5GfNWqjj9Y`qg*Ia~jEjTFg=}CojJt#AGHA3Jt6^LpL@wl6vl{+;eS&oLKlMrd zyPD!eUspk2e_>Si{TBg776T@^1QTQfA@zM=jmkBNas4z#xy zQDvmXph$ggAeAaaL>VmrMYNlsuk+~X>+j;~ulZ&WOZsyU`rZ$Fi{Wt#Of$O3Qu$|gxBSPeo+W zS}JI8|8b+a-~VJZt7qBYb(fa^G^my6E-m>*^giHEd$|4nNBvb7z;gOa(-N&kXdNL^ zpIp<)qR5hJ0<9Tn68qCSta-c&E9F0?cmHUBf7j#k%P)G2<%U8%bJ6nS4_-YG|99brVFY?w9WnFI{ZKCak*LD%sX3tQzm;L84Ef;9)QU`g@KyUSFuOR*R z_YCEBSddV+%UOApyU?N=QAFyuzF26HY(b>{T*SY<&?>jbGOKbnNo5CwmMC!vlZI@|zE&CU@OaJ{Dmz{O|w!`JFwzRd0S6g%u5A7%Z?A6w9igDTb;Xe*) z66uK45+Lnihd@PGJ#GE5`vEv>5m zMTY78bADF{}A_@C=i*(;gf_n40D)E^Zf@so(&xzKA8k@R0AxV-*KrB+f|IsGkn zt)(5%I03+b{)0~demA7cKhdInLfMd34`uZUk61!;H4SMoo%jgz0F%U*>4zRwcc8PhvG zQlrv17aNggMno?k|I|K9d9D)ypoqmC8!6EN4`gd&Z^hFg<0p z+(_HuKl&*vtyJZ7xZGtIU6CcCiHgpB)K_fK2N3D(mL_X@?(`AZKW=TGZ%*~~@rR(bE%%5+x$++n4PDleUI(W#|c^>63W>;l?ms{ z>9Ts^LEO??V)b5vKCerUT5d$rS`mHJ;*aYx`mD4P%9**!G=l%wXKg`NzmA}V2RNoX z!9{e9)}PjAO>LrDO!c^&*W_gasNeRP6wV?N^r6e7YNj)SKdu~WPBPUC5PHs%@*Z^g zD=*p@t52$lUD5(5jOaroB3jqbpa0kgP5q_kT;5|YciBas9@q4kRw3%Ioz?dE4_<{R z%P&!7pQ`!iam^jZxaKFU9@ix7{L@g@jO*WZxZGtIp0IWiLOoVr@1ul& zLVnlba!V~^lO>iS^%tL%ZIk~+;md#DLTSpAy3e!*5tp+FDf?W^KR;**?ICFVmkn-O zmeSSYw8v1tf>WRU{EG*<|Gn4h^)(Ib@^=(vAI1HBkIR-_;{Wvc4<6dm@@rJt2c634 zFzp-Yj9z>EL&rdJ5>u3o>pyP`r5V`L-yHCjeWa_LE^9_L7GCPpAUXs4qZeMkd&cE1 zyy&}AX#GJ)wzTk4-%U)H7tmhu4_J8p_m^(GO%~H3uB4n(+_F#U{o_OaKg_*P&n8K7 z+yon z7dTcC>EUi}ZjMz)QwhM}w)zRPiZ=4|I9LC3%#9664!KPu8o;POe$cqsbr8Dy`}E{@ z{046a?1}njfM5{cM;zZVHYDG1GkyL${yF4UKxId4C0(py`u-v|2aAiVNz zx45}Yq@X*s7nmuVzgK;kV60QjHs=z^Q?hxHUF2H)`Yw0B$H}grA9T;T7G`f3qbqOz z1#i!JU>4uC{D55hZfBUAT}p~M?sh-s){eOzqebg?(2&p*ab9 z6X>1Dt(nwBc)UHSE&n;_ez#YoxU13PHj{(*=iDJ9U({C70eM0Vvpy*O`8ni>+bL#C zd0`m$UF#~aX`(#g@??w0a{S=i4J-^ZNwDVkl?+pihVK&s;(eTsg@txd5%7`1pRyVga^s9s)+=?? zgFG-FUz_Q_HA}X)n6cf*KS35K%mp!RPY#L$ZS`Z`m5#g@BRBIo1NqLrdM*+Vvs6G& z8Y=w!Qy!_v&NR0Bm~HyCK;vqe;NYb~5KhUfb-(Kv2xr-(S=ECgAC!j40#*P4_UgX(*xIq4U%xOQan)vxS z-=Fgbs)=Ta`Szr7R0Omt#@nb2jT>{?{9MzitkWY4^vGgL$a_6o4!Y0o4$y^XcO^?s zQF|h+A2m+Yi0su_zmHn47l!3!8Il~fZ$w@%n(7R`g%w{kB1_+JKQVOg7<_xb*)s9{ zo|lo)FPkAqv@2T=aJT(5$-PQ3!`qz)SY`2D&fRsb2bg0$zg9C~aBqyXc-xf@?}50| zrQ?_Hz23VqEo82A_a2BVUD$d+@!Hxv-8(=Nz~MZwp(}VHN3U!>py_Nb_WNS$UUq5` z>sH766dH=^?~`{;xfi=y&`L37*oOJQb<(_GNWHT805>~vJ#H518RYIg5Yf7{_dp)7 z+d_u7kXbc^=c2AQ9XP7z4Z+_jGXiMerK%sWUS(qTW@L@`YU1~>drvM>FDjXqc@{4& zl99)I4Ra1Uii-eU`f*MNJ@1{BGL*p*C*#P#2Um`tIfP zs?5YVP~O|b-=B4lW|DHY0s}@&i&+bsn<C>;eU*{R)WX2&Mf1H1g_deix z{+f-Oo#wwx5+?T;JUd1bHVkxX#;yJ``^nF#t@V0)tK*D2?dd3KjU%6r9b1u7m8_TkNN(PJLwr8^3$o;&kwl=uKD#f8$AVs3LhX2)>Ez{ zTJ8Hd>uDh;N+IS#J>)xhMXnha`|(`!4dxHe*<0NA@FhBoeRALCi54ACR--+y2Ro4o z=Jm_@P|%Tf2Q9Bcd7h2LizeMm8?zpEK>s=B{zxU$rtO}su`!1kv1C1yNMQ>2|q;ooH zJfB9p%*>>_;qgwz%D)I>kFWguc^K1KXYW*7vi&xQAz4PjiU=RcpRDfK@yM6V?@Z0@ z%m3L=dMt?kpa1&~X>Fzc^Pm3X`ssh1g?OTbT!3wFw2Mq~q5IKIhd)2& zcDd7YwhS0G=J$i~&yjU9{Hm4nrL)dt^WOv>lY#~0QBHNpb<3#~uT8<^TlgXmiB*Ra zP1yBdj7mmAPp(J*`K8vEEKR3hkDfT+&y476hZN>I+9^$vN`Hz9`r)0@4zW+b665>+ z6~|KPDXw(kdO5q)iS>QNt!TeR+$!9DOA-5qBh4ALD&$6iOM#3!r^*~qvRi5Lp7#?Y z2Pd?cf|SYiR|THiHhyy1P^>gdeGt*+de`QTpr zjO)JFBd5Oab?KBkz1X(jI1X7N7^p9Vt}Gme$9-Cj{^nxG%}%&$?|VN$cRl*Vp0rc@ z|DN83=RqgC@Fs74AN{wEIphPSF-tyR?FlAtem|e=gllTHQ{!+mhLw`yHwk`WPlkE= zn%$(UcfXg{#`(MP-i5d8s4(99^V{9{pI3g+)(LE2?n>Q(`Dvx@&oQ?s#_OEvW4!x) zfDRc!fG#Z~5bEn|cLOHg0Y5B+LViEXlap2mXK@La2aTIN#=+ zGt4#<3(Rr3o?hLfe#$<=p^dWt2eOQ9kRW+){NEknFgdcD8(5|AMShdrmE?*$b z*VpV~nD@dT=iHyGan7}$tL&h?9sW4z&^Dr=&=^%=ZQ~~gZM%$%C#GB)fQ;sSlPPuZ}PLJ89VF5V;SX}Jd z0W8IAv#^1=cc=#D!W}BaoL>3no$1wE|Hd3LnZSG${*);m6Ua96ierwFVn8ljQlyA&-W7;rq-19D;6y1?d8Q;k zWUIelsf>}MHxsavw|J#H_hOL=Et_k5Y_r8W{drxFKmOCNL(luS|Mstc|Hsy~APd1% z#W}utGyIjBiRRRX!!jtpv8(30oK;B2&c`(99&gr-^G^63@5+4CiHc}l(KnK3Hlw@c zF)G9(POSeYZ-hVYG~IL!O!Yg>jl$>d|E&J}U;q3+|N6iF^`HLyKY#rX0`zx?<5DLa zw)er0L&im#7b!0FDow@u7!{HsP8e)&gCB_bnqQdQts7hAwIFf1*dq7XG;acVTfR0o zHiX%xsh`HZ##>h#CUN z3@sa$iF5iqsl=$O})Ge z{u+?ua}LOrzvm3|{IbRqfq7xA?WFG*A%PYnE|ioHt}l5P!`gsr4%xC^>&gJw%A1VM zZp*OIXrEj46ni1fUW{2dVm|vh2k7{mJLt-vvk)gPte8H1ggUH1kLS4q zuKhh*_G_k2GM73KFL9{@aZP6ACOOkXwmBI2*Y`zR)cWJRXmXp5dgaGCaV?yY9e;Aj zk&dWQg9}Av#Mv2pAN+B~{aVKvua&QLcF5ibKOjf24#?ZHq6rtQQ@}R)S|}_g?ciaL zs}_FnO|y(>ZyYD?GS!M^y-svlzYL{2^G%x1SexSxYz^atSHuJ}3eLhOOxERR<3#X$ z0C_yf9dhjl*=v)vqV@yG<3$e0l|vWj>?eC?95W2)1veEW6B~RNeCR^C%sj*A`9y7I+N!?jJjCdQ?%m(ngdPq3<(d;KC@D+xL0r=sbp+Q(gN%)tRUJ5yGjS;f2Z}zNbHDI3dUIdjI=Lhb#R= z|DeYq>x-@$zCU@k5)b_IBy8WDh{E?m=|P*F$C`MylxxnlPdeR2K6@MdWuks;-!C4W zKu4*JiFVTn(RzO>L2>o->SepLx4<8GiQcF9FeXhj;JeCA=d39pNfFy*ED$e@KC+d0 z9Pz@AS17bw^8DwvPzd(*4KyO)g`;c*`+%S+|IONw>jwERx@|v(D-v3@xB{QS# zVnr^x@yKNOtW{fLHoQJoX!!4#4IPvjjvDd?_yJlnzpZiGH)y@o$5iiTD;ZH?m7=y8 z*fL``!fg<%+b%b%C}tt=$GY4}$LEZ@CN+l3JG~7)Y3F*8Zz}Jc_7meb9xAEf>gJu$ zLte}}CnoqhXH4*QomZewbg6Kg<>$JI=b1$@ONfm_jzW^(PYIZncRojMzbh`HFPAW% zi4%Um*rSZ>m|N2MoY?Ul=Jr;lr|dZ~PIKX{Y9%BQp6TcBm<|>GlA-f`3&Z>1)2C@B zm92sVE}yZ~tc5@06tMTeS8(1~>KXMTI}=f{qD$xG&;P?N;YOwX?oJQ>FZqzY1%7}Y zA94q+5BYe~5A5eWSP(+~Vtf00nKoW5Hd!t#?hvsz3u%hUhf9m}oRckTQvaB?%|NZy zwS4&l^@^-@D@O>$K_?q|W(I@|=oNQxC~Tq@QwVgc)WX@A>8_k>OZ}D+`fwhfpzaCD zKusXqp6lPdE2|!B$bk z9iX}4D}BrXx^Oiq)L9q9TjGzSjvF3Ft(1GKS3}3(Nw%4K_Rjb#t@m9MbCi>F8{60UoP0pP&U-QInH8VSh3xR#1J7&#;9!L@bvwAnzT<@)F z&F2q5TTX1nR(eP87&X>L@RFea;Tr4RL60Do9<@!zHm>!_WJ-IVp?l+tewZYBhq|A1 zvbcF>mf0kry3WjwsiN9Z(@@2>{g4myMDHNqIs^Qc{n+#D&GN@N_w;j|v(nF3xyU_k zcQOz=d$;@rrhr14?%eA;D+rN(-u+1_LFrRgYsvP$Ra#4XyZitx1_9yc09~0ukS;FM z#(BT|1)gM~+8*6H^!v0j8a0YAwAxYM7hI6xLhab#ZaK0AlAG35yWm)utPD-^2k!e_ z4YRH{`6p?pQ%rfc{EoNXZS|`f+{!mQ8_MuD`4VoQXvoH`*2IzQ4Ai{3>Sbc>vDy>Q z_}Tm9_ahE^U(lH&q{cuTR?oSi)fnj^+Z?PR)COZ|N<{rms;V@4gr;OK`AVG$MM5TN z60iWQuUP)10l4yaoV8-TJ-)uziJ~jMV+~s|s?fgU2X~Uc%{e>!m-OkpJ-+6-Co=Kz zAwva{Yu{u+Jx;%U$k{1-Z~T=u-J$*Ka}f8ihSPJ*TkI{fWHsx)>~66W7h73MSra^=&fY4k&ySOa@l-0-uDAv=;DTsa zRV$VU12(_DW+&(M4*9`qi_dMwSr^~8tXgZ%dq>>ntSx5Wj_gc+Oh2z3bLHu0-R=yu z&%^?B*k%Rj>fdyR+9qS-?k^2I#}h3lQwCBhU+-kchx)7Tz0#tsM(`mH+vckcl_{1L zwK9+z4w};qJ(E0J!0Y#;#p~OMg>;jdBPQpNebTk67PngjOV&`$-X?!s>PWWxrCuv1 z+v%k&y)C($Oo$?6a_rIh?|1NVV7{zND;;XA0S-U=y|S!sTE1b~hT9sCfBZ zqmtCp+hb)UADpr2p!GU^ZO*^Id*x49reAH2>~@@}0D9Ji*K zIXc-;SHIwisg(E557gs&chtqNcS7lV^L)kci}}%U(hFt=bo0uebV3oK6EGQQyjrXL z^Z8FFqz0#o4lxJwW72|mU-Ssz$;uNJ&wqki4*KXjLCx#6AJDyv0ZqtF3hx~t|_>1 z@BX5t_2i>o%;4nW-Spd%REYsQ*{vn1FrcL?%hhksTwazU8?|(2LZg;`mOD& zg4mZ0VV)uj`XGvFEwI9Ksrn0T353P_>BljTq`PA-opdKm=;HnKIb{||YC800i6Ds> zla&*>v(faNI^O}- z`~~vI)0L3kOrLvwgN6mua=`(bH@d1#uTYbFoi6wCj{2b1zB$#9FGNF(W#F$aikmyW zKQ@Q)?xgRGQ>al)oyKQ0mLy(MTyU6A_26k;Z3lG0vlslGY`ym~5~=IrJ@p4> ziVFVy2j*w*_dCpybJ`jA#oOr*$SC$NEy{>vMhuGId^L&1U`Uc8(wpfA=y;z4wC0Sa zaXAQO?n{6_O~oABy*m3x(yaApi==AeHAW`8#< z0c=4BEUo(aoFdLI~bv5kk?yT9L+ z-W9gQ48j(k{N;@O96uM=e#{;4O5i@Rz0@Y3N!B{d@uLB+Mta?;=DL5au3v$8&&98P zsmG@rJGn?Ur@h_??2XyqYHyq$w>rkV7X-|Vc$XgUR`B9(o350%%^#RGPbB}9xY(2! z{Cl;F-3V+{U)jyJQ;`v_haxC$_OtEuw`EiZom_28dW~bIZaUeZO16fxHtSuGHO^bT zWA2c%49pwm2WY7pXM(j{|275?9+ov`=e(X@tMR;BykS1mY2R_9B^RL!heT}NBrVX- ztkHaK{hCd+lWpGAh3=ukhPv&s?qU(_itlBa&yG1KfYWruGGDVCl%TmoJb{NTefG!4 zoDk)#$tPGe4I&`5>n_w2}H1FQM>leJuK7pc(c6A z8{=cQgLTf2SdER+iooyTSnUz}tjk;C$AunQSG&*;=UngLwge=*(cTR|@Q#$L;e9sY zdJFe6yf)vG2d$St|Knf&?Qehm%b$Mz z+kgAlzyITZ4qcmnmb?dkKt|~bxyO?{&kR$r$C;zv=f~Dhy@Pyb)#oUV<_Jf{jzA|!C z4RpKO>Bnr@E-k>MnSLKLRG`L5NV-a&@|x^;SQ0<{qR*y3ibC`i?^s)5YJZGPC;)&0AlxFsO#MU4nQ$m#^cE$>LJA6E^ z8r~7UI^xpdD}`+NuC^8ts+am0EewwoWadnvjLdD{%jMX2S@HTx0=Cb-C?go^9DsZB zC5w^$IYHmMgfj}M1hG%Ndf-w{O>`cSOV(fOSuXV&Id)Q495(w>3wfe+if@@_EK5(1 z(y0i#0qlX?17&-SlJIG#tx^%T1)^C+6@x8n5gd?|kp(k}M6t9)E2txg=2 zN|%q>zzpHnlu>~=n4o}MnF&e}Tkb3Fb!3~;UccbLDrcK0Ly}~Z2~Bs(kX#oE-VwfF zf?kM3N~a>(T$H!K*XE@Lxqr%mxHJ=#LiX8LhdjRJj=A!;oQ{Hd7yO_&M>5hW&gMh< z+^+d|`BzUyQeFfHRr56m6*Q7gh8+>`w=DaZil*6Xl4hSi|I&aA$;b#`J5E7R+m!>D zk`de)7qg>A?jYu%BZl1-^U^=($`x}Kz`P0m!i`qBC~TLEVG+qRYBbR_t&`bX>nruX6GF<~P-y(U5^NDfHg=IMvZ^ zM6%fn$PI$vg&ezb0jX~}4cgxRK43?Eu|XAV{E^D_g<$WT_HIwx5@8tiak=FHf73!L zETIhe85Z=piS2iB?9RlpCFJNq?E4&;X}z{F-oVVXSk1<38pv!GCWD0qnMGt_O@qbixtYvq@`VpjGMYK;mZ z)Q#IM@P$FI*VktF{57||U&ZH>jn4R3%9#OC*u!G5cPhtLXJ{eM*K8qMLX6~^^QD#o z@}>k_i|83DtBhF_>#QtUjIw|gL+*Byx2q*7&=Lp{&18;L95bPtOwq+|n~5oYt@C}- z(<+G&@l2QeS*fGF-FfJ?$yh*^?hljfK#b(?x!m&|-Y6+;-+2XvA;VNyoRpJ68%)sJ zle7l3?6&8k_B+TiBjzC|miMrnn>5P3rW$9gnreTn!gvR{v)f`0h+wmeVBYth&Aq7J z6tj4$q>*Cm^+kjJ;jj5!EvdIE-MPfXy}R9_INR7ZkS8stVgC^2cxA|07i0C-_bgN8 za*G8c1r<%ihrRRr1Odu|gKA`N3t>FYejViM&F=?hh=Lacw??N9GEl5!#0Zwd{3&Rg zg$3yIg$o19--LJobtlm zUd#&P)w|!zzEAqjc%b?B?}wgejN!|Pc;l3_ZA+{7z7N*3y;SO0bq28TOU3h?6jk2( zp0IuHtaK1$bu(HMgFiCU)tDa(VefL1R!1hi=hYkEv!Ue0zQ^`0zohx=71g8P@;khD zrkw(|MA)H?VWeAa!zaR`_B)rG!iuARj1+ncIWT*kmw`W*fCcD?Udp*A#;J&3=j(bb z9eD@(E-%t^wlo-t)_&39m^s&36Js=Hm5t0SLVP{vH1ZB||CEzSZYIIpF)uso4eobY z!*UX=zm#+q9+s1i1a@R`>vVWy^5SOl zB@)x9i9YGNQ=rM@#mdX`0p!sB1?JM)zZ9}1z@&%LuJK?;NY!9>b!69IZLt`FEF1o9@Fe7CI#!{$e1_L z)bI5e^Jgo_(m){ zM6K?C7uo2@skBhP<|?OlY?TH1*Q{U0n{)Lh_~W2^J`(3#Iv+{zwoSnlz(n>%ITeYv zx-}23EO{5eS~-;lFq?r5%C9$T2IWUOG8N>r2kWPfv(f#@e!v7V9OJPWApr^4458dT zE15Uc`=a|Nog`t24SvV0j6^Q@9dhA>B%1|Yy$wDqifK5C5o&Xh*ub}~t`8Sf?}&oY zhfEIH``}M_>z*=PL0T}YdStX)+iB=I!;(Cff~BA{e#Cp>57f6bYJ%-$A@w(DN*snt>+G2E@dW0iyBcZhCuvmVoE%z36W5Tlc88x2?+XJ#zib=JNYJ^ZG zs`s^3rFc`wmIVvQQDNxA)+s++VZ1x#o8e6%Cs|mZXYUuAEj}>4l1DvyvEOB3{cZLI zMq-1Hs_|l~?xs2=BzZAvRG8{aT*2@{a-Xq8oGb5`rpM3?0vk(K=papxvGU-l$o1}k zZ>5YK9$Wb$P23V-ov&u8PDzBY&3?)Kj>3ZF%+&z58=W1ocfeO^+`2T4ycbTnt~`9B z-vzDqG9~^D+AeKQSnLNIXt>h%5U5W2pm+E15NLup83M&f*JFn6!~8vlK(U%3PSc5d zb_g`V?7w4ge;>Dcq+I=8Km0PiL)^aODZSV}Y`)1o)d}zv#Fk;Jo#!u-XatqX7Juwf0 z8aQNNF=5xqfb&zS*SjKmDiU`Mn8YE|mz%D$oZRg$8na{eX87v7 zA(PZAjc_3(AINx*0bFWYQWEyct3oNw{C4d|DM+m$ojf* z9e(O-epfjTPB-txVKHHjdXf@bzO#2ZH6(A3`i8%YVeOrwKa)(mdQbd`WkYN@7#zVg zVg9Cxz-Kvv1oJ$7%}$F>)7YMJ$INK&E-Pth16q)rI&#kEe8CdT+xE3Nl^=D#!A!6^ zv|L>|7tb_Gk$J^sW`^9}pYvr+ASW#vYG8wSLi|KLh;Nx)&ATR=pWOkF0G<{guWqK< zo8kwH-Q!p1uq$KEC~WVDPr|jy7pvcDR=VN}R{d6c2HU&g2jE~v4wNx?3O&u)zq{5q zO^_)$y%+v~d^e*8;?m8i6tdNR1>|5x0&{6*B!z4qbb9}`Wy!`we--?KmiVh{NaVDU0X0DHJ+@eXl&nezbV9q}W8-6oC{jaov@ zOkiabM=&P=%zNSo=5Rk-2-Z7;{gvI%@&JZL^OL)MEBwaQezrOF_G*86w`~qK&Y2=g z=4az^u55nB&IC4@NoV3?wrMcW$n1rCSZDrH=S*x`!uc(o&PjN z;NWJ}viHMZUW{nV{3{%^aX?$h!EW(HIaXKaE9+TnpuKuG{6)Leb;8X+`}(#_7-C}A#tfIry=RBwux7K#9cWt09SsTGQ^1!em~==l>>6+S~*2* zWnc36TA{7)K&^PSX&vITT&@e$85!bD@B^+~>`t1j^Ts;`zpsH$Ojygc-xRh|#6H{V zss;YzcQBDqMP57B1 zq~}KJ-USD}dHBQG;IJWtGqg$|-YGm80tPY8rj&4dD^kim^X*H?A=^&{3rrrj>D$5f z?hOkIL7s4-KZq8rgQ*q|`ynSa=;pnNF?VgEqJs#yLrAO`jqgnE9JIV%^?W@$W}Dh< z-kNw^Y({}ko`7+&*<-#J+-cMzVtTV%2vqF*hky9>zx>VD85}Fjqe26tc~}0&+y`g(Z9^?!1*Fc8d6Sh01??l?UP;vE@9p zKqOX<*coDPNW9=kj3@1Ql@~H=P0ZFlV??hgsmwCmjiSMnQk*4D!!qAQLXKNiNq-pl4T=8N1}YrIP36RaT8J&o)~!B;l}GAgmgQje^)c0~n*n{&ygkkOW0tGglP15O@xmPU zn>NtFovmKTB9Q|DTcGIVKciU%Tfw^C9*>JxYTdIAz zlZAU5aoL=6ILhy^oJhy8S6{V|ZC52Zm;0U@^@qcOohjT{gWwSNO$i65J5guDcw(WZ zQ^t7vRZ@Kd;zUoid3WMCWh_dluXM`NSCM_L8oI0YR5eman2Fpj74z=Iu@PfGc%mpS z;+%I{ymP&$s?Ux>cY@o5FmF(-?Fc*js_+1$mC5DCRsPOD%U`#I}!GkR7Ibo-<~IBA=PP3Q*Mj!Ivuzf}@z z;QOe@s-BJ5-Ox>36mvaUdTw!CaYMnv0cB3A8daKwLxe1+Zz=xD9jGzcLy>;&4&+S4De7- zCBJILvSiQo=ADX#vT;H>X^1g&2l9qI_R2?%li}CAyHJK~&OFuXv!8G(DkD$OV|c1% z5v5T>1^O|ajV&fIz4v=n zu%-;%5Z|SS4;LOx`52Eh`Y>sv=;JDe zolCie5$&9ToUMS7q}^R_Q1VoD&<9KSFh<0LsWR$4Ap^Z{F#_T`zPXlEb zQJWC3zLc3DN)rC<* zih1vv%{v*(075%N^+hXgFJz#ooqJYNG;jkt`J}y<@yfNHC7tRF|Eg7OWMYL0{`{?? zLN<4Mg$rX`d?@5JOs%U}ay5+`QFP zPu{JoRpX{=>J+}&i4BBI4&1#C#4&$^o1DUYWi@w-*wbMhaSUeYjCans_WVtX+2&wO z&EmtP{G+#IX~JvqV(ojK$cMa-F{7|39#vd)$UM+D9ag#v?Vaa0Z)Mze3}_UXP%VuG zjxOI93ipCFu_Ly>y5LS84DvMw= z(hcNk$cN}nQcX@+V4M`&E$=Qm3@j}TWSE;!@NUM^NU==Dc&E4(}ddIH%pa~0A&R+tz zo9Yt5Z&lFy>ua|sZ4)teXW&o%yW5R*(S7ojZ#To~kVE#HwyBt8%;%xnnWhbWo(Vzw zJ!XfbWG|_Xn=?-qZ)rRbM--!WzC`mDj$$cdON0gDz2}~B#(T{&^49C;r);e&24>mO zuo-z^=G4z}*ZNj8r>AVQFzH&aCX?coM%f%2y;}2mD%*Ts;e}R5ZF@gs=3-R7;0$K7U&*&zjc+->S;^n=w-y7lL{-03da%^MuA zbgS0h!{AF8ajdd(J?}~qlU&BFj$ES&dKv~pHdBJOURBXFEOW8&7RPwP-H4^`RR#T$ zNh*ldxvE=DdN)7>tREcm$iw;}*UrPzWA=GiKV}wa+<91FE}Vy@h;1GgtG%M4iq&3) zKV_!Ml6!5*Fop%M8Gbh`A9Da9}RnmCGU9)JwX?tqt+t7kiP;0Kr`4i=Cui zJ4K;6vz!Q7u|{`aGy8I3zLbjG3lfGlz3zep&N->1 zP=$ER{c3l!$633QH8)sSBn0L}RKR`*hdClxob!063ZHWpz`S?9w)9<+P4ul0dZ*e% zLS2qPLt}pGLJ~&%Hj`Fsq`h+lnnyU5jnw4`z)Yv+{rszTnH$82@Ndu3e#%-D#MUPe zm)-p_tNmzaYqa{;VkXCwl(konm??FcXVu~{F_PDU)DQ4R?bz`a7Eh#jed+~J&NmWl zU1@f=6|Wpq$d>n-JLD)F19Ij3Iz{XgFWg61+A~7+jJ#7Kg2It{%_6nUx{xxqeUlNk zrVDvv>D)RUUB|1?#VsLz^&^%TeMZZOXGi5UQ(|3SC-WS8%lrYkSB;E(w(ZcB%f>ky zncBT!eq8K*qkKfGJRxCa@^x=BpY@chAKEg=AKbjj12ps7JC`~@bKY$KuBH?vQUSV~W{(pIYL~qqyoi?MDwfsL-S_J~e{BoTvq`kQQGR^XIB(oL zZ+kYv+E|9g${qDb$q0T|CK*}aG%tw#`(>UuUP%aex{xN9G~eBr4YSPVVw0~$Q~J0~ zMDn%344nLtmVMQmi0f~2#%y|v{Dqon#(8CBG1ZJKl>QE0{LW%<{H4p)Qo_8RY1ffi zAak!b6a*8TeSFDE#c=fF=el2VCKK`Y_;Jd*$tRDp+`|t(ezqHtgqB@O zoO0V%P3aM*jO+_8NI%y-v%I_a#E)w|NRfW6OOqn$y|&EPfZUW{B-ivR=(|yBu;!xP%CV7e zdLk(E!$;l5RUTDyKjzX^b9&54`qhY$xY(T-DSfXqX2jd!cP1!~xC1VI!YN>zc&&Je zkW}9s0UlxN%3uZBWbLgfS5S=4IC-Ef`PGlOEw_apU}zZ=LoK^yF?+$~YOPa26_rFT zn|Dz(9UB%K%DXNMh&2N!%MImSuch2EE7#N-rWs4l*=#f3y%WArUNmr2OK1htL?*&0 zGe3(CD`z1Ss25~0i_>pn%#QXh^Z`o*M1=G^OK& zIry@v(I{ie_1mnnLO<$|%h^rbr<_YCy#M_K*>^y8H}VS`D2YW7a8f+N>(|@O)4pXe zi@-OOt~bDsy}s?7nT?8|eIInWo81mtZ&mg=+ayfu9kkH*exLD1NAbmWcYfCUTn=;` z^nyxeaqNBKf)C1zbo>rtjKeK_+HfSbgBZ&p(FU3IB`9EAAZvk3&1D_=(iS|-ux9P3 zk8drk=x;=LNrYBq+>Bl@8dveKNlQFWl9=Gjf&js89P~!q*7oWJ$2W{g zt04}Nknc7pF8CzYl+Nv?Vw`!!_)GKom2*#;7wJo7=`i)+PM+g9W@-PxtW%!rZ5F#v zc}_G13<8-5raiXU7NVV?>nK4dHVo1UF)BB2<-+#hJg14$%G6cf2OkjyTR#Cy(!Dbp z){j}6jL)*Hrz**e4f9s`lKCl!ZSvYq@joA9b35dNcf{SEg5^gmdOGS9x*3 z6RGGpk8;$f>WppAa&A6S6T3qvv{F~R$k>#Aos`k5Ms4<*JRq2}C)#`A2WZt+yixBX(WJK&bW$8+VIciFRg?wyyvFs;D@yN&zd(0h>b$F? z!O-h+O7>a1+Cb--g)+p*CVtPdlGe@U$&xy~bAhU=m!f?uQWN#-RA4)c-|qKEMA2#Kv1YcSMsz=FKI%=`s7Ai)Da0BHDr?fO$te!JDSklK zC#}6L`os|+6i&R?JU4+1Fn3#vPqkky?)Jh%y)$idvqa^dtow3jxrukh*Qo-JT!i#X z&lH{o8p)utF1q=EuXC;6@H}$Lw+=WH(zvI+AoJy&=A2t!iS#2Q4-Ci%xtC+VzNoJLAp<$sp{_ zI~6pyZZjhZ!GBh+CncrPFDIs9c-w#u;vn?fs-`tnRa(HEja9J>@Ds>==2^N&hWPoe zE6+Tqm~9Rg#~iBlIOfu_^%Syo2NN@La1-?X!T~}V@My`Eqwpk|9;%EeL8 zgVk?$@dwLtLl9K_A{JKLAG+&EzCCN9`(_ zX)8N0dU&J!0U7C#j6Ze88)sa4NH)i8)3CrSRfSf}1?B}mv8|k#=4QFmQ?^MMdT1^( zG+-cx=ieEstBg1qgcezEUa9GPF)t~OyT>j%8MEwJWtS){tP%vTTR| zbIx+mI)8858cn*ozOB;FsG>5-7i6ZvJQK2!T8+;cRT!Jr)Tk^Qz!LZ6g9pd}jyEdo zIso6^sM?uG_DXrn{MZG08&$B9X~&(IcHLI9hoKakStFlsddGZb%I1rx-ny;;mcD>) zwM@5y3;#? z-XYY7)8Crk5D!+l46N()Gts(wstz;#iVNkKPF959)-hLZK6BEtHCQh5RC(Y04Vjb{ zen`Ch1GBzx=7g)=?m>30v@cf2{CVg603FJTIO?XXs0R862?oWxI7Wza*xYaV)9(By zYTC%k6yI9Z>)iLc33t2Op8E3^`hhtT?g=F`oOb1e8_dW(SC@QJ{F`&0C?L#B$=4|l$@Fw~kG+QOP+#U3f!SAXWw?HSEiFeSCoI4<6N7g13>Yg(KeV=}M z^L#q>H-Fz(yr{^S^)VCBmYOc(Z6v|&PdvPLKHmk{)LGY#mkFaK?Y`wlit1_)RU`2e z{hz$EUF_;y=OFR>ovti}%Wt*i!J>=|$QqH|n!Q2YT}{NU(KS%6IFbKZ0RmwMuul;&U^J1y`B#Yl&5)s_tz4I61^{crJ zk%W3ER)l`frvq?g)e zT>-d1$GX$9tu6f=QzQEngpV>m6#ybn%TJvW81=!Ixmn} zw`9&Z-s15gQ!n0*J9RT_T93)KwmH{;9G^0c$4P!tl{4!cv*o)2^Z1tgF_-?Bvt#z2 z`SXguisYM}?V1rk$pWu1^^=(>9o{cL5UX4wr^b+%0Z`Q0V(_=R?hMxE@bG^5AtI2U z(1PEREQt?{OBKmqMYX!L9ew!nhWPRg)-e`8s#Ph zW2P4!L933nS8qo9wKe*>?3|c{6Mn_7Oi3N&uKfxr)ZDrh)l;xEh}jgZAG5lw6BlAW zVEo#ild_|69CNbN_(=Tn`?owo*!?Y6k6_8zXJVIsf6Y=!$TdE`<^{3HRM$N|Bfk>I z{EoTL4$ZV@UX;<5XNS1klvJzJ1bNH+l@O-wau>Pv(YDRq-}A*_BGC_uV@+%T(rhHv-VaZ3eNdtnOC*` z@(nt16+aTYeEKshO{rN6Fc68YC&p;hVOoqapXKI<)S%&*li3n)m%nhFT6n=C1X>l^ zAt?jjzZt+(dn)^Z-%$P}NZ$-$&Z-nj@M-xmp%`zh0_I`?`?k?}Pz2!a;lV0n1U z{5WaSFs#5t;KTXqdxq*=s>bc?q`hJO!b-gt<#L2D>`9@uTL@z+xZL-ApR`U{)uhvB zCx-d`xf&;pyCL6m?UPR9SYnvZ>$GBlsQr4xvTw>#HU`EfebrkzgTtm(CU$#1Eb+?^ z$Pu~&a^=vSLbiO^N`rmY!Xh5%OY0F(Cu^~LQvPIlr|;jF$>ctDBHZobn+FXkmkqsu^aiwd!6h^w#%XPfXG=d*8Rj zDL**CsGWlYtXw;%_uA%Rk#9#KsRbvvbeAq9xz$PZN^J5YW{U;mLPyM=iDHbtRwMKy zWY5#r?1s6$P5#WR=S$)OF$R42i#FLX7F?Jy*d@t_0kjSc-YH)w576G%8*?xmW^mfB z3>rOecDubUpLFX)VIwV|R@2X{;#$eZW{lB}v*b9W4m#CJC06;G0A(JKQVQ)5!Z1mC zA;uKZUsZbddQT}%{HE_Mbr9H+cY;?nsxLh`8y~_4&5~dw>#ktxT+t3jv8ar z{$tL&a*ct?ATcTRPWcmc)C=}cH3iFi_>u|b?Ppn3lso8~E7{XNhWE*rW95pdRgs%f zs&CxrrqNeeWA$3KM_SqEK4&dx?~y;TDf6UvDdJB9b_6oIbo{9Gg5?mmv;@dD;Xb`X zejIY#>^S5J@%FygYgPqjuQbp&uL)ss%sf@h2f_)#4aqo;rwS!^xzD-9?fjgrJ=mlj zO>ll#E5qhFx1#lQ;BZLVm&jw~v?xoxCl#vz(jueX-Z< zW41j>L0y3w_j+DgV=bbW6l|SpiVS$AlK5p)FkR#oFL~7yFPhYHD&1)1DA&fNwd5lu zNkt;iKfOKvKur^xv9ceidAF{5g1ETbEVBl>*?2)N<>EGiM{H?TF;hY7nI`pA{H|O~ z>adk^8O3TQ{Y*gXzgE)}aiY|D!YrW!XmC(*d!uo1GK^n5BG zcG8AEy-ofs^$cG?WS@f|;-GP3t`^JggN8VuRcEw-(h|7aO+&WlC96)EGIG_a7fwvX zmDtYvi9p*xhWvcBsI9_^B7>kUfkolEY9oUAZtUru@^z|r64nbV=Drbrww$cqh-kan zVD^cLcgl~CIdZZ1n3anid(B=fEMNlJ=3;TLM=jYe_FYSs3tw@{Nh#@_^5bI1F;Dl! zZk1%cEyt~r%rCZ0!X%(ju{QwoxIR;%5|c)egB8k}ps4B0+c2T6lM)Lh&k# zJm5)F=t9w34e{_%vJmJF8McSj|Q-V zWxOxe%$R5z3#i+_=2mZ8g9?-wztVwwA#c5sf1*7aAIEa zki?=esV$|aez_#u+vHPtHws^CJG(tlBl4Z=h3)~`3oB0Vk}vVdNu(P?bSyo2F@wW7m%{d-fLj*pxC_qetp)w(I+zF%45Dw$)Qr{1{9~crfph zziKDu{3C87uXtfXrBtk}dPdx~C&Ii@zIM4>3{#2$g9Bf2Te_gmrWXQ(S51mUUIy@g zM$>zGqx`@e@|hI|;lhZS-^xn#@t{Ga@6u22mLEY()O{PG>q$vvv3eTAEETr033QSK zu#45P>(KIN^)Ps_s*wgwxXrE3F1Ag>R!tR2EF-bH#-0&XOgKI?vHDW(Ywnmm-$^=Y zavt{X`KcHQErtXGqm}ru+dJk*0jW6?Nhy|IKsG5wNys7!{P6FI#@-xrgs;fG zHtxFSU@PZdY5cOeS0IjOdAw1TpXC&?&Anv3yizTS-xYDR02PxV3boZdEHkSFPNp+Q!S*AT<;sb~~IJz_UPcG8dAZ2C1IYbPk?9ohwY zz;SAVY^pb3(=o3XjGw72c!6BVh6mB)#kkpg)UP)GTK8#A%-}T6`vKzdNCo1`k5mfT zl3!!ICLSpok2}bU*JXL>O{P^*(^p4oblPynmG<;r`E2*V zk5{dU+gAr&(7DOGv#zfWnC*_H(>vwIt&Rt3-0H#)RDP{(<^{EPV$?Y?@Jegy+d_PLRLb=8eP&IjbYSN=fFG~`O7VxWfQ zeQouQT1mEGuMoSd@e?||Up}yRbt$mQS|}xc+;ILHFp#Q7XWz32I&CJ27Gu_Wde40M zW8HIr>|BHH-!>_FRYy}#FC|CWkF-_e{qi@8N7ez1lMcueCyg0#$&&{2G;`XslgfC{ z{AR0zSwTEn(gmFuk*H%;mio)GPw$sMAV*czA=j>|Qp}zR<2bdZDXOXtxpIxc5Q5LR zy+Guz1KGT(&F1y;_QfDES|gl-zvY%Nwb-mAoDOs z>mnd8aA3QL?YhA$ZCxY|`Mp^)?sf0hRIZnE$Ts_mLk_7-G^k2fQaNVZg_IqGUgd$g zzsjXC6S9593^ngQ=8ie~kR5X6>M=#^E%GH%zSw@MK3uCSCfT3q=dyK$dU7NqCdp0= z@&j_z6*HYlWI~k-3szVsS{ZMTPkV-k`N!(9Va!@N7vZ2289r_?=4&2z8}rUxcN|K8 zRn|@R{W|K6?6<-K(1`___s0*=6V%rW4~}`3BQM^=NGgtUBZ2q41%sc{*XCMO-XK42 zcjRE>cGu0p@T1KJF1$a!F7dx3!4N$j9CYElQc~AQqHom2<5;%e z`1Bt6dYYC#XramGX0Y?B&5&dhpxz=s5RZeV$Y7?uc2h2ae0h)j0Xd524!L&1onp44 zu)y3CZkh1vluIYvDdOL?A%B~uUz#!PZ-4m1FMs~apZ@yCfBxnAy`lVX+iU%WU*s{r z{rcPWi^>!JWm8A8{Ik!kTJOHS`&arm=?m13 z7_Y77MHP_QCjkRf)ITuCYzx$Nkt%nzCt2gK<(+T|Uq z<8JRH^4j^d$eC%~K#k(R-X6DrZJCJ6`&F+qrp?HW1W{h}I{2AC!s{>XUA6ByAfv-U zi(^z*GTt#I+X{i)t~0242UeD>k_HPj&Y(3xCyLq2J66l5he&@Avle`rHnyAX9Qz^q zrKX$7m8r}w?^qol^P!#C`^3krLUs9e(BY<&U+s`pl&3)(Ev&iJ3+W8f_kPGLL0iIb zw8DiCIa3H<-mjXbb=yf85qssmT4-b!kJz@|cR?MQQ(k9O(95@hc*bdq5LO&qx5}uC7nnnSHf3IM|iznOU+F{%10m~%vi^T2KEEc8+sHJ#yrh9ce6ZvBjsL- zK2m$Oneg(q)$u*EkPj-A5XNOcknikBgRgqp_mPfx{`m5?)r#9vzUvd7=!vXI7^e0~ zvp}WZ%u;~113Z`at=`D6XNFMeU@P&8bVTLGTu=0VBW~g&zG*W_e0kq$Oqss#zl+_= zO!2J0h065>Ymc(qZM7N#O&8>j-DKqpi*z@-Bzxu94QTE5de0xro5jTL03ES=StV4M(FmgW0$wBMgdI>QyS8VA-vg7nx54I_l)Fhaqm@P zUEOc@D53l9u3SQAm)qM`FYqI(pmoP7Nfs*S9i9j)V}!Hia_+_%P-A$(?B!jn7nq@g zuzj?>5*rH#$UX^S2W7|WC|6r`%)Ww7JgXToJsIzTyvNw(8(k3ww)mF8U2h%G2w>T= z(aW1w$Lkz@oBlYL?%Sl_vdzI}w#3ZLPm44-+YVi74W?gqoT*-WxsSOW^qEM(FGg`p zIx;Vm$w&_y%?tB4>zn3^7iIuK>~+zXcdg#2p$Kphy*8?g0|i6j=*5_`*ZW_PJ?4-% zc06q`3jIrN)6~$~g&VL!?3+~Hvzo6ML7nR4{v|V%#^$U0OI~X>skqnEqL!p9sJwG^ z9CQ>^{iI9RQ~6PQ@9KeBOEbv8HiGzu&Q?UxzSKPG4=~$iq@;9syte8>*Id&rFPe0% zx|qvlVDV68?6&u=j!mQOsiL%+p!6YpE5B5k#jj+NCT?Tdg9VCc-aCpx>%2{`NBIlMPigNFxUgLRy_S$GoG8oVkrNoNKk4}2x z#QWXe+Y?<=J#%u(3yGLzw-XC%l22C1w&ZhrVTY=fqxe5p{-hy!{R+1$F|h8K$4O(y zrM8}qdV7@<8Qj-<&N6OqVLfB~pc#*dV>9`vHs!Q9w$x+*PnuORP=o z>P4Ao;@7$$NykSZ`cz1_n@>XNFPWg7_Ng|@i1kB`hpOpm__zzdRGf4AQh9M$kJ+6B zRLEZFwO3{V5%hWz&^uX6LP4*peag^QL8j@rX@j{yHzUX+HIbbb9kAp5v z0_G=evoMMaL}8qC=Kxpwb#i;D%mD&9Ssr|OOKX8%(RZt=+Bs--B^MDVm1RLRtMV|F^t+#N%2C95nF3^=&qCn^q$sn&Y=vG5>muiWo6jO(EQit)NtO> z8YYBAIpcfY;Qn@e*UEp-JkpEPZ+k=QnWf44qLr4c@L~(%))$UVmD3V9gQS2?+^nNF ziM&8VH_^T+Twvtg8&XLV!*s0FQ|*`+$lgdyDj##o047e>tN~xx|J`o3_JE`Pqvc+A z%;;P*%G3K;uU+#v>MC><_}}ty6_$BsQW8A3+_mN{KH-gaIbLw9F)y0e*Xr8M-orZL z*LbCR0IU5obDMCm@Wi%~yQRK(^w(bf_X0C|GvW73;EyJo5U$vQI)k{HyY_89*Z>qG1wd+ShD zR5XCqIX6jELT`E(>yBCC)s^{!SX`&kv4Xq$n%YmGea!YQ)>IQXaNro#T}USSQ4@K0 z<^1dQ#jdN(wWYj^^$;!hTtq7=uhwg>TQS4jCyoW)#9G2^=BQdbT_gd_W~2WKr(b!q z!dqC!)oyW{X2qmpnW+VpQ?HtFn{;Gezh>8z@)p)X21N=MWKiW4ETjDBmYa79n?Oug z$hrDVw8+~=<{q=P_gy2=mFve8u}#2c z`V(^W-8<)}DajY1yD;acp-695K)UjBS9^vQxMZ0G1-5FL2I;1BQH=sC%7C3;^ZYd% z`2?V?2rNKH4mNYyFC>wbb1)JxwiKG-S3uhaq&81#>>yq$X@xdAkcD3=v_Y0E0J2{s z!Z^vvJY76hGs`sQSymin$4r2nf66}3)(gX3&`VYcg(e~ zb_&`%+o#vRIuwvh@~ zA-w-sfKhYs;6Jy0Ymr*I#CV0a+@!@^DNn;FG&!a#F0VxBLriRlBHdM`Upc{&dWhy6&yF=LrB&c`J$AY766vU7h(}oGu zIHT#L(E^r}l?3L51NFxFYroqOzSn-YYlrXra{F{FKu0|tplgTk9JS5J;;17di=(cc zk)@!$d%jlrT-s9=85v5k?WMR@IU`F%+|$e3=d;S2mYv+AZUO;A5=2v1?FS1%^Mpjs z$qsM}GEdgh%;aGZc%lwEKMRtYRg40JAvr+R>>D#rx5AvW_DNYsy2zEQ-x5A zbFw^OnqK1v$P@@P%8;d~?g-4O@ZDSP!=TI)51T|8Y+?kpeixNQg0`2t-~H9fkJ|EQ z0XnLX0lIb-lB2ennJzR=04f(Z$ll-h6)m@5R>uUc2}rre(X3IP#D3vv|NFKNFAkn#v{PokvT|$^mWD zvkCrep(`MAd?p2tSGzPjuG%B5KN2VYj(afVJzEh&4w+hxV;J9e-VO1N{AkQuh7t)m z%WL7xQA{f#uV*tD2|34|(@Nf$UswBTS}d+QeIVM}S1URT_krM({6b}{xNNU8K#zOg zQMY?uwi5*GtP_+N^sjd#d)#trZCU)ZTV8L4VchaHYx^Z8{r!f=3#K;U#z)a!uyXBz z{(!An1$Nj(O>D}HE1_x+=9-xNpa;khL~Cmw?XQk|Bb;qk!+_SvoVReE zR4g}c&YcDz2C}tr(+bKMQ*YZpP&dXD^c{6+#uRQP`?kGrzeI*BdX;#)GzlZ0v)XUh zC$KG*7Ka^=*SfN!0qt?+#|zMjl-PUsH;hO%S{NrMZCP1U9TpDb`P;?Vyo+V=Vt0mN zyx3GA`&sVo>bcnmPqz2)U*W}Pe0Ae~Z*9{|@Z;qw&N0%KU2vbBH7)T?7q;vSGay#T z!;dd4&?k`T@RL;(Kk1yTbo(@Wj|r!&bgSVWmwe%(FIK$ZP5oE8UpxIV z;hsoNHv;;JY_B@*T&?1r{k78ZLV$ZW@<~vTBC?3Mc2=6VcfGa$43{u7-_@i^q$tgA z6lrl~&4x&%j7Q=-HMxp<02fK9jvB+ldz&Z0zxG*Yo3>f9Vl%WEMez!a92Lky^|{mM zU3s-%XTAPz59A-fw!O|c?8wmC>Q)ZB38~kr8Cq(p>s|h5g7`}%ha`CP@E3_qAr=^3 zr3X~=?c$rx5;X7gzmSn^lxFH;LmiFJS|e}AQZ7NeUu;n4%^&aeA1_x^&1>5wVeMFN zxyrc|%~Y^}XL*Mu&k#qOAil6KPO8!o&R`a_mF6Z?%At;eGkvjf*!8gQG-ZUdo~PXX z>~b>dUT|i56=XLSv_OgwW>|HWod{dDc)xpes~OJnZWlT=51QTwt)bQn(MVrs#cO9N z*=qR-lL?QS0mdI+wPv-|>{604P32y$_^LlZZF4hyy*lgos^hF%l2T85*T3ql$%l5@ z9<|bN?d^ypC8o2f#FnjG1Rw3Lr2T<7$DtOFuxbz=9^r+kRQ2}UvKG1Smdi&6uaIUb z>e!k0I&iNWu^Ufm;oeyMD>{wvUoD6a8Yx*YMm+QMSwHTT9`436vH_cne5sd;M?hmq zk6)|?ZkwJd>7Lm$7S~))_iNG5b+0)YskeFqw7cSgdEHou33nvSi#~DWrU)5pUhxk= z+uUq`rut$H)eq2ZFu&?}_6MkKa<;Op`G8xC>rEwcw?GPCZ&{OOZp_cL~soOT;~bM+ie-| zPX<->b79c0%$s%cD*|}Sv3!#@h>izpJ zebw{N+oorD#@&-`-HsQ#3MvrTw8D10gfyw-or4T}=>17kXVJ3`JKjkV9e=F4cD!It zlC#++XYqE8aMtg3?QoV~ZkwA8(D8N!=-QzyMeTP5gb~;XV@$n>Tr3^N(s6(Z?>-m1 zNx!#d6VspT4!ZXJ&aLj4QvV2c-0*;1`-XpT+P0~QVdG5*2W%`YXAO4MgncKanc*~9 zn?34|c|`Dzx%v%HIskrKKpgZ)Mgw%sgN|f0KWd+p^`jnz=E1C!BzC0>%^bAN$v9cW zX6obKg(l`uFsj9$t!(QvWvKh61GAPS$ZZ*Ss7Z61sxj+nGorT6zG$111!Rps;FuGL zn{{Kos(O^w31+`5U|{aV5tR785$$V#&*|Ovy8_rPxa<2xdBTT0eLGe}qv#a0(x{-P zU7xehbi&MLyAK-BNQI^M$3C7W4}tr-UDfH*7nP2_;J~vsre77XK^Z|D-1k`;1<4CB zB+$&qF_#Nu_ff+J`=LGA@|lW5EuHO<-bjrtdbS<(rlrtxO|_NU9q3Tt!CadsSrh=i z3ER?W^Pu5ij!Qq+-G%`>nC$?80&=H~inyU(RbYW$tmuIuw@!Oq%1Ke;sou7)&3Q~u z$*KU*9f%G`&4C(2#*MXW4%mP0xs$?AG&IboJr0{Z{KeB1R~(t)ci!x3J-v~nWQLWP zFngyjSytNy-64_bQHcQiPn+ch4pw=)pQ+u_ULaunS-+uC&0s^(P;S-whcC%%Kh4%p4 z%*sacq{Zd81Pss!W!3*1ph-{*x=jCwXBlcso6VG*FI{LD6#TUD%g0`!S(TzZt7p;K z5>wK%gilF!1a!=?TU3+SFJ14_`|WekHam-h4k~;urY znaLhxzG1#;d7MF#E^G;A82gqdyvj+1?{7LE#HFM#X&E7!ffjwl+A~Qy#yqknI%|K_ zDM{*g1Psu<_86dRf7Cf@o0J9W_^1PQ?Ti2rz*66lDM}ouaf2o7%Ez2b%m=fLYFj^2+EvpII+;vy-m-ZG(GTzBWsb`lSFu zeKGSi2nFaAEK>Nn?u*^-d7=pSO9A4nqpLY%vwLS}g}a)$b@=4h0>rmH&bkM+>Sw)R zY_?b~+%E=*J3fMWzvI<|IsJQU@in1GaLITCwBFamsq*_W5#UPqHTSPHM`Mio6WG14 zsTb_pdAdvYH3{TdlIHgUj7uI5cUS#6^Y>#f*qv%obiOolQiOS#<=02wtB4X@eXlQTjh{# zA~qnih^sBxgE`?!eM5)%q#XV&|z>3M!2CYP_!b1TkFJkr!8M&4~9Q$MMRDzj0!*Zf<+UA`an8AKQpK4!|u+Nx1 zO?$b|`99}VAneWm8&5zT8CM&~1hU#Ud!dG2?34%nNO#W2$QG3U12i*iC(8fAsMGn= z#Py&0aoVSEyi>28WJH}j1a#l<*XE@zC%Uf#+D?u{~b0C@EbOS$PzZz_G}u= zJkD}nj05$0eyvUxJbTxFY249X%v~S5(%I3hA`QML^|3y3dzmO~pZlH{#;H+iuwaZ$ zJqQv`o~VN#S0+0i8)$KOvv%#AnEmq>Z_vUFIJF#XA>Rh+(>d6&;!*v_Kd%3KY0+7s zB}Z+uuzt#sYxh&GoNDKQy^^dSGp68VA)2VZkC_URo@LdborAVHnA8_DZ}R|+l8n)6 zmCc1g^HOoW8G<&$9J9CjU)bEvPH)1r$j*D-m>PQ4+qIN?s~Rr^mW=3? zl@|zQJmxzO6N7&uJc^q=1OBSFBr#C?@ub7^ z=?TS^da>vBSXK27bi3Ql{o^7HbLwC9WK0~BTk1uoCfv-`a@h1RR81GhomxWA++c@W z&PA#rd807d1UDQRRrJKG%`S^-eaZWkZU+wMJ3G=BsfYzm)=A=iUvx6Di}ah3)6(ai zT1?K~*MEW`nb?V_!-iVXdqwG9{H$}(-qs&0BLW&oyu-!<<#<(H+70SyLrLTaBk$-xw;41=@0nf>nHrh7UTjq(+gdag z2X(4%pHaz}Pg|ezrVIte!GbnYQqWaPEcn!~y<9x|amzoT2)(m^oH(yGYYaH)e&VEP zJ9%2Q7i>gw(kqVLKVddUj>)BW8u<)nGQw6B|;VuM1H zylmG)2I%d%uln6lD>qHaByaD}&NxJ`oeqX~S}8bLFa|x${;i|j<-QSr@LYR;e~K&i z#UZ-s&-KDc*1;d)xxTJ?fo#Z6cxidAZDvXt=`OhV?-$Rs*nb^2n!z0lD;@WImHVpu zaj)3Yt+UI=3C9j~sLE*5zchgd$@0Q-vhZh3HlCKmZCp>4k?qF+4n)zXs|!9Vz>z0JQ?-M+*IGf@3P z@^6c~e0JhD~;;{8?x8WVSA9RcE zPrF=0pnuwDrYiJK|1*4%s%f~w7oJv8byfbVnRGb5Y~RPb{CCK$oy*G|kV}8kV9q{i zZ}C5)P?#YR;**xn5HmPwwC zYMZk@)>mQJg1*?4)LZOG{H1u4UOmIU2N`j{HDk5_`4EB{1H``^#88ZkVn6p%rWm2DD?(?>7yBP9?!t=H``b=M&WeL5# z|Jqr?7-Nz>nJiE$&oO1gr`j&>jyWJxST@T5wk5KtqdnXYZqR%8Io}Pv6tlPXk7L$+ z2Xtt2q0=!Vx`I-DOq}r!b7xT!WjHv@F^e3N8+Oc{ZZjezW?SSS@Zcl;4sws$jL#z+ zadF!_`v+=B;rWs`GN}1~+1NAG;#Dca?6LCB{u^`DJW6eR{3J`?Fduv&vz?^8s@Ko! zw>z_KqCMsB_YFFR$v5hag^vBR!{qO-cgLK$L-280%y7SFQ^VhmJ{#IudiH$dRULgu zO4tiI*~O6TUHJs`_@t$#qz@)SyznQT_qDvQ|7h{_tXqEP=+WlVNq4TW^2Yw^SjrH3 zlo}km454eIUbyAf{99rR_f+?8o(jneX_a;yuSiFc$X^exuTElFLXmk_|B3A6KvkwT z?I!1wMV=A*8P~nX%Byz_f|8TA%sBBsVPlj#=K-1m>(rPrO)XR@PZwAj>eT;)y4c)q z#(@Z2DkG%}NB-VN6q)SWr?N+#%vgIje<}PA2D}Djux<+8wJ}2y5y)&c?fv{)`-Zel zOt%;^-hBd@el9#)&eU2K%4||5&1JY0oN#SFl&r$^ zZvHxC&9#kyCQm1t1f>I7${Bep|G+$g8H#W%RjVD$QqbPWe}L9hCK5u;9iMGxjn}%K zNcP7xPr{XX8~;E}?7DV1GY#bGdP5Js&bex1K0j)km*KLA*A3sW>S_F}Xk;!I!f|!# z8MS|kDti~f?;Jd}MIo&=;X5z~-4AAz&>FLU)FJpC=Kfaape<82K#L)xk2gRgfUmdV zH9qMaw9U!_bbQi0VEe}HuKh{ppeD}$V`||7= zN@^`{-w$S9W%?Y8oKU#k=p;pn$`tys#?Cv)cMzk;(X29@XD-W3T_B^X;)VL5w%M4r z-ALG#m7mW|-M*uYqKTJDjJT{OdT+c`N9${JDRh8lIIrN`QuH};FBtFRKTV8hVL^%w zVT<4Rp)~moBU^>zcV=v_RN9<%fR^~+5T(GBo~)9a5zJ9EJIOKIj4Uuu@EbWSgr2 zHJ)f3&s$#yZAQ(aGF7;HH-A*mIJ)Z#zI`V(+;Ed+b$uu2Y@O2Vt^7s&txa9j{6#g` zfcawkz+d&m-uKD@5Yo#ZRMFJCe zf)V>b9Hmg;ak&A*mnaoZoV9qT|9}ns`Pxw2ML;XPCXZWAOKWyBEDPMO`MSeEcZh9xvR};- zy|7~PlW*H5XMtLx*c0u=1TiY%3AM-Txq-`ff&9m(?N=@>iOqlaN*?5QKkC}#H)owt zqb#&^H(VdK^0SeY_V=rFQmW@G4dXsR!x~xhStBhaobOEWRjxmTdZBH*+Qigb{YM;+ zQLW}5jOymuQLT5Mc9$iPp)FsVa|@PriwWa0!q#bzB(0xz{Uj|NU0S@`e;^;9cSm0S z^G=;MHLWp@{I_ZPrRC|r{oxP4{P{0``s*M6`4{B#zayJ|W8UEx%{;um{r2l`*Ds0= z{L8fd(h{G4|L1JPTxo;9@SfPwHEGI3`@c7YF+1N-!2#y}JbsWA5C+Cy=zsaQzy0~w z|MZu?{Ppj@{QBFU|LO1F{%gQKBu+%b8L$sIQe2P8d)~=hT6qWP)B|qup4*7EkYMhd z?!}(yxotjQF^t+zEtGgnT>lRCkJC<8C@kJ{d%#A4D)Wt%?I0JN$4(Ow#ne-EP6~Uy zzBc?go!Z5@*A|N z%rUbyquMv!uXoDNC63#G)5znv-gs`Xg0uAXP8+7EIm}DVL_S@!<=ZaOxtZQULUY;K zgn}5N+A-fbzMQAi(#AV(2ke6wuHiqejn--urawvktHHh%d%(_U*u-)>t~V79GutaZ z@(UZ>4kViF$*2iBz24q%d+m@%{*AurRBBQ>|IR_%3U+|*mwOG+B`^2=P3MrU?t=*^ zrl6oE?qqC%kCXjd?PM&GKX|9@f%yKIg?JO<${%w!`NsBZ`&RWsj*mG`x%S7LgSK4- zZNr{bX6R#PTz!F9m%aAE16{DBY>5~zRn`*s?%Hv=_jsP=C&QD4@kGJr`Ho=uIr~IR ziXP5&XL#TxrieWO2eTGPj=z^nNCI)9_Mp}4QqPWSRZBqB^?kAy^%={TxXPDoT%!GSu?081~6S!3A(DUl+c@hp7V z;Z_dXqV$fc6&UeUp)YsqFBWgAt-Xp3bSFxbl$^}+RwhbTymx7n*^{=J7Ov)P9;o0Lrm%yq`dJX%35BN?gcb?INPs=XY9TWHqUqGm&yZCOq{S|_U80X!}_ zz_+a&%inu<0)Fz#p1Akeo*C+#iF_zp+Qc@uUF#wE86nqmt1#Z?XMKD*ai3Vc%k}{M zQddd&| zc#iUXxfM=SkM_XTkOpRdy_A=#U#;^#kE*X1BkQmV*o3&(%bRV>Mdzgm7U#|OcPbNp z*8jcSMIYzAP;oA{P8_$}b?UTyV{UsrsM_sYfgH`~6u6w|N;$Psl@g zxOzUiGC?A)p>#ef-064iUAI@x_mC{1pEufnqW2xp&T>Kg$9d<2Lf&_KWfAsk0nvYE$nu&(~s~uhTX-g_DnYP^BAn2$WKb<5#^#$d3ch2V1=V_5gmz za_zL*7!}<`6&F75mB!a<>rG_*rrzA3g|#AN+;cconXojC&Q+8rrX7&i*%VU_w-yts z1)ydSy=-c33KPzoIJXt7I&ZT0GvGE+TObldsKkLwCXQ)C3v4)QRU^soz$V=WHP~Wl zQ*Xw7FM%hp1)+qU)I5t&(g$9SSPA-&{cKs6^aM#{nl37+h`zdP3p<^2icif4ms-isSs%>H8Cj46gS-zD9s zoUp84*-3jVZedjP-r0S$N;xd|nc8nQ=bX*zp(`^l*8+Kjo^&w83w@B2=5}RM(69KU|2{ibq@f27w4U>`Jfs;hR9$!D`DRUC=mfRwa zXm^mE@H}e>0-}Lslr3ASYnSm6lSE$W&N_hiG28*X@EEQL6$)&-cy#s7+=Ex>=S@Uw zb9=QXx&&MuAm;?RdUx&tyr1^~Ui`eXI+Lj-d(BBm^qL!AO2#3Z+zCQ5MS$!c>U-HKo6VzOnRFSP>=aVB`e7E zD$g%|a=oqe3@;caeaOi8s!t;Krr8h@w$fHlJlH2U{B-87E4j5fY}#GlH8Qd@2XgVY z3pZuhPAC60)ze}9V8pTM-t8s#KHUR%pTrK_g$J?K2gp%d{n@zXH1uhO!Y42U!{Jk8 zGs0S}$o`S0uq7SaN*B_+QTN6vtB)IpO~t(_T`PUs2&X~q@3>9Rgj&n4B#vLGHaFT| zC#&9ep0A^x8_;;Z$W$husx-Sw`CIF z$1VT15z0AkEXvEr@_a}@EWdffCWZv?_iIf){5Le#$=?Eh8&_4$c(z0Z)5Q+}iw2i` zn2H^dr6@EOzg>^59eCH@YZO|J*rsO_bg&Fa)yLHlQ-y4FOe!C8rny@uo0v^>xi(%k z4I{%NYYizoE5GfcOV64T4bo9fWV>hD8*>Nd2;BOxrAsOtxG6lgFDo5hy)AbSUSZgG z2d~O@ed(9%&A2026RTdDKPPr|?}56Ox;bQFQNO;>)>&!Yim1fpA~3)gZ*r5EF~X(sd*pWf zjKr?2#7yJ%l$LhA0Lmc;JSNX0DVfofYM8fjQZgr-8rRvTVFPk6E9Vzn3fH4@^v)sM zJS-r`^_F4I(R}|aU+)~WO~nT2o_!9`l}n5iv$y;oJ~8o5Z|E~Ln#;s_<%c>~Coq@i z;u!W%SS#>2Q(S2VSH>|22+IfXd^S~cc<$u_ICK+0aW#VxmP5`mk;CQmNB4p6 znRs;l|CoE5U0aUiNO#VsI8Q*X{LkEj0yNZ=&`blNsz?E96j+2%lY0C6S!8$|O5MwR z-BCI~Vso>L4cQ6L2zPUHbMOBTX1q9QaEL6UYpd4v3-?A1BiF;+DA7-ba@TAD0F$ZY zZyL*`!u+-o+H7h>UB{n7xh_v5j8gi<`~Po9-jUJY*SJPKI^s6c_9~|*9IcLdSDVLq zXsn!{xyGfJ)I!G~6o!{X$zDgd81Onuaho3T>m>des)zn$l{6LCCW}(BNA-q0!c_rv zwDVzQ8_Or4cR2x3rpP~ImHR9;2*ya|T6y}W;mY{S#x@C;IcY{b<`d#1Vtc~t>qV|s zxZske4iBWoc_85);862KZ6_&ARMs#FB&en7{%q?3d(%EbjBnknFPpxlVq0U2<=Pwl zd-h8YPz!wmc;C6g+8!zt;3RJ--_Z*fWeD>_woF-sb@X%yYepTwT)3*vA$yLD@k1QF z_>$GkVP816_Mx|$)Vp3_w=`_cC^FVanHzf!#6gjPSl!&hH#TES*|%&Huz(z@*agog z*k8Wo%BwMR&^8Afpu0R&k*z|b_PVX)oW1}5u;}Ae!XV`vPQ7iToMtbp>JF5NWL^=g zUjV=mKITU7V{y`W_DxL~EHnISd1p*i=POXvTz3~4uqQPt)rTibo!j$8p9gKxSuQ8} z4m&fplHvOYu%jbCH^Wf~gu=T_2=W7F?6k}nyNexc-PKY9N01BlUi&(e4`nJ3^_u|3 zWOawV=%={w!Xkgl=uC9tw*X)tj8N?Rg(j~Isj7;DP8LzEehq*?x1kk&z5vexXdba! z8oHEY5AN%X#WlpY)x(lgo3A=R$7QylJyG+r@@2+Kll^P6(r4IB1A1or)W*W9NJnQf z@#d&pIvwQ>&qj9=_kZO7n&r^m?inHMBK=M2h7Ox+Cid4j^<3ipFUS!5CpR{0iTIwe z=sP7zs7iP1rRJfwkbPFhwRJVaww{Ay=)}AwSy|~EJoV>ev#I^212##h#>r=3AFD)1 zl}k(&AH3F!WxY`h*~<)>Nz1}9<^wQZP7r0v%4yoyGpZYDc$T3g=KoZf_=}T~^e88~ z50zY{qde*9B)UBY2-|h~1gf(WLQ7O0#aP zIC<4;$crGv5j|m1xQ@*i&D1fNHJhX?96Jyw{{>|{_Q44L%Vna1Jk!(p;0Cu@nP6*a z}x44`V z${#l>W+vxteVrKpBca<+P12&Lt2J|pzt|Sr-ms;rXi|?Cy0Xa&%M#=NjvJPcW2WL- zxyI>?E!T?*tXf|B{n0+*R8A``^Tz)q-A&^^K5rOPdS2x-)2#X7UH=!}E9O|fVfEjp z$+hZSyO3p|P|z}qvw@io2yJ@YgYRQ**0SY9 z@8hG+Fx%8DFvkZi%qvA#@%K8zY&B-fih2%rpJik87Aft*<$XY^utS$5yxi@5R~`&? zWDPEk&15J-yU^(wC(RBncGT29X;AZ*%|{tPvZ!@stEz-Sf=yjoDWcyQPb^0u#Zk{_ zGwdtvP5$-qHqgDuT#$>-y3i_DnRKnQ#&u%z&k`yPUaoO{LmD1ph~*4k_xeshYra_* z;3pfrDZfRLqA;WYp@3)y&Z%Hl8 z)7@^ftz-|kmmEn8*W3Ir{U+O(tUcB3Alw9L?h>O} z%U!K(o5n3thN)d%B2JKM6qUh~h32z}oA>t@&V&ES%BhPonO{&QG{jb>0M4Rgr^21o zS~7z*Pu7G3wyv%?ZK+Wt8P;iILs<2@o)%>Ac5(aW{rzQpqi>nn2plp{6(Uo3F@L*m z6d+qYzuE6Op>U7S#uH5Kl>g%fK8a1z~2_Hf)Mw|awJkOm*H^W(Oe*(@JXKI-vt zqeH?6sP@ObCfmH(U2KmU2K-dLMOC?wd@uaG)W{_S&a!3Zn(Xt|vNUs_X;keXEzx(q z@F{4fYii#)-*wdhCo@Y`SK1uraD($gHoB6gv8$cK)*S&CUXz_=7` z^B({Bi6F0H&VjYYsBgZ_h{D-&tZm0!lht0YcAM$2>FLeREMoHx|1-`fhq^o}r(qRm zM%EgWf}t+yTT$5a23NQ_vXE1>F%Ha=&UL`n4A)8uzX2Nq__DBR>FsV}PhQC8(}of~ z8GZof3t{DoLo}4qefaxcZvLUg_$#xr+Q>N^=PmgO%`R=_n%F3( z)kMomA^IwJi4WW}1IV-E%{K4tuUlK!nVNZbe%7Asg?h8zXMLmA+r?PZ?B<$e32dT# z;-yxC)|z|bkzftkYS9YLf*ZW!v}g23jO7@X6v>6hEuM@`9mwP5c~6WhPvO(9mzDNA zJZorfiOoNnlaqUFoOHj$)$?QJO||Fx`$_X&Z}vV*to|2p)5vXnIQLpSUi@)Esg%pb z+8Z)>^Y zV`#4O6-1OyF31D8v`1n}C9K@VFo?ERmlM&}y zF3Q_wCU;f(*Sl+AvoFlT=IO#}Wl)AAmqtlp<%jf-^pDJT#!tENn}k#SC_Er7Q0D8yf=(lcmfyWuuxb`m`aA z=s z5VsVXU~Z5L5#k!i?GcWuwCZ865NN*O^v3^+<%{-^4qMv}HZ2~bEgxy z5Bq2{b88;$McyIOkM=Hzw8Jkla_}UFhE066 z`0g)u4%+5s>hiFElVptJl^Bb9OY$U!ugOcRVZL*-9J0;Jq<%j%oJji3H~`~4vGe~i2IQu7{rX_Y2~TGgY*RoSjP*u3+9qyIVVUVFqht=gli zfktcElcd--fOr09Un1<0ghwUSNK5efxwg#+sl=R~TVNU!*jwPLR^ZwOw4l20(o9O7a~a^@>UZ$#DCq>$P#m zH~oR~ivFbeu2;6dUJRoTrxXfpHM~`H6m>Uig*64Hy})f^CeYf#CK_18!%D9CA6Z^J8m+#vke2J z>Ni=o?Sf5lF2V;_27RLGCPX+tRyVq$^~U{eFL1vGAUNXm?D$-Qo8D2sYC$z@}x(9GBkc8RAGkQQQ{2%~;?{I%;c7C{Ocn z1?-rz-!#0a=2q#~npGTM(`B{ceiy*ROeXUk@Cn#k!F_97boTGdDj?F5%!0uTWnue3D6SUpyLrDtmD z<7=~=KdpCn(6A*7?f4aW)kRy2M;}=k^eA`tSx*=pZ}joyG23*EK77Nx@HQW~?2_bg z&@xC@ORrqZHr}gzor%0u-C5J$S#iNy__*aBE!;CVcxhuVC?kU0D$D#9fC(cQHFP*! zO>PYf37IJzP zma_l^(~LIbB~yHE^1YxQyr*S(fcwO(=O{4!lvSjnJx9@yM?G(to|mN(LT~>+Y=ENV zKzTCL)hnHsr9&Rx{9jf_uSFR9v&HhYjccI#vz6XtmMNR!(Sqcci#pB;Br2e0LKA^q zHOgo_*6B@V(=vtgC8A88(LB`>mA%>mA3B-!oJaLhlYJ+m1n>P1ZIyOO#eIRF1iWKO>|RlF0tKXA3(MwnVOaC7lSfd$vUBq z`Z+fV_+C}}O+$jEYgPp94gZIELN7V+6riluLtV1uxSuTO6P#8jYqctkuer)dJ{u!A z$TFl>3x-FflQQ8>?Gte7N^mcdL6f5Fl;Bu$q9LTNmO8rLbvDkM&wE;IWsTtA6WqZk zFrcY?w6ae)kXc(l?Y3V{%o^BaCY$!^MZHB@zO=cX%Jo(vLh1Cct;tgu}|Ky!HS1u={l; zpH)UWYF}q-y1sq$=KnBHEI8IgvFugxMn5%}h?I_7t=zK}N1e@eAc}K0c!wOScX_T7 z>!myNobyEs)3ow-@BP0(iZ${i)(28%K#G>W!1qM-zI)q$-D9#d8gCW}3d*?M5{>SyLFM6fG)V=n?0ZX6sag3So_ zoTOu6^skwDjQ-(L$kc0BmcB>5Cno>xsk-N~L=w@&0>U>n|TlSi>COFR87q-@tOA{BW3E)*rSGpCvnR(o<`5S}WS15f<(O?6 z1~q~e1gU1o1tme@t1g|9P){CTt5ZK~b(qP+2I@QcoEgS?Y1>p~WvGfPZxXO4zWyBb zP78iqW7@$Zi<{clSR%98y{*5FmXU{n8O5Ad{MLp{N1DTSeuKL=^`B|b?f5|q*u2e? z3{@-RR%w-%(capBg(U#vJ!Ogb8BYv0@aT7ry`Ew2Evj0xj^*xs{R1=v(S}t5piz)9 z@dDwE`EWUfQS0e^fZ2{)N-+peLVJYQN*6cXJ0^FqU99MWp(J$8Mh|!I>E97gYT&_m z2V%+nmsdGntmU8|K(_f<9W<7`9&LIa_Q)n<}#ug4eO!q_8WTA|>6n?0hd4E!9 zc>8`WNV||Gu=0VaLur2boy26O+B(bSBYK>LIT@VZy?6h>%#gUYb1(RYQjX25ew1Xz zz?^xJ?F?hM;HI`>an$$VR&hlupn7m4b+#6}yB0iov_XyL73CN&bKKwR-=UYQe18k|MbqwbE)Y9{R)~30qht+ksJ9QG7N>C?-FY}y4V7|^kZua#MY4K?$xZ}K|d>J7^` z5_p+4HjYWIRfc*Se>^FhjX%fE?qcq8&1G@zYrPgLXsXc)H|{l)&M`P?ZgAfD9}mWF zSue;!A?j)r7<#u&TSe;h`d{*vGB~phs0V2tMje59=-b`IwuNdmQ&Hr*~*G z=CfX}dZh3;?nPn@H<_h{ks${*uv z+{k#Q`=ur+-Ny7vyVPFgp04hCqSNLBU+f3&&HPbFVt}!IV^PO0(r{Kg1f>G^+j*7i ze%yh+e{ElG1I_M@{3RKb?OxAPG+0aBb!RE{v=}W*fh)|i6!Ioj^3(TeiEPbG;2c3Hhb_oFjpBH8K|WHz@kVui3=yVkF(x_ z(}6qBM-j(4+@xg(jz3)8>_mh;(tc`GW~ApUXhfJ18^s zT0x`W_0m*VG5|m8sZvJQ9zq;az@D|u&KB9g zT5ZAQP5srUUlDT5FYO`+ckf@%_<>wkO~GvIU-N`*{t2^5+A50#H2^s8=6)_g5@fOB z{Hj-W#d*&M9W%Js(BkpiTpb`hId;O@_>1qM4OFYj_ zy|I5+htG&BSrga%jM$RL;m>rws%2;`yfd%&o!8hMG|l>p2FSRz;M~UVDRorC}$O@M!5mu5kHlquMc*gFTKq9WwV0 z|4f{+fCmPxA2y!gbOjot#@f@mA2vzpVi^^hl;$FzNk*sE(7hRznU3};{Q@lUUN6YU zY0n!}(&mBNBuxggVv2)Gl98F_-^3+hQCRK3zXL}v4Ugt{6;e%e;tL#_6dI9_FKX!C z>3F?|J8G}2|KmOWNla1UNFPnG)5~7a-rdv!$y-$!78N$5i}svtincJprEX>fxJ0!t zHNgmQ3^$4fICXY5uIUZ_n=>7H%AixkHLw_?(J5>#uLe5;JU5U4ll!W9w6`{YOs5My zR*VF&cnUdfz3VJ+Gty@5aJ3C1_D{ChozzclsZo`dvV`sif|~NNmhU9pSAR0JQL&^i3pbE9zd) zQ#PvX?A`KC|Kp@N;pQ>`wbH`7vde(fg;dz?wf0W`fjS0#BEBmR`Y6CNJ2P+ezmbH) zijMnxqxYqqa+PQIbkwAy-sQ?${fiuxPKzOurrOY9AJiT*?QG;46>}5`7IG=6xBAE9 zi7%Nf{2o6K&am=?lVIn4AMf?g;vqF|8#k)KMJ_WM*(5E+FEk#n$$Q^>!~eiNt~44x z2a3$%SK4%P=BF#L5AXRuzV4ZnTt4_Bk~nS|!A~U%5JmaHopv~8{P4E_ag|4|5?6Wg zTqVED5AXZGwGMz}DR+*h&dAxghSE9Ov}9%?hd2HgJN!bV249LB5`^K36pPoM{@?PN z%1wEN;t-k_`pgXnX!nlE$zyI)@{EOcHtIXfQ{d0&h^%u>@j_;`tB&OdkmKPF$dw;% zgr(j(`|#HPam#33A)#4W7w4KQC@S6YvHiPyX%j9^iSu}>kgCUXQEXNKH*m)}MmjO)R zlZ)Yi4S|M)qcm)M8o1`KF70?#wLkcGkGi8$xb~74)k;u^L@|| zqbzy=G@b)8#-C_^ob~i6cYx$0hX+GH)t~ItVggl>JMS*B>|*f^Q5Fsx)LZoK>-mTG zZWk?Ap{8^$}IA8$HoyPJSW_=KA@NUicnW_<>IYvz^zxI0e60Lpz$`mSx-wdFQJ#FX3 z#632BV;mo~f&?l^777mhv>0bisMpCK+|d4@S@A=5)(1BOG?zQ>Z{-g9PE>NtHaUyn zmOw!c>Ji-dr;((U%Sd}{v(WWxKK)f@vora_(+g-rxtACQOs2H~V?smD#8|a1-zd70 zMz$K2Ccv973^KFGQn zex-@B@Eo*F#{zWg>0uZHqcZhZn<39~ z61%v%la7bq4xk0FXVVAYTZ?8uw~3#^8_2{4C%VGJZwC-+{ufNHlXIe>#OCZ&n}_NW zdbrvfJ*EJr#7g_{y8!|<3I*&WK#l%Ly-Xwu)YfHDGxK3bJ`Sd{OlmTVE)(a^#Dn&7 z&EzJ>d@JP3F4=1hk8H^2@T&nxW1A>^+VB{bHl9>eB(kFXHP=0Fx)iiMoQH_?RQAL> z@Ci3kyi;ZgXR+&L9|+x^a@E%N&->uS4<{#u9k9T)zKN1UD?l{cgW`-f2s!yiE1=r< zeLr8>u;$^n18AJ-!Yqmtp4&JRzoOhx0{~m?s*p2dyTfk>2+&b@NQAO5{ZYB_pt-ft z;xbZckwNaG=GMCBQ}3<^ToKo~Cif~!Gg7n4!|w-(soeOa0j&i<#XsrXU;6Ot0b*J) zO0EUV_)R3?-R-INUEdtxnQ4#wYJh>c=P8=xd(rX`F)s_LX+C?>2 z=_R5F;**lguLhX05}1{a#6dF-@oG0&<%8boY$2lD{1tBVvar$Um)Y_nTao6fc7Bq( zrW}4rz=Fk@Orn@t#7mrAi=?3|!X5518iwVF@W{(Z!AZldHry`>h;KWn!nnjMYi83= z+b;+R+w_1uBbTNzTACf*v)hb{!sTV%DL$U+fL!{i&N15w%{b@-Pk1+pvnto_<>7W1fryqX(?U%p*<^TMEQuq(8zn__2`+>jt zZ+`yi=j#XkKk*OK`a_eU{*V988+ET3bHC^+vKt8#F}zM!IB4qEow1?)^&Btt`tvV; z`OB~W`P1M2>u>-3{qMj1^3(5s{_lVM$G_eTWZFGTT)G3Zyb-a~Vhb^XWd00rFn%)4 zeS^8BxjAHePqHl@C!y)vt_+`PDtWzL$oKY{f%fG&qS-_Cn?#P?3OyD%grVGIV-zV5 z#SES+)a&fl`SDyH>nW^%eQno&F3bNru%*(=gnHhcJ5V3Yi)iezqh|c#NmKH-sHJ6U zh;ce~?*hK+<9htJfBydKPyh1UZ-4*C4?q3<>tFxz?cWDzF0B#Z3QG9Nat5 z9djl!$AQ^Ej(eNukPn*=y5HLe)H)uwPhsBQe9*$2USZypTZm64qYmapHoj||xRI&R zOJL9Pc0JcLvWPR+l_Rm_hFM+UY*oqi+_in5vfpiXBxcH>5TfCKNw0G;u`tsLNEB>=T!1TPA6LVD&5r;fH9uX zO3ndT6Q0Lo*Y&%rtDSKU*{5F}@~+lkv(~@Qc&8tVD_*tR`p&X*%r^guxZWen=4F~u zw^YuubI7(nT^J5IP*9VZ{&)aYt8ld4>%d3pdOa4|Ng~3CaW=Dz?9P1912%1vnSqG` zn{xfR)xz&kx9?dwXD;6H_S*q_6d3)q%U2jVaBsl9aBImhYJ|D+Y;2-Msk5d8yjqn^G~xCZ4*&-$i*8R+$ddyKfKB&;@JT?FCx|J9J=B{GeA<0y>pp zLK(X2EW$gkvk33n*I9bfHYpn?J)=*f(iq{*_NNCWdGAg-F7X+cbt^+mjJNwo%^oY% zN;@xCk8kZVd(I>(L%khen{y?`qw$jf9}ia#@bV8=)+NoSV zQF~xz$+!J&Tliu$}Y&TA@W*(aDgg+9;?TGB2kd4SLoRH;_ zZPT%Ff%WE9K(75n=b$Z1HbDq3t*(@*1Vb>o#HqM6`1c_9%kY4oIbqOwqR~_>Ge3_E{=jjXH8)VQF_*! z02;6}%jv^gZBPA_cZAdn^As~?yzC4oFG1L{mrKXG@&I|QSJ!%|ke}XUdw`~roMoNgLDQD!&!QSz)QXMIP}_toP_vb= zsS!Ksov(XdADdQwchn&!!nBOTb~M82J+?VuBqrkdiEwmUEPjIsr&V1y#Cf=qYMLk4 zrJ)0J3vjK(=$H#fcz5ago!(xX-N=kXzz%5(Bi%181D6n^@YXqwFP9 zpfQ4~s3WG8ohznm~v}zN9;OTv}jy1qkv5(O=$*=X-O81ecg_uJ zstwoHIK7`X%^S8rE4=ZgMBJ@ZjDK#-FQyYu9rgYu6$}0#ySmY*oA*kFSC`5PrJpdr zvM!vt##;WlJtk>?2Ric4MCg2aH*JRaj+03Ryjq*|;9i6PXeJl9*s7g$fSw3(*T6cx zm$vv`aV0JP#N1Ky8#_bHm0v7AX>UDyQY)G8UT8yK6ktj?<&iIam27u0kC~o3=y&9S zK53<5>1dbq+Ml2%>C|LSpr+TcKezDX9qJa|4K}aVVxKMVqaBC6YrDH7gYB$$4e}k2 zUEgm}|Nnt)(=tgTFTGP}5l(5JIrR(Q!{R}nDh5yQq&;8*cOfesu!~1|y2MDihx@qu zadUMe2xfkxA9wjU#{z4z9#}HCGQc&cBHpCEU&wM+ve6Uf?BVz8oyPyeM#qWB)q$qA zl6^|+?(o*3iESTyWzZ>Uj;x)f5;^_H0sQkkF}}$@t-8*_j#2qQ=b9aPOu) zFw?Gn@nR3m&z70*V*AcWKLBl$vjE*DR!GtUwC2RgaH<`2Ot9ofZId%P@}#2eb$)Tv zZzvKV`uQDpxN2~-0RmBh8KynGp>|+~6kXsG24XU8(9bfY8pb~_VG?Le*X8V{9$`q}UL-9fkb79%XZq$LUyPi;(} zu@>Yal4NOjw4g7mx`9#1BnjS4dtg>Sj~s4b zE*#=CFiFkq{cZEIaeuc8lg~Qt@5=FgW_??4r7i2#4O`N7f%8^ju1q3+6Ng0=W#pj= zH|mYF2V~vee8vNE;m`(i7TexPdx7*OzWd!R2OlVZc~e!6ZBQqo1n;AbER+Uq%g1OY zeP@gcD?~pCZqJgj+=P4+5&<%S$*h>Sq_@XbfTv2!cbUl`{z**Sy`6Yy2j)&94A5Ba zB8aXAdJy2*3(dY)Q)Mk3^}b<<07Dk2DQQs^A;hinzU!T)TdSWmWC3ySn zam?K!03wtElS1=ZivWMld1zaPY}MAt_9ko2bpEzt8Q-K=D}}U-H-+vHh&c-doJ~2c0TzynFTt?rspUK^*b#zOldTNrQk4boO4MEJDI8zx{8wnF3maNZkiv!v=oBX7FJjgm?Fs&REpGw?R1fmwl%YS1>gUM)D8Du-igm zK}{uR)W-y59&s{}1WWJU<%sG?IwPtJC!J|nvk&nD$Ric$kV~f`IcA@J^vxD-`ItiXZv1h^;bo+&5_KgXUNiCTkUO`V)l%M(e`dCB zZ|~B*W@4s(e9?q%#nf|aCOqaO9pTkAH}(kYUQLa#ezux=hqx1dNzTa%<_{o8Wf71o zr`h?ZY`L#V`-{;!j>}8?i!pyLe0ilal-`P8yG##RvG*3_ObvxZzkSI?UCQaXX7d;f z%$dL*n0t3!TLF309`3Hc`;_l=lfkmp?SDMI1OEu@xV|E=3twMpWPAVpamu~_IKP;X zzId0P?LWRd=ALh+Z7J`+AE4EL+_|`BdHQPq6X37?vF>^TnyT5)4toFn2=0+)_uwv_ zX6MoEIk0|j-~Gp#&ze7l+TP@Is_yjO`y;k{`!Qns;r`>>*zR96&Zn!@{dw>GiE3ij z7tCYDuFiN^$^+lR(d(-`ZyyM|}y*Oo>l9~jtAo)yUn|`YKoY`)6G9tN)$``GRbYdYi@MB^^ z^s%Jm-Pha|LLZbF-gh6=^Myf^8qQcu3HF559_B=7d8?gsySLdKvgvO-KIg6X2WS-< zXoQeQU5CP)aDULA=IvPr?tT55cUxdlI+zgO~lxbe3bl>Wl} z+-ip~66bwrf{hPA27wK>>PnOq#bGCgm{;Pw59pWPXNaPSTYhTp+&t9J5=Gfz&(qiJ zdhW`o&E-9H)Y@csF#9~QFk27Tp*frf{aM}!EF$;bwy(`?S-8CM{@57P3rnHCaHf(F zvTk9Sk%E_Z-WP?SVT7YgX?VhBEg6>OQducY9^N(|8?*_@_d#BUr~Tce#RC2=_$hBb3LT0gW+-%V1_p;02Nkv{?vuom9D8S5> zJqPA4v$#WDosF`);8`NPer=8h6rpP|_t@^Yb}Uyo3g6nF9JI~A#zFT2dVwcu-MeQC z=y#8E=K<4P+Z*o3Ef$YeoOJ2ODj%Yg$%>8d`yOku1NPRjsqtba>*2ZQwR-&(P`f-tICpz2vo~k7?)Ud6cCw3qy7N2&Bq4lNI}uptj(3Y?l|2Cn7wAd=O)t0ovc%k6XYop0izCN z7v(-_)zEZt5><_u%nzbF67Pua!s_M^&e`W<}&O8 z!`#2;86y_0nXX(?=8!ET7LX&d=YGtEBRfaz6S02CM-&=?xbW+oL-uKywq;n`6E)r&X1=)W_zLwY{5ug!TX(pL1!@X>ccQ`l9n8!#18M z%xBmXp@q@y7H9F%QxwU&*SRGm+0uk7vC{8|S1M)=D0IXtEbOv8c$T zol8K5EZC5H2V{7#o2I4Ouc<8pAE~xD-mTu}9N%+NQ+XTx0IjVctePJ6#j>*E=((lX?>^{= z?hLcd!nEdP!LuUji$(P$b}p6ci_A^yVt2c{wvn}-^k@d;leN&8KNha2vKhk5d+0A6 zaa2?+H4@^|1yv5&cOwIGPqhPb>7+BqY-zAK=BTJT=E?1H)dLQyuZfi0pZkWbs*#kZee};Hy7?yvm}Ns-i<)si#<| zS*@OGSvKPcGqcaL8-BjLg+3zYWv9QfTq3uz>czTMMrsR+lDS~>V&G;^?Ckt#E^nhh zX%!jYumW5=_@ryqQ~~I{^aFGYak@1Dx^j$zI$?&qnZ8CNSJ8e1xCW9Y zI8XYKrQ;jS$czEO!o??c2(;O@DsHt^^*iD(J+n z1B1Wppj&V+a?^q==)t{mgYV~Kd{}bQ*>a zn0(Q_8V%;rW+O0|AG^rj(Y<=GCX(;$BIAoSFBUg7?Kv7Zsw&aY%*ew|!n|@>$^2lF zjU~4Fv}|6wv?(Mn!ub$X*9-!hCx!J$rZD z-@|-`QdsS5w71>w&vrX+ta#$tE`8o9GwNOU12VkPiWqc27Bl)PCnxGh&0bNq4Y;{~ z@4G)^_PN83DOH&n9Y<3G4_uo8CqYY66^_rm*(>Ro%*PsL$o~!f#e}^3;q>fXoq0Sx~|E7Y*;<`R|9L``we(qC2O86X$(N?JYuYwCfiIeJ!$!Ba-Vf06 zUIl0=ZIAW$kDIT zE250zq}N6nJ$8jBFV_dCZE6-r9h6ZVb?J0;^(pxL@)rE0qB1!k9VNW+xSmPHSE(pj zyTEr{^5sezdO)@;SwN0tG$5}y6V1zGgwfmJZm)H=Jq6HK-LF`_uwP=C8%f#uZN_g+ zl1aoEb5#oX1I)ICDf)BeNsBRBy<1o@@jD|t&&|>LMAXh>amtn=WA=)rqe7@LLmn+H zcGI5#sW{6>pZb~|V&x?iTJMQ|Fx$T6%66}H`#zAhB7NV~w|sUY%VW+?*~-aQHrXL? z-_QfE@~eSCVCfUT)8VLj#M_sttvF!Ys*D4UF`YQzhsSi@9dN6nlj#j0+x%-l4y%VA z)9ThfX!YJ=NWi0X+IjY>O7OV*X&S=t9hR_*p`alLwGAILWI3dqun z&3G3DWW7(%>51MQ^38_XRtA85+SSjvDSxE~?Pt7Pj3w=5mA@Hgn|O7xb30>AFLav+ zWuD7pMU+3|M99x6+q5f^>u_v|8;1 zD=^2aEEViV+p6-boQ#DN**5u_Fzi^MHyc#`rxWdH{vE%wNOvjMw&`Sk7TGrU3dk!4 za+jusJLHu?mDh8XvZqAS9NW9>2WEBHMd$`*vHJV**faGObNiaPw3CDOHv0o~PqNj4 zr>J=PbAAW<*3jgbZ2~s2aZ+P;J3@9e1}76aB%IIAo4o@Zhdi?k-0T8pA+AlqFlTNC zOijCu@FY6V+p`|k?@;$EEZKSlXq$uebB?xiKj??M&KYDjPnxAiK(hfh>s9YNAPlz~JG^>K*8iGbib% zx7we`!PJ);r4?dGc4HSWtx~4Mo9zea@nCh()gLUc)+e}qHr9`Nlvf>f_43M39f8^= zWOU{>Eno~Hkei&PR#N*uNd&(8rj>UmR@DHu*;oK>^K|gS0a){N51N>~L)@OL9I{Qt z0&+N81muUEE#5-@5VOt12IkHiNLSEY4+@*x=ErQaFeYu-G^$n=9GDi=(W^V;~aEEni!XS-nB)VqeB)G6>#&#~ObT2lC zZ2OWY@9;fNg`@(V0av%|j0<00i9N|IOE`1JC&FwPQQcK1y$emxL2nms&}mLE(WZO1 z{W#+Ikoyr={*bx1tnUtoY!k44$ZPj^ooGdBG^KLC{gY$1*;inW<{TO+oW5ZS>Ne*v zozGGlu7`Hz z#vGwdlgdsMd82*pw4adW2Z=v#)RHpjE=%G!|Hrg)_D=hOTFkxnBM0ir`;i-Np6JD& zwoStZ?k+MIxJ!!+G|Ha?x9J$e2+gx1EcfMfdNrfly6T}lf402mzCd4_Y@4Z{dEsLC zxAeE2Wn|uRKhC)cfo6z2$zK^SI6WTzmD~3?9&UAwY|1B;hljTBwO&5guQ#@HWI7(XHz&Yf@&$`}bQNd3e0lmGf{= zCo4qem$%-JmAdg*#~$Ijk2NyLL?D;A?rWC+#gJ&ECrkv-v?=Q%#u+d}Y;|HY9%8E; zO}k~qe6IB2yJbbujs}ELrtl@dGUSQ&X2{keIvO)WDXWgTa7!a4PZFd39@!%y>yceL zAakU|oQ&JXn`Q_WT$f9Qm<~2b$^kwr7_%9`27%>4@HC z+^weMbEWi5A>RKH_%L&oMe2@eFi*2yK=LVQ%;gkZ?7M& zc;gORpguJ#T>63DQ_!|s8KB2w#Zou-LA^-tGro`QFYU`#h{e4(-7l zv0d5IA;)a#Kf7 z?aNd!_ILz1#TE1N(>0-~dd!&l-8nb*v&DB}xjw(VzrKzdxA|}Lj=ot=c^vtUqHt!) z@GN`MnRv{*>krHeXG^*&$MJ(AQ!UGBFL#->Z&G{(fCljRre$rh6*Q0Q zs1voX_thT<&D7PgXrBVXj*rhwkK=WeJLvBpb<&~r#`=L;ejb{y6A_3F02iA~Fdwto z%C53JzHL@E;+yU0Fk|22d%*(qDret&FOT2`&jQ@1WpMiobHo$-z+dcOT%`aeJDHfd zo36*Kwz8x4r6uw|S57yVVvJgpiDK;{uRsmV*3Lw;xx&di>#uRnodzA}{OpwQ+jEYa zEIVk+j|FHlaMs$bGyP~9cyzH?uw5>+Z`b0CHIewyFhx;pv=p>0C%lV|(n)AK8a*Y} z`jn8O`1L`bSgL8DP%5h0A2j90jJjra_UjXkNO#(l7}}aJsx10DJMVPmDl4NACcaP$ z`QEZQFS=M*oc!ZU2Nn>?enot70FI*hG7ZXggJ9LK9uEvSGW^r z1v+`x{ZURs@1F?VgCU!E!_Zijg`Lr%(`37rS|p)Wgh2trjy6?jX$Ckoxxh2b-r$`B zZfrlSf3U#Cud{_rbg`KzN9P`{`>e;ib)R+VXNyZbwf122{S(x2hj-MauW-Fx2%cv* zUy753gRLDni)`6DJ-G08X>g}BJ@{hoFuTQVZYIOHm)Wc=LOklN@lcnpx46wTOKkiv$Y9)QOGyS7 z{0;7Cf6<-aWY5mX9xW~A(uxxQnSl=(o5Q?NWz8o!7z%`=S(Vee)lL=u{dv^=u9N&L=*C0z zAI;;p%c@Q&qz4yGylY%W7w`D81(x^XkG^G;8qut+Txz6^OYg)VjZ2RCLhU?MlBJJ1 zGrrYqhRem!TpZA#am?~-I=Qphg>@A%n@5oY<$kFiDvw6e9vsl zl3i#y(xB&^i8m9Mll`74CybcPB*%r+%=y%L(mU6o_x{5#dIc5j8`F$wC>7N~|$~r`A9T{{=Hx`7%q%PjAZ~`Iug1h|upx&1ZeA zHCN`eqn66VD(1X7|IDR*>bvIBzC;)8YQpoAj0_jDY6XX~6S=4yTA+S zrNVv>(+4yzoYJ zLnh3uZNy2iU1&r>weW7yohIOkMSq8kfAx0Bvsl352!IRVPC?`4SUvxfr$2vwE-B@oyjkVsaGSP_|3*Xq%UvwVcRyH=Xg%lRB zjo6XI%w%SoWtznn*6hHmeU*=^B;NctYUQCj;^087SGsB*D%iQeJMri5uxV#7mh>IA zh{3A!Dj(wZNg3yS;%DCoQEj7T&EMX%&z%3O+;!HkaC*<#6hq?C-(k0MOBr~FT|Ue+ z3!f>m=?~nhI1r5u+$y)0di|Z@+`d99tZpUk>=@H+qaw)0KnN3;zWd}^X zL4ROwbv4J_$+F7FOlaq$N#3NNffl@aZYv1648odIZxweL6mI;;X16IzEew;1PZ}*{ zGEot}kf2TU_gEst?`0!ggA5rF?ydR*^i3Uc=pA(B7zcGiC}8Yh51K6$bmnjKBED;8 z@K&UirM*r7P1WW4^M~cj;-E(xvmbQnIx|0L%a+A6-M;81E4$z6%3n0CEk0_Sj}f{i zx}%FJk8cfHM;EghU>EGs>!ns{Ejfk@@5HX3Ha%Wz_cx8*-h|BRq_I`|o1U|a3{OyV z)L4c>^mpzEHK{z1x8m|DMoW{+8zqgwJhN4_|B8FbCa=ngLZtzJH z-!>2RcKv~Q(7_$EmQUAnO1&#fK-0~${Y!7yKR~OXCM&x!)7PhAU+$bc84PItTI@Au zC1nd1gBLD@cYg=c2nEi?e(}<;blRY&M0Q{FL{kGxJ`o5nls$E}eM`H+R|MFEg8z&HcFf{|GOe@5imF%XKOIWiKMbeTw1} zGi}{KYZ!J_QiRJTwzSnrwmFJP4HxA2);G*yVAL_U&QDPb`y8>&$pUfM_{1q!Hu%mV z+muYBm6C~yAKPI?V^Klrw;I#uq@GSJ`vWxGFBD5)o(p&AKY(lrvIy;aXr~8u>6x88 zux&OLfjwhN#f;APL&nSfHI;j+S|y!%nNvf!3p+d&?=xPzqhjepP7M{kQGe*4Z+$4v zf?fZtJgjP8eol+%%jRHOc8Aq3IVbZR%non5%#Z^s1;3VZ`sYp&W%44HqMLj>Fw0?0 z^H_mdv!&-*t{;D!x07op3&nYGK0?jF&V<%xpk_LawG`FFb9WsL9q1P_zzuu?`jB~M zo3*^dn`>;o>X|*qAV(74Op032eP~CvCX62j?JJ&apUZ`Ju)YaL#Fj>fIkX4u?xtlI z;)BX}H(a16KxgmNzn}@FoVqC@1Xb(A$OS2uo$B^xRGP^!=NyoylcGw}gAQ56^jYr`3#L26 zY;!Rvp*FH2PNW?(G6Z6pT&(UfXAWHKyR*lP(09jeushg@C(vrF!VWg-$tDd-cukKP zTL2jo^#v4@-euJ8g&k}FoupyjpFbjde9b+wOMlI2Xk%*NZm|9}2gxhhg}&y}EH4M0 zTw&gvKMwjP4FYmy(%=KcmI{-YVx``UW0s4{3lqND$2@1#XSe~{;11ONc^;^1KhL_n zouCFo(@#*x10ARmeVS0@^byDOcVoxT4)u=k0nQ8i#UE^E#m zF8nOb@@75{v$x-mlUAO6(!q$6Ze!u~$iFyfii^c2o!);R)Tg{!SnGGd=Epf#Hq;}$ z(scl67rj3TA$%jahdOlysit zVMfe6dkg+J-L$1vKrB+O+lYL5GqDlfeRCl@(b^SOngY!H+3}b9B)Z!$p|%zF=q|kj>Vr?( zHzoVc9UGuVbXVR0MR-FC`ODjrVa!=+BUtB!@Qs|9`mbDQWMWSYPHk*=z(E;INY{6H zZ`Gv?QpDbbf9i;XG6=+#DT5rcWx@vJP8kfyl_`T9vu#Pv2p%EB1{XFXY(?~1Ik21m zQd(GfAO3(HyF>zZ z{NtqiPGy{G=vNZng&73JH@<;xdp5H4>>|@g9TdW>ww26ZNnTi)Ub1}!>h=2C+zhz( zi<+k0i12u;Bf_h{)oF-Zk}N`8G=f%1&-Af2L^!2s1jTsb8psCO?6g~qGi^1uhpXM; ztg9{Ugu1=HHrwDxEcuCLZB>pGWkFG-t;&V#YIH=2rpEj6$4=#VxB_zJhwB5(mL*#z z?WN>Y@1>;V-sER3M`O^i+V$P?6KL;DWCHzTZf{w2ubQIlA`_Xn$SARJWHWq}MYbi$ z7LpJN_q&LFiCsaY-dnxFx_-=l&VTk+{Bg+RTkeNk`CHCU**ozM%snlMz}C3cd6X-q zyZKTY+TMsiK;MLSK(0)9e{jq`4I}Y5$wTD4b7(Y$PS(}dzEwWvY)Sf@xbSz-L)hFw z%j2P{vN?zBi7~V#j2p$;4|Dc5@17W=Gr9j^VfYNee~(|)eW@}>8VD|z zj>tf)ea5M$IZ3-5c?@K!_u+o=yj@V{kgXIn)aNh8yQFo^<6F7fu=hx;u zG#>f#I{kc(W7 z2&IWY0(}44oHrninGChYtwt)=-A+p<+(dZxNPEZqi15Y(;s6mHJMn-^z0GdJKgFaPHU#yS4b()$^A$RGHd(D?bMpRXVE$HhNP>kk;x^N;`Izq94)%1DG}19oNs zPIMfr4BMCu*rjPW9vkc0sWo29YyRnP|MjR#@k=70h+68W$0(sn~0mjvA3T^L8r1E zhV$G>W739^==bpET4Nhx>F`c11!!1X$k?09ms2uG-a6_>{S`)3wFg=4fCq zBH38+iyvP*>E%L^rPr$PNvFnT-UM5au@+?*S4*YVZ=7<2elRsah*kTZ@936XK9QJa zM%Xv%oyB2v!a%J(h&V}*ijjX;MV-G^J{jvt_W{c~zjSxs)rP`-pUU0cag${dYVU=; zD!bN$6}LA(mzm#7f7AKYITf0{%BU!{(KKK$8zWw&Z?a6&uy`ZvB>+Q6ypW;>VB|Uv zs>a{F(ke7^z%~(+y*XtRCrnw%q&DRg85wUhONZv`G3ClT#P`<>iJop^SJ)OYSSIGF_6NvsH35k9XC~G=(K1as$xBoaR;x(jnd z^tczgfW|Xp@g~^8_Kw)*ykE13lClX&>J+?q6YK%Gr`iiGqJu%F+Nrkh050AGJ0Oo_ zBsl%b*~kay>eC12Ibv?u-v6PiPtlh`~gPzUX)#aSd0DY4KTI@I0-d)a7B;V-IYhHRb| zMsU^CP-eE)tDbLaC?P$ygVu!if?}HS#0I%>B==)g7_sUq#_AV;&Xy2kB$+*bGvXO6 z`LLLvtw;O);CJRAwsM#EEv6A6rgny#I$pdTHX8z2ucK6iw2Xc=?%6zHh=>ZOCiB-i zeXaH?qgFBzJ~IoTA(x$UN~@%BJp1uLg1bvtveoP0G#Zer?8^tZO~__+BpdIV4jQYY z?*U%;pfjUnwPM^cN7k)xn)f-f?#iEZw!r|_%R$Dw|Hqj~9{CvKTqoT+#59%ju?543 z#a0{M5F9WG>;XDH z=m1@LN+ZSW-LWIMb$Kh3iQuk$d1pIH7RISQh;2b^qHcOx6P^3o&5b0o@fUQE_j_x@ z_?%lNUi@pGvmDerW3OOd=wa=+P2#}1Hb32oUs;6s+}gCa&5e+}rsanB#U7|BGmrv) zTY-C_Yu|Bit4f5Dlw@lh7A9>>d^cMVynpmWtJuzywYQ?u)ork=L+*j+Gb<%NH?0FHb*?tm9y^rk+%IxZM$61 zK_X=5an{Ol1Sd$GcUslw^jL5DSpRbV=lRR^zsIB7l<<-sv-iXvnDG)gp^64(UhDli z3Bo(fcNgme&^8+j(1)JslWki4pbvBx({oz(cc9gx{Q$Df#s*{wPVfK<#9Z3z>oFSi z9paXld;r-JV-q1QSCnze^zKeg&lW!A%sPTG6ZbX`$o-T9aphCaA=@-8An$R3b?P)x=-SI#>j0h5FFPT1SRG&Bx2nytGAVs+%Nv*?^G zMI@4%$!lu77xo0@d11VYcS%c0U;|%j=~RBKGB=CGJ7EXp@mO`twI8b-w9mu(Ighd` zKv#aOa?CanW7#;10Z}>k3gcku{DnZHa_*UVFD+1d=HecZ@6UN4uKYRYkZl?kkmGX> z%(Xw~9JI~D2I!u94$zf9=Nz*o!{XkK&v}Zss&FZp-(WTm6P7Ecdv^R4Vu0^C{uP1^dECOn#?vi7~&hit?^|iKQ%H;(;BANkdoY zGX!HluA%`CJZj2W)7%rYiHzp(c~}QLzT|$yrSq`#kpJj_{cr#L{nwxV<+tDd{*NDi z`uW$t{^Q%fv%<55wKzXn7i(BUVO?3}nnU(2$qQ?4+?k`om>c~m0^!k?VO$naOP$W2)VDC^Z(Y_IzU`Rhy_Rx3K@$t5>Q?WrKMPuO^`w&8 zS&SwVU-_poTSq-o?Z)mbL6UuWZ~cI*>}%pZo3T?n$w+q09V$Zp470b^ADH7~W)7TL z+tS%rs)F;z`T==lUlG}Lv#%Vn&AwI~!*FiEObbyI^yZ3;LdNvlH2wH`mD>)|GLh8o zlK=ZnDiV-a>;M`49gx>&w`9G2m_Nj9)33n1T(H@ila%!(tcXP0*K=#d-(tR#k^G=- z2Da**;($kNy3LxqPGr_ntdU zd1L(my%OG2+m*rXg}!K`dR~`uwk#cVYB0qRq`SvZ3u#7Ugf|1=CnQqw@Lq`T#Wrjb zXZ`+SEi~pPro-dKVoV3ByBzg*C*0XhwkEdvG-!C7JSn$C~H#=AOKdpwLxRm+)zSK-W z^Mkg@SP$)S&iB_``j~UXJ`>Ynvdc2gc*Rs|Zkbu-L(UvdSM0Ie4aWN{TX}hN$SY0{ zmX>WIsA2bHNtT3}P%oyyxY9xf+Y9OIN(*+Q)Lst!P3g{Qk=I#|*S@O^?C}!Mb@iUy zK?iEYGAN}MHr2l5PeT70Ke4I@otf+7qm+S0JuxmZBNq_ZP18^8^iuu}Ax~&vHk7?~l!?%RZa@@BGgV6#@W9PkD^ZB@5fG?OBtANlLRIp}~6m z+pP3kdvsrvTU)&e!T}uC+e!6V=WbzRzKzEaur(?Q?0$iZGg|9qW%q4HjBm%+<~$%* z@3zlty(tOR?%WF-L43rTR=@OVYdN2!+(x{<&Xy*l6}w)P)yh)j4m$BsPh4;E^$igT|$J)Z*?Z1TD{l4Zt4T_ zM6nIj3F+9WV=kS2b8)8@)vGt#pXg1?7E!o2oYqEsR|n2i9sjr5H_IkwdZRA>Z1iT) z)cD2<5k!JGdDJa2Arz7~%Ny=b>SDa#o2|_Z|cG3je)Y{yQ<-?{}F} z(E}bKVCxB+&w8wAmyu=sAP;7g5^ojZ;-mKD~sj}FO}hjdo$Mx#l8)Ep#* z3Z1DfXIoo(*L`-f@*UsJ4n72ys{mS(o5H=0HCeB~?ke|1>kGaRA?S;KA;M}uwPLq4 z;h%%HNm)eqU3BnP-O*k8gU*~hNHXj>OVKVl8JmBQ@uRE?k&$A&XhOy(ooq&5sgF%Y zwrKBB`=GVUjDtp2Cf9?~8JVP2*&=0>j}|v=Jf>;E$>KUKUDemkS6v-X8XlDSj5v<-Hv ze!_uoTfG7Kn6}LJKdqZh%L4X-Ms(-7R=0zHN2Y?E^;}hca(=DYtXV+H zP{(Iocnb3wcL=jr(N7xKi3}sL;qNCM*SBo>FUjaCU*CXEukXZ% zU$l3hHxwB<5#T33SE{acueW!#%ifceEHUEmm?gbXc@mfv@7rE9zG=;8plwbj*@X^T z)PW|b2k64XwI5)%DcK~Y1qVD1x{D=iAM^(eOmD_7*s3MtDw{OMqann~R~b!P)UosA z`a6uNn3ODFD-+dbVR{HCgCPpZMEB=5_<6e%U~kMK+Dw$*vx5yUs@Bd3atQHD6N#m7 zGc~N!5grmQ2fW{CO?U&lHnDMbfkN8&%ICdgpZtfl?Tlm7LTw zChHr9HISq}fLPz2bcY-kd;wYcN?8xS6mw$R-!YGmx*v1x zk2(i!6EeBlD7NGFj)Sgzd*{Io-({|`Wr6{2!)V;%8tj1WmqmgGJE}UTX4?u@Z{4pc zhD~xopq@;dF0A2T__8wpn_Fr^<=RueAqV@rFoK8~AE#WF{RJ|kczzNOA&munhj!fC z3l?oBEKBKoJCALfjK$|1_jY{FweRg5v`xhZ=q^PVpbJY82=658_P+fy_cqpw%?Uvz zF4&JXKqI8uq(UeTI-6fn z2i9EP5#J*h&*i3Wd(l@;{&rr6-GtU4aD&y;^-WsJa-pkaXa)EUx z9jKe}_0e`Mqx&vxe4WcA86UNv`&Bl|=pNpMNzf0X+ooePQN2=WL^>vaO-Pg4=~&jH zWxUEAv#dTesHc^d7cZ4OF*I|kHJ-2aF=gm6|MJ(@cKqj0fBUb${qy&~|MtsIzyJBa z|M4H)Ay)>_cwiX)0ZsLfP=ofM!4atO)ldTdRIlUNRI?OVt#Y^xuO!)8qbFu%iQ zpAd&$4t8r}fjH^rKm^#c#vS%xOn#OFh^+guACv>%%x%6sw-fH&S@+(ZAIw5a;vj3q zj`j}C$ZX^qvC!IRmft|GdCX@jg=NghLDpkD(~HOIgC;zO%={g3p+AAw_LwpdiLg&KKj*BdR5oc+v6X}q(Sf!PA8>%OE;<$Hv^ZYR zt>k@o%yDfat+CE7BD!+WO$ys=st9px_ap_nArmr#ET#R1D2OqV{DyZ=lSBUmeFKBL#$EMKU-eiG#V|v4R*sE=k zpl)Av#P|JG&y~ZQbDn%hdh^Ep@li7_uW9-IN#j#?Ar!6lN#Dzq(r4Ox_Un_@F^|lo zA9LZvggOHOtn*)^8)rj1uI_lS`Z?ErvGRldC?Dg_-WWiOyIZwY%|b&JbRw(S=1;P* zdEuqTQ<0HjMj2*89S6GoG12e4i@Vp*+syVqmzJOlGS~Kk?qFv$Jct7g7#=jHD-#D< zD`&&0#6s5nOa*xtl+tu#PSxtkwdN^9lQ5R!rgAp#*DuQln0-LPlxPVB{`HqmSxm`X zE+=WB{YotM7@6~@d&U!2)vW94tp{ z8L>eE@=%?qzuOH)Tek2+#W-a$84h7yLaag z%vA-kd*${ISm?FhDGe|)cl@9N;l4cIr zWMbO&h5nIyYeG+iy90*hn?yDuySH-1Ra2PkSzf}~8OSUXf+%T-k2a$La+JZ95p#zv z%-1b;z|I@;Yn9=P83hS@MINm5q$imG@Niwv?U=UNn52QLL{zqafgZ=bH&^m<7ry#FOAf)!M8=027&iX+|gvUWE!m)#`Nsp!eubcPdkLYgM2@;I}{cv{j?lubv zf6~+OcKq5dy&aNH-SsruQD#VC5DM4R7)2%??LuUtJMxne-910KR|nN25n4SBYVYX0 zAyfYVw4(cD)mtQGrK3B?Y_qbq<&HvH1}1d0*mB46FaDTj@|N?lhUL2ty62&(ygPB@ zCzvmFXR&ow9UYjpXk)7fI%1pfo~(`vxsZ$QK)q09(YG9^(a>S=QS`wAGwF%d@>51x z*mUa%aJZ8FMQ=J_U(E})=+xOKs4Y*nP)e)67u}6@VnmvbeC6&2WN7+m*_2G{;_)YM zciFC0ogsRr@?7dM-@448fV1%Sj{FOrV>{XT#2^x1@x44A6@vEZT+3tJ;JXXF^WHFn zo*49Y`~x(8R4d>1!dwotFmftcIC5>x3wtIO-iA`{?ZG zI!AL<^R3ohCg#ZM`n@TCJX=kBft^V_TZOx|YT;$<3B&I0u=`uxX8)lI2WVK7|p@;RvB zq@?zS`~xz~Am(}laSQEw_gJehxx+Fsf_LN(&>=<$)TPA;BK@;38daRR$5yt{c6HG~ zQzR(=((Fmvx%8I&vP)cL!zHI*I6-wiq!3lBYb%$0M|5YFk=~O(yc5NqG^-1wHrl4b zwoW=+6wKgE@&8}*-mSeX3SR8YEqA`FC%zB~=8o>7cbPn3` zV_WM*Mch=F)>IRBifUf;&Wu@hg&D1BT^*!s|>Zq%~ zTlr!8tgIh)&qF)t;(2I}*`{R^@OC+Ob9wPjwGPh#1Fp{ezCI=qeWwK04ZfVrTRPgC z4y=oAdDd*Y$Zo5-39C72WMy6coYh3cIt;fc$XQ`3~|uiIpF-O~7V+#%8>6 zZ^W{7(e8zZ5nFyJGiKVo4SxWRBzwkWj*YudC)w{H>y=6odk=m@G|*r|*d8e@=G4sX z!;h2)oGm%qy$S!UEz*oh#~U@zjHPJwOj-7GZ(y+l>3s_(~oBCm{u6> ziAjhUc4IecFmq!;BW{{crw!8x{V^T$yK`>&NDkSOUqC+bub8kHJ5aU;;?j=QC<;<5sYqhM9cix{gG$*dFS5*^w-brh+3s+UyTE?Av!Q`F+Ir42;jjgoX zOXu4;X3K;P%+ad}%%$_N9JI~D0(9@ybjYRiupF_?!(`rjA!d(#DGU2>PU@=C`%+R~ z$b0Sw=E47U%!Svbi$`y%Cj_)~sIuEv2dh!`m2AsB;y~Td`H;m6%Yf@TTQgHU7llYlh*<0)f;_(^Zhzo0#<=p_m zYu0A$-e7+~jvajsa`D$mBXiEbK=v{w-Hb1JyvhArE{!_>m~G~DTW@RV6~~$T$I^ac z#`ByS>fL>&yq~;8hzB~?H{-X1T8Mn}QLfLw zP&i0g1F79x>JQA!&a85zpj*?__>XeB9&$P_3Eo9FMi)-i3CP6Ywn`U#oMK-@TiD#CFsb z5!07IHIm7eNPrb?|(GX|9P5zXj73t|LIRZ z{QBE3fB(z>`2lQy=+^y=v;GhKO@jXOPd{HjC{yPjruBz5a`r#}J6oR0Bvd2P2ieX} zGP|%QOfwGHkl~Q}*i7lM|GI9!Zu?Jv`>((K^Y_31_RCMd|M|cF@gMC;Kop#elzLlh zc8s)LU;%j*34uFCWymrJ)#GnTMf})J!M2ja?-CvLlU^4VZEK@t;ggo9$=CdHOe(tH z1T@Co-ww@+YqtlT_*$cgo@nVFn4)e}s0*U-gEv73zg>@6KG=i)z^cgGT8~e9lDF}JM`-_~ znQnP-`S6>&`@X#Sq}ejzmSuVoku;=A#_J?h&)`6N2`lN)55Z}qqrujL0)OR0tz}}9p%@P!e zwKXpns@W0Z6s|06E*;_QphzH}=Hc`i}5XYuyoExYWu&>BQQaX4t_s z7WwxIj{xmhIsevn=C7AtEg5A4X%b8xM z9A9&f>$)HF2XXEBF?p*|Tm)$X)yNjx!XGl1cJemkuVrF->3}i*K=J==?SR{Yf^wOs zBuO6tw!ByeyhDSnSc7!HEC$2iq;9UAov~%b0&?VEtYhVN$3L}f{*@l`;hn5kym}`3 zyW=~?$7UB@RGa)vCbbS8So0|l(D5w?=+Yl^vdHl8KGuPGe9j$n_3t?w$~(M|HB0TF zgNWyzi7Y(KGo@ACOoY_SXCj9;v5v+SzUHlnjK)>zTP*8b!REOSdSLEv)xcc(vC2XF z3@kd7{T2(*IN#F0s+p4HkZleo_vV!}bKl|h<%){8;Mqta$)?K{7B}rlDFp!tQD?e! zM`B`)G1H6towXE5?+|ft3U!`oN~=tFxz?ce1iNNBgOncGYbAlO%z{+iG1 zYffye`^9}IwzW>XU))EF?Rv+o*#79=_Dz0U#N_3mm2PTE$!C#DNpA@8DJ9;{C7}4;j-p*? zq2?l6{7q&PvN&v2k&~PTBfuem*Rp+R0cVNfY||68GVZt;Y?2YbcoSZ@g&oV413cf_ zsC^k0FBvCV%n0y>z(#1$0=!-VdUv3+J;O)hYTb`GVq0gtE3S{{<}u$~VqIU6ZJy=z z^=Ev?^qrUNEvQSsR5@OohD|T1Y<$S>*O_5kTCh70dS%Qrc8Xu?>~c@S)O^U3EMC~1 zqKk{t5zs3dNIF+_>nbjQo zDy+KSwF)dXa{O&()39|#@7P!(2r}lfSBj5a){^`wFj`-YK4`^;#6zUrn@zjD%k_Xg zq1vY|8L%g|MZJoa8=r`#4sUfGxRr*@c((^`W`O9>7Uh4NT8#J0&R!qh?|Mb>y3+SK zcH*3RL%XIgF1EsPE)`KC?LHQppAFD0%2~Y|pcUm?z1OQf+9`YD4X*=pM0j9s5q>0B=~`%!poSY}`WQ~J670JBZaR;DseVdg4hP61K37Og-6 z^Mbvevw!vnt*ea1mD6H#Qtx}cNjQbns$FFat8Nq|z0Xth#h%GXxy&Y)hcjek0(@Ye zV2jv(7MM{Bq6e*(rQBI~%AR=B>wp~b-61Qy8AmGz`BTi6B-;>*QDU@vj6LxjGo3re zmnxSX1a~4g@vhgK%*@$8d!R$Zti0Mc-EJ~{&>!Hoe3=Y%SG72LzjlOp>(>@d%NlSVY|n&qitfOP>$6>7H-W-( z5>m6;L?JPr5h#f#c7X0tK0qtVuW|#Wca*2P!Ne6?^K}d+jR&)s> z)t3bKvQ@pkbG4-R#zsff_LeFu!^aKMpOK~7+Gonk?4YffY^Bng{!mnhy+`4qS`{^# zDl4fXmo`uI0L_*8@Z%sZPT$}zeNJie9Xaq*RC${3gfVCyV^Tt57_X)JYe5pLj*$@)+{^3_fvW- zmQ3(=*=p#l+PMvRATvb~rE`-^mNip^7xkmWU~wPzfZQDc2IRt)06An&l=V{%FPDH^ z+RNpGbGA8IoU?LmdG-v@g@?vJz-)Q4jcuO0hG_RmJ8U6>55^nx`z|`X+BMcWe>%3a z?csU9>;YOIG@6?MngXO~EzLP+MlJ`F8YVpn&~0j*>AL`}iesxfp7jxIo0SdNeAEm3 zN(O9P@wc-aaWW`>7$ZxHdeiLa?~GR(I-KoOeAbm;>C7qo@SfQNbiC66y7W7p>Jk2E zoBe+eAO`61Qg_hRU+NsT&&i^J8EN{aUnA7BgI+PFY4LG&b6P2c5Dk z*N$?f<&7B**ik2kCCNryYnGTU=ZNbzV_dU`mj|{@#{x3jsjvk2{wZs|W1Y(--Zxv6 zW45{2z}zqGIOfWJHaTR=j>+ER_R`aRJ*%UkU&~(CnX}&EZTU5wvq>@*50us~0lYBc z)W^n~@(b}xa{j)3VPb6hlGvv1_JwRw3sCIy6o^^5fS>iZS=M@x{33vlspONqf8p`F zTE>7mO7|p3TvJLQac2sx$2D!ct>*ib$F)zq;*^zGD+#$!6ESyJc?Chj^z7pE^mA$hd@vJ&} zmRbpV2mW}b_P%%^F748b2R?~yn|+Pgj)XH}yD&?ThPHR%*ZAbgz?Jj`(z7#pLg&$Rr1l(NI6g3+!6~nMbxw!s27r zSjO4t`}<>74~MQ@In1AewprK!{bG!=*+h2G3~ihbnkT*q?bfkDJ(NfcI6V{FxS}wS zqOA(|4nHIs)Xn<6><+&VCMmrOzcBxQ%)Mn)9Zl0Vio3f*aCe8`5?q68a3{FC6C}86 z@Zb)?-7P@^1Pu}h5C|IN46)~apYOcnKI{DWvRIofGkf+_S9Nz)_0?B#evcb}CbNM^ zg9Bg^{fl!2e`F~FHiZ5gE&q(10T2=}Qvrka-y1mtvBe)s&EMnu{vh*rE&odG{?hVa zoZ9`9nz&3k0qg!l4RY>>srXs$YmNi8lDGhmj2*x}1GRF1 zf(!TW?s{)y{`YZu6#du0jQCOV@Pgbcf|u;`JS+u9oU!iOJY`l^cEmI z_^UP&@!l`}mHA@@7H(L8)yuya9dz%B{DIDa`(XlpR$wKL6`+^;mHA@@ zc8GGZ0+#;w!h-;z|J0Ws%!B2Nza)5{9ezoE|-4F>t0m;aGkMjI`)1CK&_Mb8&5A*K-78=m+y+Z=z^f~T# z+He4?&i@zJFCGY|0GZi=HP{E8u!o8Ff7|x2!e+m08;Gd>*1~4&e`0Xpewcgzx1NDy z5P%>7j2plV-LKUB#p%C$>;6-U1jzC{;C=p*`d9w%w|W1?`M-Z<-w!6ke%bf0N&45= z{dZ5&e;mCZX5jy=>K_?EHUN^(4WzmM>J;F=8NPu&`fm*UXAY1J*dfVt&)@;<$pG?$ ze_KTPb9+B9g8wPS{V@OjuQ2+j=lv^;{+k`|KgQ7y)9?S3_;;87kvRC-dzd4)#FJyi=ANGA$(Qh^X*j4mbYx&RP*MrX2kKy{){Pc6U z{+l)YXL%pag8}ePW`IlWcP{@P;|j1B{LRZ3%zw%WJxr|6`jd71S5AnP8$h_;ZV%Z*Q z=A;l{-#okzmh|F&m|XvtegBFe?riG==7GB({ec%O>~P;}s{iAA|5ykUF?2MMu(NeyQr3DZDy~T< z3Kacg5HXf=GGw~{Sj@!H$ic$i$3&1Ayvak~RGK z8Yof1q;6sCWbUX9+~55#J@5y2e~jZh_sIWp*7r01mt*%={ujrA+MM6-;r^N9`{EGi z_lEp&RW@LrXC}EP`1o;;e3bd-Vh0%XEEI@Dv+`<3XrscZV#{+*qnic>k{IBQy zi>CWuzk7dG;QPN+ci*7w-@7P4?DhK>*}hk1``*~!f9w7X-~r@le>dg7Y}$V~GQS&E zU0POEQ~pQ8D%;r@+WvRDeg`J~n`Y(uhsFLM&3Z4yPeH!J7Js~EhT{O5_TN01Nm&1L z&HtAsXa9~2{N2$1;|!oS`0vL2=NZ3#_h*v>IQaiGH5*X+>;ByP=X)RazWF(rf7teq z^M6=8GXU55KTPO<{QB=-{Lel7|2Y0b7U2Is)DL)H-?`_Nnf{k9_4D}8KJ|U<`E5G) zhVc8%f7_9mg{i5DgNdz?2`~%+g=(1$9USajo$Z0w96w$g+qv56{-^VPA0q#|@2YBw zNfHJXSV9 z(*U;h$K!rk`W__+Y&`^M0RejM`?{RK$`0V;0i`D3SO8i@0BuA9Nb9hsR-4V|1!Y)yaQo+( zEKEk$CZ>*zqCcM{n4UQp8d;e*Ia$~P*S7y3Z|{xd=XsLeUUgdL55cDw%+j!D$e{)vf&nfcGR_tW|PvHP#WG5wg1gl)~NO@Psy zNyW*;Mva7r6OKvF!qE|!_`Xl$Kp*9TW77C}6<~)ia8W=VDke_UOomLxOeRcbOx8@c zOb$$rOpf-3MkY*v8fm@@Az@){!ge1_-%knua6f*2^0T)AXE~WT+~2>GiI@p6<(dGu z^3NGolu6da*38Kq;G+T%R{{c#P7Wr9HgIkknXS+o`0DMPwlB=+C#tKXP;zih`@?4l z_?}04MtUAX8F^s0Mbeg{#0kMjJ#j*5a|Q3m!MC?-qKf{Eu~JMA`D{M+wl%XY* z_#?|11Kd1BeyKaDDh_5^TjLqCyGQ-_vq&c^X?x7R2iBpN^BFWrSXgB)!z<7E9lW}_ zgCiRx#3&`8!@-QU8MJG@2D%G`pWI$#yDwfF1&FPkd=T*sKS7QPLpVW>;m~*ekQAoa z;l4ASE8KqPaelYBttpnjof^kq;5@ubv!bbprA?nDdzxXH@t*lKt{}J|)Fkv{q{Wp* z-waf>^L%Iu-BviHf!PracL@9!_a-KyAgjX4>~^~r!>jyV1$S+CKKE~K_8|iZ*|`2} zq-IaTAjMcykd1{P1t3=f^*ayQx<((fAy2%>PUU5D#1gQYrMH|-($uZ3(EeP@YfX`E z!-AhKH!7d)?Q(YL7{+tW)6G*kp)^60qQbg8$I~&f%yvGx6y3bNrI+Gqc96YwYr@EN zemHBVRat#I=@D8#+p^U1zUAFj)~VfAB@<=my~W%idl z+rY&mn;=enn}$V#TBXH=1sofJn#&Jc6JTnq)b^+sa9|L90n);OIiizPZuA!tM}e!@ zpmmv6t&=W^pD7oY8$xX|t=p_cts|||ZTM`y*+AP!T6Z)OHr6(3TQ_!(_lyrPb}^30 z8y3~jRkOXd(V70@ z9d#XAJEIQG63G$;Kluxk(jdrgG{eLy-FYSg3;~RG6d$^4zVMe|)BavjUXflgI>JPx z;6u!;NeOY%tl9LWR)eNBk^58=@mxc#n?}dDmxPz-mvlVBnu-t{k!Z>%#gK2MEy?O5 zd4&iI@rj!`9q=1?RH4iU6BVvw8EgDrHJs-7u4LM?T zN#Db0AZVaoi$Bk>FYmJAx*-FBxd{8*6s9%Rs&~501Qc~Mx{HAe9QXNML0v0`&iN^L zlcC=YOhesuT9L(TbhV^L?Aeby5}%txD4akArd1X8*N-=5DWD-CVZE=t&|;J#qcgpg z()Cs5M||LzM2NL?Nma2olS?_YE(DaABjiSV{r$8#B^YeMgt@pVMa*;H_8_?`Wk*abOb(}O7pUs6fLddj;;N1@8f zOH`;z6WPE+gH1FA1yR$oQ8o4kG9bXs1u3#Tmo9eCELm%9mIK1BF^I=*0W{z(t zB4K(Hql8_)zjwH%05^gCsS3HNHZl~}m9mU0;U)}mgF*n}+zz}}Ngk_-3t9T}cIKjJ zOU^BPt@)t3UiMUxTm*TC$Pb%)xNgQw6B}+i2JE={amq?6%CkAoXgNIEB=Qq5Svwux zSTCup`V;fN&=v5>v*hTb;np9I8F8=mUGP?)y<1;y@_eh_sBIfvlNgEOmKpjXBzo!k znv^?gazdtTZ^`J>hXudS&ekQ#;iH^S{h1_~JU8V>v}RgSZ1^N}hBi-g6mc&(g%2;0=7b4Z z)G`>x6R3&dm+3kTqzyyBF+dWtvKOvtZ8U-r*tIQ-Hb`60S^J;s~3MS}Bxq zsg^i91rxIvMjevd_JARDf(P|AX^CD(bvHgwG>cC=oI`Fng`IG6#+^`-@OF`CU{y&S za%e!8I>vC1AQdmZ$g-bU6KBkotK>j;4;H_nuVd*mxDj`EmwVgO-cwodQH;)L;iWZ# zobW+YI>@j&W8%rC7x!+>tn+qEtvq%+{B5+yW%1>;dqZWVd+|Pj9r10&-L$Su@tljG zA6t$IRbAUPxM$g0)2IHQ`JEyTAc?tp){p${>3k=ameG&IaD zPC$pO6x1JI#z=g%z8lQeQOBm&KZ+x+=90$DE>4jA#AN8We!)8F5!X58g23ZLz6qJb z*)OYW)5Lbd8E?>d*OkXqTMt;?h(7n#6H#B^Y93O2Rrt+E=9Qh0x`uXjb&X$@NGLuI*%ni-D&=#mz?*i_c5&c<%uO-$a_j`^`ZETx zK205_T~CA!C-1OQPre%q&7VvaKto5xktrBDMTAp3le0c)N!yx^t4RaZvvYPAhb&MT zVLP5Th+=6D#51?yb5?unz)sHoSRgG5jjpDx;V3!;qR&lHlUqYnVIL$QEB<*dU1(fE_FjA%XddgMzt!NL=amRqKUf4!q;&#N+N@UeqO4V^#H?^o61$ z@}fioA(V*FzVfh@vQd-;{hlZ-aS6^*3M6}_g>asQVftKBI>`#f3XCJ>l@X5S2} zh~~Z;pf<&@S3Zd^qcu0};!R5jT@9_{xJGF2z-HWp_7OU29Y-^uAk4U*wx z#ClH1j?>pmXATldSz)ALKbSVGW zEgSz_on?GkdxhuhSHU}EImj8}&E1>mK|?kf=#Lxl5Lbt89hN_1B`hD)eY)&} zc-HFuc&RsmUB+y36SEZ2+SVsmx(CEbec=FNFi9r}LdTBu1y*V!!|;`X(&b|BinbmTE$^3VnPd!xY%(&N1#cD4hhEC)J@(`xSiBLC^s2^Z z45}6Qk0S-5ClMDYd^)?Yczg;eG?SJ^Fw zQ!et6lY4NQbOT%{$5C5Hr|x;4gl?MV_N+5zS;8A`9sl(0{3?aY=1R0rC?~SoBI*j= z;q+88G$xq4%{)8~UqvcHJP+k;&l@}ja+zJoFQld;`SoD+1ZdsJCfd#+FV{EY({*KC z$Lznjb0FI)!}^RIAZti4p6YfCWW$Cz%kfcfYYHdpY;cR@l4ub{&SGor`pP;uMC*hp z>QTm^ra)r=p+0#|7B1{OoNoLajP_X;&Y0TNafm6eE8mUU0nC`iLEc zJwJ6d-oRO^L6w+e5=�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%0A!MtJI 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 + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_3/coda/edited/seeds_and_ledgers_3_coda.pdf b/lilypond/string_quartet_3/coda/edited/seeds_and_ledgers_3_coda.pdf new file mode 100644 index 0000000000000000000000000000000000000000..873b271714a2590e5fff5a0b7727668a996aa96c GIT binary patch literal 566361 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 * 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%0Dre1pN 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 E05H{dQI`DqeB&YQ(j*-m@cuXT z8tv%$y#E?4rFHnv_PEDz_n*gKhJS=e&iP6*;U)+GTPZi6NB`525 zquH^MN_h9<$KGhvd{6i17I;&$aQe^J!-m_!f8!hid-m|>rhf$v1N!FU3GRih3oYctWVooz>cHjzgyesc}tP9Vqner1I zC-&3u%ZJfFcox(!Qyo4QZ#!v|ss7v+fPWP#Pe`?}h)B-)6X{=s3$(UOPE@4)@^-em z5GeSOmj70^iPALs2mH;VS&Q07ja})~qG%zoi&{2%duM!$dmigY^*!tco z4qF4~Z}60-OFgGnho0}dwc>1>M%#xRfO`&M*5$UvhXGRh$(Fb!>_cxOfA18AxIt^6 zvHQc9r0G^%)to<1YT{pXU?e{HA%f9N;2iN--Hn87JlZX76lUZejiG5S~jSHnxz~u&_f*XJI1LZW=|M z+et%aOc^dzWo9nbw?b!U&dK|QkBZPdOP$ZG9BiGMHG=yHD4!brrmQ{;)AX+D!^m#J!Lux^BNIebL z115-=8O%uL1;&*2n-G=d^;RpGeo7Bh^m#ia z3%aJ5z?|M{G{>Gcc5bOdrMsT;O192Yr=PWLkmH)7mn4?eD<-svKT9qwQgb_{+bIp- zAy?!p4-3tQpPS0q53o2nLxr7Buil!P9lAnXT-hRMbEev?)Z4v~0b65%s+&?eGoZb_ z+Ms3HRwYC0Inrsx5v65|U1EiJt!TF5ZDb}VflS!MI|9X#iT#b#z!F?%_6D`%26MSw zm8^u@us6DW4X{jg0=nE7mH1SoVX=bJL54M*bGfl3lbNc*u~9O%SAKlQl=>LPG!@e! zy*3LIFkOqz2Ap8&_d~N&iY76vBW8Z%M`&TDPi1k|IQ=584n2WIn(~Ws6;$OqRAyyiE8MDQ1()W$CI-zIyNu$E z`T5i}z}R{j?Xxp(8}O8Nv4Gz_qzx5n1#oSU0a|k(R>8EK;uJ-v%C1MDQk4tCq~Z!o zAma+dWTFxuO-jg@kk!Y}IEqASRI|9qDjt_Qi!%FffWQ8!P}{ErF6PWbii=h&C@z?F zX>=rYvy&gB-czAc>nz1A!^3;5W!1p7Ef?^+d%F~#MpXy{s z{CX^&M@9AcjlG=uu7Rl20ZqreQ@q?5vy3P){CV7X-0REz#|6hSugQ%NgK;0eH!S+A z@kURy|$jB1SpRQ2?E(#gm0ZbIVkhi|$CX~!rlEhKSlP$Bia}kRr zE>Ac1V~?7WNuyjka<}dH<>e;p0(M4PR^a637=FO>ln|HLNG{4C{V53zc1Ymlgi~>w z76>(v$GH;D2OD=~o+f4HfZ2XZMRC`4Zda(ub9eB|5 z&i<^|{3Ugr*kAnx^(PH)I&R_Ro_MH2=YWw*Y?h|8JQ&T{d|6<9Zm9Z?QzK6}{OsXYS8O9;iW2Wje(1F&CXLR!G$B*18Y|n+!|wEy zn(y7l%=O~M-R#!_5|&cpwN{ze*-cGG!qUJU8_lV8(PFk^v8|bj`gt4h<}G@`cxQGz zZhZAXF^BWK5Sd}>+>L~rwQ5Aw_FEc1awDuML*(UWEV-Y9mzI91DR%4`Yu34a!-Ah& z{5(M%;)ma5qA7)&Su%?!=hnvJ&pBUvi*zeevFk|?EFOa;j)o?L{#D!UGSRSVoJLoQ zozr39=gqGEM4eqAZL|ioyTpcNr&vOY~U%Y$h=C zJBeiK7gRv!7rcAB31_zL4EPU=uJ>#CR;8isg}N4LZ2W;Dy} zy1||(iU#PR8eXd^HH|;}KhW?Ny3gi8NBiMU{% zC_Q_K(_R3(p2;^hM1yJuyYA2D?IYC-ib_{wP#Y*E?E6lbKyIv|_TuKvRM(sUKNDQJ z3q0uG0f(02fG))`s`4yvxvKE)%Ds=vpB(jmGC{;lyI8)Vyw`d=R8Wb<@11waCfdN}}iXLeU?ghwgF*R=7vM!+LHG z;mNFGQ#3b;&U-VR;5?;#P^3gft2uKzT0K<+Z_=X|AP3FWwtrH8=apxwg{wx-C>-^Y zl|@i~krW(q;N={O`>2NXi(lGatme=S{$RY3RNhmkWN%_-=LZ~v@Uc}8QZ3$ti1Rl+ z*GNsL;F9gC&vbdCW8bMM6hjgVZ!hk3teb~}PYTwCd9_KJ8fH!L99Fz%I=Q`()P?sM z{YwxldnZ&+8W$89UQF~2N&`4K38qlw!h#vQrt;c(IJs6GlLA5#va`|V@|J--U2Ayf z&etGG?v7VrX8b(XW3PEu;Y9jEc-lHN)MQo%kzB>b8TKZc(6K0N|KZY6$F;q9sIjwq|^_7jhPapAlQwH#)-7>IaO)h0fqZH7v39QQWNi0CI zI`Vp7#x>7wM!zEnE`Sp?2>)76hH}BP2ufAFjZlB_Ua7k4J==tzhJQj=?#QP$a+L_< zL9{?(@(->Q^UCQYkG}jq^DbdGPR0;Nc@Rco;UB9rexCe(sPiKL$go;!m-Tyq-V;sE za{W%Fm-O-55AA62;Lu*A`;Ye@)JG<2W;0>hEp88WHrn0He>Vns>Gj0=*s7nCEt?H^ zop@rV+Smg^e*DN)rx+GgXmfxAMf_lbUk^@zYn{JfyZyH&>As4(dP)AkMV}udlB^AA z+?*~*mMcExqLh?2cwp$Z>HkihQ1YV9p`5=AY*#0iz{`kW)CScA&D836!Z`AJNICMZ zf|i~ZmR3uG(Za-es9+z$P~kU4=OlvZ9R8cDe!kwH^vl-C0wZev#ykkczVdqPA$&*3 z6-e*ey5@BIMYurOeb^(N%Gn^6KWh0uuXO$*ZQJ;wsOiE@jG=k*od>;>LlKkfxQgSq zw9tb_=KJr`t(+)1w9Vi*cmPWTyl5_k$Tm*B%` zL^S5XNNA?q)bz?%%y9We#wNANgEl5@>E9p_?(bE#*$3P5;y)aOkyQIygyu?1j!Vm* zXA&dG3uy7y)t(RNFQu@!Z)j^K0|um|)j=gDvL0zmfPgJfpeX8rC@3 zOZ3MDb5$zzLMjBVs!Q(FEqfk~;o_|muMbh?%S*<8vg~p&1kzeC{)Dzv7Ip9><8PD?m(i8vw@8!~N?_mYz|D8(UQjShZa-%QiGKgavbyE0cfO{@$oE zPy2UFRc4D(QQ_1EXWwaAvf0KCqAn4+S8{cn-p?rObM(*yg{ozsV zk^9%9&ci&sF`j?(>$Se5uLNI)6Gw`bK%#EIIMcdShUO+a3S8rt!tGiPxo)a%ry(Kx z5Ta~k4_{hg`d*W#oiq3dQdIlVM;5c~v*7$YO~r_J6?T%=rUTrUt|4O_%ge-(`7Gua z1P0X2?sZhD&ukTVH+`v1eP8)oO`>x>%svaQ{W6aj;5oYF$)SYB`DE>eC+btazSc_9 zwbc~YASAh++BXLkbyp!OJyOj*hr=cvij5GH#%h0_a@@ z`5N&14((+qPa_HN-^YDWK|hyAY|f|v#ihUIS=T%;FWx@VZXjeo$PrM7>UGNKTSl2BH9LI)(6jQ93>eWA&`B zLzd>5nNmen;Y z$_?NJEiv>CrjxS_3VNrT2sQuPjxM+ZI;t5w# z(*H@wAskOvoXYZTzKCg8{=m~hzo3+ha&OQ)Qq?+zw@4~dTrL&=bGYh6CArZLjl#KY zk@W@bIyHlz&Ip%fI%Cj)KKmlaA8Ao3eODp|#ZpAszgXsExRNG*5Y}>v%k|Eo(7g=N zadkV%pmv5OEg_T9HDCk1XT`#FJC|(!%bWY(1TsAg$crC-Mqtdw&diY`K?%wmkaOK( zLI}15k<6>+b}TetK^rwcJ{jTEzDY6`k)lMmWPo+AA)vbGW0bj^B5ekl+jkKx_fM96 zurP`%qIrmT2%N_7-_39QwB;ZGE8CKk|If96w6ss$l5m!#j)bxKACm5&DS(Hxi|Au_ zWIwngS|k^!7ivQuOkNWUdHEc{8UT%Pha^2ylRTYkvo8@lg!j6+B1F;1K6=q~+)v;HZK`lG zuZaj-cqYf61Z3iT{=P4O3AJW+2)T+P9YN+Pu^UONHBiDK)GI%fe1AukJPLh+eI>}F z`o6{$bpCVcs#TGNW?NjzxMLwYSws;;5oU);&_A`I`iaSIB0uD6+RnF zNt_C{vensWGQQ-OBj=s%y-peDgY?XSy)6OZg^GzH;F;~~C#X7n$1!E*Akrw|_cZi? zZ_zInMlznlfq>{&?<_bNrCL9xMnS!_SjpJ~g@L?o|9)uFaT(Q>_Z$eS(y6KV6N@G) zF9p|t3Ju+*ABenFhCsLQ7X7 z8~Pzpj!?H%Hts(_U&$SwIjn!EfSd7eLCV6iS=hC{Rvsl=FjLBksZPGgqN@XpSW~-! z97rqDUHbE{v#dPJ)gU!sQukgkJ#psQz%-(+y@&g=^d(WFmTpBiamk;SfGbXIhShPi zvz)aDV|GTF!vloNw<{aY>d#u{cG}W=w8w?7aNdF@ox)5EeQej610uk<=tPeeK|Y0l z^EvZKOt$MXJ|cR$<>KtizQgpKF}9hRje5j#u^pDQ1a^Fh#8_5ZBOj9d5~YhK5+ao` zGK|9UZ_`Dxo%~lNTh!QhHwXHsg)%)+OZZ{CGH}Og7t~vV#_Z2iVtQ~;vV06U`;*Zn zSf*TD7z;wXXuTqPkE3*SrvOD%1zr&bX>a~)2tdMgAOwa{j7-x)=ak&($#g~|0QiA3265xm=9(n&` z14AgUPx_8b)NHJwEDNz(@f(jmzTc?VKulmV4B?0Hc;(R4)E^|6`hw!v0nJnb91*4Sj& zPh$u?!2o)}7lf_YGh^Du~Ut}xypc>myXoHKsFFe3Zgck88a#E^<>T(bWQlap{o;4X-m0Um<5XoW3f ziKlkpO>&3>;vCw;*-7|Y!yHl%#n3X85^A!|XA*ZL*;uq=)WY~`6k0OGKxy1Kj&7wI zSZ*KRPFzlNQZbS*exe|k%6dRPrlV69oL#gof}>36&Cu$fi-4Ft~=j(4e6E!OLe{R6dEbWdUu5bF_Xw^FQ`U^=Zb!7!2{`I4dhQ2>}w;wLdT%+y>E`A?^$SzMqM@2l_cmC6C z2Ml*bVi5+0<4e|rq`ohA3Hd*4B4HSB9=v_4OAT$$8kN+X_#;|W`YE^#%qQL`rC9?p zMFa{C4=;)e?Ru}6V7n|2p=ibDeu!VZIUUj6>y(R}3WPD|Hn9Bos<6_t8oP1aLwb0( zYMimndGZIgP}PC&Eb|#<`LlXXwt@WS%2TwPSMeby6HJuQsrkqlZN|)uhGR6JLR&&= zZRLn29Nc(33@NO1vT5luJM7;#49?c(L7cq4n{(X*v!9 z0u~i`MCcg25%NI(^5FoUS3>is;G~Z&Ea9KC&4|RN$T*EH*`koA*!>*hH^^^7F72Lpf)%uXE*i{yq$dUQhkUXJUKZ)><$;&O_CROnr}j&zj<53< z@Ae&hH)&+iejzGPSIR=N}8*vJM z*ry4HCYQL+#eBcF_}MX-w|~<`Lnle^(;*REaY}LaT?b9wD^fH!E&)sUXk@W| z*cso>!Bz!3zoJ&2Kav zDg%~8mybabde!(F65eZgXEMqRCST<^4GGg$XCst#icmP2ySngR9;`kN>k3#_nU>=Y40|f1u*UUy%~66$;Av{J3h3XwgxC2i8szU5k+^ zB~#Y1T&^bD%;0}&wLd3JF-YTLPS?AvVa=)+OQrVz%l6gX*}0Sd~`Yi z@t{c&3el>1LH2<1hWO!`P>d>t;BeA_ToyNpXau;8hZtYD-UyXd#WqtZ*{Dczsw@!s zpcPC_u*E+tMU$uqpOMst)o-wttbKv0gd0_}q-&y5@#YKz1~(hrs+rEn#}h^S<`d5o z#)ufWbv~=`uBfqpc4biqDhP&f;M_Q_68teaSUqiASR{vdRI`y`^#m1sdD8RE9Bg$i zcAOOj$fsw|a>f0Ba&@1l?1kYiG=SVPl&lJFl6Ea>q}MjTt0#>z1eUVt>A_|50L(== z3i|GLKX3$`OAPH!YQHRW0rCg4FD`Zh%lto$*nTjTOC0+wVtx|9SC+hmdw?vD;v55N z83=2&MsN=N$U69|FB#mt6t#>-F4P=**sN@1Z=9lF2$;PfjIl=b#2O4~mB^opmup$% zuMYgKFU+tWX4L6p?u^5DwlJS7prXXpq>4;lsu8}Zdf$waJL`7|tCM3ux`oH{xV7Kg zK+N+i6`B>lPx051*+2`1z&TUvPUF@UGSAkx2#EH02+J3XtK?w{ci=+J64!@R0En$b z>7;s>gg(9rk`@%J6U;OFxD}?_LS&(w3y5BYp5wqgj4QBmy6~8pb{7YIt{VE_MNG3H zfhhW*QI^>nzFk(4?Vl(06qiMOb;ak4!fmIaQvA4)Z!x&kX7YHGGFUwcs9V=L6 z+D@rWG;r@~d`8NrDHB9b<~O+aTFv7NS-O8 z?Y*6{|AA(m-}ax)5Ft{k%oqfx*ZxVOkWa{|JwkL+#mAYx4H1`5Er_K%fUpIqFnk~q zfr*^muEGXdR%Cl1htn5F>MNKj2?%*2>GeERR93XOq|jdps1Nqdsxx+ILz4dH!F~C0 zHBx~7pkQ&i$?geaVW}Ec*uPIeeqC`qaxz%?EeO_Lp(@~dre=W*2^s@G84@HbOliFg zR5^}X9oIr6Z4UB6#2#Z9>k#aW9V-XW<<)f&5&pC$oR;aRn)g_vrX$PXwSPD@VIkGO zKr4#w40NqSnloFIy4Zu;iCh`1ilEV_mk^jQ{>Mjs=0^}I&$bKmC1szHO|3tiq-}tX zib@HrZ9?mrL0yJfy1+PlJaSxEFQLQ1Z(DbcDflvMCqe}5X`uCwcjmo1`YKffAcl{+ ziAu5*E-raw&L2L()Q1^awnj`fv4p73gh2Y5PcI3XV+IJ>HGeel-)=9iYYLPwmjBUiFN!EPppyr9+8zZ5G?PAP1xP!9t5HAD0=V`ws zC+#jHuq&&sOAVM^FS9FQ2VIIiwe|vl!TFUTz`W1-g`(#h>k4NNLLY;?_>kGq^BnsS z8*XnB8^EMYg3;cTbVFalF}>4^T@|jhhKhl};-#2|%7yRQYyUTOF$yO{5tYuNM(h43 zWH(A4{QMH3_Xra|enslMiY&og@u?O26R-z)6rXrd62ViRsHD7ZlVWfdi{5M|xyDQ$ zDez|{An>P5M&ReV{eS*{HRwMO-QucK!vG6Ct0(wocWH=)>*^90wBCo(@Hy!IL$hO3 zw1e}LCE#mSkN`mrtt~>#FXDt_QHQw&FBSrRC619q-tFk^^)d+UyA z?{!Lypag@cpQiLXTyLc}BoBgv`F?7fF1T=e>QD?R4iHWjT=GftP%JSMx8=K`2;-Md znO7?W+OHc8VJugrN-$G*MDq$D_VzWumN^!=B5ZnM@qWwNV=|CIBRD?7{V{`+`g=`v zFu3WbI3w{uO8*YGAS#o$`U$h8vSwP~WW?KksR*OvZ68TmJBt)Q5oMa1)hgs78C!JBd1(HLK!#3c~ z5@Lze_FXTi_d%A=s(joNBZG(EUR>g=fm;zVxfZE*A$c!TZ7{TOQc#((MyLMC(hYF& zSdKvNN>1C?1fr36rYL*!MC|z=eW$e2GUEFsPdy1|UTFW+Mt{iOxEUyTK!sn4{C%|n z_9DM&|2y)x=t{lM8kIR6#|ryF$DiKD&TmC6x}M1BJ_UC>^CEPY_8!4-TTo6bImjjZ z;Kt=6!;m3$?{ioFLs^Vyh(hR%usDW&3J!HF!R6Y zx9|%7$hj8*D5RQY=Uck(JDI{8Pprzi3xssTvbCbIR?=z~p&iLqHpP&!E__~->u>=g z#C|_`An4-rz7vtCAD2Em*VbV0 z9lX)E>+75B4INN_&TKmFywy3cL{!b9(`k1`9{kv}`SF%mAJG@cX=P2rZ9`++-y3Qu zyYGeU`;S7-TD;#rwe?uZzj5E`x$@bdu=1J@g$J2R#=0iKl-sGAdq zaMzG}qI?0G`ligu`y$(UKjHQr>y!^W@?*gnvMxZ5nGGsvk!p7gR zxr%OlaRiJ&%eS14e8B2P_zFrV#79#EpXm}rzDGQ>6=*;*KV<}+woE-Tv+St=Y@^+|0%DZ-JFn@m{DDwLgy&9AtR0KiK5RRlz zcwWqDyaQjL#Hp3#Zmi}!<-hO_SS`pZ=#|}mkJ-T4v_OEdFs<*MZ>DM>g3N=`D2uM3 zq8Ud&ti&Q|uY}yC64yT4@JdFDmOgih$BUm*Y;U-OfTeb5Qu7xLp|Ro$=ePr%^Td>m zwJ%2T2C-#{GcCP-_&4R-ki}O{ZIv;;Cv}^avQcjR?U>x z{Qg~{mcw^SQaHldE1n|z=4#_+KwtUl;(eA3iGc?m$8+$h9c$?X@dmFY4gPsZ)MvX; zm=7BLG^5wZiAgd){xgy+DA*th`=F*~dEY*!!aaM_cvE&fr%pNmwd~;*^8hDL13J#t zm-S$fyhp<|hE46$ffO=p*A@SX9KRF|Vjx;0EB@#5;+<#i001AFH=Q$-w0|pc?#5bI z+EIq_hn%S|xS%bUj>qEFMP7GyCP@K>w+!I2kt|PHy?7k6R5XgXzMbU-$%& znF?>Rl6U}IA{5v|WzgObgU(Ffi*|eYNM3MQyqU%1u790Klbiob>15C~-dfMT{o26) zbI$Jv%~nFV9{8N;b=M|zlO*l&YxXQG<^rW8s1Bt$BMi74k+B{_8=BZN4I8mvWLIzY z*JJ^dBSp~JbX*RShX%b!>wzd2#-Xbs?gMT@Se|cfZ zP|>?f7`~&hS{Iqt18UAb7BzS&vL%TjyJZpYN@Yh5bRQtcH6r|slz!sJnY9a>%2L6u)qkx;cY zYDa8gyCm>W%!993)e}r$G!ZTKGPMJz)*>CaPZYrnGi#dX?7d6R#xU?6NP*v42WRkI zg+*L&gpy7glGase75Phhy&5^g3=9AHepSzqnjaV26nYxHOgV9^+ar*}3Jt+KFuZp8 z5Q;^20-E-dad{(s$cyy^ydZYcIl=1wmJ@_3P=7V+cA}Yx7vHyyUZ(sT8#XbKw=3q6 zMlZ|uy<($9l6zj|3Kk(X;orK46tQG_!d_KiU-Y2X0iW7G^KGVc4h!W5Bs>|(JS>lw_-dz z+T|(0(|w;r)P^yNR6r@g?B++}W1a3uvZt5KI+Ee3whr15=)vs`oJaz;ljhvQme(}i z6#rlMHHX6Vf8$(~UgP<*wc`97i>UxrN1tY70ydy9&Uxb>bbbw+MK)098^0yp?4>Fr z@hDBS?NFobw0JzM^v7=atZwf6?E|kn3Z4mEo7f_D6!j}uM95S?U-y}rSHSgM@5t_) zo-+;7QsnTP2cIXJlsD@;kO(5TFj%k4+1hw8Y`LjA(B(+*xRgp*t1oEPb+jv?{6!{^ zeTp;pVKcg}vV2-UEKZ5{+$MPmnIAUW8uM7))O5)TNJ$kAaG)R3?ORri|E@YTmM)`X1sxF5jZETF0d9uRWy|Q1PXZb4J=`igv%s zN{6Xia8t zYCs$Bk->1lwtwfJWkcq_kWlH=YOi&_kw35F>&2x`%eASK?e0}R8)A96{+(~9GNpWiQ3A}K?2rSf#UD&~=Gi3N(*`++yd95?k$9gCrm@SrQ zT12_)Du-_&G+CLEmDs@!?5hJ(6yM14E-^^cnfx4N1n5rr+&Qi-2<>WJo7!g9KlnM@ zg3#WnDMCzL72ntTLR|Jb>4DmQ~2D~NYAqgK)$)&8Fr;5zOltH78yH>l3Ai9px%q?Zm zWs@@Uv{&<@C5M$`N~P<4x)39Td*zZl4%N$DaOsr$Pr77Kr|5Aua5ceGttc#hB*V|S+u+COJ+A^^Mj`e}KN&t%x*nbosj z)7g?S|0{aYkKw=S+t+03LZT6p6BsqXQ{UC7;l=Oonb-=w8*Hqr>?6ZFF|ne=cm;#^ zx-M7cLbG-B4T{7HHRcPF*TlmtqSe4|<7ypS$+J1uW%%=OrWnq4rHHv0gfZ&0s={>$ zZg9x3C~1>Ok{Nal>SN7<`wq#svFzsP6>8P~(Mx$Oy}Eeb4!LD02`?hYboIWF5s;f? z$pRi>smn2zC+QsgNk64e#r%8rV9*cNqCmXx?GeG9J z)bhxo+`Cro!4o5_U^>_0J+&;rAMf$_S!25j0_Gr37 zyKo&AbC2$)pmw`pTo%W5@I2^&3^rqTH_4aCSQh8-dh@w`rXZP)3Z}o>R!T_klJC0R zXXYg|^Tf_`7$LImc~#S9ZUK*UQ^( zHvY~C7KeGPY)U!$49C{fA<{OkxHJ!tNgC_ zF`RKeBavO$cvbimKyIB{M5>Gixcyc_HqJ>4o)RUgeAM&8F{ITLSY$C&^m7x+C)%Tr zT4XX4dN2>0TEIyCW^?)dgEA$mHQmFeYUxbHVmt%O-uQalq?M{8XNfVYSVcZCcgiYP zS>M%QSTNu|8CP!M+-#L6<~u#Vi^-;StCWtD0~=Ast8|G^ltU`T@o&lbqQJF0et5sy zwecf$U$6dz4VRbGt9hkROu21kD@~mXqoty6I_?!+`k<_9yu^X|wgYQUNUyEl9dHTc zTV?fkq|2LJh^cZnbs?0rN-@>~nvAT<&zYvNe|P$7` zTj+I;IC;(=t|P#hn()JWE?HxfPU~MkNX&nGGjVl)HF7%`i+;Whdsk;vn!q*8Yvp)^ za*iS>lw)%7 zT9vdGTBe7byj2W#iEkEQ-HK3iHu}GA2I+ZW7;c&8<`U)_I3FuiC}x;ls7Pk>xQ)q~ z2r#wEt6Dh7UY&-sYIJE9R?IIg@bA6-ZB{ZQ1|O;|VDQ~Xt~d_iIuua)P~R;)I&mkX zhTKc!L%Bk2wx%Ze^YGO=vkdAuFmWncm1t5yBTC$}KER+7@Muz0h9J%U3fGAbc)2+> znDJe_3|-I3k>}S5cwq~z&@9(Yhp&`14e%TbXb0eLvt$%dD@2!wk!ePoHoe05&lJ#I zRl|o&aLh+MU|~9;wS^SIQr#)pgqgbn__TIqG3g~e)I)>ym_Ut3$j_p!@pS#49;qyf zIO8sHrY^rw)A*wk)0E5M@dT;x!s3j57cVZb@{Ari0o{^y$sgxYjeBC#`%Fz|Eidk^oezfpYx5`n99yu_P<^Ta(%~5c*BX#!)ptFLDKS}8 zY2qVou&cVCSPibUeMcZk22qL152ScGN+~ZzIgXS7F>d?3dJ)D^;t0oq*ZC8|duzMN z$m!eNs^Q?v*^A|uphdJP)R_-o$14}AfnN#p>9q^HAVvuAWS_s#5+%qEHmCw^cw!jV z=E?m@L++q07|gNJ;vKG-aB%F|a#WqSXEeFL_9*APp< zc=x^p`Ng#qBt)P)dx%#hH_1yB62*{7tiJtQVf!~F0#)r}?rmM}%Dlp8_HR!t*ye~+ z(Tp3)<{w#wt@Q7sy_nEM=gmn@Omu?3A#O$jkJbQ`QLSK(t!N3y@+$#M=z0>*GfVAw zJKxdBVL)&ERt@X0NSbiXxLR$U(NGvlgZf+NuL2^zZnJVD&Utwz5ci+IyAX4e2Q z4p6>W?m@|R`km%QLrK`mAwj(IrNcckh-eQ(3y)XrB&f?MK%+9!cA3!D-ZNLq{vscC6g5la=r*5}$hToW&L1BpyoX%# z6e}nd4o8()BJNS5z8QP3p0xD00b}z))$h~&PJCP~bRimWAC2J0*R8;4>?Yl#D1z~~ zD5A%o=$k2({cS4!rl@5e`A#c zNR9?EhzG(u-|RR`FQK!3C!-uSP~A4Fm0R|boxSwD*z=~N%c$Be7+L0vG{R+~CPi}6 zR3`p$mu=XKLBPb%l4-1W8j)Deb8Wu4EC387E>&3fh?v{CX4opQgbmy~Tk`r!=Ryep zyf;^i=OctL!VO{b`+ZN7=+StX%ipF7OOG*KW832f0bZ-X@t^4Q; zO1F}dsH42o@X5P@;YAf5dQDlDo-DNL&fmKyfSg0|v1@kqG5|K*$E7V~Jazc8h`bscYILDZn2sS<)+^n!z`#|%37 zOSaxXfdNn@*Lz20TX_E4Szb-K^N)(j9GaS4MCT&MyqwnjV>W$!p7k;xifmX5#qdeJNfMenra zk7qLJ%cTm0T^mL8@U3eAuUpKVw;kt>S)(u&7adMJp)?VJ%1)v^QHLrO)QwK1!ON_7 zbeeiC+0##D8q2UtIYEs5pTTxlrWNth$c)QTjJ2$ZZr6&CkyFZ&q94_-Z*weD;p`-* z+1DC+^zAv_5E4qkV^qdvJy!J|K>3yqJPo2OtMQrsA?0Um2*_eg5XP^LLt#_>eJ6Q4 z0z2I7RzRn9S4FF}K~Qp?M=!GJx}IxrE_xt-|K~Zmu#zs(k>s4lAvtXv`gl-oQ?$o* zZMICu#jj1-So8g?v~{Q9Zx|8K7k*!0{&*vu@RtxX=*^z9G_bh(Tz&j)r#UTm(^IE8 z?)56P6%FeTw=T@cj|g?+Ys(As z@8GxTP1wUXkO!E?(^p3hRZ6h0S|0xj$NU}d!8&$lhG ze|rZ#y-EiYn*QYbrCw^kmsqvlJ=k-Ms7-(Emc^>d^w)jz@#dP@C1u~eT~jLbiaO7@ z7AL|k^*#oDe0rPzUhyH20^H`J})^F|Qp~To-&BqXQimW*`RG@5=(>AO90V;#)DF;;(Pogk zh#fs211Em8iZcE&xsh`jR_d3gggHpS067=%7WUEH^+5ns!A!Bpr!mHNW^CCpXPX9? z3>(ehqX%RbCi3WU0n;m%$%_|_ofX{DUIaGTCG(3pZdVZ|3tAZZPTT3CPJioslOI|? z%VZlr{{bUY~0WcW>wnkC}jWShMTDeZpO|lpRRJW=ehl@$nlC} zPK|bV1&Io=(G%W+ZYzFH&3Jdknue}%4e@xO0NmHdN8mO2%m`Rd8Q!tf>2OqXO-BRr zHVuwDR=x*0+6IJ*-)*ANK%5~OJ8>a_uL_t*0oaaE)ma=dQPqq0o_%%idpqfMQoPrk zxVO0}LnTURVO1^h*U1f%We_f=04NE3?~n9w&2?> zLU&cyb>B}{BY@H7`Wp@LB2{~U1fpLH)$c(=EwePc^?pkRg+m$!!RZa-bnTvU483Le z0frKVtQy$dG)lyOUfLeHxJN8$j0+oP_ab-O0)?pXqyVp;5@-yyp z5R@GOTZdW!v77U!XIFF0$A|-Y7DtWF$5as9LYUOvwQECa4ufM&6b`)%xn zq*;OsG^=9do%$bKnr3pF@?AXxzJnj57O(jGslLSy7r+cxe_ADr zd~99`UPsS=OLFmBZ?)+gSxhVIUV&y^vE>zlllyxNTljMzOCG)|58~Jegh3Y8Lf{Uy zVV;U4RSd&ooH6TJ?JYBpl_4pqSCc{j zxl%Z4yH)?)t=KgM*3;Tx?KdU1g!7-$nZRvVIUKsd0aQO@-TSKwyse~Q=m~effoynR zC*Z$5a%t=KU~jBwR_bOe&#T~%`3aF1HUdr7u*b;QN>~q_%2~m;rFFSLKa0zRm3oxN z4*E;;7rFx}DI^m|q5*FKP^>ugr3wW@XHv!=Sa|!Ah0Gnr|0|1Vu1_PQV(g$I;6Q0N zAF1uH)5+^OU_Xj7$IpvV#gk^1bYcX#CIs?$Bw(C^DzQ^fuPo;NE;_0{5*}6#2N)`N zl7p-U#4-`%cr%R@(vv}&Nw5beCdWWNcHR$I5G$^L#9zW)`v=fGq!qZ&Pv9ejSnQkv zr)M>HWB>l9f1zdz7f|-hJiNa3JagCv1DM00G^51&HKCi#EEsihbBvI-Fj_orwmAtP zoRS&{wXu_Ix!%r8V-Is@Vqjj-hW^mW?ORIT2q)71fFJ=NZ?RYhwuQHB<--&LH%XZN zv7MWc%!J|Rh29F)lch={ke*ORpzc8gB>6dt9l66tt-R)fU%P#6R1un}^T}m2-aASu zInpQ&vlS8rm`S9P27PfExQqKt4^dwIQ}yMzGVWE0BA-aHZ^BkD&Y9n=Jam#sn0Eo~ zOm1#q>kX+@*f@(GTyd$09Rcsg zkOx9iJoo1dI^w;wD>Zt^2myHTC7N3tt6P*IYM4!W!W-6SC1H8eQccTLx6`=8_YsQG z7}=MYS|(Pr0wexP?KjCQcJx6OWk>L8p*|6++kr0HY5w&=BhR&m!ug)g=7&q|PH2xNHdRKIzn0^v1hPUctrv0?$h) z7Z3esgAE?ghDgNWnh+Ncqrl&hH(NM{MEAUINpKmuf--4iQwgB)2?@ca(7bMRVnwr6 z^8Nmv;EHULRB3n$M~iU=7}6g~jo;*V7Uoz=sE6`sjppXu(tb2z@dhl0R}F*8bT<6j zR+S9p>q1A+w)%mv2x)PG=QyXNQjZH8)*neG53Er9Px`1N+UpKwTuU45IKP}T1{HUQ zwATdc(>#Q}Erz|G8}2aiJzyGKkqUCzbpEgJ>%S+?JcTGbtzld&#~=z#_36!BgT{u= znN#w=)m!d*VoX0rl{!^`&WHb#j1)|>({4g;jabZI7Dtk6dTWwYu76rit^xlRQT=|% zlJ@6Ms?r3YRZ`gf_n~4bJ*-Nn*{HDy==;-OmiA&%b4gx6^f5BY>xF8k_DjhV0Y$Ml zKC>01GIbg&c(1mG{;8smkd&M*7x(GYb6NzqFhLGN<v4|&|kJ> z=nkDE{o$F%-7sZmf00cjlZCq3UAR3&LkB2>wVeDWyf~P0McQ`%B1sqyz2WVUiCGx- zK*9*uZ8w+s>F7vcoPx6LcRk&1KOykMSonGI1AjQ&n0EKTWjlc`ih)#e_@6 zOguuNN-R>&4qEqq=r_%ivXY0GJESLcQ^145Vtwm~S}9Q{b-NQY=lvqHckZYa5>O z-c*OF5M|2%%B)Zdx<*QU02z;F?i*eUq|~7)4L!Dvt$_@xTjs39D>G3RCJJ_M@UMx~ zbJT|dS>O6NqskZa)WjQwSgDE7l>G1z?<=szeUG1YyYd|IPzV)W<5(*{1z_+-BR!fH zmw6==V38Xn@wTT}w+UhIF1c{s^{@Hk`*%SR9dQteFpx{bgsK9|n1Y18&$pdfGbK?6 z3-U8$wp^+FX&BgCJLi!2nFj=5XpRISXpXG5WI6(;RB(<9Z>Oudj+$zV##qn%Z@-L* z+-X64Zs_8(XbfRb%QR81dj`Dk!RsoIZ2ah+soxHL5AK^Vjr}UmztR`f7Aj7HYKD#l zwr9fQV9N!83u+js6COspd? z`(=p|H-GoEpWon+#r8ibywHk-u&nCeU{Y&oo_9H+s4ysU0LkllT}FDp_nOi0>;fv1 zzRp@i5f&FjcDG^DM-m#o@1E-orvPGa?|qzbw~((5B)0(b0%PRwzZqai_!RQ!v`M|1 z!kk8oY_5EB;jqE`ZK1Fy5tNWpH+Mh06_+}B>^@ZflbvZ?kJ)`*=Q@L4sw3Ywp|b21 z375Nd8FPCFC&9`4LV$5|KBlQ^#W5h(^5-ZhrxD~}Dd-6WRnjl8vUBlC;ep;`WGE0h zGV$+4`fN=k-82u_@2{kO)ws)G8@4p9EEo9|~1zzTnIS6$A$3N^qzS z45eLYuU35Oi*>K*d25Mu^@}aLnuSZt)Ow}!?9aNccMN-L{ag?St z`}9Vy);02NAp&C*OQd*3Bbt@8>W@%%4=*?`L(rtGSQ3`2nz}(w4l=A#wi$3JOB$9~ zy2YIoW8ww!6bj-rtXNSffh}rrFID=qRDcnK{`W0@$rZqp{om9Cl`o)r#<=O%$*YcHWCZ z`$+OmOX*BkRUSp^L%Eq&wEPJ*dm83ee63@y8=?hYhQ3W%5_K%(u{AYb zM!vT+`PN1XyEk-kFHNe#ki_i6xds?@{taB{Zj

#o~jF%zyvls4Uk}|2y;}t#KGF zR_}&KlkcsKOoSoLziiLar09P|{7bCeTYfLpYeu&R)mP)HUK~9{+@gg>-9n`@OhPaQ z{xd>{E`_l|D~O~RA}qdzGo+LsndRte$J5K5|M+^KK53zeA%({{^nIaLma8?$rLVW* zKik>8Pw5H_YaBnIV1u72SvQ~{8%Pw}zhIe*Y7v|d09a_?ca{rs^wQt}>Ndy$l169o zZz)$Ls>q=Ku|ZlmhCmo(jQ_wDMH2$GK%+_NeUf z#{Rn9LNZ4-Jz9VSF5}BBD&aIb)}e)Wu#88K$mSC}pb zwgZ&pAie1vri4|YG_|u5tGVJ(uyqJmr{D_l^Ci{Ev|6`YQmH^yk02JwDozpD z$$6lFL8~>TIrr>y^4tf51Bcr3_t_bLZalPs?LM7_hqGw7c$9&n%Rx>tVvxo@Fk7%p zdeU~@OSyYq4=5N!82VnP8oR|bTZ&?aSL7jj*a&d~HQgMZyO41ixHl@P|LX|zl_=1& z+=R|fI_-`2(evyLO29ouF%xekt?+(+Y#men`C%DJUhY^dB|$EUp*Y`=@&+P_p>OfY z*a-jIWP^dg+qOm?VczRqq2-rUzrqKNx65J3Xhw^a*0Md!Zs(!V-_ zy?#&@gsrOzIG5fz@btW>xk&F);F(?1=T^ymOs`a=!2X%D>Aqk@g8Akj9y!{UzbuSO zfhOn1fhQA+Z`E)#)&GnIO`(ULx$rAnGW_z%o>7$ruxflncS$;y0A!!*Sx)`2Len*@SF~jSN*KJSSsF6vM5^BCu1P3T;jdFzgM)zX^iO zwzzgLbvHAnj~S`m z*Tz_DyodhMKBb;ON@qMHif^dsJvgb+kJ(I@fU}cP{lNR>2e<=*CE{%GbV-!6G zihs(L?!mz`(d%++4Evj&QR5MERtzf;+SZ!gb>x2h%m5<#e%jQuKF^oC1kYjWK^V#= z-T(6?;v>i!+bK~}7B*Yw-sHM}_CeS{^?zb?CdIydZq?a$LC%EKzCA@Ga)@l*3p?m+ zzwiWPO+5Qtauzs$>k><=%QLhvTv|x`XtWmQqq#-O2WzK;QP>yYN&K^TY%Fd>uwf-+ zzv!Oe*|}4EBn|kO%@!_Hpi^^WpcC`bK41T;Ij)nXQlqPH{2op4U98YnbrMRDn1Z{I z93b(VXDbD@7P0x00LYDI<5DkJ<9CJW(MjR^M!hWtCwH@nkWywl8-y-Dr#N&*HZ%m} z5aTxNNFFX3nmtF8Lm*=7Vt?k}Rss*uJvw-!#Ed(T`z&)m8RK%gXhn(1#XfI2^uczl z_ieV5hH0Z(q(J(<=-}>tlsZ~oRn{j}^+$|8j2T!eSXQO5ZOCjs2#*@iv8{nh=A6{1 z^`t-aA7$d^okP!7SRzDKY-h(0hPy!Ik^^XZWthh%>zdBw_C|q;lF6Jt^($%>!k034 zRD5d@lVP#_Aa!vIQGU=@h2)O zIlcvD)uJ6_?vaUeWc{C>%hlsNw!Um5v!ly|f97CVkNtm+K_YG4Zq$*?P{z_$G$l~d zAVZ#I&O<#d^&;wSIVDibWV2-+Pl$k)zRO{gFL0rp)aRrQ6BPff&P#SH3r22P3y`a6 zQnXK=IR#Mo#Q5v4IkMl9>fP0MZuD?&EwCrI999h*=~UMVGW+aaku#HYoq}f(|oooXv}wd#@1+F%+wzGdDoC$8kLN0 zJUhU;r0VFM?q%wnZWiB`>-nDqP`vVtQs6rAZ;^qS`t$7g9XPtS8FXnK903r7+kU5u z3_Pj`1h7BAq^5}RmNqN(C!`IV8z7S(;Zpf$O~Od5*t~!g7hrjh_TWvtYlv>Am#8xv z#6hjXJ%mo<5l~b6KYU9y53CDnVwhO}?Xfp&^D(dKe${Q&vu@t2nj2UjAll+>AH@!;ekTZ(wY5z3w z&~jIFHs-5T3=E21y6HdPqcj)%z?!5l+>WI1Kh{#W=fV??pZeH!QrIJJR>RZ_bP>z< zXB}=-%Y;UD0)c%bfPk15QVtCFtl3%&QfreiCu{}PlRT2X`)Ur{=pA+csD|9J5`^+I zL(9d){Q@&p5wvq%A>lZz~+4qzfK=__i~ZLvvPaqMGTyCONo=X z$EpL+Y@mv8u72cF;FR`?H#l$&WptJHcTCbCa&A0Vqj3@R-d&F8DGi?d|DsKKUQuSz zKho$7)beR%bU;PvpAs?)V046PxI;x29(9^9IC$LZ$qJatBx7=J`FB$}f|rB)--(c zjSE#5-ap2JfFZI!hUTx9fq4|=0tJs>5DSJZ9~Z9WAQv>~PvY!rd}>>{;fOu%k}9}s zq556ax6idzDJz5cpMW^+Z+2+~<0cXPAGV8K{KNKh*+m9AO}wY>+<-3AP-JbQ0&D0p zsD_rKIQh>2gtV;;(L1atTyNh?<600X>w0l@))^B*(B^Bw2#9mGI;CvU5BPfNZt{bL zu;somt1oUZ*J1(Gl-0-byRtZqJURo!@bof=oM+1E$9wLsAF5avpit>Wne_{JpP_R& zh}MGIjOf;BU0tFgU9bgz$9jUojKA0vLjCb|n{r=nbhimRRena_{T)Sl!8i-(@iX1aLnU3nd^2^I?U&OmsMn%oe^-{CYK3nr}7WZ4fxXQ8fJbb;PJkq$A`=J5;i~`>&@c6Xzdv4-3#Dpw)ZgcFE<|R9^5`+dot1SKqu!PUbK0tS z9bOzh-uG7)+`hsV1at6IXZG_5dvpKZGnVzfIn0%~{I(Y`_4_(JTs&`gSsh>Ma;w$t z4iyso^m@DA{yOY})l4&ad3xUdbc-4Cd$)MqH~jrK&hX3Qjj=cTD>Jy$@hi+vVClTI zL~G`+48+HZ>e`)K&7)qn%?iqNFU?Sxqx|lN*IQQ7wn`@ifGij^H+zCz6QC;76*|Dj z9OeT*$0R?FyrRZQEs;0tOmn4^xjWubYGX~ia02PtEsL;~S4UwKMOFNvkt zy%xo&{R^%_Pl1w^L$$@;kGV97QULqFK2cj7Z<%UHtoKk%k_9YwLK-$j9JCwK|wX zp`zO~CEJhE+t|S`TKE7zzLJevU86@bkDnaO;nW+#6q>Y}ZO*Ra1L~un6=4Ioeg*|bBz}HKX$&PA?~4kMC_Jke z>|wZUm}S8#vDfS*5DZ}ME?z*TWa*GL6#L-!D{J*r;BE|tFx*aNg(UaeG7*}tz(f*grS+}P%#70SjA)}vKv&^41DS+7POmd9- z$<^(TA+BHzX^uR#Z*0cd5+*=g^*T`V`@m=#jct0rLu_tgHKEWzsb5U5$HQ|HytI_Z z2M*UHV1Xytsc6$I)fkpevMf3(=h{;1mKbp;R~ETCq9qPdV#dwbD7<>I)YD~jTHq1X zhw(I$9OcAw0G5AXVyaRBLynub&9fF-L$|&4Z9Lr-A`P9%5w6;?1+v_s41j&>yKv2< zu-xHmkMcOQX2r1t5APd#a6q)u+o&`^t1^^!G5bAw*)b&XMgXT4%gX59y67!v(3lt%JLD9)5~=%t%Ah#__x;=z};&| zRxadgK!@7^_EF6J>47Z9;M4FcHhp@V(Nw;0`j+0Ocb2xfB(?X`p;l;(<+Ln)P76Cm z0?j>V2JIJYrQiGOJLBKgl^wLj@gx2?rN2^kS=1!?lH*cH01Tu#qyD8bm&pVYS&l;) zCvlq(u1o4V%9^GGXbbc|QM@^V3V)N{H(9mroO}5(5hu){dcd}9sD@- z`G=18kWHsZ(a#`{B8s^t2|tbkAcpvq>>uXEd`YOUe_mz3m!x)Q|0q`4tB)@5%r@bj z*LWKU4b^>1gJ5yCVmqwWv@RzX2_SDmfaiEfte7;|vcebeM9~#kJtU!L107-Yt3h*^ zJNzY*wjP!pB}rCf>Dn(8e;TsO<^1|f8f{x&21QcO<>6QuuOLNf)spD#P*LeNjS?Bk z!NaRm->4!ToHuiJER#|#bB$Q<$J*RYr}AnscYCU|N(TC94sAd;x6LeG-av^=@?B+9 z+l7nP-I!ZR2eAArXxsUWH|8`#HgxqW)i*te8NjH z=s5^)&xlm=+b>I@$wl{848j+SYv?v?1A5u9m{$q|M_OhdIl0(~3VPB-b!yEvDEbH(m@yFk-)yBIse!JO*&M-Bv!-o_;ISk`uBhXm5EY5u0a9U`4EHuNHc4Rwwx&=A*t&ZVHyA7W3hTYIl&B#@_5zs)x&Z9!Qp}a&gP3A zh(oloU~nY<$|U?+O-q1 zdpqH6#4dVbsUxR3r#J?40`{r0^Lq#sxrlDI*|I$@Hr|K4Gf3@Q`)J@3G=P+)y0Ai>-pNWbUM|4hoLamh8jS0m^yWd=(K z@v%kBcZI=2Cwai%qa==~>U6>sa|ct?RHa`dOUP>ShR5WrxcEWIxh^nyCw)AJ$PZDF zvP*{J7IN>r=6M86qNL1X?-XpF$D3AvbnhJ;)HciQvntH{cJWwF*B&cIH&RX)vyUd? zgQrgNBpg{-kT#{c>$n@d{?Ij0h&iI-o_7d&Lky`mRIE`sE~a(}P_?3wQ#o(pp-1dd z5v50l(Is*9P%tQG6>gEkz)KNFD(<{0+Nj~LrPwb+M+Q)1PMs+AX zjItF0ek)AsF4Q1Nau^G_;a-zhqk65B&$Jko;?&OR>Uw&GsmVq@Sao?hjPp-tbqvP_ zjxxG3DZ5#uP#>zFV}*P-TAY2kdE|P-Dtzme2hO2Rv@hbB#h;)%`ZSw<;RHU@RZIN9 zVye83_fY>FTvfVT;v$gO znJaDxAv~`1I<+SkV;2F})TX1=LB97M8W}1EEwS)hlnsYP`b_gG6~o&o^@YP}wryLi z*VGxL_Ywg-NaV(#+_|JE=t$8e7t|-tYc6#G_}3}_&fS#Zy|(z%o*{i_lFSvbmy#c@q*|iSZ=|pHUub$1;7Y zlV+8$PPorPmXdC3{HX`BR-XrO7&g@*HdR9+0kVR$>_BgvFtW|{eY4AB=Aq#5Uq`AI z;pvCSNX4O{Pz9FXoFYKtlB!u_)Ba|yE5Q9@ZF9tXcYKa(+ukjGo6lV*4rR-$Zqk+> zk3jfsS;R1usMWD;D{%k*QH*r`$Z1?czbu1gdULN(Dv(mrK9_VL{FmGxVe z;{)@rF+efEhxO4N``TpQdE;$*Kl@iLSoa^5ARK=P`IOZO@0|0q9UJ;rBTdm?K8L)T zmpU5&PbL-y>cKx77+we&5Mda@Y^%}Ctdm@R-3r?}iLN|gc(n^-nzeH>qn=*0K1*hA z{i~97##YAI??0##{Xo%AxeNolbrRyl8J%U6UG>On0J|qPbRd?QsM1*A7H_C~^^Lb& ztNowyl7Xm4(aHZ)TCgg^^xI&(DWKMirvtO7S6k~#Zddfw@Z&Iq+6=N+i#@e z8Pj`a7(io98P>vHBlESgeP4n(f#xokn?B7bYt9pb>A~g1bBlGtLI>qDMC?d16?&*N z&%&tqS$(_TT-Kf2JiV-0sd_|p-TWkQN7t$ZRhZDew_#mna!in6QbHmbBH@aYqQu=< zZZ^kjjU@|FqC4Q)y6h1`{oQ33c)IV%TKi~kGj|{5giY>kBTPET_tyyRFID|o&ETp_ zA+#Hd;>mTwDC21ozo&hBNf!0N!$M?14?Vyg{xa8e*OWVO*#oK~DlznwnA|z0Pp$kR zdtcR}sG>S;Rg=nFR+j>v7`oA#4;Y1ug|9&K?PY4zQCrFYEtYHgX`b5Kik)QY@3}yZ z=I>REJDGe0H0x`@Pd5`wTt=uD5PMSD6McYZX>yoBML{YQc&b#+yo*_x9QF52O7nZX zMPzWqfwx5HVryTLMZI-*C|ryeX;}c=ykF+eSx+epAi8VfF_g@zAkzNOoJt&|uqK>w zMZAmfB%Zsfow>3DHExOj`RZg@u8<8fB=UQS$Of<4O9g%_xA+dRLJ#$BihvK$uYv%N zvSk~OXgWUM&QM|Zj44WDXdhZ5enSL;HDxAan7ylBCn;N9+)-)w>jeU5d1p2zHibo=U3n`I-1_SwtuxXg?IUK$NS=Ljepr!V7A^zm)yN%iy1sPak5z1YT*eofOBo%$@}&C8d}Lj z8$4y@aa`m*?cqKW!H7yhO)xV|th*ahJGXke;oBQf-m&$&xAl+dNv_4>_(N)V*I0t{ zLWe+DW!rE7F^LU(ohG-dUqt=<846G917L$n9T^#ThXvMr>NY`265h=&7oR;q4s4vQ z68q%y7i&z=AO%~_g-F_`a!7|THaz{1)wkC9hQ@XYc?onY2@MezyQnHU zz!Ej>ibwt_`2FNr=&ewwmB4*WojD-gBA34D&D>K2!0tVu#zox*GsG@oT&i4hp=aGb z$ecRC!=#mlbCa|b(BHWzQXKuog$~nyl7;WhA|LrZGoV@Gq}DJTAWqh8hZu5<@Hxy( z7S~8~h{hcMp_%5;0dd&pbzd4u_s$cSnQAkt(;iCas~z&gz!KRk9YQ?ArwFRM`Jos~ z5K2DJQ6)B4Y3t)L!5y(&?kQsBI11ypxmCo_b*PP9g!r=0?aD7SP3_Q$r=s>3VO@*2 z{!rcBc}H3_SD!)rTCHfR0=mN1dhI%wx%O=6(#v*BTm&!^`jzboPB-T{ENBO|_hI=+ zWfHa)7nSG=5mrPxz2W>ZcDu}E&~54@CAbCTT6BJ?3`Rl|Ea)K;{JA%T=OD~l1?_fw zrP6ueakWn23>io&)l&$waUPEx%=SeV6^6+h(qvuC3=ZVTn0poFusmVyHPc159w90> zw)jk*MyPKs0-H7XN7rR~Zh9_#@_ND$*qbm{yy+Hk!Rm@sspwlNRN8Hjh@MlLNTH`l zS`r+LN&p~L+8CGe`{hoX<4e>RyE5ld-z)uT;Ua)zYA2L#@c)dYJ7j5ONvzIJ34tYY zqO@_A*G`%ky<04BB&lok&lpIU9L>~IT|Q9JE&u_e#L{m5FtMbemF*Bqb;i~%xO?qQ z2w7xF)6h<`8PC+Cnc&>XTXloW8gaHyDEYS=OQXuF7ZwUbUU`VzJ8RmAxQb00B0<$< zicQsAD}60rd>&w2JSq$9g#NH_Np0}ycHr(FkR)%Fjj}9%E+mAvh)EiN)^=o*h zd7juyEc=}G03`NngDjeg$DB#)`7 zH=PnlZMl>Ggj98UGBN~Y+P#oYlU~jbKz;)Izz)d-`)^8fQ+bAz$9_7vI5+~+7$OXE z>FvLZM^`~rx(81>t&YEe4yO(%)i;=c2a7KzCw>#uV8rL5!XM@CAHeWS?()wUA4Wle za!JkLoHjN>&Wi3$-L@XS^G;yycDMW2YNsYA^0r~e13!7J{OXnFYy~c1sjwcx%o0(T zjYp%|48Yuv-$4V2!ZjA^KACL}_`ItOe*z%o2{`*eRyF(WvLfj)x39EIR=}S1MRj62 z^$u(X)^^gXluhfxudjr=>?{UT^`4mwB%YAaM+k!UrTu8M)RFNSqWU@QR7a256~AL85*-JVs5?s@Tpp}Oa~I=Ee}78 zkU1xmF@$wzU{+N}k!k>c?Ehms%{ZSH`hygy+#!z2$XL22 zYNJ{mIG#P-G})t+hPFeLSGx;uA*tLMB6Fg%+;Z7W#TUcv`!+8l%%7mjPVUMVTnS(u zb65#jq&1ns_IjjZ5N=FSQ%Fvi->XwVnD&K&uvHcwM(UP#Vht_zqy$!ZHz5S&;bs(d zTc_9r<lZw26W^BGgcTU*KzpEfpaemmuG8mv5DLAJ@#d?u)T&?R1p?lVd>$LWjW!%{WKe$j)lfn=~M8cm5-WuoYH*Q;I17^-X zNqT=2Y|&z_=FInP+M(5e070=9(Q)1!-aMZQa>g<#SZ>>^!Dv16uguY5%=8A-Bd4Uu zUIvvW>SuUNa|_ny7cUii|MfieRjS%Gh?iZ=^_##M2r)Uqd5vLCj34>b0xBH9pAF0> z?SQT1R4cu`g$0A4+ZIfiqFC9S!LCr6e}MeGY%;fPfTraUjve6;$|278g8kvj-HyUOE`+tygmV|#ASY6_hRF`A2U7!S0fGu(ii!_lUrEp&1A z2^pp>Zc(~#O+7(x<21YcM$u>twog`nTaUK;!T4bwK5s(^aR~Zs8SzUAC|@%+3A3++ zHpDo*L}X82B4v4k*B4dfF{(yM5zGgpM7$w@V&H&(LwRtiz8suv$0`5n!gg3B0J}#7 zFczEeFLf2=@99X)Y(E;cbycI##s1?k$02#s ze|0dT5)7l)8ho^@k{zAA*Wbvf@Go5RiXEfk)q$}U)(qeU!BA|1khDYQgo$F&?(;1H z9|rBr>C3AV)fWENUu(VTU5`K&IdZs?2w_Eg+dPOQeY;h zS+zj;u=HrydsuDT{~}AcM_YWA;^#TVITu6A8uG3}%-j(;nvt{0K~5%fZ6kJ9JhS-~^qp?0= zbIA?w*52nbJH8vrMUYM@REO$i7uEj+3JB3^v{;rP&G|DWL5@*EFSBwz9j{DPYidHn zM(-71J_MWAPv|N7o%v6I>r@9<=j?<(^+Dl|u=U;##-GI;e zC$AhnNmy*%IK&kJkC^A9F1)ZdBk4YJq6yxNVoYl}GG*Y*GZ}fbGXPk;+^4r^F0N(e zmym;>zUebsyYbZnOzZ2tK_nc#a1-ux^g<#ODo0q=(FfmAlm)NSDX;sK&3aiImhM{6 za%a-A+fBBE{;Q;$V#LR#wU=L^Facz)k&_e|tKzduuZ{vUU&;NXx%X_iyAg1p>)(9| zA0QgHjqs5_ylicd-K&=&X7k}y^O(bB&#>`p7?#@Dsk9G%{hkVmE6-)mMD}Cyn=Hg_ zXZ)k|z$G#ShBgvzleu@+R2h;8z?~$$cI}dMN?Ix!?eqmu>8Vn)&MO6ux?`kiXjMcB z{-VFCiqg>SZJgz3!-6+mx`EqV(=ESWwRiV8E|m~qoXJarBP2h||0eFV5P0oh(+}5|#)kSS<|54WahZ)}_&bM55uNlIFl$bcE@iJaD&UmsA@PWl!=>IChUjVPzcYJ zhKL^MR@afSzkwI*-3Tih+>sib$OBbJyUBd1*(6AH`T9)7qFdYTP{5~c(=ie33JX{_ zcvYm(m52vWRcE#26VEeI&1jP+m!X6j_0id=HgSt34_pKNRt_`uhGn8^mNp3!6C2(0yD31aEal*&EAdY#HO{=o#b`x z&G6LyiTw;o0EklJiBIz0xW4@}cwztM+uVi<5&qN2_81Wuh5vVz(_dcQbhJ$ShlR+R znyMaz+Dq%AhzMKOxdC9q2%X_D$xZPe=gco^`0)~>J>op!@XcPjmF`T&1HV(U#^&=J zjyQSqp@=YlD%D{#+ze^uQ5vkxY=ahB5&#|CJ5glyx3AR=A`qopD$Ed~{%kK9mG%$` zmrBRc*(c3}c;fh(#j~2s1`U~bGnSKHqfBoUWSmf(s;E4CH%2ZYKM=5@o~MNH@DIt7 zAUoY;hp7s*iYU^s*rC6_RS10lz>zPfpCQspBAGp}7SE~wiGDH8c@9*7CG4w%gHfu$ zJ>TzX14pAc~ba5E3oRrfAR>YFU+{@};@r*>K%Z zq?{oV?T%!gBu-plSKdM)(SW1y(lOvV8n`1 z!D9BJEHe~TGl4_rg>B-}DY8_sngfR+Mja61 zw}FujRr}y6Lkx!~UCFYSC=4yK?bZ58Hf!u1)%qEzuF)bss6 zRj^X(>vuml=-m}L+oL=CTTW0J)T#6&Oe|v#abj?JMR>rL0?Lf~BtR?04^8x}go$ta=>UH8C*GLu6|(8EifeGI1!= zmcp}e#(rZ8u*wWqIyqv;1li0{=~XJXR}V`~fLzxMLwU5dgal7m;^{?6?5e~Jn6caA z)~@TuV7)%gaJ5Gd_qSN0F)V!-tVou9RYTOk<&KX;S17r^1Se#|I$KY5|KPh=*1j#n zyw~?M7LMguM@%d??BF}rRq?Sx=$PDrswIIC3QKo;*G`p|dOxImV~#``n741i)4mOS zj9T1DT6cfX!>4r3D~$W`nsiMCrn=O*kXy=4v0e~?DGq4aWYk>jgJg@aLDHtA4j!~X z?0G~Gt z!VqK#jX?=PJ2N-gYxHvFCG$tyAk{U*j^(Vr`JF_zBf9#;3r|hkGHYH#doIPM-i7 zXX-nW0n68Y<~XU#Q{XVOks>W2q#DT~Zw~Z{wsxlcf3n04|G4$~tV6}sx>84J^;k(G zp1@qAC+Wme0E81;-$zj7}0HHYVulHV7`+03@k z=PPKrpdaX?g=F#O(}h+=CV!uB$EN*)U4}A8)qEUzi;6|%%MJ1Gei*h`Z!HqcN%7l& z5Lf}P6jgyxg8j|s0Mw=UyuOKjD`; zptJlWYm23gyAs5AsEoA^W9JniA1GFbdx?K4{r68R*3uYzdhoYXiZr z%Xs>?krNac7#uDd6W|DdNb*92bh#9Ysd7u!eXpIE;owymtj3MkYhZo#C*NJyz$GT= zn01iz_jUs-@So&MoheU-<2G^rx)NZTzw?Hf)c)(6vAt5)57LB0w*22!ta?C^SmL+ng;u1#RBdgYV-@v^|A8jgk>c! zUMw594ycuE42vvNe#)0F;&C)mxc%k?J;VrxfwiUSr%Utv@LKgMtKrJzKUAf` zot^5Ojzbum_YW5x4`(o086AL5N4ra5y4R0DNJ6L)Yl=b}Or{Uy@qPHuZ2#wVjyA0Z zI@q^t^g`tY39UeUm3B%}5cy=j#Zc3)tkxwy{WIxd>S0R|TD8x#|8d}XyY^qQR;Ktu zNS4%AL~)Ygo$D%AL|Lp7{fU;mOY8RwD%*%fVXv=0qj=wbC76m2jIID&zNCvbiqw+L z#MSLFiL6O#7mybON82y2#&=7DMF;xknCt!ysxHajL&13Rnfm4s9Jf=3Su4)@WrNUD z6rkoaq7X_7q8l(iUD?RCxXig5mv;os;wMjbIP z7u8h&X`v>!O5I{28>ny#@MzvkyKL8xo-0%%{bx#tHklc9|5(fY|?mG8-fu~ z1XZm>RVQ%y1F{DTA5qw7iPH_-a_RXjnm&cWd)DyIABde6%wsbRE~}(muwW_k`KDip z$J#mI*MgQN@D*- z1CaFZtBvejMewC1|=u3~nONY5I^gE)=;=FdLD(2@~PkKG%MNF0lS z-h1?od_~PwESQjK_HQoNf9a!t2nWW-es+b;7ALRmRtjer$UGzspyJnpt-?9^@;DBQ z|N7+j0->B_wU~~L1K^XXU)*6ovSNz0T=XIWWAAgdrtZG*Y{P9Weg~30@Aa`SEeJ-& z;>)Wsx)c3%b>S(}_E0)Ca__dGe}>y$XS^O*x!)b2$7mUBs{!Kz|JaFDrt^6x0XYi^ zUrJF#vJFZA1Pk-q-M5Q~T_)#+j<6#w=vB1&SS7pqJ<;cr-3~s=C(=lrf{&ox=%S9dpm^$IbMyUry1%hK*7%m3E-Jx#m9rI;nATDc{|gd$ECN1Q zB+ch1?64|sp7As5pS&kwoyje2M9DFJ=^n_q34$3`?qH+Bk*7sE??25} zH%3I|wvb8mSUgsIWjOoHtf_~o$2o#_7nQs0<@|r&5mtU;IfJPfO~fNbev5r!=oxBK zMbw^2(#wyiMlciN{`+QsUp}XkRC?BM9whoUUbcH)5CnJcV0m`N{baFI?9J4gvOY;V zl;OCN0l0;T69b_1RD@;@3LM-w5U$=Rp%Y@=)!g8mh$9J?o(?{-wqGm32KOfD=%*gH z-E0GyCajfOMW8xHB3?k2slTqrB6A~=aiHS!AiEo1Bh{_1y2yY-Z)POu!n0nOIW`~( zIC_xYp`(B0Ei*QYV$h$Ka!THNHtxTX^mV5?eMbR-&)fn3v)g~2{s^Jy$$r_Cu zy99XNB!tuZEsn%L694dJd=##RvlDY^tIgZTUx@_*_(X>BcAuZIs6&Q!T*=k~52GS! zdjZt$>&1k=6Mk-D9H&98=~Qv(c20J1*zPhNcOa2Or|$%gIi#Pj2ejWT8~7aAu%10N z4Lp7)+WK~F)aEy}0zEdnv2-{*$^nA7`T2m2ir*RlV&4E&`3LU8M$HS-yhpVCYDvbh z-vcl2y?r&e`!yWC*ctj8z85_5D`-p95njISQVWb1GCriM7f$7ce%)@hF>ed+a6^0; zGF8)Lu=vG#d_)%r_dLSFU_kq_1sA zG($eun)c90`g!2yH;fzstxV3GX9L!hA!-bMJ}-O?Sk&PE3yA*@ z<^CTao`Z$)zkzrLMn?MoMZ^OSGW`D`@nf;ZGPax1Kg=t=BiChGVx)6h#jFv&heECX zc>zrPu1J*(o$iV!;g=&Br^>)5`fi-XovyNS3!XynIfEt*HS+Bd?s>2$>mL!%_VM|! z+nD`%d`Cw%Jb(LixfXZp_qu=(qaW1Al@^I|M_t5_jwaG=l8jP=SDmqa?AIATCUqdGwAu@#<=a5 zB^Ys$G26zzR85lQNB$om{{8N;bdS|9Ce=z2vGxC=-pBWi%8WAs8L0g%PPV){TJ`nX zIMK2{ffhRyR77WY%f_LXbnx0zbH3q`2NQN zSVVVxj?wgQ(H7*`QS1nIq|f-N2%J7jt)wehXCt_p)eMu5lM)Ok9Mw!L+FeWxzoa<{ zwEF31p*^=!ZwC_kR_}B)!$8BcL-cfkRZsisxT`B{^2E8L>frKokTB%K9#M}r3=`8>54zQE+AylFW)$nJbmBQ#{5nL`mc?OYE30t1l{zR41p| z))w0%IQ(PvZI|l*HWchPM-ExH0;7}YAp*Q-nkD&+9?}e^E~-L2_xIxDZe3jM*hms; zZ6M}v5{GEe#u?J47`>ELH5A;3STTf(> zFOey-1ahMhg;G*Uv|e8*t6J zqu{s@5xyswv!K*O-C?+PP$t5L4Xx28HtoC9V9TH}Q`-?H`u%9g-mp)aP=*L-|5nlJ z-6gL_OIu6_I4#y?P}!qPSO|$3jpRK~>*0C7$^CrVx9gsD*D|EM!|)}IneSd-QG)CL zGIlemN2h!`((*!5*EzxRxG%TieIlVO5hIz<(|M?0*Jf+;4EOeQ^Yumta%lVW2-Y;# zu}aqQifl2S$Y-&U+$mHi+cHK)b7xweo9ZABwR|N$FH_N3N6hkB$^h3bigx3@wt(@& z+4!({I!usbK|Z{A?HQvs$y6;vV{XNPOY#Mj+2aMJjW*)yRcW=XXlC*Q{e16H4F7v| zjA=k7QYVG*ob=JHuU`S0{lEH82e0GrQ_PTFmVPVL^;9yi%+x3$L+qMK?1xMX!4h-dk=Mts&l^j<`O>)| zqtuC#=De!5WIv(df-&m$&y~%)vMd}Da9MD39;L>7+~x2(AP>s`Nmw#VLrRB#K!j9b z;S;!verD{WawKwP7fS2)CAKIP9^>4?u&nv--^M9XVdpj~*0E5BXA42IN@(gAF*4aN zP@^srXb|4FG$bs~ab-M9Zl;Bm27-~|nH2M$HwoGnMF^`gb&pRHXlA6XOzSL|3A8BBOV*Nk?x{p-Df^ciW>+9iIp~puoe1OrbbdIjvUaT}f>@ zR1Ktfvf77(w*DSi4Pj?SW4ZN8F;g}fI$?fF|rTH}~oL48MYLt1b zAsjf+jJZSYiv62N?lnXHfZ+1ePocT_n{nNpH4C|CUq+8I@WqA%j@gPu-KiSGu{8?z zRZ9I6S*MPZG8cao3wp{J=DEFdn~boGbnsN5+F`sQUR_yo&S5n3Tv(ObSFz4lgju-X zC0b=NjWGIX3MzLWD{4E$s&QM>gX(w;4bBZlFQaJ#Y3h)$5+~OO;=FW*a-8JgCvF>Qr z6Z%E7NtU^J5UXYzS1~}H?;Zi1B}av{M2+T>$6PtN&T&8Pm^?}t~ zQEAG1{p5;LnJcjr09lqq(o=!reDC($oog^gQ*#J`p^megV$FO*mp;w}$2wkjsYRGc z#w25Hytm3FKd(tLN3iOll2FWXVP$NWg*qRFfC20M-H{Yrc4>tN`>8`RM!Y> zk`AP}RTfW6lSo{uuq*i*;wTHDk~qgIr9kUfV2Ec8_r8IM*_ijAVPLaR4nJN(K0+!_ zI;;=JG4Ed)9Qcz^g`Ar1UE|RxnMisr{3pU3!!z7yUATuj&P$9JRc|X|>wTh0lZ{XJ zrt+&w-MP$2Lkz33;o=h2oWs$#D5=}wvn1o1o;;F}xSS-@bY`xozfIDJUuiX;T=c4z z%1Pn2DlsF7x=wJs-qLD=C5g#S%eNU}Tx@ZabKaY;Csw6r{RZ(kE+~|#GK#f*II$y$ zY*1tCpNz4KQ14nro;;qD7J}39u$o*h$cLad`PiEbN@66n5OXacQ-q6C-q0ry2xyGV zRiq#^CkOd80f+I@oVGxZ%Btl>Dv_ixGA1;R#EMA;EINaT*n**JFmQzPyfVFO*fgku zc^xL=Y;e8%Dc|POt8Eewut}2W@dVwb>fIx=HNoN?CNxhv_J^VCZk8WXr5KesJ5DMb^`U~ zCj!@~L;3S%qBm2L$e{=$rI1v|8D*(TB=B(l&wqtWP5bgx-9DkZp?0~+cHh7^|^C8l)V2QS)1{ne(ICddU| zgwxa<5U{rGyWPFZDo%>9Ri!P}H8;b9rBretxT|#gJOeSuXL)z{8ED=&;pJ@BoD})v z>51tgrgrYwt)pusKw8@P!UX-5?>8G_5Hd~QMz#l>qKw7INHlVx&d>PB8OJB(A7Pt_ zW`>QN8#|X2g}65XAZW!2i*sB)R(4O^R5|Ae%##COkbb$_eB_IX_Bl5mNIT{EbV-s6Q(I zNN|Jop!&GReKH>Mo5f4^I1DrOY-{doVpKCzIJ`s1u9Q0W{r9j2A}leskA@QSS41Rl zl4$mXb7@P)^OEf>1&f=4i_hKAn+{xG}IS+pq*WIyX%3=fNyu{$59U z!tQ@|*}cW5otLi9i;{n1uTTUW&}!32;}Xg2rmGVG6D_m`pSWFByobu7T}ZyGgYX7^ z5u*v3g^M^o)``lb$nfiK1*W-=%~LN*?AsTdm0GY->jKpwygiuffva{6vil9Tg%m` zu>-aX=^6`)y6RTy&(rMjS7Q%SJFUeGWPD~#wyIrP(I>$6?b*)FrPsGPL_P^b&ulw7 zuLg1N*|3Psw>M5~*#C$XNN0KOhxzD(mgk9z(0qa|^(1zc0g>&OjBbYxYi~pV4_n)E zJwx#T&Hy<^m;zpJz>%8G!0I}lp0@ppoSqnyP`c~o{+S%1Ik&(cNFN-@p?RM?$ap!d z>Rtf$2%k9|G2x>7H!!0>x*-NQw~jZa3Ks;GHhk3HihKWO^lGF{=Y#O4(df|FqcTlA zJXFBh%LfNsw<)u=w86d+ffU2WTK*Q2Oz#92VK9AZ_(a&DIff?259W|Km9K^zZXmB8 ziQDGlNsVh|N(Vv5UbYKG3}=tFVig*z1cRBW$M?4x)&Y)@2AI$n=d!N*Mx1Nek@)qr zpx4tYi=Bra_onW-N*XntTfX-Zo^f!y@F%3O2S_+DNr1^PqUtuWVMdy1OxF}%Oz{`Py8>qMkVr-Bx_UQ$N2t_wm^5}{|FSXQgt`hyb3HHe?2 zxE-jyev4enYxv#-k+rGyw9>zlxf`dq>y0bZ*TsecuaG8AWGF@Y7BeOZJ}lJR_Qb&~ ztlfZNNH$Pqh&@wS$L79{-cOvILgk3suz!L&Ch|%pjMewd^;_#BOi^CKMuk0{bdV9j zC)7eddBlJ+Ty>)ehhAnZ#8DkKoa6Y5NQa|FB~UN7scR@0?S}|@b>NxaKQ_OS{_T$^ zDh1Ppms~ZE$GTo%Dg^+qPEuu%n)=liPD+|SBn5EO;22@QFA4S2K=qy4J%2ec4V~jJ z7LQG=LIwc`&X8A-YynJPC~p*f_Yq`@(P_0#LZ-DT5S#%kW*7rZs!n8}YAFYmn94*l zNST-Lhm1W40A_i~QCXr&un-p%6a?!Ea1i<{G?EOp`t#Bkf1ut*2r_NR8{?WY^JtO} zJ)K3`tnnoqqQc6=5?4(SvL^3dZic|e zP?d}wH$ZBNz_(MJ!8;QX{ncg>t|Do+(Q*fR4>?yi=_yRzkrP=11vDhJG71*6Rrj-Cm9L=5cU(21Hhl z<(0UGQ{?PSTd@1t*ZS!Ssc5n1*#sqcou$&{!#f%|khIZBW0w|%_|#%#mE2BsOzFTr zc|$*MI7Z-i#!B~9mUbnXLah^&IuhDn^I%K-P?F$Sayh|>@MPR=TYMC97i^N#*)MyqC@L+<0JnRolm zxSZV;m+e7=W`T{K7O#{?D9(Pmqix=3S@W@w4ft_zF`7&#i-}?<%l<0S`XG34hkKAc z2GZAy9fUp|<}Yq?V3ZufLIm>Un#{${_nCTegMLhM{r0e2vi(p*wI$}Y^An^vJ#(t~ z`00ynOI-p8ie|JY+7oG4%PA6X{)n=eTTbE~5Lv2ogPD%Vql>mnzm6~B3sB`canqQTke!!FQ+H~ZJ$=X2lKc`k7!*fixm zu-xcC(_BZit8}-IbeuF|Nx2Nu8hN`VeVi)-zGo@lDzxnujA*MhdL8bE3@zRkcid=L zmtMnxY#X}U>rR&LH@!7h=y+VBYD3(8%Qlan*n`!$D6znm_a8Q|PQApvZg@2Du~$_& zNn%TS?AUyl>mSfq>CmXDX}u%rj8)_{2kUUM=p~u8QM_;5zB7stt#A$-d#Cy7j7c?{ z1J2Jz6%t@8nuB*(!YH=BCVLt=ez(%xDI;Zn95EQCDY!8B2bEA|PN!y1UMjdCHJJZf zT8&xC3Q%`jm3ueSFr&`An2!N#=pdyKnqbNq^5rz5XIb*NAmt1aqhllgw8&XJHM_&4 zSql3sS2lR|F$py&;!Nsmy;>^$BzQO&G+pEH23D;f)^P76Gr|$U6b=q1uqyj%ws#z* z|5qMYY=7+vrQr(@5-!BI$rYFLfEQAB#aMpOOvw+r*|>I#Zbv#eh@~yN(nwt;zOJZE!8i8d zdH+81FM4+VAfw)I>{IxT`ut9-`exlPxGtfU|(81_+O%Y>hSy0406*ziLc{gI&a1RT! zAPl81tP-|4hgKJ*+fkXR49udNLKx{6J#!*C^dMpfe%Z0Dd1s)RW8f)-H1{|vyPv+# z8L1YCL_cN>d8pBp)SOe4C8mcZ%>R=^l56e=S|FmrjbFzxJ=YZhK_jYCxnopfACq_H zDTzXBPf{VKI2qf{@lzixGBnlfznno{3}Dn>#fjyn}{aEpruncjZ_TfE}j2Q_e;$a zHosL2Iv$=`3ij{iJ=}F~y$TdhWWKhMqT5u^A0FS4zY*OLui-2f*6l^Hwg#=Wn8e8% zUZ0QqZZDfzKa9#U=dnf~ok?FX#`GSZF+ik^6U7P`?yRwSZ4^5fHJn0u(KFDMv_d zbgHZZ5_+{v!nGt`5y+%6z}e}j_FpA#=OY#L{wixq5bhd-sMN^nC~~#-mu?ipT5PP~ zp8~UuzpqVo8i?po)SVK>Y;^T<*Ic?e#ypC(c&*d)lC zv<7%W^8H28<6eM$#hwckdBQ+>Shd;W5MENsj2+X|7Oj--{=neiVcDJ%Ys`VLq5$H} zbbIBH^Di4z7wU(sB~R&2KAZ{IVB*ffGxmZPA1Sf8n0(Opk_#Y7EX6mj7*E)=NKy1a z(DJ{W>GibG;nD`@{u)P~{jG>;eI`{JD|49i4V*v%2K+~aQ!>I6Eumczx(nFcT^lRC zu+lj+m{V!GA*j3WmbPNlFPl@Xkpx?JnUd8yYcbHPiE$;snwfFz-7l9u=B{9x66MBA zNm|}IDa(i=k(!4M+(C6gpL=TvEbK+(y}2rPaCj6Pib^w$2%EF-&(Ab^0MJs2)|w}J zrr*ISecKvDaC~1aiGf#hN*OYL6p@qN9!kGmg@-R2GyDewX5fX=!C)h zcEpRy+80GoEQVYZ{ijhlx)tj(?>U(Zl;5pqj9b(Jl?Dn_s!?5x62%Q#fHr?J`X|dN zlmpoZ388uYJlCTZ(sugSZ!35K`PBQy#AGR*JPB%UXL18Z$2NcZef#^PBZ>=Lzde7QwU3XE{>)iP+O0Ds*LqmIy_giF&P`!-s{kN&E_3NHh z&|#cm6S7J3cWcqlzF3w$v7o@GZ|CuT((zu2M_O^vWxOb|?LpHVcxYFYn$|g@kON;Z zZc8)|!lZZzb;QP61+1k)!+sc?ve4)wXs*NxC`6fEa#;|@a-HgcdJQ{zeY-wcf(?qpA~AU^)S6r;&E zg20QKuYyQJ*uqVMw2bEOrYl|#d4PS!IipC&Wq*G!I@iB=*HT+F_!qLLr*^HrHjTH>f-I}tj~w7VQR5k31B%36-WbbB%S zVO!Kx?y~V>bT`Sy1Dv_+^n+EFFj)}r1?dNy_Pak6g6^EqzgIb9o`4tLLl_fK#xHOh zNb2>alHoFC2FY=F6>tCA4lp`6A1X>jgL|6&l95;Aco8p)+3&;JO<8cj*WCYYD;jgA;D&o_R~}6wOi?y@eYgBYe2LPW~)!ES@2u z^o2k4g4OT7+rBdUnIC;;=Mdjv(O(*+R=#>PRL1-D32~eg3FC27_V^1C4HFP^rW6^j zF;pt_@3-SWMZKCf#hEqeAWU2Z9!l3?xMK6Uw)F|FL>Kb#g+^7dsk=i}mcF%l?Y+t~ zblC@tiR$^e@{e!W0uK5e0-y$ve%cdujPbmvzA%T`%-8Jq`1SxIK@f>=4xAm;u-SQ| znhJ;*QC{C;)$6baV<+#!YqfrM9t!5+sSHCNp}F@j_d;6VA_YFoX8HN6KbnOKT6%!3 zQYvM3{=V;M%hZ>i<3U1FKm1DF1sNx7fa=!i#!M!T!RtZI{`}i_F>B{sKf*n&L#4Zs ztgG%d113bWd`GloH^6?2SzEA9o59R?aAPhp$F+qoS-;QDOw=F)qMsO3Wee3MZwfNY z3Y(M?-F2Z>I$RTsGS_j&609N@k3V}E$^>N;bWWKKMs%adLIPn_F-I^nIl-05^ptnphV9kvGVDXk1ZixmxK%F12Q-U ze@WDe{3tM$fbB)Z5aa*hD<}XD4^qPpHA)nZk|ahz5^RR#ux&?x_=YeLz~|3?#r75Y zL28L$Qw)L@O{*rzkjgK2WL@JG&y=hN-4J~; zIAoSmPy(Evwj}`qb>K_ixh9TSff}+lguV4eSgT18IC1d+Ip1+4AQ#XcknI2swDCdW z+O;(>TZiS^g>V%WP(VQxWQ^&XTgXyH^hf@gj2JQ7wr!*P%)kmj8SP84e?SM0ox6K( zg%Y;o3;{Yd1N^f@C^EF?AblOnb^3~3VbYp_>a~M3t!a!55sTgxa;nCU&Q*riWdeiN zXla|#6`^{N767b=k1eB7)-wL8quNfXR>S~8>Sv07A@zA$K)tI>wZ+n2y(@{P2*6q3 zd^DDf)N0WWUc6YDI9YVE8zJ0kMfDy}w z#(n#@`5l5ktigY?evFSAEaQrBa8_E z)_%Cr6~-i6vTXK+pIqG(4@B?CE7IfuHpfT>T@AFg(|()dP90tf5hO;>T`-a-TELxf zlffpH404sTKMcNxoAqPJA6b}!N^R&h09YBni$H)zUKn-cC-_xSIl^KB>_uiFYo@T0 zwH8fvjQHDZZfN`kiU@9Vk)o!abSasoO{Rc&tGEp$v9C3Wg zI>OKxC8BInU^)=-Upa zw^a+4_dhXrJ`iL+)DB?^!ZIB$To&{8>&xFZ{R$XL2%Xt?f09Un)z~+U!0BbC1p2d& z_)D>Xj6^ghY#w9hd*s?ef}vqgP0)fBw$&(Gtc$ip)3~0^{xnSBlX01GB8&=|-s=a#HVN8FC{`j|m%1$75m8k$XUGHrneoz+B<| zpK_ANO@SI`of<^W)&*WG`yCaOwkEAG+?DuTM`f-j=+{Np~Z$>18h2NMi1d zQNO9a4uX4u3W(5MSJ!^x8H28_#J~x>7P8q8`#^6QaW@}Am=gLCFOGhMbJj~{&rCS| zmH+hwfxs+d=#7&Jgh8Lco6jP)NMD57p~#IBvU3}a`gsKJta)C~@}tiGePPr_I;?ma zhtFayj9_4(V>QlzINP1fD6|+C5}(9_9)6)=6z4cwRbU*bm3*81jr8HQeV%I-*bKjF zJM^@AOiq6|I^D)Nph5Sp(8Z~yuSUIj8r6>>Qm@q}`jgQQ<$<-p$Z%;Ri#FIUE78MC z;91+5o1!HoYP*c;Kf$JQYd8g1@-BF4IkA0dRDN?`r33dQ+l*BObg8FjA@_U(tTJrX zX=Dca%ytm9dipm)ujBV1aY!b8q~2Bug*o^iArbBLQl4G&y+|)2jGEiIP25iiNT1ou zHf<1oio{?-!`gqFdeWQYUXcjpc!dGHN;rW)eF5YXD$G_)&RhU1=D9X*G`$;u{!2Vu zwaQ+W^+AcQOAJT(U5m@%>3(8wzt&~UM&DIQHJqSBy!Jo3w<|@+CFQ04z-lHep&toS zpm)EV5}^>FFm zTHNIFds^+jMY!BBqWsmI3B)N(QtU}tZ!R4gl3{DuWuIttcip;1?MZ8N&LmRR=lZt< zwz}LdJL1lCt-INuM9G+FAOVPGs~5sJ7v@-0u^y#w=Z!=^2Gkt4Ek+!3z)0H2vl5na ztp^(%h7|98!TAmA25?_Bx8)fUrbgV0ZoN(Rh z_c*dLdI75;{IoscG_b-va)VTazcD-5re&iCZlkhUvtPOtra-vR`+(KlEAFTAft<~9 zZGkerIYfQHTy^V81xpwWhU5lUs z?}W|2BWj;rRQ118S!9v-?mRsx&SE0$H_GE}Smx@u|m5 zJB~l?5{b{*(q1@Xq)Vwlw+#}(Z^;UnL-{2%eF9hR+gRVuq7mWOn$ZwYKDMpKz3A_& zsB`6{n7W}Zw%{5z?DYan#@;&7hy{b?fx5_FkI`(7HVK&&4kcTS8Xf14K1{={lMl+20~FBn?kRozecqEx@uKfGLM;Fg*Kkg$h#PtdE#qpsA|) zF6gz|#1n|7uxdVLBiIW^R~f zZ0nu25%1HefO7-*GA0=~&iTuA>PrfKw;Ye}MN7aPQ8^7x_l3~{8A1HMqaRlR$_}TN z7?X<2KW>Np$`xl^W6EQ;i7bDen2!z>m3c$lWr-^OFx3)7u;S#l2Bk^Z@pTqGl!sq4 ztS)Z^Y)LhPR-&~h+ZxvFAqZnz?V4Le!cl=Gf0<9_^A<#F{@QT3Y&%GYONQ6e`@=M2 z{ocOQ=#N14(J}xKG141!(tiB0z@HY2F98#PMd<3(T5%|U^%a?DP+bvbSVkHCO}M`Wamdvn<1V93EO-#0;!^a)LySAt+@$fCvXW>;vSP`@?)1583-{ z@`R^R7Ig+kH$Klza8O>G17rEIud~JEqZ=yE#2$rDh1tK-{k{CX6V3BV--e!*>v-YW zYqiFd0Xw(i1&lpjhYP--#Lx!Ecut@AG?CQ4y)-c0SRuQz(H%(Q&Np}+Md+h%>b;fP z-hqqs=AHn(&MHIYjM#R@@g!0f(syYrk%N%&FU2+b;~A@&n@2v@oX^GqUle&S6RV-V z%`f+PKt^UZGs8E^1Ev$B>ToP^-@?An4V0<`q_am8UvIT#{Cmk`@0T$EWlhZjNZ$_T z>{&16RG$nM8k7$SuV^?JZCOqzPoaR3*eKH@+{ z95~nglZiV23P7I3g?k1`-^4u_8P8j)9Kh=N*;h;Gu9b#LqD(IB;g<4&{5Bc|-AW7{ zT`glAm+Rnwz3pjFTP{cJ_XYcU>=F-*c!vj0;}zRqm=6@?9hsl75E`CbAa^AAkGlxh zsGCqZPVbMaU_52`cddc?d8CV)OP>`FP=6pP^kk!XHT>orjc^qM8gSWW&sf zkY_zRQvu?^ekPcQl%Mzl#IWBDU4DOVU*!p0mtQH#gk6QB%ry$)hoa$K|2!t(EjTrh zHyb2&W}&}n+J>9F`@Nck6WL9MI!Ii^eI>+>ozBxW*KWA!(@bMmaD-pfPF{qu$nZGY5NHeM8Z~D06A6^kwAkth_5aQ-9DyKDi;59QN8Dtt) zbPUSP&Pa{|`0+b30r>1@o|TPA)K#e#Psp`^mIpEFI;d;M?pn7hJGV9Qc}-rASh%g=h_5c{~!qoKP%F;lZc+%EeUs<(XzK9lgtmcvT5# z^LwL=Lx}x1^NglFuvELRp*>(fSnE8rrtzlR`yTVv#Yk@y>_EncOP&2bK;yu_^?`b4 z2~^n7!>m`ex=_8_yc4@oI>znwNFLEDDbvlLoy|dn*sSgKL zoC>TxOo6hx$;G_310Pnut=U#BAjq7RZ>{DrzpVIbv-!jbf3())w-MaEZ9Mv07Q=#R zC7mM|NMlyX9Rg^~uiq;I_jZF#LT}Av+A%TTZm&zhEf?`@537<(mwooTm2Aq2r- z;Y}B(T<<={oc(sYyz0H%9pzg_vel>H`D6+PwTMI31}=Sd z;T=GqwwHuXOY4lA-8f3zD3NxilZZO)?dbNU>?e{X8R+o;0^a`%V*fAVo#B5*z%#Hi z{+;*!_c%8ZG6BOIVW8g~!|D?$WK_)BfG%r_}#Vyfgnl#CuQ9$IW?ecZaxSKu`df=% zGT+DXD-d>{D*b#KJGK)qhdbJ?sm)1tP)CZWd}M@0M@g$F(&=0?FoBXc*b25{zLA|{s9@?YLW@~3$%z=~ zfgD>$&VBFe82xy&0c@m^VdO~A`GLRl%SuuvHX(zebZ~^Dwro=__L|p*LZ?c=;JX)v zM`BAcI|peCsoiQOj+Ncj{No5iw_Hv;3C^w>|7KpQG|&S(F$0}!SRFOTlaFJ_D=n$V z)XKpzdhlm`&!XvRgT1v69=B3%h|y_7Q5HJc;qQX-`@XvSl{WX7W*o9ZaY?H#d+REE zZl%)@qi%Mlxv%Ty`@iGgju{OT383`>a`i{K6z>InF5Uo_TgxcTIa}mB+cOgNYk~1moCutTPbrXj7;W26Spu ziEM9bmUKaENmvE)DHbzL-)kmm&`W_kSsX2rf)Yh(LT!p#@Gh$6-BHr2`OhhBaVI$g zy)?P*hyh=#dj?~CNj1t>stkOnKwKkA$x<^*(Xx(RIa!|?{RCpv(jHbOh|u_~JbpP- z&~oxn_&!=RvuZ{>;NTGROtG=C8G;N?IY#AM{)R^+Bv-Y3vMpD_RFE8psojF_pcT8+ z!2bY`L@aKnm^tK3dH+tLNPLF4v`OTbljlPcYE^19?PVJ-ZM*q|h!k@L&~>ibi;6of zLP&4=?1h#y14S`m)=W`Dx$?66{o<9*&u?@sWtE5K>Erfzt>@`OtjNtZ;D~3RZNJs2 z5rufH=M72o`v(^_Je%4s+vmGtjfoV^T&_BD=y`_X`OAm!%ay`B{A7-$R^fHjTyBqE zS%pORf}Jedo1JRytA7-E-V2r`f;@k0;^DkKQJcMMxqO$&#CwvtrLc(Zb|2m61KogC z1ZOmj&npjh>$Gq&Gv!b5+lcr?(oP7uDi^0isc~i@X`RE%>$$fIQpB zyj$y@A#Kxt61XEi*gmr1Q))Nte7opJRWBF5DcHj(kCZ<$R)wT0grpw)Iq)u7 z%bP(`&7n9wEE~cF1O@V$+q{pLav|*!%AQz=%Vn;^L%#AW!kW_Z6RnD$N0bwP-iW(u zl)m$RN5KoHZ&o!&=W{{uG_y&=kh=k#&ztL8b8C)el(5vJmbItQOjm|j+cL+|6CZZ{ zndN4k%G5Dl_(c)N=&Nw4+9H`+}m*O-` zAZCg+FY2e7Em))K726p}mqE1>25WOBF|bbSH4a|(IgzhVQ{|kW(>0C?Y$-?NPPf1z z-4;E}Q>(D5<_21q*G!;)3w;SbCZ$2q&ZXHrU9o^K4jJn$mm_{$qFG!(?m%lheM?x{-LOq45c$ysamcks7R`SbfnyaF)Qg0xQ zE{&xMaH2TRt#(paUnsj`08O{|Arlap0}&w<o+!M`p;wTX>08OEf5{cv~t{euh5-R$-v$G@D)$S2u~eHxet9V~%yRnH@7Jds+FQ?SZBjPgSnt zV<-QfHO=x;7p*Ean84sP9y;VJl0~uoXOuvU8KG&lL1ATNuxRhk?YsLNo^B@ni}A^L z`H1Iul(}L;d+;>#x4o_6_j8V;JrbE3z`xLT%p8n#%j3cDRV9)-E>!~^!W%eGMxves+Y(QQubNkN@oNbfdl>8xGIR$bO$i@VD~*OjDk(&9Cw{;)1jsZ7_I@4(@%OC zG>7LoKzFx{P`!VaMY!n?ZxUTUzCd88RK#JMBcU*h(CCLJP*Uh!fQR+SXp6+d^%;%&|Lu zoeGC!5cMHFVqgeu)8RdJ4sICmw<3>sT*(=tTlH^0nbn*Z2g*-=5-Swo5Si^4Stzcb zfmu!k5G4+!-OdmD)hsTqyQcze^crIaF06Z9CHL}L!b3=0sV#iPZn<-lgrtLKH}Z<) zF@nJ{OfwLA{`s%PuDc`ak*hHp_7~7#=t^^C3vg-C=haP}o<(~O=VLa_1sYre9icBP zW3_=shtk#hY2_TJFm}cw_r|mR7vcuom^iyImnP*zLF+5)`y)y``8XE75$_h|(Ld87 zL(yx$*l$iZ##Uy4$yVa96Ihg0L|y>z=s^|qaA>Z}U8pmxgH$r!vUeQcO8)FTD2d&k z%(#aDMfkW=XHMFm5bnOb^-23(%7E z0U&RpRD8+Q1KZV4RBmL}#h=QB%AjXZ#>yApZi9ZqXg7kXY(HS*_9ZJpIHq`fIY+i7K{e+e1JKdF<6oi00c<*W2HQlV*i$aFnci`qmNpm z?D9cSs1RC!&xcv~%SbA$-AC!Ze3cdJE8WojuD6ne+=j;a{f?aVyMQxpw{JN@M|3NO zd01=C_b7`ajI&x}tWjK#Sy7_*wDp`BJuzBR!?(H?J59Hs5Ad0-kCb3k!%VV)@zgR1 zqrmGv($Ba zBToaKvfTScD`okpt)pQ->0^WhUYzsww~Pw$9#AgkbRl1GmM9*Ki-=<{!i;iqrJ^|M0)b__%*@k;ZwerB60WN$u#m3+d7~Ys~WAZKFJy z9GtDzvaQe_m_vU`>;D!QL*7wZaP*~alBaiTJDKn8r(RQmf?c??V@PC&d&u8R7@UC- z&a39GPl9rZ&(>dAcUZk0w1)1r#yU~VeIIW!&(T4Nw>KppuxLZ?ME0RT4sxti-3Zgj|JU5_3M<3h@ zK7P=E>2xURBU(N41(SUfk1}o&XIRC7^xmGUj~|tk>A&R4B)0uCP9!8YyhE~oBP?Cp z9e!6wHagr5Z-aidQ*t!@Y3ROLCfku8wy>pK04kfTh~8POxZYodhTFl$GS!hq^Xa7J zn}LJyt+ta0^gRfZOg{xc<(W!vtjWhp^9)S!)iA~PpT7w`%c&hswmeIInztdpFP_|> zIh?W6xLTMTU z{|2Wa?2pEaowh%kX&R0h@-gr7yK$-c)hQ?zrMRc$Vpi;J4i;;TPraC8eSewJj0{%> zQb>pgR!P1Tmna{Of%`;sJD%ba#iX^I$G@KsN+E1pb}<`6r5zvNp7m-lm;eXCE%Fz) z)bZT$H-@S$jjnLMa#tWW6C5Bo81p(-?E3NkjESALV8SZg|m|IsU7I zBdW?j$@weCCEW1Z&yLgg1KjP9l2;bqW*>oT`W02o*o4S3$C=Pk&s{=L9CwllXo~RL zPp&s(RAv87HOzsO$*FHAjyY5n&J{JK1sF86awS1rr{a@m7r{MxFJi{%di=p0N~G& zT>cWjYH^=GE>pE?%a5v77F>YGstpi^IkrS)>5K;2M#U$ukp-K0J)}k{0sp0N?iu`B zFaY_Mh>ZkfmE*^2@ia+Rk+8sRP8Qezt3kBZkaav!R+k5PsA`LeYvp=K%QQ=g$m#k_s2n|o{f zDxnR{EaYbBKufN}Xk$Fp@Ne2hd|}Q4^YHQ3RcDbrF0`(*MXLGoMbS*d(p#Eo+iP3Q zDVgoX$!G8@{0hA%@RY$qbQMe~=z4T!E|P$H#`2N(^Rva|j7W(gpIR#%y0=5A_7p`)LI&~#2BQo6n_kBS1p zwk3oxH^Fi7N)kBN3x~tKJRQ%q7m?&5^jEWhr=JKbBgNAfI+Rpf`HsBa7gtx!AIl~aDV2DXCzh}v~-5O$0A<{lAjB?hPpLQb;UA3muYj#*Uc zErbd+MfmOXOhRu$J$u$^d(oEe)R$Gj%I_9@W+$+o1WFsu(FA3fId6aHzYaSg5rnn{ zvmW$>K>lt}-3;2y7d@H>!u_Hx7aURSDWU~54Tow$!fkw2s)K=XVto6be!5rZhST;n(VKS7h`jE;ai6Wn-uki8;$KA) zfD)S(VhKILg^3A;NT3Ug{FTviwnUjBC(e~US7e|1SKsF|Bi5dZzRnKML#*o>E%$E6k_^R^Wnb;c5Uik~rt zIe*TW&N+_HD*cf?geRYnhi%>?IQoA9$rHn%NM#X(On@==!Iw1-FZ$j#pe&LevuYNF-Wr1hpklWSF;_ z?5HLb=4PNdG)Dbfix+%$1XBZ)7Enf|PsgRWlmI$-Je(2mvZXJ-@b!gC2E@lwAr~olipW$F`cqC&blR5>iPmsYXAL5F^a&Z27;Fc0QoEYV}HYc)|#XOjgz$V5(<-p3c!|^zMk->iPsQ2zS z{qOK`*J6;9-KiOYd`(0!?po5BUl5U1Rw5R+TBY7yn88j(qp%+M+np*G_HP84%4M<6 zDdH$=;$atI);1UFj&H=QDDw0>zKY0kfc}fxS3&(=j0<`rGt4)Mwr9SIb4y*ZJ9a1mZQg@X1q^~z{Qn-_Qc~tU1hS}Ef&y}qu*~G;PH%f88|AO$m;!nn zRvYJWWJ>l79Lng$0tMx`zS;Un@IHeLoikZ1W`Pn&4LV>$EXkrL@A5%Ivx;?+^=vys z3cI!ZCLC^F7S59~$6jK*iOr$pB7#A8E3|tt(ZLlK(ZBkToM)h>{ZH_)KD2nRsgun6 z?^Hoq-%Y$u2b2Q6FA%sy7N0$mQUKArS)%8Qh+}@aW%D>nJf{3Am=r3cZhdnX(7S6$ zWh~!7?O^c$>UyD!3f3r5fdQ)fML!ww+jqTo6~L7=|Lyaz)d;Cm&wE!u7~SG`fsF)u z*?+I1&RN^xLcR+ksK_@z(VaCQP;w)Lj>oksbwE*9R4bXO&S*Cm&JjbrslR|8rBQL!y&6%8#sYo#V2$H z;MrZU2VS-vEr%}j!u8$iO>(}RE3Ou*lRV`e=H+MSh6yBkbeo-le#-0%&&BZ)%>6H_ ztjUk z#b>Zc%9vYem69g+L&=-Mv`F;N`0d@oSm=EMrCtqK#9`|~>4!NXrqj|Yb$aV#t~($c z4Ne^C-6&>k>VsJAN1rf>Ta03cM473MLpDp^Zx=1_Y9$F-?JSpZy(^bV59FpT7jzBd zCQ5Zf3FAInu}KqK9kV;<_PwPbK6~(nY*bAL63Y7&nV^sLZmGR*lQIaogOMnv4umfp z%l)AHsDwgm(frd6k_3!8_B#lW8IOQ)PX0p_0*g6k!6|5fJey$h9*%s`Qw~GEfQQv`)RseI9V4|*PSU^hHbuGxybqy2DGbw=&5O1C=qkRA2Cw<2*4p!zKwF>O zM3+a7(}dYz*H%)$MaNc(O9c62@viW(Xtw{N#)#E$x$j@83BJm5B>JCNe7REOK(9wo zmp~6^6v&KHb4cAszBH8IHMEv5!ux!qVQjxISY?QpNz{++ZU`Unk7Tq!p648Yu3wY!+v<6lq^~ZZ98BBayzw;?*6IFj6p%&>le$hEB)-&x0f$DS&tpjxbWr>D`?@Qa zNc9O(oIBwZN>UsnW-?7DI;`{sog4#r>+nvub@qvrB^}p9rQoV-z(%kEAAs9tkjowA zj36^clJtiT{1%#M7ZOwT-s74mesoNR)3m&ZkUg)h-rl<= zzA1FzU+^Ku4a%bl>*Q)k!({MHxg-p*^O$)iyeS^OOt3FJ)4{|jRog-P<2vpM*}NZ9 zFNkLoD21VZUCD($xqzM^AXGzAET|iO)Uj~v@2q9_#2jWEpURDGBEw!B@z}!WCOaCc z1a-P683hxHvwQEy1EakO>+w6zQ=&_(x>A;RDZV-E(&$j7` zO+SGfWWlS@Zu&JwX>^$tTV-*t+H^_st&d#9agvb$PL88BFj_6(4OZf%G#-c?T--Lw zazy3e#YA}idLT=s5L%^%+|X!xe!a8u_S5TQ)Ww=DS}m!h$p@Hf&D5bi9b%M)p2G*S zE0bT!szh;Nep#H=%B-%@sy4X6_b*Kmz8J?^X$6@OEE!t$gBW{d1vbybI$TeoFNP}w zCHnRur4y|OMy5~8&!3l%zCWCOw@GxjpShQx?WU?XcRmy@p`a~J>4UimT3L|sTbuQa z2w^jt=~Y{N%gdy)jlAJiIDWRU*apP>@z(q+N|5jw<9OG}`3CLjPTuzCC>+>smvCk| zs|hl-OiJ@CGEedyZh8Eh+tuY<%93Y8_|GVH^wMD#JI=&P>6S!5K5ZG(*jsevcfD$} zFxR%l!<$r{N=<9s0iM+VtU==<0FGYHhc&;Rn)O+xYB@rj@h+~0Yf2`npt(j_d}*dw zd4wD*x#?oah=X1(CirkZp^gw8VE>}W6gvQ$c=8x3O|fZF1)Nc zN4CgYu|V85O!W1+mEeHb-G5`>A>O+~^oqBdhi@J|6tCX=GLxO(XoEHwtD-}>Y{&c?vq3dp*Y;{vpcQu2$KmCn@ZjP+Xm zw(U5PR~8%ZnRXd8m>Yv>=;%Sl@B-3A1iwG8qjx%nJA(6`W;zBn3$+2l62x7^v1pth z+k0ER5o|h2hlf$F#H~W=a<)p37mpBCPM9squkNx#@EqBs?Cr)+OWy(X(!N*R#OJ`U57E7p%Hs_RCE(T5F!Iz48WJa+R_6s> zhK*xVLH*Bv=3fRTl0$Z>7}YcOd%y<$%Pm(Yu=lnq>=Y`J=(~|b$(*hFK?zQuGIQ2- zjjv)z_J)qG^L~b3NA^uUb3Qcd+vDO)=(CPh?l9!4`ftMA>bg+0HU6Qgc+7*LSV&xUO_J|r5XQ#3Eer#6w5PSbw zFHo;XoIbOTosG}by1fCzH=>Ez!OTT3*R!_0>X2+SRd^%YV`Jao9GgZ zm!E;xIn#px_s5UG*5TG(HVgvApShT!Gq@+ic4cHrxN2ou_|uq&8GFN4AO|Od2rd+|Li~6B%a}GXr+Ji zu5=Da+E7VLCpesTnciE^?xTC|*g0K5$Z$lz}k3VnFm@RizlN=~jqI0x8f94{%|By}j2} zb9~8TDze94tf+I3IN(2)tgWssKp^W{{iKUeO&l8K+-5%Nd^b@Kt zO>ighh5Qge>S01M#ta&6jR=V}UIxc&84y=by#`vmV8Hn{bK_fQ3urT%$ z6hxR}AeGico6c3UGpe(#=RTMP?jh3tG#}X&Iz zlcPj*4gw-v0mmnCp!Vq%@5P9WxIANJVe!BBOe6>GRB!VG%9Oi<@QNS+qRP>2fV?*s8z4~>yQtY5N7JC_Z91d_|n0Q;Kh;xS! zXQwSKq=*VlV3uZFRpN)}E6CXkY@>+W?MH9(sEC0ZDmoPJ5;phEXUOs|_d81rg0?m0 zFj)Xo<&HB^g9$iF&&Ef=ct`QU+;XT%KX(U)Sig$R-=TgcAgg*K|7M-ri7e-@m=dj# zO55+xFBd6trctmNs5zz^o!P;@KwuDmrLZGgH%wOsi| zB)~C@dkcXQBsjWR3XWfdW4B$ko2;{hgZ+-liYbZ+ZAmujo=WKQPsb!Riv<7_?T!e zZ=K?bUmVw*!5Yb|YQ^WL{wpJ(PakgZRSCz~>`hj$<`UXOuSz0zbA5K4R#DPjf6=uB zS>zV3lPMPO`N}*^d&nG1njByCee?09D@?wu*=cNsl?@EC_yr!01&QR80B?Dl`MJ#?N4u#;{X}_cID-(59wy{k{bumAm~{v;y^X z_-_t#{De-u4W4#!`kA8uka|t%i+&F($Z5@d`G&ao&)52QCU=Xw@D6@Xx#mQ-$K7W> zoFQ~^5nF@X9V1Q|sgH|~aM$gzT@#)kdb%M2n6EkzORj7_B*HK)l=x!yY(k?`A-7Z{ zsA5d9%ehn{BvB4#c=4+qumivj22Kw_E~o9v7%uRh6)?qzj7NSjSK_Mcr)@=ja|QHL zElXDia2MdgvH_Vct2CAE*rzX?C+#)rK1K`F*{#!i)bzU_vIBIK3__VxYYFfs(t6Jd zwd?T6Uh<{PF69AjC@c_M*a=66c)hJ4ab@hxF)yarQ}=o=$gQcrM5u%9?&R}u+HgQZ z`aD@DI{g!8Ux~1qap$+lMMQYuJ!IYSQ9JrKE);(|R-D`YHpD-9>fd zss>MmLaj!Up2#nUPEma>khCGit-X5H(67!0ExN!6rp34xFbdy-E9Y^PmfR~{*7nm< zd$+cO`fL@JC+&DVTWHs%3$Hz70?ey5XW}o+wj8n9NRmtX1X{J zvFCEhjGf~yS?b5S?^QJT?c8snF_Lq$EhX~@ebVw?vlRUv}jGy%E_Q&?Y^`Y$IHp!j-|glHJ|tBLY6=Sl@!!4qRs7Ba4FL};A9yB&I)p8egg zf7gF0uD^n+fq_ohUO9g|KTkh?{ows9`Ae+FcYJ;%{&Z}xr9>XbA6BK?X>;5@XaoB& z|4Z@5{r|U=_TXPBEr=Z(SMv96{FGU?^#4^#YufWeFl6qd>FvLoS^mGWv~9&U*2g3z z-F!t=34P96KJCpC3JSnHUFQn{p;V`sKe|~q%jn^

;pljsj^$`Ftp|6rLGvOZq|JIU^3)y1#XkbGRXwyC4@n( zYXT%J(>N!%!*F?Tay46rEROlJlK`oNb=j9bd5T9Cp(^~S@w@)osCl0%b8|8dN9)K*^WL)Jm$tt_=Lv*HzKKIcp+(51x`Nbs#*LBQ1!I`tRI%KD`@BvP)0^o%bV#xS`BN1f5Fop`K+T+JQ-;h8}v zR`CzdjPwuB?Bxpj%qw*TVE(&+2>4pAaZXxtmcW z^f=RRpkF9-O3Qf)tef_Bz){|M#2|%-<(bD;Irdo9As%^970*FhVfeUB3sd9 z6`|0Ojh>c|{L6s}leD-eC>7gmSFQ==Fw{o%O~QaECVS8lvFWISIZEo#IA#pgD=g0e zY9z*0c5bc|LtLQw1Vvg&6oB%rCW`Pg#w{Nvk6A++q_*)n3p*^;nU+fbMPB`PeCp7@ zPK1*WAGMm32|p!@6O_foz+~VIE474MgsmcwTt-7YR$02gWw_*_P*>qse7crIYu;n< zj`$3%fXMm}_tiXZTj;Bk0d2-*yxgrJ3DxrGT8c#p3Xy76PvuZbpq!i^fzNv(!kJ8_ zK^oUk#^uCg0tD+4luxY<&ihwVlm@DFn^UsVj(hd1fWOxQk;cX}W>~QQ#f}SH?zMz~ z9u20gE1Kn8|MQ%`J#FOAq7>jd{a(5H^iAtmLN9SZ65Hw_hcbQy8fPlU1#A2}{nGQ7 z`jmT0HLF6csqT;I`Ic=^CH=L-0t>Zkza0WnG-#Ay?lLG%qfom0+df|Mq}7)?m6Iu1 zFny|fe2oJrrPw}exdB!D7TGTPz6*yz*MXho>Cou)v~2h0$WdZ%zNYbKmWns`;$g}`iwXZc4lL=LtA=W6wH z4tm$yv}+uEiAed=pWlP5ze`S%Q(J#kNA3Oy^EQzA+}XlOWdh1GZkK^)<~tWWzEN`E zuc>P8zcyILq?T0ehed_KJ(%GDx=qu5FFE`;5jLxgwcI&++ZTv!j!WS~YI+l^(meAt z5L;-pQmC9D)MFJaO%i@N+zM648l6omW(}6 zJYGNjVZ`JGC%0c3u$mI~OMnA3z&%0^^PaR?pTf;d1UsFU+vW|1Qqx~?ExGm`vPcWbL$ z?|kLSbekd4_va{jcMh<52%Z8nioIn7Q@*@pf&k}($-FFwR7WYQv0=@wbi71-2?g9Oh-a@Nd zxx`&iv+f6v6>{d$o;K9fK|U~bc)lt=@gyW^yp}X>PYg?9PS&R5>gL!bU^;@mCo}|% zfG6x6TftHB!A4&VUa5ZPQzGi@>TVQ@|Kp0RKUp%;32vn-UTp2S#Bk2>1$l)hyc zc(A%-$o-Ff%{R99kA2;nCm5p{(mbHG+Y1?}_i<#o?;e}sh6+q_OmtKJmaz?LYQ_Vh zmVrVItr=QPlXD*RNY}tWdE2G(JOgujrt0d*dNj%Hy=~-HYjXP>{?3Ly09p=1*&Iea z9l;6(MP@nA3m+)?QoR>Bn>qn$wdM2Rr^uLL;F@jU`}c3{ww^9S2|;w`(xQVv;^@`K zO3;~=xHiXuVCO`B&nz3O9ZyjaTqSkaKiK^8hE5z2X-@Zs{?Ocy*?|a7>`KD7uoemb z0OJfPICUX%P>QA`m6Rdaia4*GdQrr^VLP5%$a6IZJi66)b+C z-Y7;Ds)6^yaA!8v#G2WRhf=7iyvIJw1%%@WBxxGDr1^>^Z8B!#@%K?`IvzSwL768@ z6)R$Hhsz6_^UrT{j6EgPyjvjfbzIVDlB2oJzy4&`rLVq)4oyonx9=2*cuAO$&TNcd^x~VmQW3Kyud~i`2`J1I{WmF*E!0b+)*w}0# z>EfHp6J|Nd|0W4H4r5+8jxTIx_gOXRMKnT%Kn|IXRex-t<(&E-T^+!*Bo3MO;4-o^z*x9O zjzjUSVR0!s%uFfoTiQVc+SU&=5R1A`8(j&MaX%yAQ)K?$rZW4~MA-Z@r*TfR&OE8O z%CydVSP)7RNNmdu`VPiE=+mbS*{t08!B;PJ)vt?*)g@4FJ#rFWa=-WSe7T_Pl#R>W zAp~$M1W;xTKQ5L2_aMH(=ntg2-`-_H^9$A&ghVENPwX$SSv!x-7uuQ?nb)QSeYM-( ze*Ur<4eAH;E+v~~N^cX7yDxZJMu9xa@a=3S{>3)kY;|BC&ffYXR7qSA$=!&=0C+6p zEm#xx{X%;arUVIPPfx1{-HtUMy%cg#ed_kC8T$xFY`jI{)ocL=B3_6pe9x^?#2Er9PUJ3`=&Q?!021{5f>!B@dr|9 zzARSh<_26U>-E0Yc&4m;xc!%x3a5%xgxjRxhMgZmm8G0RC42U0F78;t2#JK-;zMqI z^KDh5OL-O3HlNM8=*e{T_Qly{E7}~3asZr4%UUTvoTF(#aA7l z1)p%*dkjS!uXi)T?E*>q5$SXLmz6>X8CBH0Ly1f@IB81~I@)pw0kT?PaTszIkR^mJ zXhd-Nw$c!}&PfJD>q?jD#;uVZk3y^p(Nu0ScrHwxDLA#{a8wUSQ*mUQ zd3xI0vt{Nxk@FRr zHvNAicn$i7EH(4F;=Kp>j&NFWcFItE+elij21*=j9%1h@V&OKw{h#?ciP}{<@E@~d zX;x8xFx9aC!(@;cLyp38xd=TREMzx>~rojL{rWyhX#fAZv?P?9MHqGg8m zGa_z=0CEcx2^^!feg5#nBmGGv@9#D|h%02Il@ZSLkV*uOIb=whBHJ;s4aR6Y(@(J&P6SctKtu5;oDe06#l;soT_4}?=r%~Oc zRx3iRmOOF?8sQGZ+HG;Q{o>s$`Kw&bGErszE~I^&w)I`Wj0u}>BV&6*m>^<&OzVD7 zJee(z$wFqyAyL&q;>xzesIB0F%O7BOr`$r-EjXr|&&L`9JjqsDE~l0)4^6JhEQi^v zYSz5z{ydLm!%fZB7JKHC8i_3BAG!C*$71j08YWoJsMQVKcJ&3@0n5Okx83;mXEf>9 z^!Jn-OX&-%Z1;E0*;&QtO}03P9ubji3bD_%tNHu!t8TrV=7% z-4;U*RXkADXVVBQ(-vbjXZ<#b9@**6KQ7f4Y~1=1w7^6QYk~vP#I&CMhr92zy_T3` z0eS#kvDv-7XaK5Mora*5bt(|AK`al7;ZakACRrz>c#%aigW}hT$ykC=lOD~GTd|c9 z++cGRCV?W(w{_!4E1d;;Z=T|2{Nk0NXyvaC2vM~12wA-U4%u-s$WNe;RcRNGHfT%b z;pPb@&^C`YFfhUtrz;AwXI_nA+PtHY$tAwO`CJNQyuXc663Fe&@jvysIyVUs=~gLm ze?On^U3_zKZrbu2Bfha{Mr6E})uv0gTGL859^+5Y4IWMJ4WgA2MyV|BXFtqE`bjm2 z$)o**f+{A|atNhQHPazR@m&kg$hVV|IJF$aWcRrFQm~JzWA;eI*NV9H%d7XYm3@CFnZZte79EDWT-Y!sjE+pGNVl!yK5?@ueuEsRfHo_q}DpXJYpN6O&T|D zg2k~>XDVQ&&iq}z7@nT1`u%_6*BX=QABHOdTvMGK(k~dQ!mKB-R0_oD`k&g}2xyw& z!x7KP_(FZSKg9G^Ypw$kHr2_oqt=NQ7TbA{0I|Zu-w4ZrrE(8ERHLJ}HWIr3?B#y) zVhWQTqKbxtH2PgdMY-0}^ft@=HZt=z-RB?xD7CxE)^rk}Zwi+- zg3gq3sCrsALx<4XirZMpaA>SOW@ZY7XumiH4`yFp!LW<2-DhUncH$^wVcK?7!^&Kb zt0>n-m6dGv27tw6Y|y=Iu9|JnXC;YaIEm(6;#^cQ`t=wN#fJrdHT z9)ol89=m9i+v7cziO@HpuagfM5bxHn>78aDj+?LQ=UWzM8cMt_TKDcTT4<1vvYdtV49kR_#G30w88 zr)cGxZEnPy;KWtEyXk08_>YT1AwuE&T0kmp|2w#=yWLaxm87n6@7n^j=x)1nbeuKH zjC|9EPhbR+i%%fB@HttB!G*Unbi@v*>;vCz_zRL2p^us^2w@JRo8dnK_y##s=@^P! zU<^m35$b&4C$2^bBB(lre0UZU!M~6v@qBd@pn4QQReMt`%;fl{%yFmqr)54CjGRIm zMnNS&uuZKs@Kazq@)<)ja`Sc6=0qyU{n8tNU+@l29s89sfnM`)!r?>57PA z3mW6=#nxZVl1?tz?G0(34eCMxGR^V`H@v6_RBsO!xciHg(#;_BonM2@X6vDlar1d= zgbpQwP%~c>srTTsK__3aprz;`c>)};SQQ~ASx>V~#Rw{FzpyHXg7;!4H7G0yGXk}m}aHj4=QjB@Vw3$;Owj}gE4nob^nc1IDm7(^BN@qY2j5Gmhk!WN-c=0>`UBX8 z#Dm21B;@a%1;dF%^d25NZxO(uOQ&!1sf{4XQ-Mzp70#Df^7L2ZNTCLRcYnfZ%UVPh z(@ah-N*=F(A6wPp*O+^{Lej_*<0cJ44^!_zME-Yg^vVQQQ{4qdl>;uTw`Rh1csE<( zToI-$d>tG!6@NZHc4a^PBdNaWkN!Wx6)IgCdF#84ENL4n;*Wc1tDYO1%%LJ?hoTEw zFoHw@*jNFA4E9cIvyB1}h=nK};6H?v(V~XNBb!W{%MbAZZ3Ne3wH6Xio9)~apK`Zv zdS^>itpL(T$ZuD74ixVZrWr#lYfa2?=%opI zf4XeSJM>hrf?&Cl^7r0-h1hJR>Kxx9w6#^2OAn|$;T1Ih4hmkctVqz7jV5_PlE6B= ztustdl$SAEl>y;zeKI>X@VRr!OK!tGT!K`N=JdYp>Xn~StqHmdw^Gk-Tn{g=OZ+KP z%6Sw})8JIO31+hHDT>Yt5z&ou&m%vA6vm!7RxFAUfu` z39KOYx49x=jp9FHDI%9@&I`MBs1fXToKyODF7(Ri5AvK-HrLIb9zwsVz~}rDS4fIW<6JZMrsw90!;b=vv@!6aQbN4~-9-Z=pR#1CMCEnX`rOo^=N&=Ag{9 zUQd65-D!~GkDAja2I0t%gB-Ifq%RQTX>|>mOrY}-Q}B0|C{~Y-U?=?5*kloR`?65k z3{7JiH8|yWt=6`sQL$riL`g0oYAN@sfH4p#7s`q~P_pezcyA2N%7!5ax19r$2MYH5 zXppOCSPbChNxyE1E<$e^=f_Om^enUBy0BiVD2XgzEwX9&`{I(0a%bD}(Y47+zGp|D zKEQ)G;{x8_0VQM`xv($sLPvQgn$ygzpzktsXMl z1XId^DrlS*v===18(49Xi!$z0eYh-9>kv4Ry8^pXe)xYWj@yj?Hh*dW-woay>|W`*G%mrlEh=G6zM;e!Alsi< z6RHTaSb1TpojKqXIXb_i)j2Lu0g>hwKXy2IC58*>{JAhG|a`D-agEjU(b|TU)*BW9c6aXn8k%!SEnHOAZ9d)C5?Qe=aa7`Ao+TR z^c4Is?#;>OZw?6i;)XfjjcZuR3At1}=>pgLg>)V4+5JopL!LYcjD>e4_o=u1YU=b* z?EN9vD^l)uo0ecMuN{E^moh)-MtG&^l!k)M%3s%DTQF6b;d;NmRNXy7H)3UPPLe%=|efzkuxH;jfS(*!U#Vk}<@-r@(s10(rf*-OJ9wPME zi>&jJ07^pR!}!|2u?9hakXrv(W)GAmYoafH{0nq#J@0?NG)3N)LD+LF{(1NS^-Vi` zh;(`ya4|k-+6R;>{%A6JgV)kX)FDCCN%ogJD;FV^^%DC4B13)3Iw?uqx4w3Pjc0*` zB3A0@YBP;iO63!;T45fF4lXv`X_@BI8Gm4=DDPU22O22mtQ>@I&v2uWN!dCwLM{1Y zuTlx+`1uHx!aK)bMK811U=VS>j?JYChyr9g$Vh%>hYoTw>v8%Uby414s6 zVw999I&(A>DCm|Zlyqa7f*9+H^l8I3D-iMJ7ehs-WA0{Xv?oWK+xD`TD68^bXNQE= zaB5T%3nTOG%#voH4Y!oMa{c~P<|_sEoV$Q$4swy&N35P!O0lFBsYgdgu_ z_h-umw)A}c?ySGuqzkRdJfw9Q<5hgIsFAv;wZFv5-Tx%iP>wNz(q%$W&^#*1)%#)c z%6{!G92(FWM6+ordWq_=E$VT#|D0a}e*Ar|5oT4@tJXs1`v7ob$0|cL2M0jc6pfDU zVj%bVRrW(+GV>Wv0?7iKOWLDJtQxJL6%Bxc{3O+Kxx%E0fag23~nGO&R3AO9f z+Yh|w^n!B5C_SClJpva3*cs7A)`YVeDxs~2Fjb0h4&x*tlWrbB6K@CgKYoRE=~(vx zTb@VrJsalxi!~dHc}cfN<=N9Lonp`QsCCCvVhvcM&u zXyWnX_t%J_ic?&{oG>yb^(PUG-mSkHW@cU+jzRA(b-rs>mfkAgeLQ~FljVowd)+T% zbMI5N-!S8FTc7zEJ(fU$;mZd7c4*sd!}R#^a`JM3l+M(cmxIM+KY7QD6X4QeF>o`~ z#=J$f@>=A!;y5g0$^kiR{dVDX&%x;$ywJ3(_>2Gh*(dAs;bo!nvh>bekHMjbY4!DT^1MXg*Rx87I0C?pI!| z54=Jv%yyA7P1@IA0Cw5T!>{eQBNgZOu${fC9e-gr!!_*_mf%DS z`njCV*#KWl`Yr111Y@c62l{f9Bv()+?}5dN{GZ8a*jcF?R1e$)YiNTsjk3%I-pXw=7@dG@uX&hc5djhh6WS9_@@80#(oo!2NHEKpnd3_FY+HH4; z>nha({lIYg=n)EX`nP~eLo=v1KDIuPkRu;AD$1^6023eV7;|bPuf)^tE2@XsN#UZW z-$4)4F{8y9S7jncz@@b0q#K{#5-8HZ&f4zvD{v}f2zzF#(niL49V3f?R^MixrdMO| zeE`|2S(RH(uNyxXV=D|sG%AwElRJosV*k`vUcU{q4?dOSquHBM3luZxde|^{gPiSD z1PAXU)8DLW*i716u*-!T*OTVABjUAs0&HoO;u(g}_e9AXwwywJ;QI;{Mv-Eh(n;B*!PeU72JI?3l#40rl{39LTl~%xiNJ&w^E>7w$q>^K;e-K z9I&9kA8+~gb@%aD9PG!2Yz0U6F4G#!jXF#K`;n%w&){oC%iFb=60tx$P0QP^_D`kO z$%K!r86NXE#5K7x z{{}0~2H zm2eA}GsybHG{kYtIjHMX1}%u^+xM&m*Hhi=3XKR_wdDcb7HWg&vPzv<;*3U-0I`@; z_`g+S|7O-E^&GqLv;-62h5poMoy#+i%c~oM*fLjM`8_Uf4FgvTKjzy<@7T8!hiin{ zcfUB>O3Jr8Y${6}KS|Iem31cwGdJRZH{mQFFR)Uk_!}#~rZD$YV zTdBwYMctdn?NojJ&rFh-N4nN&!r z%u$4jG@4UFRMH^*-s_yTPQK6cy7uwU@40uc*Z28;y3g*jKiArOzxQ6ld#$y4>7Ywm z931**^wIX8b*6tIZr#>f2Xl?m;_ZM05&FuedUbWiCjgkn8O`#p10g>H3fA0Iw@e6eH2uiR9%>8F#L+_UoUqE%NEAN}JGH~qLK-`=;@+*0_> zgXcap?&sU@pFOY1+N$M_y zzPD40)?*j#dAaJ8hZdN>zxcwJ6Hd( zrB&(+d(j&;9@{i?Slu()oU{Lo+zY0@TMs67#o9Bg?iL^*Xz}R;--{uiAKUVck= zzeAtWb2jcO*7&XgcMLmtb};_%1v6ng5AB(+`y7M>-rY8FkJH{L>{<*CW{4>het#M5uJZdry_x_-xbZ zZN@+J!$AAvw?A}0eyQR$zYZw0Xv~#0Z@!|@z1MGCSGCCaj#0#N(3oRqO{-VF@hbcC zGDGhuzNTk^_a1xm`LT^A=iB{q(Yv#5aMpi%bmM~?W}<^_c~qu&rb&-$$`z@!y?6bW z|9%IL}pD|S@R;-rQa?a2Li}L;Y+PX*D3^to>u5#PxA}jXX`o-Cg{eEq=&R(Ob z3$s6dbJ>gE&h7R7rRyk;n{{w!^**KM-oIhyw>|cm=p@wt-Wo$6XnA1Gr0qEuk6OIG z_(RvEzeZn_SF(<-ICO5h(|7geH!6Z!&c(c;-3R#L}h1PKH%G7={1W!IPgoa7Qgizx9pNjetPQ6 zzUQ_t{P*EMhaE^yzHH^9DXW$Yx#z$W-@ntpG9?$>z*FTlo zwY&2tXHHnPXU)@(AMf@{$$M9fTXo&te>FIa{Lm+t6+ZvECvtc7Og(gY(5yqL700LV z9JPPK*h*#Q{&VuLitPu^D*yKv{Tk2hmG$Oz@1HwvRe@`ZpEu*CnnfNQ|61ku*VJ0{ z$FPeh^&dW>_JvK(8u`E*XXalz=DRAYrHu`9Nuew&_J zIXJs}&w76!3;LD(xC&R%f;;Xxyx>RIsJ9wRmvIpfh8 zeSZJ&p0t@PN7THQv$!ZrPmPB^mRtX;c*DORBRug#24vv!p$)v@!Xul;j> zyZd(TKKgpS3IDub?ya3g3wURJRB6rgO@3czYOOUsq_?;Nn<*9%wH>2$-E zde=?fQ97q!zFLKLl)WO-nR9L3iDxvq?dj?toLrk-w0-l2vsbM7>*?vUMm*AL+kq>a zO>zem_;h!-#U;mId*$)PCA(MuqW5bDKPX%7@@@|sTjn>|_H&tcUmDTB;I6)VkB(bA zZRi`@8s2ru4~6ddZr;Mqt)7~CXS16}ukK&wk3G*WnU!PxvtnFVH>=f&&nC_^E~-AW z|L4;`JJNr|ALm#8XnE=1FKoH$u@CPluz9k#q)hL-CjRo!Q)ln)_hh>hul+M(-i0sj z>9?iM)7KWA@nW4d)sDaO&A#R9JM_Q58md@VEpo<`rX|XsoZsp7QpdJe8&YE1tU>v1 z8#8%BVHf2rvwptl@iA@kFWvk}rM|(znk#FhCNJu+`u2VZ6rNf2p&R#9{e8$8f37@U z;zWf$MK9Xbepa=1N9^J2@7YnP=IA0t8f|>yp?y1te0%u88SUP?yF>QizPGE|7I^+0aXWXl5<0k-h;Xf$j-T;cZWe;uJ6*R zU*|40YGe%@G@wg|K3PL%Z)^?r@{$V{J(xZDucCKNKYaG!@&{h+Gcx& z(v$Ob>bh(D$oH>0lJi~T!uP-3w(XvU`EJ};_3d@L8&0|Yks?2S^-ZZaOP<{EPmOoK z*>LjMZ-;Iu`p)s1jrtw0`TmzDfAt!5m^^-A>dU{k{`l(A&4+KytvdCZlK1-K7kt~d zU5(-Y)I0q2_us5)F?n058efe6Y3=x*%KY=kfj182ELfbAJ>~0@$L?xf2K)N=*jlg9 z;$g2YoZM~83omTDCFk{ycaGomDQV9uQ4 zhdSK%^O*KiDxF=)sxYI9HFsHVdQyuPRi?DP|HH9+CwJcZ;YAO$3Z~7zW_aT_t}gC; zwQAdy4bu&_JzVpH%Eg@-tQ&#|pQ4A-C&uP3qQqzGv}ypL}qr z+ou(+F&8{AV94sHXD{h=;)><#Z|ga&NzJVF->qtN~$W@P2Y}TOI zEQu65EMxsN_~*`s^b%$wHpgR1A{Ubeg5GbF&u zl_e?-d%ow4saIWp=S%bOpAEWP`@~BfwjJ7e?v9TAjYon3*VKOT_wqNasJ>%Bku6=v zlqp`i(FcD7lb;*4W&c-;-a5P37_-lb<=>Z`ciShmsx)6!wb|f~kIg%P={DbT>r3NW zzWDgA#~YNk?z_Kg>6UdDjB5Gf@Lk7V!2&+l;OK<#UoW3DeFm zHv0Hgb1t}XQmJPSZ?3=Z*;lI#dgg#p>y~3Po_?{-+FFm>Q$H%({o2R|&0jh9i{kwTTh;e0?KtB1-;ZwfzRLemrHkhs+r6vWPb-csIJB$$ z$*ei`TD<>or(NX^wtaZ`A4lrWzw3f7|6DtH`tS-jwi zvThemOP&4c6Ia(hJa+d*Rd4*K?sKb}UD0jjq|t4Q&c1P8>UVqjM;G>ASgJvhjTaRu z(y;UEcOOe_Yf<#?f_pn$enHV8Z-3PK#LnzZEBo$yEvHOs@};w{o_O7m*9Oj=pVj}I zqyBxze>t?Z%(puR_B`i@gV(=Oeaxa|1E>6U#WinKZ1c;6SEg+GqVW6oy35aNxw%}C zHtY6W*#G7QSN2+!zAvl8YlFueeQja=6G8bwO~0M|`T665F%uRw{m}35&Ftmp?Y^f& zzMMsa&sP90nB zd~oV{XKre7_>1mCDxb6GqI{2(Upk~$m2c9Omvy>)b@uLNRmaZSb?!oc!Oa`iAKN%; zd+9Q}x4wA8;j=p3xoKwB$qy$y8}$D9)_Jdf`}s3n>(7{V*>~@MQDk@b>*qhZ+wXYs z>je%LEA-24=e)V6^TIYw&fQSpyiX>rIQr%jM!&`D?<;cUoO_DREM23=h%ZlWT)+Q` z?LQA|bzS+T9aC4$uDblIBbU$puJ)>FFaK4w)YeDyH@&(<_3g9oXknHd{>iYPKP<3# z-?3Xe-gME!waYJAF!st4_w7bhv_v6qbMLoWHSYguHGf{keEAxlQ+V{QQCF5OS8~X< zFNO~&GwsNWBQL!F-3w;-nRvm^xlMn%y=Bf-S@*C1r9si+fAslui{Ji(g88bQQ@Bdk zPv2R0=KS1Qbq}v9vhSkH7G3`OcPooF+dJjb0u}1aEp+Rsbr0_b9kSB-vy9sw{`mQ} z^$#9->6g8a6z*BD`fh7kr{>L8Ej?Ix_sb0$KYMoh`Sq6;FW&#D0!6ppT-?2W$XT7H zY&hqsH}8Dv>xow{*pc%^-M{;H{-{>L{n_^(`)y76OMZEHk3X;54gEHic=x>7HJ-2d z*Zp5i>Gj3*!b^&LUuJ*P;uX){dE1+J@5=X3*+a`ee5cMA{VU}E?&Pr}8%q4r_2Ocs zS`_Rtre3KdFTK&|*S5EfUbdr4>)Q8Eom8~Znfr6n_1=HvskcXd={{fZ^FLb_e{%7~ zyEo4BtM<#SxNt?KCpMNp-l1UiB5mgvcxA%_lh$3^uy@l({0H}xeE8}1XP3BmO1n)n zys!4|TDtD9DZ$R>y^gPcV!Qe7oUYFgTrqv-r%TEXUU}0`zaA=KT|II3B^@uHvY`+R zl?B7Qx86CmRIi^O-SF1!`+go-cyH(ag}Q7j^~ps=w^w@Bdf^9SPmNn|8@=!B{tf5{ z|Ft(&b?Cc8D|9*c_=klWRleK5#X0xpFAmjs`sCUb&aMr!ZvA3mx%T7w?_AgE(>l9H zwg`Xl`d`+g!Z1VAuQmSMSqp!>pT*R`@tyw2cd}jUQGS zSjlQpXvF?jiz}3_KWgc_^FMN{cY3MpgB3q>f{J(kKKGZskI~V1^pOwVT3o-+OO0NB z@0t!@em}GFjLiqG8#Qa&3gb}m;)^>SX@6h&+E1AUmQ_A<`O@xkA_ zb)RT;bNPGcwRtD|oON|)6&-f-^DWMQ{?jMMzT9KSFFmGJKJwDQjR$MKQt?Q=T@$7> zpMF-+**lH}U-a+TsoTJ+44=j3bGwBzMhixxL(zNUsP3Je zuer0_UF|DeI&^8vx#>mSZrC~RuKqVR?Am(t?iZh^*`VwA7O#F&<*ttBEi1CL>SpJK zn-=$P)u!JSyAMwo{_Z=)W<0y(y+?98HJ))^;pwyAoV2dclY;=7u@yfpf3ElLn*28| z{cgaRHuImp)vjFX#>dku7OXh0K*`rTwx4jM{k^M>H|;vUQL7eDg@>@?qxY;FS#izO zlVf(hwXn#r-mhMo|L|jF8x`+%expr0R}@6q{c;1Bzr5}6)M^X&IYT-gI^5LrPfWPw zsW-k{^W>g#k6rS0YT;*(x4mfi%Z`8DJ2NkwSh~g!2fefJ>M-%=2^${VlY07S^>J@+ zxnu0aR_#|l_vW@+X3n~J9B!&+`#XPl@JRh1*HC+Fy*E9SUg58v~4 z=|37@)o?-WJ8#~xc>kSWef(94i;sUataR7&KKSE7^ntCv?qtDfA8fyUdCd-!>h4%S zw*Rd&pT2#^(uS+b-&?C}mk%yI@4T5qzW;8*m-$BZ@h|^$?9nw(o_oo~n;vg?;-95k z>MT09ZNHku&wA_7s=wxztW_%O*-}d{I(ufD^+W$0`RRxjPpv-ibid!KE^k+Fz{d}k z8By@9-G3GtvcJklrr)Smt17pxJ+^RHo1=q!*V|OP=d0EG^!B~Vf3|)sU&G4N1}y%{ zUiHaEzn?R!^*I|i^?2Q^GpybA;a<&e4==fYYSkA;eb%MnPu_)nFFV?_V%w$@2LzYw zD|=|+@@x?!Nr8wW}`u`UP;($miqhcPQRVGWW|p=Djg|#)mr1(xm&w=h=;t3VT-9aedpq6L&6XYR`M}KKJGM^Uu-9L=@{<$A zzp>6~dg*J69$YcKX_Z?)9I@(&ThrgYbavh0)mGfqVcE6!wyt)`Bj;aIY;^uV-`R4k z*;f^rZ^@$M651b<5Jf%MLvD!J#kwJDw|XtmUerbI!SY z>Kh$?SoF~5o)_%+dhKUD>s{Y&Z{4#lKG5%E(QEe)`SRl#-mKjVhj)9fv-|tpMOQDm zdtv@9=k9)Ef4dSptJ}}CD&luL=Rk*8g02Sw|M(?1@qM&Q?dVFqaNM9 z^RbT)KlaXRW3Czf^T>V|R{rIVb$1?FbN=xgTh~5z&bWNm@h1y!zwG9$G5N;LPFMGy z7~ikYfma64%vYmF=^9H5xBhlXpD~lxx4L^%pO%x;Bi*?Vtgf`BL+b_eZyx^p_;LQZ zrM_t}yuv%xDiwZz?wVs$yf%%B{r>F!!ymMn)waB!K79C=YM-s|)@b~yy0@-d^T@uF-8(f~JoS+cyStZuz1HLs^*42CSD|h0qWA9| z{>I-=^xHD3&54qKuiN_8_!+lX%^LRYvS|g{Tt4uppEvcH{#)bKU)=rjtY+W-G5pe_eXL*k;iwpjF$;~BOu4?q!(Y7}ovhvj`RxCGRZzF?+#+&&!T{t3!In{2B8r9sF=|i+cx|58S(L z--udo?VW#g(ktIiuXJ>*J7VAQ;}bgkbYj%{3+~4O?I1zNyncUN*VR)n!U= z9{%_Aiful>VqUv@S`B#i!sfLf+xN#OpKa=2%KBvU%e8A2`{B`#Hr?C3!@_R029&ty zyERoVX;JvuAHDor$J)O&pOE_dU{HVm#-dAmUHW|cy*s{L+x3q+4_x29RUWpiF}K&AYsZwYu=|O<<<|dn=~wVTFB(7ef7|Pk2~PI96&S9V>-N94db6SZyW}+P z(5*|(Op8mm!1juh$tesBY6iF!!@a3>;zYAJ(JW3hixbV_MzgrlEN(Q5 z8_nWIv$)YLZZwM<&EiJ0xX~aF_;zhG~(JWpxixae2;zzUi(JVnUOAyTxM6(3ZEI~9&5X}-qvxE+(CRve-DJzI( zG1AdAMwm>GLlx!E<3FRBjC3@Wk&fmv($Qo_I{HmUI{HyYn&;!gYw)o(jOd3M2G1vl zS5B|N^BFv!!SnHXHuyjre4^1>!b%nd&01|M{TPrAWJ-Qcrs@L@Ojv>SZf z4LomhfnYEa42FWiSTGn22BX1XI2eovg8^YMA`FIv!I&@@ z6b7ThU|1N83xk1SFft5=hQZh{7#s$p!(ezAj1Ty4qx+HZVKP2U#)rxHFc}{vGCoYkhspRb86PI&!(@Dzj1QCXVKP2U#)rxHFc}{v z zGCoYkhspRb86PI&!(@Dzj1QCXVKP2U#)rxHFc}{f9BINbwnsrx+A{#1JY(d+6+jW0ckTJ zZ3d*xfV3HqHUrXTK-vsQn*nJvAZ-Su&49ESkTwI-Wg2Bgh^v>A{#1JY(d+6+jW0ckTJZ3d*xfV3HqHUrXTK-vsQn*nL_ zgJm-yZ3d*nfOHs;4g=C*KspRahXLs@ARPvz!+>=7!E*S)a`?e=_`!1c!EzWV4nxG@ z2g_l6IE)X6@!>E&9L9&k_;45>4&%dNd^n5`hwE&9L9&k_;45>4&%dNd^n5`hwE&9L5LS zQ{jW=Fg_f{hr{@A7#}XK)T*imX z_;48?F5|;xe7KAcm+|2;K3v9!%lL2^A1>p=Wqi1d50~)~HQ;WN#XYyPT*imX_;48? zF5|;xe7KAcm+|2;K3v9!%lL2^A1>p=Wqi1d50~-bGCo|!hs*eI86Pg=!)1K9j1QOb z;W9p4#)r%Ja2X#iK)T*imX_;48?F5|;xe7KAcm+|2;K3v9!%lL2^ zA1>p=Wqi1d50~-bGCo|!hs*eI86Pg=!)1K9j1QOb;W9p4#)r%Ja2X#iK)T*imX_;48?F5|;xe7KAckMZF#K0L;U$N2CVA0FewV|;jw50CNTF+M!ThsXHv z7#|+v!()7Sj1Q0T;W0iu#)rrF@E9K+H(JjRE|`0)7s@c8}k7#|+v z!()7Sj1Q0T;W0iu#)rrF@E9K+H(JjRE|`0yAX9^=Dfe0YoxkMZF# zK0L;U$N2CVA0FewV|;jw50CNTF+M!ThsXHv7#|+v!()7Sj1Q0T;W0iu#)rrF@E9K+ zH(JjRE|`0yAX9^=Dfe0YoxkMZF#K0L;U$N2CVA0FewV|;jw50CNT zF+M!ThsXHv7#|+v!()7Sj1Q0T;W0jZ#)r@N@EIRI2#q@!>N*e8z{*`0yDY zKI6k@eE1PQPBDmVM$Eq^kso5^|H>qSi#qaQM>Y}uj7-5(j3S>w>N7}v2C2^=^%~q&|Zb!K_ee@EN2& zgVbk``V3N^LFzL|eFmw|AoUrfK7-U}kopW#pF!#~NPPyW&mi>~q&|bxXOQ{~QlCNU zGe~^~sm~zw8Kgdg)Mt?T3{sy#>N7}v2C2^=^%~q&|bxXOQ{~QlCNUGe~^~sm~zw8KgdgG+>Yh4AOu> z8Zbx$25G<`4H%>WgEU}}1`N`GK^ibf0|sfpkPP?{3-}R3WHmfj0V5`0s056UfbkJ9 zJ_5!^!1xFl9|7YdV0;9OkAU$JFg^mtN5J?97#{)SBVc?4jE{iv5imXi#z(;T2pAs$ z<0D{v1dNY>@ewdS0>($c_y`yu0plZJd<2Y-fbkJ9J_5!^!1xFl9|7YdV0;9OkAU$J zFg^mtN5J?97#{)SBVc?4jE{iv5imXi#z(;T2pAs$<0D{v1dNY>@ewdS0>($c_y`yu z0plZJe4xB{bS@Yl0plZJd<2Y-fbkJ9J_5!^!1xFl9|7YdV0;9OkAU$JFg^mtN5J?% zR8+#Ej1YX`z*(9xf-e#pWt8BH1V7nHe$o zA~Q2)5V@6^88!GKGc#`RMP_E?;ET-6*ufW>nbCt-u*}T(!55jC5ri)?Gh+x}WM)PY zzR1jsBSe>FW=0ae$jpo-e36+MP52@+GoJ88W@bboUM({-rtn2(W>n#e%*?pL7nzxn zg)cHQV+#>*nVHdrFETUZ3twbrMi{=x%#1O7k(n7~h^foWj5BhTUS?**;fu`7n8O#DnNf!?GBe{2Uu0%R9^(EoGh+{5WM)PmzR1jsKYWpy z8G-mBGYbX*p71g-aMtA?cxId=`NA_}pX3YAj8%{?JTv|`_={lhUzUPk@L!&SV9*c@ z8iGMXFlYz{4Z&bcSBUuvF=4?F491j&n6nU*7Gl;yOk0R~3o&saW-i3kg_ye#lNVz4 zf*}};`3o_DA!abd6o#0?5R({U7DG&9h#8ifu%MgF`*%5 zG{lsKn9~rG8e&#MOlydF4KcC75DdoDhM3zBlN(}oLriao`3*6_A!azl6o;7O5R)8Y zmP1T)hkyM2Vzxs}cZm58G2tO*Jj9fTnDY>m9%9x*OnZoV4>9o} zWuq^uO_cX7-7vkG014FVM@(>G619y^av^>PZ)WDEzhdjhW z*1!;7wnEpy7rtzTuz^cXW|oIoI2#y}ndKoC+6IPXW_gH(xq%@$Lh=v`c?0*Ttg~DK z!r#D<98P(Ng~EX$`OWeW3yTByv8=N^#6sl2kgT&j#KPskkgT&j#6su5y)LUE53w*h zFeIxX53!IsFeIxX53%q%FeIxX53x`?@N~#($U`jb4h+d^$U`gy4-Cm_$U`g~4?ID< z8p86x7yiw{^S~FLS(qO9!mA-%4}9U@ENlo@GcKzk%COKuFeJZOlwo0nU`T$mU{FXQPzU5U3kHQ3f+5*K!Jtq>FeK|N z7!-C0hGYi?gF+C2#v$u07!-~OhGaDagF+L*knEsfP?#dnTx2x_gF+U;kgSGaQ1~Jk zlGP9l3S|TukgSGaP*@`vlGP9l3ULHOvKoRx;f`QPRzol-^bsgovKoRxVUS=*Rzol- zBoYkCY6u2}M*?MyS3{U2_`<(gxFq<(GYgvpUwAcyPl7M}n}u!;?N4SF42nk;L%hzm zD8sg3PEU{FXV7?O1s3<}Q# zL$VrzL7|#pNY+{2L1CM~=#KjRRu%5&O%nf7hVmatKbX&W+ANL3$L?K zR^X!G)ezDOzR1kcJ9vs=3llN=L8n-@5sBsh%(4}?I9s;j9Y58w75WUkE+U)U0>Yrd zknD%t0z#s}kgS^A0>Yz#_eS7?RbHTR^Bc z@U6*e$Sol38w|;6$SoiQ91O{7$Soio9Qf#XHH3wOFZ`Q@hl4LXvoLY+g;ztkIQYW9 zS=cym`pL|43kV?xL%hyH$-x(14I$;=3;$-J<=_jivk-IOPUO`PY7V~0%%TkoI|oDZ zn?)NIf)0jcX3>U)qXS2!tcGaALes&J{ASUHg{gxfSq;&Kg{%XIr~GEohJ~+#Az5d! zNQJV4Az2O4hK02Q$EmEdXv0F>!H}$mXv4zY!H}$mXv0F^!H}$mXv4zbfp1n;L$qNb z@nA?+L$qPx@nA?+L$qO`^1#O{t0CI3uz4^ft0CI35PC2qt0CI3aC+b?memk#SZF;M zlGPAxSeQK+lGPAxSjasXlGPAxSol3~N6Tu6HY^k$49RMUHY_Y349RMUHY`LRxV3pT zgzAGY{F{aBgD*U@(0%ZQS3?Lt_`<(gC_nI%%gmw;GwUY{L%hzCdVnvy8sZVg7yivc zyMe!**I9@+_`<6p)Ej(}nME5G_6>&QH;Xnb1ROZ zRzu!FA?#pCRzu!F;p`y1BC8?qpwM?({!53aM4S5HJ=z}5o&GHTk*9Swg8uAVb-3PHV`OWeU3gZVuvd;1j3h4(!vKsOZ3hxI) zvd;1j3iSu!Iav*P2ZjBEAz2N12ZaEHAz2N12ZaNKFrTc3yn{jm!jPFqR48c-bnExyD46(at_agHQ ze@4Ih6!Q$fDB2JFL-gbi)$k88 zGv5OEA~W+XfG;vL-vam|GxIHgaI(zIw*bD#%={ALi_FZo0KUk~d<)=<%*-z_;?puS z-vam|GxIHgFETT~#P}jJ^DTfcGBe)-2zblP{1W4f%*?j{zR1jc3*d{)%r7y%$jp2T zAc8J4^DTfcGBdx#_#!j&Er2gFGv5OEA~W+#jF7y{%(no($jp2T;ET-6FEPHz%zO*r zi_FZo0Al|UwCFAD}mO)GlNGLvW@VCX9i16 zzVOW8fXNr084N4=A~OpHg{%a^gv=}$Gz5b}R>Hp{GYbZVtb`$%SuhC31pki;28FBy zPKNwu!Jv?pFeJZOFeqdt5IFeWKxCF@77Pkm3IC4FEEp8B5{6`E!Jv?pP#!~O77QXz z#Qzh5K_M&QUzT+i3<_BZL$c0-L3rbN9>E}--tt9uP%tQDB@k0&odttJR>F|1vtSS| zL7q@BC}bt@T4Xf@gF;rqkgSGaP{>M1IFR2g7=%}V|0e{4LRP}REUO_H6tWVAWHkhX zu*P^E!62+3`68Rzol- zWF`1Z`8VU4iDt&DApgL>8F#LH;nl#6CSQ1F+!ykNf3uL4Od%`bA7p01U|hLH$V&Kk zWM;vjq=aBdW)=+M6aSA228AmG@{s&y!Ju%3FeJZOFeqFh{I_K_1cPxc7vT!w-;tRG zgTfWUkjyL?6s{0{j?63=6s{14WS!+56s{14WHsa+6s{14WHkhXad{Wv3V|jiGYbZV zD}*7LSuiMEAq>gPfgckatkHLf8t~LBXJKg)k)R zEEp875Qb!(1%tvB0{u(YSuiMEAq>fC2nK~KgdtfC!Ju%3FeIxX7!$wpTp!vcgTfWUkgSHhgTfWUkgSHhgTfWUkgSHh zgTfWU?Io)r@1SsnFeIxX@1SsnFeIxX@1SsnP}fRUL*7B*3SmfALv&H$3SmfALv&H$ z3gI@D)sS~kxI!2TSK}0G6Hi<8KYxm~8I_*-KeIN4Tfo+)Fbqz$Hl^qd9tf6A*h=`q z`yp&4eBo6Swi3SZP77NJUwA)+t%NdSGPB$QQQaGqt`xQs{y}CIi&WT37~=g9wi3SZ z84|V<-ZI{4VJqPapH5*b;R~N3VJqQ_%q+Knu$Ay8%5RoiK-fwcl9}Ze5VjJAWHsa# z5VjJAThOm|Jg@3cKm7tr+%z{B- zD`AM&S=dVW!mA-{C432g^QpI+5Fh`&-DsNVYD0xwRNT!DOYRQL&S}`A^T6!ZS<&wn z?8mVm(W^nM;DwP)K3uAiWNouiLu)W9>v~jEmy2i7+MjZh;$P`7s6+35-Q<5Zk}CWS zH=!9%PV<3X8Vw%QyGP$H1G7*EcuAfX)p*7?oKX<940Ylq$g z(b`9T1xa-r7ojJ82x zIpQ?_u7zU5O>>$zsh>svU*$olG>nqPgK~3na=Q2H(fU8w z&cH5RIuC5up>OAQy}NYo)@1;`gjI`k21xnhoPmP|^yu5I-5rBF3>eg9P&=#LfF1+8 z4}T8e#IQWLB)OYLA&aT9=RkfH|?HyJkD#oulUYz!@> zmd%FGC>L28iVdf0HM8heIz{1ckhW4(&J*`L&b^1f{gmr!Dfz9u;m8ckg`X|6L5oQwSH2*r={elhwxCN$}F~JrN}%3mm@`%Al~s5A7 z_i|O6P0wv+snb9<^Z}AGyw`BN$)48!UUPHRQvc5vFRWT0KVoSs1$73bm=y5?q0XmB z-9j~+6oQEQZnc|hqycROvej=li)}k83R}X&ND)aI#fehzDCsP=ji+1jc87LQ#xo9M zH$}`da4=KEqaziD&OC^hDMT@}l$&ofY`AIQ|4hY}lR~MG-Aj>c8a%`lWe&p}Op#$v z>Kka$ddePNYe@hn9XF%cqNReCog)5L{D!4*^i4e#7kR#wT54$4E5$~L3zTu_ED#zG zHY{I|!c$$>H6FZcdk4WP>8>6PFqO*4_rSbNyV^ zhAVY75*wbvY*4pTM9hS98X7D9#1-#ps+fmYISes+#1sczsjZ3JAn>ENk&zA8d5V}s zAmT%9v$VX|A}iE}){<*0Y|zl(n)#etur=Y4Lv>u3AZ9l5uTw-LN7fNuHAhRqqpQtU z`&z;{Z$`1PrzvtkBe4O#6)ziJyc89DL|Ow3P)+qUI_PFP0p3bg4Sw(x(a=$Y6`r(g zxV%%8#YMgsa7nb>Z1J@yO|dX=ka4pSwgRZJ*$(_H2sR*{9WE#O8;Yu}v183mIO1x@ zS^%lR6(sKx@q3YR3zLkzOF;^W{90~yh-@5jSR?d+D{gb8x)yJ^Jl@dLsMv%4k9We3 zhf%P^b1q&rGD=Bo{k>{QV*ih*#s3>FKzJIqHx9PzrKp4+=)oy)EVGd}n8KKr2R*jE zmDgGr;#6!m%Wb)^x1pTl$%d;1b=ToQ*Yj43#kP%HTcNClA>E9E%j1o-RJc*;W{Vzg zB&DWM^;_c&$JJ)z|0%p{A)73tQq&CrIr%BXpS6@bdcn+UM47O zHvXSNT?@%JnKvA#8$1|Pvq&M871y~7n+$)#6%pupo69Lz`cXq-QAVM`Ur&MRh6)d% z!v$3A6bhE$ZwK)rO%2e{7IW3u4!M*WrG}~onk>1GjWAw<=y{6jnxNhY#Mc?yNe_2O z8p|j*GGY+Yhx-su78TapC92v%kw7AO(|%LM z5bYy@MB_;a7lee*jFKah3(ghZblh*C^Q5SNx&E8(CtT;s7${N#povDIU#iH3Ock&j zqNoX~9cX#2g^w7Hd6J7Ms8xp0H%OTtbQVNJ_4g)Xx0P0Rn0b_0ZoJ(n zIzWM6s$GRl2T&YvlWQOOC5;8x&TMsuDHcg`Q{WfZIPx*TX92XekNf&bnt7N|l3DEN zMvFO_hVQEw$1pCX{r_!;H6#dyTX#@*tuRBJ53gjNv&(W*mwiYO9Nf&J|Owo`uPMN}0pN z8D^NH05+l_kXmzwIqWXw`401$lci>YIl8|iO^CQ0dK1hcwG}`!&8((`iJKYahSwC{ zB=Qf#r2^_H66Hb6gPN*8!5mbMB)3wStC~@E6UrEI(?YTqE`5@nI_yPcEj=%_F#cz% zxmsa*enzR~PK&e^xze=PR+8>CrG~~bqb7Cuda=;|f!8ZZYNd{b5-BjS|4o66QLfY&`3*am#*NWyICFDpcnLA-VeMYHKkOf*9^b}G} zL9#|V0adRh)zs9}X&SoG3?k(v5c9(N0T~5HJulFy@mf=;7i)xaQz_~xs=YY^jYX9J z8J0}RC^bqS;JqRyW)$E?y#wqw{jGb1JHewAmWIeIHpod->_Jk6aJmsh(LPfMmWVQe zA}oWED0EEXpgl&^On(vwIZc(Mys-FBM!_k}NiAV0;zgyt&<_Aa2KpO{s?L^Y0y8bF zagr#tP|H!LFh!-Abf=al39Z!9WUD1NO14^idUcZ2N-a&KCjLBiJrSwtdP6e=EzJ;) zekp@MVWl4B0jCPcq>xehaunGFg#&gcybY$FycHH&>0}725+w>PmpE8yxWoPfmpBf% z+Q|@>V#_QyQC7&0#(5JcA{(+8vQa_=j>K^)ni(Fl* zAuO32VPk`GigYMaQK7qND|SNdw6OkP#=Rz&Fr_iasc(|T z4DO2F1*Ho*XFTeykSMm8*n({BP3%OmmHC}M^b%@kg}O?3p`C1GbE6t4(!Ypv z>*$&O6_QL7f&x+BjEuW2VpH_v6scW!%u)1HOK5W_Umewsx`ZT)jc1ICwnJS*fd;BD zWPrD!r-Bw*oQb=wtefVck`NV#B|Do+GWfXI(^NnVc6Qp<^CoApm4>zvR=&@;+bEiw zqW05~zYHmk2xn7A=a9)^=@|rM(>*xLslizMl%aHiu9@rM zaZkF^m7Fx>)_`*eP~!?m2OcE9Argd85IyLDo;iQv`<Wj0zI&htq)R~=JZQH z>69xgalk@_w-i@5m(rrV<}~@vH7})=q_RK+g-Z?mLuhH(Ti$DEIC!pMk!rrzP*T+a z0+exA$t_PAu^E$X3?jKn)JWfAC_3)n-sGj*9D0X$I|miAg4C*a0ZxMJ{rS z<5=X@-EjuC^Nt*C`P z?Uctn6r9VZp{E{PFJL(6UpEa0Jwa6q`*$ft4{tW6u%L$_c&Oxb(wxGQeAd;v8b~YX zkRBSKAREKWfa1RNr{<}DNi1Vz$SH3&6uCtfsHF6wt}%EH|AmxZQd;0=$($<_wPwzI z&LhEz*g(acVU?gp1B!8IpVSKurn;DO)QUQz;OGVl`aBBNOEqVMD&@fn)xJJpl7g;o zN`Q8#hJ7k&p9E=LRC z6g7F&{{>InZDm^mG_r?Ego-q_|5AzIkf5sBG8->AC*Eu}K0SGW2DydQah)FqdR0Y-s%r&K@Qn(*t zC*%Se>ed9N2rj`fv@rHTV$)trO-SoD5*iagT?-IOLf{t!2lR?Kc}vMRo00L*1T0w%bC* z4ywpQ{Z6Tv0ooa3`}3HEongD>Elb#NrF+eWzdWGwr%0%QxHfV2Kt8w0ou1bzV+mrb zL&56y1R}NtH5EBTkeeDxp|~3Hay3PFyxj?rV0DuMQqD{&>I_8%&B9`YQ=8ks(eqwo z#Rc)5T;wV%f`jTN1u@1&XX7hfdz~%Gm8|YiAY#)U?n1|jUozODo~Ae3X}x4hb&ZO? zrb$|{$nc)0!R^xBBs-0VOsTF}NC5R=qtkyo1DrYBiKN8im$iWNt6e5hXM<c(ogAc4N5v>(9c<0OE~6A@0#p3X=XlMX1v`N+^Tt9drB>}vVb58i79V1 z*=*r(Ap_dQVW;-KzLCdQc?Pkgt2~K^4L^$FCbtnB0eL4<)wo|d?lj#swIqEdp-BO6 zw)mH*$xgW0n){a$w_2&C**?5zu(NH_QmwFmGv$d>&zU@L#gXZRlP!WiQb}#%PykYO z$mL3-9;dk0;w#O;OYR1Focx?Ybdo%Ya<6VxAn%vhp7ANy-1ba5JE}Y~@i9{kO(j?JI3(;R4A|x5K@@TuM8Dc{BOGDkOfNGrl%#+Zofch!n{n!)r!@ zCuwVF!LHbDk~$qa9H6d(hwFfsn?}mC?$&o=i(3OB&C`(EhB}VaA;^uJ9f~bAq6q>$ zHMVHClfnf_%?pqKO;l8hg5mZTlZ;+6N7Gu8A-u^VOT5{XE;d}{Ab8+4qiTYPF2vdk zt~gM+@)qD3tkLK>BPUxzPccK?#=wR(8pb|hk07m(9Lwky7*bYkJ+HRN7EOwTs@oWd z)VR|OVk|~dTku982R?82JHv$@?suZl%19_N>^+Ki!zc;pMuYN7ts=FzMcsrNCh8^z zvDj>j+C%%V4a)PSdF|dAUha3vpeW6r-~M;k{0S_ z1|jd72rUQYfCy(SO3 zkDRgaO{aQfASe68e9>O+gepzcM@x0aLB^)~-*l=8;9*}}lu;!bh^BTKS>p*|VN>1V zfP5~L^DQg@8xB{L_rTwpvjAX+t81B19bn~dv*6@(!?PWR6Yw8!Oc+5PE9)5yQf2`p z)L=tEOeMFV8wE^YlA^~oqnmo$BabX^E%6MV7dqw^87bItQ;{S}F@43Bb2MDE7HaMh zdKvZ3l}w0+n*ggqW)q3OVFEDNJt#kyjjSpPsK8LuIED}&bi_v!%@Z_eR|zj0&KEk< zA2h$ullB`9a@BrwIGj9A$dRY*4*je!N_|gbzbbY+A!I}ukP5+t>cS2P*=s5UptV;u zal4hengN|OO+-zEfn7X!1|o%Io4~D(TB=%J=Hfmi;!@J4d)P{GRee*BPC(CNoR`d0gutljNrfa<$ebf{U`sZ@B*2 zYSJUFZgfD|2h`7=*lZpm$R2dIG(b+e43b8*)Y8L894?o{xB;p+DDF3iPQ8h&uxAmq zRD`mIicJ>4t}APm6EBi{$#4v-<#xkL|IF5vEvJ-dJC7M{86Y0%=^?EPju%A}QB?g_ ziB1VsJ}6z}X0hR4lg6<&Erq8i)hE2&{Di0p$k&P;kHsdB0~sc8z)-8;Fg$4F@vWZ8 zp?q3$TM0h4XuHFtB7j2VrZ9Ng)N{MTqfR8o1oi`!C{b)V`nH5zhv*qc2|nKolgucO zGLJVr1IGDoONtMwn;pP&j9>wAdq8~fvvHLpuMmIgP>n4~ZbZRVL2&qzRQt_>Tj<|I z^)Ap&IZPcz;Yp-qX!(rC8=hpAsyiNtc}C1+;^9LrK5tTT1L z0}(s6##wC2q1D?OPn27!wUOLZT9|^upsb>2E;Lpsu=-o238`hKy5E89cWjyQe*Xt7 zv&0Qo>TFO?9cnTt_=dX;?L_|r_)aJ~NR1Q~7rKaTBZ}f8S3|_6d@Dbl$GS_Vr!2hJ zlH^u5Jb>KkkfO?^ACOzt=>j73H2tme8nQa z3$`0Bh#+%OQB&RUKn}Xab)rGn1=j=aRUH_cnGSj^dalYCRku8d1&1+8g(d~z`umj= z5w3Q%K_#W`*;3L5iKg(p(BFB_*vz!w95+(Oh1CrYOe*_M{v`?s<3gj3CTLEEzj49q zsiuauD9B9-Vk`AE5*vgML`$MHBNGOSkHUjmq#0${Zjn2|B2%|Jhy~|xxQUe!V^!rQem^GLlKp0l1kC! zf(c7^X})B!j^RUYc4j5eW(mFb-RODZdP0@w6Gy+knTJ_ z+-nKtx=e(76*n6ff)@_H6oS{HVNr&QE!10*{A;K#EY_h9^LG8Xv0P zD;wCLLFnm-O*B5Li*7l@W{e8EAYE2Vhl}iX!XtKC?G8jujZeAe)^}2~15@4X0IC_P zO-8vT)SimkgHx19i}q9*z|C4qIze4S4G#spkyr@-d6fE{hSvo-IdC^XUBjzp=$TR# zncoS0b4_)-0})#|*&?>?oNVNpsEtsZ+0)oC_3pR=F ze23)yR(scg?lb~PRC&=tfB}g}2>TPd$(O1peNW)6HbT`M59m5ao4MHdMtutk2LA_) zZ?qCs>gMXE2b42MJw!tW6W!*B9e7aQw7<<0>cLa~i0WEnv16AaHOZ#hi@LiMlf+iH zJfPhMvf~UJlNg%tF=?-wCxr~uJr6`|$*?iO#ilaCx@Xvs=UiP{)Ks@Uh|vw#VyL9@ zG5-%Jsfh<&$zBt|W3`0^*IsQ&6kDyW@hc{-R8T@t7yUosN~Lp-IFZ7Ys&0EgG&LJR zZzJq339}omFDM9%Dt38ap$f+??Yq|h?6MdI{i(<%{hy){x(RNz;x(g;16Zpj0>9KD zIjln$RX@n<_L3O{52N39ZbCRz-THupPQz3+ku?{D7`9Ul=+^9AYnb7v$Mcl|l`^CJjdZ3ou_Hu1sg>a?LMh(EJ@4G?iq9`s+ZSSq{ zZ(=CtG2tPD;7mz&la9K&{Q>pHM%sTiwY8xnI_d!*z@thDlzGm+&m?(>@gz^Oy8D61 z9batJ0-o!-=zOy!O09IT(e9=ZQ9&saqzO}XDi6Di3adoxGV++YmtnVgv(=U;ip44( zG1+XY>H&fx4tccM1a}mN*YZA(;jMPDsT&_qeqh+l1^Z26gKkgtbi>`w$N@BU^orK=sEgc5#)-Q50VPe5W*)09H~~~D z9m_z;RXX2oiCQ|Smx?{NKsQgL)&&|jA;5xgnMIrj{Ed3DUS6|QGhA=co+nx2>b?ge zHyRz0;E)@o7V)2?!a;C7cRYN>6XjNt*kZZ)6_4fC{}oRZT&cBL=yqUIiAiJ)q5wiz z@PbG#)aL|w7aDJP5~)eu{y^lWVoe?a9IrRh1yQ^Sfdx}jtBm~*NzPSu0|b)XCl8Yx zb?~u$%9Pdrs3+0))cp@ca5TEWm5x{u3yzY)p6%u_1weVHC(5mKv)MS}E>t^lF@{wb z5j`Onqppv5c+!)KJ>bx)o^Uzm?0t~!*5CV(xZP?V8)6170!#5RMOR!Z^(@%#Iboop???dW&O<)s^^kxSeZSHmb&W!6+w4FelW??h@GY~C-kOKU18tT z^9^T!C)(ncy5|8hWW!At+ss0CEDGcN2W&IMNS$0;(b~j9P(XFu`Fb-sFWT~O+$o(- zhrH+vuNmtvO0SazD@!4^JZ5l0z$T$~+0j`K8-M8RdpV7Me3rWR0m0jV$fTlLC?HS4 zVgppps7jxnk)tqFXq-krK4j0Rww;J<4jTA~CxTq-)aWJjMEH98U?MLogjdH4Ep-nB zs`>B02jiop4a8VGu-QZ(h~(&>Te=A)O9aSE+-b8 z_S>}ebT)!0VJf2sSY}kASl(49&V&+kl1Nb-gIanongP}9f#B=YOI>Jf)QY; z`yilK2;#voOi}T{rgrJDRD3Fs4^>82y)}B!PNV3irEY~l#gnN7VGMJ~?!YNQW%7fx zo~NB*o02s@>akHSmQ>j97 zMS>WkEif#olBj;BNg3obib1#r;=UWDM6IDn7WVR zln#~2pbS(!Rrl~^OK5&$shcDa+s&aw4f069Lm@jJMptxY{Y6*1nPjD^`y|MI8z?gz z-s`Ni6IVv>dp&W-m0q}5ZYF_=u|g+6^Q?tL!IcV}gwss4G^1A35>BHmG|SX8kVptm zjHao(B!n&G@!+ASBYck3)(YYx2@Pi)V(aU6g>9PTfP-g6p}?47X+rp!LH45@EK=A# zC~!n@c6AM>g;zRhFYv&biZYEb#8k4!n=YxQC_w9=u7>uhro@#{6QWROQ?=<}JW@3n z0y$`4s7VTPGrSmNuF|AGKLNJGUCRF zFQjnOBjn;+nlku9r4?eU2?OeW39;A)i2Sh296V`h;&USf)6g`88pV_#ctS~a3k)B{ z#g0@YM2WG-#27#+byGqs+A{_cvQT1=RTr>E8$Z8?G}31LKAslVCq zLKuiDh`w&aPzxxCuDQMr#WexrO4ZFk{-H-Np(Z~IIZVF4>h+$KZLqzLcHH7qTo<+7OL>#SqqQ3#>G*v z*GcA?x@&^rz#b(y%XZ^}$C=lDyAx7$P=-)-or}~&baUwCW~oD?)Y6pv6&~|Mxs?i= z0gc50sH5a!7~voQhTP^bxmZt?Ez;5xl58pZsZv{@u27L>Nx3w@5OF;Gt-ZI+NN7V# zRT&cmH^Gn+4IQK}q%7cX?R9hrp7fBRcGc;K&RTj{&<%V~?Ui&$o_MD#RW@?5InZZK zm}5}axF##yPQ>Wf_%So_n5k>|Au^`ia(>K+;+jT*5aL1wpt=&r*U+`Ax)8tANm=UF z3G$wS=H>bDPsw{mR+*+5#?iH&_?#(yZNyi1;faKI(L=JH0V0%x8hF|#oC4v>n$woL zae{~~#3uuUFNm*wIUKs!)MaTcb?*deR2h~hMXf98(22&LNX^kVhyo&n8r@*)DPA(9 z)WU%drwe(}Q7Qz>V5V{G$))UjdXhTBTP>k}fCc+nEjA^Xk^xHTIkD8Z%so$29sTsg zR;p~+ZP!4|gaYE|fJ9VY&%!GX8f&0y1)%UUr`SmnxepnniXC?l98JUcrk*I2o`9x} zxX{T6hnbSs4I48MU&ty;^d}=8avEX_`$NPI*&mwLH;etrAnIe^RXJ$t1`3V^{~}et zLAeYQms~8o?xaR+dNQF?-9!QRH&j$|wt)77WkPs3@URBR>7!am+VXgb*q6NRO4SWd znF}>N@~={sEy`axL}Aw5ze=LhO{ZvUXQ`Vh#G;F<5si?*;MU&N2+3WzmR(h1j=GK>}ibaA`Yoy-?$E?YYZv zJSjW+S#TXH-gA-LaG}mnNjtD!=x#$8EoEt{#zbBS?6pQV?3kCf43A!G5dbMi4@Et+CvcQRyPv z42AEIa|QcE`;1ELcY52f8k-0n@|=*UV}>CkhX_Efqh`D8m_JxR(TrLT16olo( zO1cFjG!6Au_Xq-5PHLZvx`~2`o_;P?hVm(W91Kbzbx^n1K=m8cgwaw-kDQBcg7O0J zD)0@)1C$kqI3FR!i3$=!QO(w#;*`+T&r&y05V0lwLd4cR{Q_m&)TRmOJIdXLiwzOc z*aD{_%vAA6_wZm+wHI{@1xlw1#ilHA5*Kzjm5v~gn}NRNFRhAjFYSTQQjs(wD(0uHK-U%#rthRvKm4-`If3+o1 zZe>K2&pGT+Vkn!a-sPaVoAzcXc3T+%r)+Q4wI;hQ*P86M_WqXSW3G0wvEZ@4g$38% z-;yl1T3-u0jl;i0R1Z9P#Nc${bl2XcO67)$w3@kCn+*=G>Zr5iME3A0aT3;dfd2|* z$fs>RYjKJ_mf&}=Pwkt~#IUl$!tzaO)X3`6w{yRaJ+tgn+Y2=DvIrVYa+(BLv|{)N z!^jH%4f;nnD=gIg|NOU=P_j_J)_}U~pv^Tkw#K^(0~Zb*95MV4Yia0)u1h3uB~}!% z)fKF%wYQ5DR&>}&xoFH|LoIaR_jAFZN?RINQz6;m;80fYw($Te041_Jh*lt9GaGx2 zwJ>oGz@E}G*&*I`2jV-5V)b@H1#4_?fI6ry@|s}yqrj^l7A|*Pn1Mzf7dh?N)#%XG zFmrnM=smQ5zrLMw`ga&Gs9k-oGLfJhCRDJ7+!iP|E)toLrfA#Hld#x? zbo2_;Qa>kT!{|{%TV0@<;_2wAgA0wt#;&K4$fUj4N%wd{g=*5mDfbwj45E0WW-V3n z#NSlrF^^xb45vKY?WDR;wz@twN?}EEJBZ9ci$%G9V!mR#k%esJ@tvlY8_fY#y#Z|y z*cF#~3~#hUw2^~L;dPTXoKiaUj6{V`STekoTAGM0CYao6T9{xN_B%4ck_A^fsx8!g zqoxCFgP|TG!V>hS1~yod+-f6CU7tFZn`%hlEN@kGwIOed-El1B1#UZ$@L|YV1{S=p)$nBCZ z71uh;?INAW(X?6&mkCN1T}rsPaQqfTd?Dag>rB)sy3Z! zq)=qRLk?;vJ5}JPH=KyjdJ-e)O1G$dYeF?JJE1f+v~$u@BJE+F_H#K1R4x;ZUc)HE^wFaHP|wCy<|QMDZ2Zn*&B9`i8_VMh6}z5A{a0 za4{;SPRQ6o&rX%xh^pXRN1Kgj%*OGK5*_f_%H!uuA$DT1UdlRCY_~}yNK}9%j*E}l z+~j$qW-=~dZ|ZrmMYgD!>*e|i%S2t48axj87_i%@-H9&GFjA@kYBLW^;r=)`*tko%ev*<#tLg|Vq(b3r*#oOiz09cubV z-MVqFd$8vm+x#7^(_62Fx?WR7h1%=XI}z3_C6x?qJhZE>@@|inDGSs3L;I zrI7Xl5*Rgzazfe*G@3kyc?Lx$vdR4fLYulqHI*X|$Oplj zH(BHf&Dm{rp=!gmiF%LM99vIyi_;#iHC%T%^x(kc?bV)P&m+&<>Cn>Eb*c^2We@O- z%f6dw)Mby4yPkBXXx|g^?rn9AYBUE+MLrjbn32>D5)z0dfI7%}?)bl3o}|FR5L4Z7 z$ht^V`~;dhxnE55ghQAVe+M}JdR}pKw)ub}OR0 zo`Yr#n$mxweJA0Qt~qs?YLloRfO@p=c-aCRc68Ozecur)R!7OzWvWH&c+VlW2ZYd` zTY;W08#7_j2`(9cScP-ypF_MC_C$r<%2CdhJW;^EmX}<3wPVARv#r#%s>8;%D0N8| zOMnbzqC z5t~euFeL+bJd!ODQPMjlBZ;@Iu2pTL$AFK6P4=jRi_o^=nIiHV^mo_KWBo0|W{X=Q zi3FssR!x#yNJ0sjo!Rip!wo}!X+Z2uk{hllMYjn`vQV9KksHiTA9NubI}LE_!0Swq z+ru-i@;j=FRmb>d<~I7Yhu4}8%U7@O%y*=^vt$VlH8>rsty!C^=>Csj8d1XmQxfPjELMQ zWQ<&K{H?v*Nu)1zvFccElt@E41UOn*ZX9$Z=H#uCp5dT}%37k>N@dMK{!v)@fs>^n zDmeO@RDw{8t+qwgrK&}2VQf1{8wR;m3&yru>LguFU8vdyBOhH55k5e?6x&SE1&hox z=;)~GtK}(=-flG~0#=qvQ$tsBl);qTLYpF_c*%80EzGdl970i7YPQuis%@5B8!Ef={QaR+410Mr28k9g8Ot}ag*-Cp};4;?%@Q2es9M z(h^WlS5j8+c;OUiTCgh$86;`s>dMqCG@MCc9RwDdSj)PWL5Nw(YJ*!{nOejS_t?c= zBRGa8^tz`|f|#BlwK5d}ZGqq)r|`dpUXD?Ba^i1NSXk3)e^C@Tk&>>iOigl|6!;|~ zAJP#F8#Go!$ra7Wiz4qyu- zk`i6xn@>B=JF#w+?XE?B2DK|&BWr8JvHIy+8rJOcXnf&U;?lqH@`+0d+vaPagw8?f z#n^9!-AEW8=$4bhePIIpY(MShqPGI{m3`l~p$6)mtrRhNaDWr&ZQ}1$k66*A(O#2? z(K3m_bx&Pe{wz!V-@pI*9^ERJ0J2;0-&`VDkNI2?n#!V3!|4mX1lE(N_N zZ4)vhS2cz=8b5>k>8pP8nYYNE*uU`!TiA5gR?!@~4kJSG)HA$q6^11q_CQ>>VcjNf zl5A?g3287v1`3ry8X#owuUF0fLqBdb@n^&4krS~=Sb4&iU1OoH36JcRHV>*7S~V%&OHL$|<^J;q>?ltH_6O)DXTZJnL0ofjt|iHL0WaTA zPI23e4cxCu{bVL%2hSNwgsNayxq;0!_bkqSa`uez6#IMLU`JDRKX|lB;L0~uVWfIe z>Vm?70Y1`a*k|n;oMPc47l3TN_0^wNhQEpC?Yx-_T0W0v0tsxH_~`TAnKYob*~TZj z_DCw1tiuEMfg`u6MoGTj03H{8J({sDle z-?-1%0(g`r0lco7@R_2gux*14RudVTSc)g3OS(4L*Ya~&M%OtmN{p!&?|~4oo4P8h zRwI$^Kni57umxPlJd0+WjKkw@KS_<2HAYAnr1xd@-q8_WBuVwX^ zcR&~rnOvkY%IJF{O-09rhMRt-Al-Ui`1^uGCxjWi)%WAN&pKJdD-agldIh_EiLn)aE;YgYU-&!d}9+R&xq z5sRtl$lLvrC|~ud=>E-mS1ojk%@-~;E}^F9BnklIZ$z8uJ;DBXO*MxHZ6?YC?v1OY zm+Ejc6w)id_U{{74?EGcT|?tjW?* ze|C0q!|*xJ91%L7se2m)TxH>Gex51JR!D8K6CSh^O+EVBpT)f{fFs9`FXMIAvciRCtB zi(4Ka_w|Ss__*(GdHcBYTW<5U>%1F%4-v9{%jW|0y}Mg}&cU;5Zj&{93W?$5DyYp# zKz(Li^kDB|lIg|vY*4#{-DA0*f@jtTur*0)CRQgWc%3*Nu|lbzWmHxgcEWN=d=DtV z8g8C!dHG<8f|;`3GOClMH15PDeetdb3Tq?6RiuO1!7sR^^D~T~MRU@^dObw7$IsqX(;}2+(@x44>MeDkGr3@?<#ty zgX_F|9Tp#V`8q89xNW8u$K5QeC_kGyx-6?Oy(O%9ZyZSc0PP%eFB zp6&{v{4Oy+FL@&RzIcZN;U3Tjk65l#<^it|%QM)So{4uixPVV+anX^%=7C&|S8PT( zc7C?Olp)Vn2ED;S1h(inL}07lameDDcQ=T*rWAFDvKMi!LW+9#jJ5VslA(HE10^R- z-2R318eOHCzYji)nXT~ss2R;8Y028C-qipp|3=JJ+Z=x{5Tn?{cRqiBv?VLXys<$b zSLb|z$}~5LU=p|LopbW@?b~KNWf$*lfI$mFO|(u~cc0j@832AT4@LckUD=0KE^b=L z`oy!jnD;dZ)Yyo#VIo)fHV-3{;o>jPe&Y5ad&8bdMtWuz3fF#O%1=8D{UQ{Fp#&=UvSVqXh6^G*lf>!;u-9W;^I9H z21+t{mdud%MzTC;=}b}7R)xe`^c`=tIIy$Qj9ozUplK}D$PRKA#U#7Ad$2;TBo;xV z!dG2ZgA#5sUW<$OIvC;cESxs}1`s?5bIcT4Vb1A~4-bueSm!k#(ihD)-T1_H(f$pr#v(++h zd=R)5)>gG1JMNht-0R^E)E(~LSI>6hz4d__P6yJ#@uiFD#Uz2B`O=^5yxrmM9pz2DweYg5sZermO4y4`yu{@r2Jkjgjkz)Y)1Z^YC+a_l2L& z8THvW*MRaC2yk4`SrpHONx0|`{kSK@_|}?*O1tP|A5`0sPo?1T;K}Ds|CDU7D^ZP6!=&J8}B! z9eMo&AAJ)B?Noc=M-JiKCN&pma&SiK{{ z$SxU;2*o!hrO4Ze=tnP#IEQ0E$y09uPET6Wk667aLPvfbc}Lz-xufQbc7Ezf4zqes zgprgLiW{FboJP9Ml75+G6i)LM3UkR5@87x3Tz`zp?CNb1q~64>h%;9kW>BM9Z{1#a zlr|)t=9OyOWHGA94kF;(sf}X)9IYc$m)fYWJn=+W*`i8NldfE(Wqj1X?2-;IKw7@5 zQcl#iMpR@y^wbJ6?g{cZa*h^X!s) zD})PnE6_OZ{%O}=v`TSX)sMj4>Je?;px3qGo=|@CCWUQ#ZR)h3=>p7C_d@=vTVwBP zfK<4*nur;#-UT6Gi}@3-=z@KwtMQXnZkwrz-2?R@bRPzcj25w+_}8U% zALyZ5B>;`|-EkANQ77YgiDj_(!mw&)W;B#uCluo&YbARdgns0)fHIJ;?0g&*7Etb5 z$*rlFp14idgj!p|@rn&7>#i)VRCvV_*p{}sGW{_ZJz(n@8(=%IZPwB@{H7m&#uC`+ zJ7&9TP!*wji044*d41oS1-~jwKV+>$5GAMGh-}<#c2DBdp5;JTwSyWHvLu|_wptHq zlYB48(E_(N6BrYg?3%ZlBz?ua{efKJ5rzNb^+uG9u>JvF?__Ou_5KIKJ*aDXN+1kS zoL;aT%dgFfn4Q$1EKHg2TO$$4b2Y+)NL*coZ;`F+`fR7gMRSIM{__Ttfh}in2K?M> z>;~B)l(epX4O+6Ai*6c4So6~YZ+|dgKsPHp@ArJ?$B(ccE`m#T&wa8Mz}ZFM0Y@;K zFI+n))z`y8o;6$GSevUZ^W;UkgBp4w(RdXmjkEad0Qj!$(60LKS*k0mVg|NEgb$Xf zqbQO8!3&Y;@e)|xjzxKQ`6n@0MIq)+*en@u`a zjLeSB>fH~(-CT6FCMqAouos>2F`~~@GEF_n9a)db+aFxGn?kl+gHQM1iD*u1wIuGA zo~N*FvKFvsv2YoJUdPQ0{Au~YyJW40a-Xbu--Cc1IcmVJo};FRZ3T3Z?P-QRA$T#c zPBb+6hv#*=ZV&s+QD0uVNt=-7%E{xlt1vSsYolueBpGC zvAWR)8R`}^W(Ltbv{A<3;Ne#4-51_pZ!agiddGtccAxhTB4HB?E6n>7+=+q_4khlq z&CcpSO6&gMc0B8e8S0>kwS3r)xQG+guwp8DfaEbbSvg0Spj(G!cJT z-{bC@w{c*WufZ)gK`l_n;5$&)AAF~{ZMt^h?vixk+#g!|FCa;Gcier!AO&t4YXLm8 z|Kq?b2+H08KW9WKZr@pBgJeO&Ot1GQ@q3yL%tm>=VLBB3z5}-v5SCJl{lGi!{(Mhd zaH3lI*PCUMtSo`I;($YJkmI7nCM7yKQjp7W@dJF}nd9Q>jSof^X=Jk*H8@5tj6?Nv z`5Ih{Q`Tm4_1*^oJ*x0=N9+Q+NBt^1^_pB0^8+RYyNWV4Xqqt@46e2HAF3OZrE6nc zW%Hd+03T&@(Ir+V%5cUgAK|v|iL)xEX73=6%RVW@e~8P@1c4G|zSo_Unt?g<7?Z^y zTz=UbI(GF3;n|$byC7V+NnT!9ipO|R+wf&oR?qHg3fyOJTKAWJa{tIjdXDm&`~Xi{ zB3q=+VRF+2Jic++%F5%Vd{>!O3pfDAFdOSo2b{GUmcF&~&lWH%v}A9iu6$djdOb@3 zxT{mnz1T#2arIUR@rg%sH9qn3%~dpPeA~%8A)v*D)x{rEgb_}Y_T=m1&UPie4}t_t zq#7N3Y@}r=Q}lCf)2d-j){49l0-rak!Ia@MqS-XnC;5!xaPpg~&sJs4Bw_J+D+KQP znU=%K=A5sq&fIVuYSKQ=R%7~!`<$&u^sAxXBYO3QdK%At!q($?ESijLS}aYgsQ97@ z4Tyx*RVB1EU6#r>RjT1`;&>m*2(MK}3kqmBFpB44ELw%}SWO28%gq%Le1JHx)Kf0I0zsdhO48jNXCnA9hxIC&mYOTOcqA zlZ$2pn#y{*;C1Q5A13(R!46t-wrt@|59V=@1~#Aa#GnY=NQ95N{y6*ztDGPqmJ#WnyBNv{Wg_%IuP!5%Sq56b8*W#eW;FF z9-SZ7#lAc3z?~Ih-s>Rl`5@Ifn#cW`GcIFqvgW(}77^VW9bBk+s5cGDRENu$j<0>+ zYTtAJeP>1oXH>h=w0_*>)3l7};*Acp8@odKQe#m|;1hWoO8-p^{pls}yU$y}JZm3& zkApznKW!}pZ^(a?|Fl!owxxEV?w|GryZon};&G22M<^IYJ>^sz!22b+uqw?Vq;8m zfssj&r0&J+*(uycX*R9TDh%FT@^b>35cf83ZXmJL4YHHu?WJ-c#^%BhO%uVVRSq2P zWID2WV*{ZcS)v(xpP}(m^^DhUG^DeU&3hVLu<0rtj0`7On+q+6>Rly1ZZ9Uec}D|% z-1MDBlCu|iis&6=@gt?#FgOhX?oB;Jv%S=5LsylT|OyIQTyzyqmG;u6$^Efs;8tWXxl^!-}h0P28dS- z=!J@GPiFeGW$2wui*gkDNJ(<09TC$!yl^x1Lrf3cGOHkh>-5)WBlsQgSaY{Spv@Z? zkb}NfH4A0?O$pM^8}g}q93Jfy-@*>usgL63T?__f>=z_m+FjQIFp25Z+UCVC`{;Q) zawITUou?YDNR7PC3E0A?j_Z5%XIqOTZE2h2Yv!a^J2#% zx@6|o;(FurVC69wTB;1L4R&>02ytX1Rek9>rusJ%HUsjl!n z8XK9l3)~gI97SD3`)j^_8>fXouJ!0G4`gvak-F)qcSIqi*F-5VQs21O<$kd8?>R3U z2k6e6og!(+o;RHq6lXoMR$Ae%-)3<7$^q`T=Qi(mFv)ODoZQ}e6Hi}qo4vuvh5K-}AKJ)j$(rSqhGRUC=BOLVO&OJVzlo0={d z#JBWZA|_B7H9tGmd}=n_8tkmk=q(TEFSQAAP(fy_0Fd`6PX(d#;1ygpOa#r>ec|q; zfSI^{v|eNF-FHxDG-dC3pveKB_#fOK2BqwamOt>(yRdEE^58mai_y8P` zM09WSmIo2ddwL#^SpD=oi{{?);DUWUV&~(nIa2LSa9BS+O=W+^#I<2!{@?oMZ6R7C z1zg`tlw)@-)fgdo600{oP)AX6v5=flG@;uBqfsN(k+Iopdv=d5!<{{3P#WxkpU8)e zC1C-VqKDdTm{l#$@;@@**+aJ2giX`2T}x%^r;@NicWJiw6%w{P`JU&6^%vuzNtia2E*Zx47Q~?gyjP+Z$zAlw$+TuBEY@o`1>i zfcImD8=rNMy#pR|a39XS*MV?PA~cDatahSQvL#_e*98Ng((`{$ z?D9?rfjioY!^UnM3O)q{$+F|l#)97HK<6tJbden zZ{Fts*i9X}SuDck3dvkaOCAp^(Afh|940roIwm^@b|XAMQQcTM;gUnr7G)JS-&m93 z@;+tN`y8m%fUzPK342B;B`o|75Z!BZUG~Huz36v?qE7b6_Km#HfvB1iKG2{5d(jIx z)J@z>o~3l%0Y9IzF`=?~p92#K5nQ`03GAb7ij3pvW7 zlbHGV*&u*lLR<9iLF?fyA0c?V1LdYGy#1^5f}gCY0OdO`S!>n19RzI3QoZ7&=%_e} z@Ixl|nxBp9wa@Cq>@m+B+Z$s-tT}~Y}uRc z``Jl{uDNP=wtPI#n2YdjO>GA3m(=K@#mF|ov9+Hc7lOb0x?42QHtM|9K^%6xV%K4p zf5p<%wu8|NcUS(PzdXsiNSlODD}US__m!{tXioO&uX+2r@g~BV5VNBGb+=r7uiRNp z58Mt$M-dl!#qd>pZ4%uiu0!hjOhbJ*#>&rF)^cLJYtCD^#ZwFuml2}sOBx{Bs(jeQ z3)Ch?N>+=>D8SKP5ck`|Xw37*CVlJNY;3M@3tMTRK!L#Jt zdmfDPONHa7*Skqi@_y+TRbW7P*JRV{oweA!-9a36AO6QlR~Y`^fo`*d?5Mrn!FAM~ z+%v^d7a;c}us!qMyB%DIjYiohm1w$(qqM?Nn4ONAn-*urk{-9s)L4>4%SKeD)7^sc zC{0EET;1J*LX3ah@ISFU0Qp2rQ%<@=aGY@Q8Hs6Xr;ZP&YPT1?f8dEv(?;LKyxltU zhP-!ECt41ZbU(^FH8CqXzU^+!gsW_jM{v8&ya%_BaOR%i!!+OGKC_l6ORl#}BZQ)N zy``yXaI?L&>$p*-dod}QfIA^=Ht+$=m4|~F|K2+vjBFWDZu33&w~X%_U-S}h*D?P31n!_N2JQ-*WOs+&I&3Ly zyD1v5BT0|bZi|DJ8QCdpo3>rBq2e#vduK{Ap<|~{eqEkTSMN^y`owL6Z6{Efmu%n( zJ7BxT3qIoI(}w>AvbGesEl_rEgm3}xN!vJJc_HQW0!dp6JXsFjDLBlTYxJ!|J)Sdo z9wKcPsLT@Ji4)z9?ARNyPq#(IaiK0B*iz6wWjoLMYOkHBx!S3x4#sJ^jE--T`LHT8Tgad!wco;bfBDO&AAkPgm%sn-C)^eP_#nQUhvgH0 z_&48u{cadOwXa40as7lQ1poHW|3e!%XNtX<&K2(JOrOwZrhB=ggNOwhi@A@oo~bpl zk^RU1^{0RS^!u;B{QSe$U;p;6-~RevL7qukczdEmF6D8}m!*?J8Zpb{kR~R=?Qq>o z0)J~iZ_ic8M_OGgY`_76(TwcZL1Sm7)|8 zi4Zx+55+gS8Y9}RGi@DJi7Una^z2ec2HcJ(cCSI+d^C8?R_Fy{O~q@r^2syHs`;F~ z`JUNoSN<`JK4_k8d4lm#!>@n^%PjI~Ke)RCKXE5pTRUm3serBnhy1*uZ+aa#7IAyc z^FBZDL|0+=`r|VN-wq9O<#_qDKhMbXO1~3#C^i;rrfq@SSNdLiJaAuWI%EU+=#)>> z@hJAP#Jg7>kMA3id9t?k`o7otS=*RpZC-tRqB|>}pa|*MBoW!j)a!@zgbAw;*o3wT z5h$&kuP{L|riLaco1}Ha2Jd0P*4u!7M)a50eA~V9_yrp+D77--`qSDVb72vgm6pm+ zIA6FY677lhcwBXgP>O!ed_;6zMJYAt^8DePI=bkV<=OGn&ruvyT~wR=Z~?`z{t&B z_8!ww3~Q~nsXu1rTWwiL_xj^{!?m`9faO7lZEE{l{7CXXJj)`wd&pWuAHB-HEO1<4 z>!9HlNNasMaDt-;jVL0U<~6T*N1gF#68Z7|e#i8rf8K3)@~ZiMpLr_1hi|)Ss*-dj z$E`dyW@Xo>U42%Te%dx$8(|Y1O3&EITSXCsL$jmuiUA&~+%+pQUGsOwCSHGBI>bA& z`YOR!OeIFupwwfmD83$6`MZm1=csH>O7L8LeBpr4&cj0W`J(Oq0Xh$f*qxSh%;zoj z@dlf+TY23Ap+xG%^ZAe-VzHx>(pyL-z_^&7xnZiIp7-)7uAST zagJH4^X(^2{b6tByJ)Uw4AkDrQBsu#HLv!3sM-d7lRD#eBX-Eo%t#;3QvG`3FemAn z7azZXi`ma2s+O7H#Q=hOEKti^9rw2JoV}hUH{IcG zRmnT~nwK9RdBI0i@XpA_$`-Q&n#lDdTgq(m^5ZBekf)N7YZ@rlqLz0UAZ+@?=eij> z8+u7Y)yt0y_ec=fU_YQ1^Ld%c&lS?Ew;k9_^Xjxx`9 z$&9Ui<7BG*h(zq+qT)H zDX@yGNaI0W7cl}_7Y1_EYpeO1wZtt^08@+DDUz2N!P*_gmGa3;Vm!Wk@$s216WZ(7#Dt}bFSzv9&s|7d5^Ay+ zAD`q2L_cv`peFNQ6@^op8XA~EZ!7tfwQJ5xHt>>-?j`f;lDa^1A)nNDVjuSyo^3VWwUz^S z#su&pDxb(nn<~A12tLs=~ph4iSUB%>@||GcsZ_EV}ye zINRqgNA0C|B3*TOF>-LPbY)4#5vOZIvkshfjB%;ib2yXpq$oM)lbUM|ZalK+93y2U zu?v#ZfgL;5pAQd=?vA^&KSm^+#@RHP4qQSEaCK0Zh1McSrO~#qScXb-yXiQS*Bl?5 z^8Uq7i`^jl&nggdAsg9 zas4q=?Zbz3>1@^LLuIyt-;;>*Le6qK9MdIFb`K73fe^4GWtkWkv>lrQwO9f>u|Sa8yNhZ4mIu29QFy4? z(lM&eZb|RC?W`e~+c>G`2p9z;#w8zN1WfnX?+L4%H0Leco5UAGNSEj)qT*WEv+5iS zCNhLaVt^3m-5EV7|D#q0i>tg2A<8bE%XGZwe-N*CSbbE_QOVUj$Ai4vT=Ymq)C)At?aQ5E_O1ux ziTQfAPt5gS?G&}`s0HdS-P2FHy0U1B*=J~IQpvO#QBj(u=!&upjVPJ;OUqP~-_Qsx ziIB_Ty$&QJD%9ceFv@z55kYm6ht!hn@J0s`!$wD1s%9Ygc2#_O;!O@Z<|}@m=UhL2rzh=`vh#LdIax=|n7gzSR|?vv zWURqyeWKY&QgVzkDAI!a#C+(e$yVyiubyrU+sab*B|~q{`imYzyJEvKY#lD z*I$1A;p?w|``2%O4FX5jFojHP!rC-x*tK9w#AnR}VVaRPfOf&0{7C_W|(w}w1Y_UvfNP!}x6Rfr;C2>_6jRmZQ_xh z`b-*!`r4z+@;lsTM9=oayt}~+mt3k-5!D#@5eMrBwanb$@a6`Rl#|@zG)kidCv2iP z&lgg2&%1El9e3QwH@J{90aHh5l1d2{b@ESzmR|Cr2XbGJd3OU{^Z^x4Py}Q8$995o~tafJDi)k<^YjfT!dEkM3-mrFX z$SplBl5{jAF|Z)2K|I~qyjYaFJ?vm|cji5JNp8B`C%97d9@8U5SB$Hgsm2%XGxWsS zfZ4XJ$0Ue7Km(BGyLfrJ=;Om)TzAJEMVa5Dps+Nli}0$`5RnakB0Ot8KxC7;+_%99 zA|Kw|-~!I#$iQ~@Oy~S1@pm5g>Dk6&cHT2>w#@`K?`{xZ_@XHh3N`VC%WU%XdUm7W z4tWb~S+2@0HWyt2?=R+N7ij$&o|wu7{lXP6k){0r&CT z8ym!NM-4vpX4`%UqY*Y7u_-?&ZMCbr?! zH=iJ$lCz>G$J{_avMlzn*WTR=e&*;Iuf>}hT(EoJMX{XynGeu+$(b$Q)Bvp$(sJp$ zYjA>t>N;VM%`1-C0X> zm%TxkD^sHSeI%X+*vG!;$jx-p(Z0qu7g1nMiuo0cYt7oM>!rTDf63up4Hl~K1*Z87 zcTbFS`Q{!Jr!!(E%fr%RcTd^{JliTsYz;beB{M60MTEG%OzhK4Shy6OnO(@U?FvrN zC9aJBb-O1F!X<~V_nloDer8JkuppB^bXrfo>E?Y6CZ6w!k>U)c@1UDL;TFBnu2Ri5 z7Hz?t%|=PC;W#)M$HBuJ8z@Jgp#Zc)M-pFscJY}%z@cZ#4&K<{0T{$#oADM0qJO~bBU?XjJc`Lv`%#m$nmO!w;~AiRbCW~w zaUd4Ri}W5UA4MBEO+Rtb{PtJPqUF5pnyDm)WQX@T5LSLW=Vd3CA)V8pyj}LCCiHgM zGf7QvbI?&w6lVwPc4D_Ju>2-e4|wWJR_C48sFmoAKlZlUBo4Z+ge>ACUs(QMkf~CN zv+OnJ3+G2JEm2)~H%UvJ4iwPD`=LnR_^%=+%EG9Ame)hg0C%2yn#owYn|ux$?%tI- zHwzW#iP2l$XqwFK#-~!K$HpBsL1vSy#D9z`>!L7wLj@*QGpj(j-o$*c< z({B5GN&vJUB^h4#vQw6$RCP~|0Ja^U2JCj#p?gXCU|@-*{#8#jJ^*gVrz5&^vOLk$ z@I{@{G#`}3lFgQF#wfh)NZ=w2aw~-Q68(`byEnr{N)(*QqwKWHB zv$p^~5#F)sf(mq=_lzUmwpX5}Vew(fZydQz-e#GT;TEiM8dYv1K`m&j)*q*VeEGJz z{LQ-`1oD`s@mt_GA&yM(X_}6lf6UmNL$?{+b=^A~Y8C^Ixp{pyRDRoS`lg+cMoBD`n`qW<(&}XGmrEw zKJ((~TmF$_^KMuY0UMQUC^1@CIHOymLmf5mdK)Lb0o!1VuhlCmCxAUxa>B08`OcI z2v~X7V?) zUCn*B30y!|wX#s5LYt)#N#``?lHfg7-xjp#GqO(-`ck&GCeQCL;}`y0y8w z&B@{h2X3>s3pUI@SYN;v8;)NC%s*kt5TN@zKFI2Yt;O>1c)G0uaGSZsEx#VKe#`4WX8AR@soS79t{lDZRu6kKsUv5v zy<45|K{#)lwh1Z0=!7Ig(WFHWU1ugSbOLco@cTl1pq)|&_+p{4L_vUZ32&CZKANC0><-|XpHcyCt7 z*D~Bz`)GJU^6>Zk#N9JC{GDDCe4z>%TLwH4b_2Ri*{-`DE|lF}cP`*Uc?5;cfpyJ*o(ptsS0=N6E>L4jg;x;?CmbB8`ANOn1e58bA2>a$2v9iuum7C+-vhgqN4KQta+ zHIKcoXuxNM_+%&K^v+CtAFzRuo3i#UTlWQ7=2cg|diN!fzT(Vn{zf-(84+r|+KjA| zv(s0h&3Jd$|5!0rvErJ`-bvv)^3DN*JlBrAdY>^pac`s`*e_97smON;XRwO*;>4?0 zQs+bDq^6~hxOGf3bHj1tnDp7tWVmqHwQ^jI-{YJ!&4o2;W3j^M~` z`W7F!_Q?m{G4@g)ZO6L+*E%u4UYVz?qf6JlwZaII zbA>Yzg9U_;NZ0wf_y8?4TpnKDSRrs<4k8_Q`7iwq;5K~=;4vzm+UQISnCiTzH;~(* z>4jV!D5*vCBd@QtpR(2w?Q^dh-}p-_86+~zL_~XMRPoJ3ajXOSa+j`T9 zH{hMRJ!y(c%dxy|47^VM8Eja$IULRrup9MNcjGtO6OFge*IwNCEhY0pUNe_{8fdF> zxr5v|N%~5%)CD>cw~u*y&53V`!vgo+rf`8hcCjXi%q?-RzKX?VU)WY~_uYFeND+n1 z6?P+I1$xrsD0ZX76lxPgSkUmYwS&Au%ypNc=L`{K!cAjmEk%Z&guOOaIch6rB#lQ# zB^Ed82^t^45P=l}Zn%D;Z^L|BistO?O_NecvXA7A7DgVkhP*#&BU=ia(wXY78h1V0 zM`C2+&b*VLVsJbn`?W)LFW-ntSy0|+K`J;0cRXse5z@MdQ`KvmMUI(kA>^B z)qJ8j8KH#?Fq&KQsqT6L%cb6EV0d|lh4{Lo4-rAFejg(JyuHQ31w1mg9?eCBDV?$9 zxP8VJuXkU#3kq}n15clCZ?6#C?du)u-0kx3SdQDKYfXL^E&$PtTI}R>lHj!!jrm#L z)BN}O_2Uoo_VuTK{`C8=zx@2e*I)nkuiyT9vE331~_ZgEZz-d ztK0Cb2+keuv)iW9qzM_iI^26J1a?(n%@mEhE+5~G8fAZ$8<1jO>A$SD=jPoNbl>T_ zVV?qRT{6^=-cUD0r50B6wmkZl-+@0HPt1|P?xEYVqb6t% zkIL_$caCGSr;&Io$PNlhFB&3LWVD~)c&Zx#KM-n2^>1CPSax*i{T1TShrX>5hdvb8 z*0?+LE5awop4cml_`i|X4^*NX*PgveQsPndA zo7K2653{&a&Rl_{4qortj5$;%97& z8g){g#>}{UjmlG&^juNHvB=5HB|APKF)wd1dhAu_dE=&)DZoc^xT%3_5%O z)h77&HY${s@UTv$V11V2d3V__|c*L zX`5U{s&^%_#w$FaH&Dk@euA$5lIN&>=60U-727)O`k^hyZF_IiiTirS>9)fIs{e}T zuzli&&UiEGjtYfUL}sQRphC$8#)CIim^$z)eQDZHbN%!M@=un&cwYs8ql3nyt@K5Y zIaJSs2D{Q1{tt!I7vc80l}v|RNWY+~(JaW2BU(95D*LcG)Lr`0a`ktB+q@0_^4{t( zgxz+u!2&qK>-e_UJaRQ);P|a9WUX!?Yw*qr+CN;7?``I98ZyXcK%Qv)^{~n1-I)uy zymGQtG`?JS+Zju6%hh0HIq3wxw?T68L(hv8#)GCZT_Eo+tTf=*O*M{T5R}ddlANBl zWqi0w`SJM2@Wc1t|NF>1KJ$dejO%HJToweREw5F=hUzz}K4YK;z4_ViJVBmDcALKG z%!NFj^M%K3r;M-Ajqt!TL1N;UJMyt5Y-&cx&sO~>64%y@P<>jn|I|zJ)E5gQZwGy1 zxpGJ06a8frp^$|E`r7JLxPK2Db-U26Mnvj`CY>7-t^Jsb8Y+}I*ktng+bQ2RLIi0FXUn;Yqa@;n76Rq*Z)_r3Mu*(wXjmM{?p`MNG zcQmkQu;+Xzz6X2iZBTe#c8u_5hy$zEld50#HPMK{4$;F#Y+l*AE;~67qr)bhQU0>$ zxNQO_{*UYgl(uY4SmV5D*nPqIxa4I&XDaI(rmhIyxI-8JXC|Vx$c}pomUt*B)W7R{ zde?0N7qG802ltC=US~cWHEDn6nWxsxh?v;}XJ*QZX?w!tn-eE4!tb)zM1Bz-^E}2I zER0b6CT32NzA`~%Z$lHN>gj8K?1{^QGB>r~dg3nE1^k0R4n3&!EKRM6Oe$sonMq&e zv_K=~0xtpj1>V4U>@_3&S+%U`1eLMDJIFyiNFXSXOULx-=EO}R*W#Qg?OLsO{N^F| zTY&a8(vP972Xwhh(2CpR>`MTEgRv7})maM*>_r`U%Io!g^DYhb9 z_tQveLHrCKbAIOEKV72VOcncePc)mArVfwY$If*|Mr0Xev%-m2sMBtMw;V3>UEm6P-2K4mwr`CWX5no^v4QJkpy`r{Kg`+JM(zXqE3nDtVEr1^Oc_@z+_R$8!yCTHp&H) zN)9q$i*2gc_lL7}i+cIyq&#_>-#P4FoW)s}D9&zBw>C`vkR>VG`H+Qr$Y~^0L_Ngg zP7)Vyxj-M5%guw`7cd7Y3aBzGzkr#uJ!zYoT$Ro{yVaVTp%24$?m!j3W2Dn~zNNSE zn4|HJGYLZp<1OgDDAnk2)bLamE2U*5SV=?r&ROD7YFOwn_xW!?bR7>Z*ozUQ)+_bN zP;-3P()4uM*xN1WPOnHUMD8-+g7|{$Sv_}QXC)D0*F4aDM@ikl&Cg;!Lh)XwhZh%IRhBXxz0E?H zIOC4>MekUcIFB^gUq?;cZf zx9(M5KANXBnKxIsPP;2QLe)Ryj8|UKafAqBb5w7xaGf_~pB>58__(!rdpzBFxVh$U zjt{)If|?EIrXlqR>B>UZCdZ@_j8 z=4=ZRP};&`A8o}G?1GM!45Oom=`T0X`{;zSiaOkX={9Wx<2=f)y65RM)5l3^O!Ykd zjm2`TB23~YfE(r^>bGqg7*T=mviz*B)(i5i1L2Jp0{K8#f9>=h+RT){nJGs=Nu)RS^H z8V~6D;hfZ{Zo^u0H$|B`{l#pPo<6CGYyFN#K#%@n^?06Na^Gea*XXEM z&sTHUw#^m=ifC;IfVFrfwhP_X;;go;K=Bp}QJ_Q@{VGtZx6#vr)Y~gu=M8~vWnCxE z8;1!({If~=OurgVq2?9-oR}Wwh@u5gRmdO z55~f%JryB-B)}7*kM~oMaj8sWuGq#Xp^58%fY_GZbepxsi4V}xH;L=>ns3m1RgiNN zN`B$jRX>=By9(US^hG5KLv>bNK#&+058dQLd74T_cg7jsivNtzVXZ)2wbj0X^$2?hk&j0 zZIcV0B(4g>&QzF3TBNScrV_<6U1Z*I1dhH)_-<;6-u>ylk^1YRT5ut!C?`*!Y}ZYX)Fp0u`P3!9>b}?3AMh)4 z3EJU3}` z)-K6%uinwSD2zAf-+HZEo)$;)Rh>F8wi?g;@r z_&q97UZOx$Ph9|>ksn5Hpb#H$h=xvh5tIZJD84LOi+s(T+EzTN?U^RC-^H|~1i zj=NqR_Zv6;PjU0VfB*HzumAb;&%gZk>Fakte*fF&{|VfynE$9rVGhdQeB)%v$I~N< zn*(o@nm2&|={flS0H@5A*5CDsH#uK^F8_%S5;@J34@WOuj$U=L)9 z3T8_8aI602(0gDPb}2tP7Bmcg7u+xG5K0czt`Q1j$%TtR!+xy!n*RZQp@Y3_W&k~U z@pAc`&#=ul7?bE1V}XoL)Iw^5^5yU_%jD+d72f&Uvx(&Bh08DCyOOzsWQJb^cYb5@ zV}9E1+avcQ=+VoT$Ai9{ZM{EInF?LK8{8*nGOd5TX1RbPdG}c_+e&X_#%OGUI=G@D z^eQTa7r;H&g3hFiZvlMaW=r&WhHS8-{khNqnQDIGfje#8d(rYq>&UEjMxi!Q@zd5T zU#Rh-C#@bYS$^T}N&AJnc+&m`ZlA;T^Il~M%DGSQ!BwcQs9mm48?fBOw(BX+PTbBc z67sD3%S=!{yZI4ndJ9Nu65pcDgn9sc!P)$^5@QQH2mfcoq*eTfrWhB#v z>cHb6hdA0+bgMt)O4j+uRw)qr9qzM^DnBj#aY}&r3b>oj3Ku%I1aYNm;@4n$E=!`7ro>h_ zS`dHr+|5?XwP3tdx!m1n+H>u$ zqq`yLum#p(_1m5rs4;DHXMW*k2SWMFg`28{>tFIAZxlkEciMCGdgXFC-%&f>kfoPL zsGRNPJhSn@J=|sA_P-tTk3S6mZfxJ6ry8&5ow+j?Zt1CPkc$SE`4;kaMZ`^x-{Z6K zEdf4YtYqm`UadTkuc(wGga>j)iBQQmXz|Cx9_I=2c|&5w#W$~3J|67sYMLN<5m?3Q zyyEuF&!q81zw@(BQE*QOD_*l4kxxMKut77zdIs>MFcd4a*|+uC`##%;O^U|jqSwuy zd@@93y@|(f!)<799`Ahp>anx6%|NPTgzwXZ+(%8K+^%FHQW zk-8_26r)!#pP+;6>blW~V46xd>O6J&GDy$VOy;65!PJv0?}MFh#L;qmvArBuekRB* zG-cYAuRK;_sKlne`_{dLc|`g1zMoNkRfbdkzUMiOS1?z1owx1$(wVDh-m)rxFOU3< zGq>5?EZ;D--WIZ0x~}|b6DDye)~7{|{p+@WgVxU<+m!NB<}7D|KGa5J ztRLo5i!D}M9P)wH-C18c_Mnt%SEEA1Hge=gPu(Z+>Qtl+NiS@UI3O$m&Cu0}MVW$_ zKhu$|-ko~mZL^8og}deNtU(3t>aThZ+>4t_+gXbJD=k=VcLT1=4{ZjzOv%gMV!K}S znLoDq?)A+h#KniM5GQh+K6I2>N@DN)0ktX8o}^bfX9-TL+wG*=iZ30i5g8ZFms#yD ziTFr@>lO3Aa0j;3^yFR8R zE8fN~qoEBY^&KufjR_P=B>LS*G-UFnzjhsZI(1^KV8F}!nGO1FsZSKT*7uejn1Ku;X?EALuH@TfFjKw{dH4`q$B{nnfa0fXo18zxi0Xz=; z0$%;VGZ%-^Yn=yfb=74>w9tv#mAgWgdU%WD_Pmv{rLeuw`OMbFPJ20E&yXTl@dAs( z&aJ0trr5v+aHVNM3Y%F?lxS0VQdn+1h0g6e$S+cu^nsbZl_!Ofx+K<9Qgb%R%k_<~ zr*=xjHWA&A*RwN~yN~?6Z`|f=nv??dszw)af1%Si&M(-MqBHdF1z&r) zDpn{(J?wN+?sd)=By)y|7)}qJzErqKZXEkjvkvVv-#3U*Ug}&QG?a*wBfwwXIkY@Q zAoE$1sIiG_BC(77w)MCs-|quvaD}+$+D+-65;UK8VE5L;1^fBd!yW2&(KFbS*Eo;U zUYR5ea3KQr%4Xj9FdyU=_nW|N%60*#Hk)8iz%2Q)^5Sb~Jl7PA=|f^)kxhxpIbSy` zdFRkXHnC(YoO6kx$=!K(+`jcNB`W6~cWj;xbQUQ~%1cP_c_;oXc+J?j)@(8v5yl4& z73hVAM*R<*eC?a#F;84y7tpnkB%JJ4(|eJTq%3(>nr+;bl3akZ=fYT&ak%pv(^};l z$h)GzAj5BIDU_FkV#S)^=2n!ndF7C+gGzdHedRJq<=wBoUoOvYHdPikF`D4u8|aa( zHkKPqkw{l7u-trslCwXimrvdJq?rcuruC;B{+Fx;>p$h}MvMGn=7f`%JRkanUsU5-B+gZb{UY(|D z(396bhX=6iu=yIXQ%kpyUk+)(6=uJ@H$s}c_W1=I7V|EdM;11gCW1#E`>M%tYXwU- zOPRdzdEnkqaou1>1@27^_M;~5-g!$3RH`nM$6UC3`{}}6psjvapuW>qm%FuxjW9V~ zHf>+R2jegKzE|j~d(@EiZ8W!;8;5PI1q#ub zBpsk9a7^dMO}m!mfzOFc&*Uu^C`b-co0I7zlY5qp`Kh|BBg+`7Ph4p8h6{l^nlM_r zlGI`OCJeDH;jT{XRK4+yM~WV?t$K={hc@4J>!D3sC*rPNu!|3na@aOsQ$*K5Jg6_M zbu>Tl3e=a|h^~Y!vx}Xe+$XnOxJ7)~P=pzzhecgdf%uZ(PD^m_v;g;w6Q&{|BUjH! zx*6;wG_HDO^C0wqk|*4|ER0knv}ixCJ)}c!h63>cB05_bX-MZB&1Ju!({^|f+elq_ z&A^T|bkSkynYC#Fg@0_r$-69Ex4nn;>$VpU>u=n4-)QS!dDE|KUpZ0%ebun)SKiM& z|IY2iG)_DWgyO{O8wlmVZQ`cw(VZ3}vx8=V-rG&#a#|QYz$E+jatrh}z-!ha6jz$X4Z`<89pw4_f zM{RRAoQ`?9rTcO&SB`CKp4NJG+^?)o@h%IrpIAfWUQ?G1GVAVyr>%fy<=ufdM!*}S zAMdk(t2c!yF&5Gnr$?BlvDAjF(+6?yB!>r{ys`~km<*04L zjYcG_P5f&)b7;yqHly+ct$!wAWrp}@i`4>8ZB21*beH@B4tY__s-2;n?UL3h3b5G*c9yUyfqp}hc%g$dMAbcb$4!C2R#>{w%vg~yUK6C zwo_8Uev#G8l;5+2`p^hCc+4?lr|D93Sv~?=@_e&kVIHwSE~Au1-}OY}fnLP~3#zK# zO#n}aDBeSXc+Nf{8F_r-P~0R8QT`j3>T!tHMy(~*;8og z>q6sco}QIecP9?)w4uKG?2SBiBnHlu;WBrf=Y{PIzIW_`&?2szu=9~;19I=75TSkP zb!mil=^#xtBfA1zp00cUgfnxE_pE2G<)5=WarM3la`uzj*%jAF+t?#7AJ@oVlC;%Z zCJ1-yreX|4GZ~*h?b8y^N#Gwg3UP4_*hzWj-4f!s70-DN$mGf=4>&n2tPKUNvT z`z6GIOF~_ZCkP;Hr+kFYQ-0*O-*y3y2221i-++1Jvip<`PS=a-^*VCNn-LbuHye4% z(kI+!ZRoy8zm7&5W3u7%gu>MV<4LZ6JZW{47m$nZVXN&zU-5)wE2K>UJ-3A#% z%@+;P7KUmI%$cdc5RG-XAO5lJ-+%q-pFjQn>n}h5@b%Zf{p+{C{#U#3&|tFc)!Qcs z`G62P!!|S=DO0%m1Apsbf4CWu0nd1iR3FKaH{cL{BreWzL-3PBx7N{~ZNntUH^Q84 zII>b@kW-cOMV}33XuNDSu(m+*sxD0F4}DnE?A2Q+XeHyI7FXUPXXbzoZK&>>2I_H= zji=Q_@g@p-xB=g03OaIDED!!ZkNnv+EFat7C|JCULLk46yhG>6zYMRMO~)7~C4DGw zqA4f-rIiGcU}_r znZKpoX2P^N@L8ru%#~#hqeA7p=;95aOGC@V*GDcrKkD`KF|XNz zJ3sU6)aS%efoS$3e`^gHa`l179hqK!F5ZyYlSb4G%gKbd0WvFz0K+p;x8)=uZVdG~ zeYmyec`LptdqH}8bkf^IZi}4yduGBam$w;>)=?BNM9882?bEZ>>0QR&lDBNra!xE2 zI&5{^b_gWeK0GMu>L)N-%OQEQ!rS!L?3s({h#0+?Up)I4cB)n?z>=?dmrf7`Y~zo! zR+zoD!uUe1QMq~tuXc=BpRFrV^TK!VDJ_N;sylXV)Q%b)_inp3F!jlo5AIC}DN|gZ zy}QE5ng)Wjq;X2;P=Pwj)0WUyEmK>d6XQ{BcbCG>-d;gF#gchDgWZhi8FEPN=jzoO zlhl;*$%kxjeSq)Zdth(hd*xU+XEpll?G^C!q$wdXH-FQZ86ie#J+G0wr@BR(#^-sE zhZA7(xtV-!1M{pOHIDbphEH2c zd^V_Oxcy9R_6`ei;BnE_oY|q(RJiGPz&lMOx#-?uA{vnXS7UTjG?r@Qgy?;=Pubb_cB1zeZuYGl@(AhijmH~a z;TyjT>FpcOUU2$ICRdG!9-sKafJsx-3ZJ-#?UznxZ?F)j-8yb$ZgJWgFC6=`Y@j>X zr=~!9-0vl9=l88sZ~0n*t&IeB@_>7Hg@Gb;Cm~-*$PefQ1FN?y98ZlChnlPqecS2K zl$6_i+d@6IZ&|}qxm5FWd(LYM2{1KHgzaW;s}R6r2XSD-n%QCX=bMf4M2cC{Aa~%R z`oZ?Pt~o+yD}k{1HBS{196_oT#Bj(oYcmA!h=tJAbBH5ot`^t3ebz6wLfE^6yacpoUkWt3E2 z0E;g@9hP}x1%2y!(V&NM(}7NhSr+tKPOB<%cO84uYV)=VfxPW4K=zJD4OaqjgGvs@ z&wYjTQS-hEp+vpF1JYVGeleqtzWS=IrsA388E=#eazI~Mw}kK`5pL}MI`r}cpv*Xi zGCRTD#K&iS?YKgT7%{>Co?&?oMKz$>ll~SH!rLmS^FY&u^o1TPt+oXZSJa={oOB$Y zU9nC|@@(Ujts8gh7xK4NQo2FVr$?v6EsffM&jlU<8Go|m(ci!#@&F#=LOIMc4ENnuX zCZ%WNZO|k^gVF+xw*)mw+~8D^sIuR|t;Kqn?gJcG_|Y6UH@~WSt9oziw^`E^_lLHEQ+mJI8Hvw+nYvDuKIvrIG`; z$(w+`*u@eD1ST}rq{Cv4J77zgmi04yQ?yjf7f-o1 z4bRfNlH?_6!BA_zgS&_HIPUt*r}V(R#R3QZq7=D8x}-9sNM66$x@MyVgfIMwH{j7} z-Qg~`_1fxI17xd-{1d&D1bGW>5z^zXmk;UrRkvx|NIeEMoe&Pyjc%isa>gcC3#0R> zOATP8kPu+JyTVAXkse#4_K6!nr+%d)GcraB?KB&!(E>ek^=YE3K#HB5x9UCE>Zfx zG)Hc8w?K|gZEGx#be1>tOC{y`G^I29#*;F|8!Si>q-|7o`V$QOQ?RvwX6YU9lMs_R z!OPf7f&5w&xbeBU_InFQ2W;()626-n_?xfR9L)#sU%)Ak^JTEFj%o z^)rJ>b)Ojdn!@zL-BY(wZh)*$*H7JYVPchE4mx42*(9Blvyl<$P7|v9!)t%7O^*1klatZ=#T^0 zPx&mH>KE*75nH!c;Wn!((`=yN?G*&Qoq4?Eapv`3^8C+@ z-d^Fl@6mbV3cQ#%7LW|M10FrcH>AzH!Gf@_l1B&&;{i(*u73rYh#Y)MX7(NnQKQB( z+Q{3!O6aQg&ShSqdWQuT>``%J*%D3!EvS~g4P27}zxJnHUGJ!!X9G@Vcv+X-dn`y- zUpf&31LH{+14x_gEUMs?1##lpC7oOBZHZoYU1V;{_wzmr^LVtaoPm#h5w#QWj8xgW zMd9pW!_QmrC!JXg&s4G&3s+OE&ZIFCFC3J?v%hy8Ju{}`VKKuy^e3Y^6)N^l3$pPY z*l1BAujNzyBD9#+H9a4F+3$e&E1#6<-e)0jv!}uk5kfE5|9~Shpx-*Zo)w_K!yUIh z18!S!T17i3Tt*Ih=lh=VhC_y&3qWH3uon3p@RrI!`^y;3iPHkSAeQbx%4U{URcO8* zY-Y8qztueQcGZ==r`b$mw?NlTGVIr9PMm`|Q2sN=H_1CdQh(dH9=DxUtXXRsC}_wf zO}v?+Iw}3KXL}3qJuGl8IllBQcWLWc_^NRCwRb$t&x-TjedQ6}l1*#0tSs}mE2 z1H@wQY0S`haFNC+pL?1IcZWUlH~*X?tn7f}ba-x-N8&0SdYD04RN^v}%-_xiMYg`6 zHj~TPVyTWzi@sY=g*Z;`VBhS1QAimM95h-Y81%F2UY$JgaSLU_V ze9H~At+x#Bc?I&j_|`MH=p|`H4bA&euX{Zrf zKD?2ze{*62a`{VuBWnmyb)NCXW3A!EKx$yfK!c`m_QoVN5jkW~@(y$g@nt7_nUH^@ z*ZdiSiEXdhjESc_lQ~3A-65ZmkdTR(^0kG9+vr0{-*PM3l<1kOI#HQfl$wd|%J&!- zjn^xcsor?aQyK5FpckE5E}pfCTcFTh{Z#|D-_%-=!${5>*aI7R2*I&ku1LqvI9ua{ zSu(=4*Bsn4>;cD_SiH-^NQJs%9@btpBHReG|6pZTuiEQXvj=yExEGejJAa&W`Qoh> zn&~5BL?!M!a}}jDYP?GGaV%P$w^Sxm_k{c7t~+T`<4g!AL?O74Vob26CcoFZx1Ii5 z(tD(dY`${UWjx!TPc|GZUpb0soK}GCdzZPkyAJRqb@fgQ0zT4o9VGWB_d9rj1G-QH z+?k>?rNEsXxJ};zccgEKLoq)_`>uHU#(8I}=F+(`SG`TfTaiX2`#jQroj7mBx8{{9%*LavW3?i%c)5DJ@7N@8*9ybeikX2nCIfX7F32XCH{;^F?_eP6yI1u z=HGABsU@HA7SYB3LRw&S>uEfNF0?_TVl9iutR-!*p|CZ@)w%p#&ty}U#BYH&d;R0U z85FNK+(dMJ(J~j(fLzT+xlORJRq~>rU${CD8QW31R^}0x z5VywZs>xvb@~m+M8b7A?Gmf`NN(G|maL`qu=p~o&z(hH^@GFp{r9S#)so8lu`|J6h zmZ+QN)Rnx5K60M=`L`d^H1H+ zP8p9&ky?k|ElLyc~@ME!+JnrKCr4@^}UXV<)$O3~r z7o^LL#^)xx5v+!I>1rmi0#6o~juE}{LWH?d3pyh5_xL`N&%cTmsttJ_-fa@6)tr@$ zjS)(>>RI~hXsFPcs!i!8wkHi&@40ZnCVf9BPiMFx(lW2Ux1l#JS<73z2KO_2h3}X>Yqkj&pSaj=BJoECSDwV5e&XJAA*M+Y+G3hiKD4F7 zB=5Np`P*5lNK`={f!fWg-Id7GH*dNyQmU*-FASnc5Yk9wMz{jiTkO(Q7#IGmMp!{! z0;VMqSG|AY+Ad#|&y@ef^Q&$fa4|)@$Ps;xrVJi~z>NG!co49G3a9orSb)i(PQkNH>r0rSahD3n*!m)-s>oEm!Dml61Y4!44tS_CusPmRB zp32_Rpr3c&g(ZH{H$L@{WV0rYF;d8 z@%{@Jb~Hpt)|-0sK~($z8X~z~(Bdr^2DRL@u+sHY)N;oX?*m}Z9m8Y?Wn5@3Ae zEwD*Bgt~2)!*$_?L<|&@Z=Hoo3%s8>qGruFBQt=h_=9>5h^&VNev;Vy=2nk`)-}Ny#L(cn>PgWXR6kJrC5q1*Hk{ zE)H06=@6LQiMz}K(Z>OY&B`{58tT%Dkrg5e#$t>d(^#{~+!-RtAkDik#K(Pdnd8$g z&t=ZPZQFFiFiD&9JXeX>%RE{VXlmWhax-b-JHN#t*8|JULH(vmFQ*-Q$ z<_kE&^i_$yXIv+?CHmyzH<|DT@|ElUnZ7z(NGxg4h#L{k;_8oxyOuojmcY=5Nd4Lu z@4vtXHoN6w|ImJ8*_PARZ|m&76}|33cg&QqyaNM^xEwE$T-t9Cd@tzqUH4Z_V#s;w zZ}lB%s+cPe3y4BgGbAPLe_$^k<=(>Xofr;Sp4z^Tmksl76$fP1z-hn~dAgiY2(R-5Mp%i>;^Pkdf6>q(8p^o0ur0i9! z?%J}oxwG-&ofrBg?>(4)#mo0#@;m-c!%d1P5~bE&8ZTID$!t~C16tCSr?9{&Lt@tG&*4b;(3sAuVMF&`U9a9N5jbJVF|qNX@Xlct}gr6>qh0q3$7#N%?k& z*jhZKy|F>>eHP-DpD``&c=?!?UUF}+aG~x&?ZREa=kzXJIr|SeaGRzDa5PY$@)Fb} zYR8;d>k4QslniP;FHgoN-daI}gw|9>-LC082gM?Jv&ATh$1IRip zDY?#`QbZ>8b89lvfm({H2k0S_VHEMr`KT-`R++a z*C+R-$X9Q!AmpPI96PxWm3_1;^>cNP0g(GGq}97CT*y1UZ9?{HW0Fvx+6VHC1){FX zJD+)1AHVK#1vpW*DTZ8XPyJM z`CIV4uFsst#EV}*{fvE0B>h(Jt-xFMMGU8S$C0jNFQ>kVNL$6BL>*13vU+m`DgUUk ztZkH4JZ<@DH1K%g6{V`TUJNB#lDK+n1=;!jnW(Ny{}G7l;Pz#?<|8J$1@4}^b=381 z(;T+V-7eUj#2d$5pTzsdfm?aEK;C>!Mb4)}6Q8rm>kli|CtNE>osY1W&SMt{Hdj0GzJ@v#;A%L@`F~XIJ zkG#pa9yQsV=QN21dlJ}5L|qEgG`{|5wl+VokI-u!zb)U~X2$A06~t@P=5XIh8Jn~j zpZSD2)>d%5=V)hvgH0_}_f@^}AvC)G9pv$Cdx4{_UUtmtNd_=84!@ z09e@w*q|%SP{a?~LMuJp<5igrPl}WT5if0iA(uiVX~hh8bVXWerOCTic3OJ_xQ(9k zG^@KoD#aQE>X1Am2QwZ%KrQQ+>~5Xp3qGY}EW6?gd3{L#{rj&!e*Mp%fBxmSPhY?L z@%!IC|4&Dbp(1U2PMr1@X5gQh-;*tu2A)w6RxfTY;IgdH-R9N68kzn*jwLH!|5TGi z7)S1{I##c2KEsHfxZ_(yH=d7K6=31$*4UG2g5+h*FWjs;$(setCvKwqUNoq`iQ7*s zIOhdw2I`+pYX_f_rnIy{utH9*oNc&lY^nV(p6+>G&B#XD_hz0aV7jz?iVf;WKM z%2)QN?ZEp*zYe_kMbB}2Me}A0yRfP&dIM$MP3k>P=z#B-!m%mdzG zv%QIx+J^2cOgeJqjcbqAbIH#;aA%uMYo=#@Ui8S*G8|C4joOU zk(qt{Lub_5PFj)*Aee4K2J}35MIb! zJ&2J7pN)r1nt<~-i4D)ssD}+TTevMxPiOD2M$A3Ga6^}!rPx0r45+|{Ye!XA+>Se) z%y}X6=sLlkJ1eue>BSS)yy@hH%qMR2i#2B0cCFhcv-6#mk@DTPJZ1Gt=5n)FNN?>n zSeEQN@u>s6db#+RBbt}YB}+N$DylG*~gkKm~%+gjy)6a zUl*IeG0jFIkW4kMJdK!@-$J|cTg^^uyYhSDOR{=N^T18_;mb+_GjRGlG6u}82>UfV z60O5LD#~S+Q>#}rU&vk#Lg9wyE32G1VUxun5R6GMt`#+}e9LAsk2Rg7iE+ZMHP*;p zjKZ}(92dme`P0tuEgfvwM5NaEePFhDpO2a*yrs5 z4(buY|8-k%?L$wayVo<9#N#cm z0<~jaumfhQmjku{wHozXP2kaZeIvYkMe_i^a@7$>yujlQ&2Xt^ct0~5QuwSNI>TKMrwl$QOQWx zdlYX}FATxW%MQ7SKGg8X_s;JCC-C!oFN(c=@3bk>8}BEn5#syDt`INrhW4?S=GeW_ zeCA7bhfd3V`LA)`KJRMu_)9=i*1~wC3BluKqi7^Wh_W>zVb~ z>Q&BX_P8h5gYm8}2t}^(ofjnro!|MGe&=4~d{$eIwKsGfT4oa`&c?rLx02EQyzW#k zty5v2wnXTh!nBcRdzWH_`q9=7R~^(fd-H}Or5&<(XnGB`tP9caT6e5+o% z06crtyw156m)TcuJ!dsyM}`dpzbtiU*0E;#e%3AO!fyQ8UB&99&c{(E=(OZ?>}*tw zyy(&du7B)r#5kM91@b6dgq*f)&t+=HxL&v@$m!2y&)sHnBa{K`b9?I*UD%F(+t>;# zDt6w&+YO5L_hmB(x>XJ*LlhQmU( ze#C=HtTypxcO}vD1z5Xtb%JNJ? z)vKWgbcm2`ZBIU{hj?OeVPCb6JS|nY$?ni;Nk~i)2_sq&D2UQ<=S$~jYL?0b3J%>r zX`9zWhky6CvMt z&V2F~v8{LBq%SGss``}*;cZHk*EX+)9s%ykVW7QEs#dG#FoOPVHUnglKTPsQhf(hE z`mPu7!X9ZB=}@ZR57Z=0oSm34ouO`C4jtsp9UeV!WTO}#vZV~8bXg*f0rs^>Paj~)i`;t?!c{(N4<48?jL!4|)sjFh`O{wY?Yo5fz0(b|vh@g^% zA6a44+HPTyyl6cqiL6&hCxvMq;&I^NGhF__GdrWr3#5a)nTW@Ja+ru$-%sWfPg+u5 z9{s}Ix0A6EUq=d<;>*d3Y&c&y+ttnMqhA-jf8p0fFaL$-H{IrM0eodgacw$Er=hlH z>Dy6xcFv(^vCU?07xF$~i6bxHop=MdZN`lh>5EpkdjEB#M1uiae~>z517sB-4h=-o+o?cC-4}m zjlAR%8mT^1-X2EF(biwn}!Q` z@2<;_5&_^3&|L?4N`v!84Z^;N`Nl)G5a3U1aWZy_wDqVN;Levk^BfY7(?s?QIE@K8 z$z8zff9E-J+kG2oupY>x#gPxB>^lw>^^ZIi7TJhb=FEk>2_lXdvQV^)OwP&Fq4`c_ zHPX(@E|y3#LG)G)0sZPp(1#n5NG#uzpv9g@fNtKbAwKjNCyhip(Iu*nlZfrvb8Zv3 z3wLx}VMp>J?6=(`R3gkMihUE@?*-)vxpJwdpu>{*eF6*QU9s0$11~kD*E&c%Lnl zKk;<3Kt^g#yy^KulWO{Zj9+L#(w)%Hs?Hx37GN5*{_y>_fBos7KmGpeFF*hA_1C}s z>$ktQW-I;1B%*thhJZcOeAwwtO7e9hu+378nV&V(zQg@4aGSRY_(XSo;RzFoVwP)xK>I&%p8 zFW4coj49B^Y$8c>%>Wm`GjsRNn=?o`Wu(b?JPc!2yYXq zt5(kIhqtsU&1@M?;E}uq@cPMH4%{YhByR1*m$1_7C%#DJae8+1_U2y1~~7=FwtHlf&1erCwUtgz|?=rQwP_V zx7*IEHo%W?G)M2nfW~+8)S5|ENnixL*?)`FTeU2I8@Wy4hJ_9zlW`>AP`4CxeiO=J zF&BGy!TRpV+jGuHW#K(vU-r;#7B|4wXTkiu?c#+Xki>7G{B6(NQ8AKmd5kog{5ra^T0imBQM!~I}^CnG;s3{3=7e1;t88t`hu7M;sVG6@iXCVdDb}3-t{3f zLEgOk!gb=kKwaRtE~I?*E7Ui{-xBWy+2v8L%t$-3mPF<@lflU}k+qG7H6HKIJQBD! zBxAh!!qmYlPp7dCczB;WcfRz8jb`q!pI>^)6Y%Z}6H_$S&y=_wlq~^UkNY@3tCVwx z`zq9O$BixVUyw}mM0c6pJMO*Yx%nL|>}%nAUoyJ)LE;-SIf?(miCo9Nqp~s6p_t*Z zw_{&Q*XQYrP6TspxS3>4Ib8qFTQ7#qMOss=Xw^g>J(=7h6LyaSudkc?9@yj5Ta0^n zZ{zM`Ke6YBZqqnfWFmgnqTJ5mvvb{=G9Tc&r>i>Nf+3K{kvGY5jPu%&ug{8s`6JJP zTmGB8LD{vPk5wuP%?y^;e5N0{KCFIs2fKxK>0nL#v4aNh!7w6PJE{>!wK}O02etQ5 zH;StDX;;)c>@AIxbyzC=$61=_u8RCX_bV!N)u|F}SBbtCJ@*#jG8cx;yD*IO)nBZX z%iMjVI>#{%j)5G&U$3Hsfp+8){L>%1aO_PO+C~;d%E90iw*SZ=RRo!ZUhL~(wZpsH zt}mSreV`{Z+MW#UHFMbm`FZBd5f|h=b>_pvIudud&%`|s>^6ZL32Vw>ME8UOttIOh zPrEuaucAqN`@-Lg>^6OaMGJIAvlBaxX)ryB@L+$~8}aVQ8}!U|WAg?KJZ20PAhu#P zv8ovdY&p%ScG+r{sQSY7oMp0>yLVvFLixyIwUE!SV#OgiS~gP~IxMhce!P1JhDn^} zfz~>1BTGwHk#^L(&Q&F>ok(ZoD`Xv(5{(cd4^0T^|zCmy@5I?zRXhDsb{uQo#LBo{q5ke$WOXw z49>5MUVm_&-*lV1#U~z&&p@s^y*8me2X521W^$~KV`m06mt(e-FneaUT9XsiD|1ik z-n|1uv-*WDrfnU46*CM8u6NH}7FciG z{11@4WX0K@_$>tPp1rVJ&hLSowS4x%ygZ@z?o=Qqdx@LgS$}cU>*p@{RkvAN#~rDQ z+^o-eTJ6LoM{P4U8kO+<)MAC-iay%F%ECxjw((onqLHnIwv6Mc0kFB|lGtZ2hlh*d zA;VSKK+bx|3z)>+wVm{UXGHEjb67afI}$c>6~-qpp^C3pXR=?Kf4*_rv2_`zU4H8_ zJ#O!>aDCoq@8SBot2ZCgj~j~eJI75km7L}JxHTECx`%d-5%Tl4`C3FZ?Q8I9VWtPjtnoCvd(PV_&Z1>Iz7w}G5A4FvYclDiW zn9Ikv-4P&mZ>%sxP>1A&t?TFb#-#-Gn(OwG)6nK^6|`}sq3BhaKy`b40O6;M#3^cn zeacSQY9zl9N*d^(OQ&?k{E;DfS-N)aA0pW@16;c|i$b_UJG8Da_MAlUE2;t1o-%fE zayH}cO%>EtTP9AK#Ur_51^AY@73FtDLpf)7?Yz|HDf-f%8| z^u{mK@WVg0{ri8H^gD~Qx14;L2PEK|fwkVTg#~PAtsDEsyld>@Jy?}f|3O!S0-Wd^?`wmUJ`PoV%L#Ak?^6Y7- zF#(tL;br<1ds3l$kA*-U^OSJAtT0cxL*Al$%KTx0@SPLyor%C*p#^t`yJd1n?PmvW zvp5dCSr~U}0D|05mrF1MGT4N68{BOEcERq<0Ey%ri0U-4 zK(e(4xeYkfY?51nOUVIX;WKxe4w(!W-g;7av*ISD7)+-qAGegcEb&%A+!U_?$p{T> z8FH0ykkTFI$-x4O(MlyMZh*DkE{Qo7jTTAP+lt$UTyx{A&=>g}>6~x7c%j`ccHcaIxd$C!`i#%>NX(LB+0;%lW zMfW)1;EQinr$tDsaSTLr=Uar0+=WC-QHi5lj%r+WR%0|sjl8>pf1?9q)PX&U7n~-G z4K-;IJ{&^6(OH%o4HfFR`uy^hV7);b>HtS2n8cBw2mw%EY%sy)FtL^JUvjJj7H$X5z0Uh1sy`Hx7vVn%~!Qj7~&X0#TQ_zvFkP*8dcmQGB zfl^d;;6aM0@=gl0;G|dRld7Y=j>Z|r>r^ktq+~DNMuCL8=w_oaX&N>nJ5!=>6AQpl zSDF)x?ZsFjcfNTS1+mKoPhGcnxe86PD3evH$mH9cPuc9#?ce4iZq@g>JZ?T`v*Q+Y zZJhvR%H33_Ys=$iQ#K!k4HEhwZM!gGOt1?YM1dr+kA0?Oqrzs7hI$?~~6~kP{ zC?7PdbAtUY5H;X>iFR{aG4NFwipe;*V&A zzA1XQi&dAsYP@@bMfw0-A#yk(ec-D55^^}{5H;_f;E&vQ!TAGM{(_Uo&8BcPTInL3 zk$B1^Jc~BD1LkLhLII0W@^(&86trfio4p0+J#f@zu&CsQk-(-?>FgY=dBYAtgQ>^vMAIn<688_)i2a!mOvgH zS#HH?Q)8T#P;Yj9hc-sUKx20?a;aL&4MkE16Q5Y*(_n82pF6SmIy}WY*nU6ccBEW`zOItfBuRNp(5v57@<_(7 zya+2Afzy@;)C%2gd=3blI*h9Nqxf(rxk-qrH~^H|&`h;QZTwL#2IS?96sS(If+yK0 z^0Gt)=LR*3n#!=pQgY?(drp_xL3w#61;axk5gIkp99~N#1=$=XGy%;)CPdA37qE=n z1kB4DDp*uM;`ZWsv%0A;NRAp>T-W>FAxXjyc0LZ1FDF1-XWQQyUv58 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 literal 0 HcmV?d00001 diff --git a/lilypond/string_quartet_3/coda/original_output/score_template.ly b/lilypond/string_quartet_3/coda/original_output/score_template.ly new file mode 100644 index 0000000..fcb48d6 --- /dev/null +++ b/lilypond/string_quartet_3/coda/original_output/score_template.ly @@ -0,0 +1,156 @@ +\version "2.24.1" + +\paper { + #(set-paper-size "a4" 'portrait) + top-margin = 1 \cm + bottom-margin = 1 \cm + left-margin = 2 \cm + ragged-bottom = ##t + + top-system-spacing = + #'((basic-distance . 15 ) + (minimum-distance . 15 ) + (padding . 0 ) + (stretchability . 0)) + + system-system-spacing = + #'((basic-distance . 35 ) + (minimum-distance . 35 ) + (padding . 0 ) + (stretchability . 0)) + + last-bottom-spacing = + #'((basic-distance . 10 ) + (minimum-distance . 10 ) + (padding . 0 ) + (stretchability . 0)) + + %systems-per-page = 3 + first-page-number = 1 + print-first-page-number = ##t + + print-page-number = ##t + oddHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"test"}}}}}}} + evenHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"test"}}}}}}} + oddFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} + evenFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} +} + +%\header { +% title = \markup { \italic {"seeds and ledgers 3"}} +% composer = \markup \right-column {"michael winter" "(berlin; 2023-24)"} +% poet = "for irasema fernandez" +% tagline = "" +%} + +#(set-global-staff-size 11) + +\layout { + indent = 0.0\cm + line-width = 17.5\cm + ragged-last = ##f + ragged-right = ##f + + \context { + \Score + \override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \override Stem.stemlet-length = #0.75 + %proportionalNotationDuration = #(ly:make-moment 1/16) + \remove "Separating_line_group_engraver" + \override RehearsalMark.self-alignment-X = #-1 + \override RehearsalMark.Y-offset = #10 + \override RehearsalMark.X-offset = #-8 + %\override RehearsalMark.outside-staff-priority = #0 + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + %\override Stem.stencil = ##f + %\override BarLine.stencil = ##f + } + \context { + \Staff + + \override VerticalAxisGroup.staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + \override TextScript.staff-padding = #2 + %\override TextScript.self-alignment-X = #0 + } + \context { + \StaffGroup + \name "SemiStaffGroup" + \consists "Span_bar_engraver" + \override SpanBar.stencil = + #(lambda (grob) + (if (string=? (ly:grob-property grob 'glyph-name) "|") + (set! (ly:grob-property grob 'glyph-name) "")) + (ly:span-bar::print grob)) + } + \context { + \Score + \accepts SemiStaffGroup + } +} + + +\score{ + << + \new SemiStaffGroup { + << + \new Staff = "I" \with { + instrumentName = "I" + shortInstrumentName = "I" + midiInstrument = #"clarinet" + } + { + \numericTimeSignature \time 2/2 + \include "includes/part_I.ly" + } + \new Staff = "II" \with { + instrumentName = "II" + shortInstrumentName = "II" + midiInstrument = #"clarinet" + } + { + \include "includes/part_II.ly" + } + \new Staff = "III" \with { + instrumentName = "III" + shortInstrumentName = "III" + midiInstrument = #"clarinet" + \clef alto + } + { + \include "includes/part_III.ly" + } + \new Staff = "IV" \with { + instrumentName = "IV" + shortInstrumentName = "IV" + midiInstrument = #"clarinet" + \clef bass + } + { + \include "includes/part_IV.ly" + } + >> + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_3/coda/original_output/score_template.pdf b/lilypond/string_quartet_3/coda/original_output/score_template.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d30c6dd35dc8ba234e869ced4396eac8fbcfba2c GIT binary patch literal 565816 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�e+QO=#?#6gk><5Mqi@gOF#ct|7v#A2UfQO1zIT5I)4DpVvTIo@k$6-!E!S z5-rbG0Q^w79)M8rivXlj@M}fDmW6Qy(B3YyvpWKb1ne3CxJ>6BlR%`vxC1o>=D7l` z9C&%{wZ8wp0@wFvx&iF~*n+Sgfcpm20OYv$YN5-_eNuLDOzh2GnXtwOVGQR z2RvSY`}<*4%NyL#;4m1KA1z)T#X*&W$?sJ8p=l z{2f43a3W;ep!bn^VNgxTk{MY#6r0=;K*)a>B*|38`GCp}Rya#mNMd(4`3VtnRqq5K zS|XNCi3ea|nwF^f{Z@=7Zb0a@qD=#H2If>6bC-tv0GlW7_YWh04p_9I4UJZQ?`0L8 ziSfRZ3jX(^qqlkEU;py!?_aCfzM%NOOA3*R<=~b{C!Q-;-Rv4zD~104m;4*LASh8 z?QlkLk7DGSCkaYo4YbD$zPvk$4neUij1VBQF=!T;Dg@rV5W=uM1@#`N(Pt|Nku4@* zNGhn&2LhLVyD^QVJVW&^+^B&cJ%UHir&)KayF9SZRu?aVHKf>!v0t(=kA05h{RdiyE#Z zN`mT!C+6Qs%uVZz2)Cjj!@?BZvAl^I5_6JAF#Yj_0PTg2OGjoV2%zOq1VsoTz!_c! z1wlW?q)amVZv-Jyf;@^gHfHmr1ipXcHf;7b*eY>iFJza4bFidQkT~Sckq0MeYz>dx zad!wJ06~+E03>P@nh~&7VjO{J6s8)1RGmUI1hz=LLlAEQ3nSYgydce+07cZd3f`Rr z@nMV#DT^yX5M7N8zsf``S#e|=D>L4nL?PHqVQ_T{vaVW7)trVYO$@Bg9Q zRloi4`ybz5vO>`1k)g(2$IQ^YN6CV+*rAVyM>NtfEHnrUzGW*)GySYkJ_X@goPpj= zVPs=qi^GTkszOxAD+htyK?)^Fu%dY1Nrl{qL9 zq^05<;Ai`}_kI;3DMBHoTXgL4&DMyK5U{OcaX?aIS3+1w5Z$bmKOTg75=MBoNQ%3c z!OoN;2s4Dsm3YO=Fw5|}``Zvf*fNhPoLf+5br|E-+J_ZC3g^F$QnWD3Oi}#MBg!azmoZ&GNw^d-G*0+8 zP0qgw$3q{4S}6ml4(gcUo^Grc7Au!-Sci{S;p!S01`!0uK7~VKP6FLA#i6=IdE1f) z*h*LsA4*jz&)W)wVBbbxBoc&$(W)xtT_=EH(_CN#;Doss+QH*VsE;G;5kM3-S@Fgt zl4aM>{XPmP^2oy_(NSn(%Gi)JE`!cN@p~79LPV4qW_FcGk)1;*(KpiaP$|3H;N45& z9NZuZ3gseSqybUdr@)Sym)a`aKw51T@&IWBz^|Qq+e2)vNxOd}l_;?hQ6+uxCy5+-l%iME=87K&V=jA1s zzzj$+pCb)6AR4@!-Z6tK24IL5LIe+dBLYz+!a@Q)yWEd+5Kow{dZW*gQ{9L_xd+SL?LR$hyoMnM71I>#9@zu zuN5N*)P@s9RU8ErkEkJgpEK4vf%PpjW1PIvNnD0`k+=)5Lp=tnn9k#Wub}7eU;p~+ zzyJQ1uYdjW*FS#$>6d@~{=fe_9Q3b$d_RBx`%i!U`u$&i{qcwIfBog>zkPXn9SV}9 z?wOgpQ+%3OL1^3s<;A&j(IPMA;i44;ff%@g(VLyb+YppQWS&4&t^<*TlSmK_HoOma z8_4tSAh5Ls_l}0Sa`Mppm_<@efvW~Nl{I&?8J@XFA{sS<0M{E(`Dz_NRB%AZG-%RN zZ-c5mQTx3U0}*sf*@zMrT!n@7I1ar(3~>-P7TPxVIwE!Gf}k2%@KHSo5(GjpEKv`6 z__4d-p~m-bP%&fD1gohyA*KS@-Hc^|g5LOk{r(G%#DuM=;cx)*@GcteM-$YdH@<(t z`D}yCJ@2fvGLKkL2R*xQmsB0%dLlJU_Y`;}QO?&QBgcEl4WMI6^&Hxr=E<9$6qG<2 zkliiDRNqcOrroUu^Jem{CkjD10s*4cBajF~Yq&p6q_##DPyp@@3HI48*dR}b)C_>F z2QhtRpvVBFUV;_Q)viUAJeNSkn+gA?$;{R!?|gDc;VOn!KAu7_Q!yk08i+dn9p*h? zA<5hY1wnXWeGXP=+VtL;-U9`JT~-XPT@Y+pDBA6g{+lx6EFzNjyQK@K#4zL&@-tJkP?#^ z&Pk!E3^8=$sQxr=jJ?i{24b^Mq%9hy^e`}y#7ng(K-|mTG!!J0&P(SzEpieTdlGET zD1z<*d0ku--3skD?fMhycK@nKH3;xj;UCxs(w2;*R46AD&iv+gHhuMAmU*MJQ}B?jtr+JS-4D>0 znM!e_P7wFtfYVm!duQ)Sp%O8`$jOYZY+ii9Sot_5BXSZTrL0=}Mm6wUyT1-4DTu7O z@MBMcFBs{ZbOP==0aC(9#Ryj|Nu5A5{YFyo1!E0@-pErUry2x6mMoc3QD{;z$ak)6 zu4~Uq0#ce^Hf$KcV&(-J!qz)sGvK8+&Vrpo>vz9MII}bllngtCH20(Q4!yq*s+&0p zY%B4Twu#Zq#&*coaidkNZ%3A z%2W45_L2}6FB>&^Qx+B+S!7XVc%khhLrA?0Y9f-L?Thv~_;J9R_hkWyfT3}5l&B9! zM8sHi1Y{I}E5$Y7`;&6i9rQJY?fobeKn=(HO+W4=cxx7QiIN=$T0H=kryb6Y94e5J8paeQf|h?< zOVHk(Wuh`ZB&w&*8TBx&#{TyDljOaWFDiL@Y@V&Qp!B&cMjX=y7A_9r#3!*Ht6n)scU`xdX_-K_HM%@Fv z$vLU^ecBnJVb3BZeszy^1CAzyjTc(#R2y(jms>P-T-%_tP@+(@lgN)$izlT;9_^&U z(;_KME-N$~TIz+E#YT|FYh|lRYq5XN=a|E{Yi67`Oa~c9f#nV~GOo)|1ar>r=M0sl zh23*QF{feFQZGYQ%!#{@NHM2ehL&~`xbZv3KvLY=bmAy%W$KtknqNU^p9Bjn#$5>Q zoHz=3v~%7&33mD%bwUUzMOw@wpj3j;LJ}IDEhx+~Xt>J+xO$Wcw3MmJ1R7w`QVi7I zaBYbwfGyEa%eo4MK^9&JPWRT1@j$kLwT5jAK{y$V3#nDd2O;Fxmml-n}L0tI@;_xFG_U?LUg80x_*pOh7jx2~&$= z0aS$_dn0Vwct;_0BjBu%Y>O;&5*1#ez@{2MHaYsbkp&;EINWt3l&uxGF;(5zrfzcD zT^m({5XlkH?sG;$Ay;xlmKzeQy$~L1tWmg;l^TUy$VzkjYxZs~+V+x6VF;AVbLheN?m&&uJ)BYrtdOqRaxz@4 znQbon?EP=Ih?T-@ z0e!vM>FYs2vx$+NXZa-~xAJ)+5)uor0*_dB>72A##*Qq&dY40DWJ3Ucwjrew=607B z03@|M(9!Z*1+1Hw!TY#S7F;2a4mYL3c$~~z2np-a{p%3NDS(;e8b>xZ*AdaT6+;p~0I1!(aR7p@9VZ|UT^qj|J5WUN$bWxP!ia%l9DqCn z#a06FCM|IRX53k{;27Vpy?sGT_B9Iqp|555r{gDq$>cx(gt+%&l0M zVMGE_u(H~Sfg6}12%u>^97 z>y2hx5H6ecmYANDwRik_;wa!uava?Yp_H;%-C?6ar1Lco!iY)H&SJ}gYUT*tXk^`e zW(iV@8_V2#5H8>p1l9fg3YK0R%0^ zNdl!nj$v3d05fmPGLFcgkTh?81wx9W1Vr=jD`hrB1UJK?h9DEeLcRlx zk{0(g!XJAh9W0~)SvDyl;)Km8iLKV|W%ui3^%!4=!_0s`-U&hJl6ezqI!J_>aTj(L zGz@OaJivzFN(UMsu5dIZr&(+Wq%S=7-Y3*k&`bv&G^~|@EKU#cEb1v(CphYJ??O0N zWw0QF}ch8p!T5^2m0zzP|z!#$F6 zWbYb4ftOALH2lFP0$Ux@C{6OZEQ2(j1LQNIt?2I%aJnC=M-*Dg(0i~DgMHWF2=Q1} zzCNTFH&9OHDhwI|^Rstgxm0umIfsrEhC!OcO&ZoKqyd>sL^>G7 zz?Mo_A||$IsQPhlqxW8!fR3eq#1Hxa{96J5%Lv9%=OA(^4&m3dRQ6|YyAt1jP0}Fm z@lIwU9ZLHM!;RT-Y{0`zGEf8#9RU>4R#avurtI3`mf^(Ke>PBos30`tGUej!f>7mS zi)b*LNfT>}Ow$Pp2cmzsg)0c{ja8=PHVEKlWi1P=0MV=oF=1$@C}J^W7*ceL8=y(U z=zI45D@p++2s7Oh&u9@6miYoZ3fMj8$ck+?w)bBNHDy-4SXAX{i0e=WEjcI_N(v1Z z8vLK%x(_Ok7%$!TAyLz$D708t-hw4AL==lGd^1=`MMEVBP5zy?V5u7Oa`-;jRFd4f zn7Ap{R0ntRAiQS8z2&Ptmbi?X$uZIikPoS4{wq< zS{_b5A%KwWsE6KsYY~7-YfM&%*>Pc)sqpb)dJgl=)rX!g!(YT#->PeqgL;|a-W1t zD>SY{BCSvri7gPp+ppX)sN(Xnn;6Q0V9+@9&PtDi(8Q9w`-)n{NlYxdBq58cly|Lk z%fD~S(lt%gNgxU4dGPit2>g6*vbL{X6N(@lfn1{|!3Zt>h4){HDBRBjW9W&}A=mRT zp^{0h@6Lk77U$|m6szrMB7B}OTNACe%b;!K$MI0mfPJHLC>rZ95Lo^NVIocBS=Uey z8YXQsIv(!?fz@^lo=O{q)%msBzIIxuSRebgqEcbPY2O_RRss{o9)hlX~HsvXouX5u2~Ld?1pCN+8wmb;m*kjjiU;K8ga6{Lc@9y0r`mGl-YaUlX%i}xWF zu(rM2j=y(cnXqX)nb4|Cm}FiFD@~)SOl1O?Qd1hwTd+hFR5B_fOcNvx0QXE8f#8oGgESet!CG~y#P$5-2l+xY<1o-hX9;k+RBrCmu+mG2qaZ>wz3+Xlt`;B4Op4k};wX zC?ixgG9(a_hEV-8w#pDn;z%tO(bJZUaU)m^#O|CerUNth&01_#ehlN>?U#OpuKY)>J$oMG(<)KrZht+U50}nv+cEb?-dB)pAwwCse9UQ zU_nensXWg^lf_AU=uX0fSl$ksBQQ<;} z&e=VcwZ0B;QJF!RR$5LfCMi_vUPuL1>RukDpaydfbjW@^6vZMBw;~?OX+dd(B@faA z792=2ch1nLM*uttOv&a%y9P}WP|(#yn(KJmPPk9(_|PQUba?}01%+*$1VPL(hJ?IW zz?4)SWD{d$wb2G4poA)>dP51RFjnXkugzJ}h_mlfV#N}qo+Tn@fC-su#U`EtDbvQF zQkuhtWWtkc(DF;BJ&%So!s4A+0#XV}Gvx*$5S1~FLmf2|>%fx}4Pv?Zt#eRuwLn)h zku%`#8IF#i(nc~6x*9XsNQsGNu$%&<0q7Y_rR?2UqDYKqf&C7gnNkg%T6Lm#Vu=7m znHT}cQzkaQ-_Pq3L}amn+j}+s31sMQz#;S13(5ExuP3` z?mUd%UOJ{$5YX6mvH$=f?oo&!FtLJ__iUL&TujFu}Gm2Z41la3h41sFaY5!Nhv`l)j|= z+j|y}#6=hkBD>(?|G7u98yx7^UpXb;OoBb&vT<;^(Ac#pe zD_TGi;_qe6h34{sp_v$a2cXM%5`?+?qwsE#;O$uAB-|x4YvOWiN>ws9*@}{fGASWW z!d)rVlaQ)XY8vw_-jpRyf*#0K(n0kkq*r z_}+Q*bnk&uDQ&J)^6o4WotJnN!rQ!*h|rg@D=#LP0xDab2O-`_W~a}o>L*b*Qz(eI)qA}dV8Xh+RvQ9eF4hoW%5g}0Tf--)t|PYtp}iF6fHS~4 zu)PbmTGS~xp&V%Lyi00Sj?erJ9i6%NLl6~0gUZjZ^^JQlVbiflZC1_{thi7)9^FvW z9ty=8fD`GU)3H$a9#b9EL@?p*UW8U@q6g6U2_ETU6jLqIY>TG55TR);e+!OGSKdp!$(V0y>2iNB&hyG=>DMXRgG z_}C@G6++^Q@}%g>eE+)e2ZVK;9z@dY{0Nj}C}QTyk0I?Z+;dYN&WDz`#*cy`f+x=h z>5!OQC}QtjQiTlcdL!yL?*!m}4{881y$9&ya0pzR$SO+X5X|g1>pfUG3^OTUrd>?b zCcSYFY;mZ2P(naXJPUrvHWMc&Q=c@SCt?t;H1ZZLkqflZRUU+T6~x8hMaYm4r3};1 z$635b%Y6_k3uh)1N_jTbNTGcjyiH34;pQD^eTf`09*KAdZ(Ik9A4U)uDUb=I4RmG2 zTq6aqxVw0lmIwiTL7BK~z%aAFl4;`JP+eZULyNroP8Ed#AVR@9SYAo>GmXvR0!BOo_dnR=!<0&m!I zsPAzFVuYZg$nx~n9$TjBsOieF(EHjLl$&rDNA)J8DvogM0yJ@?6K~IQUj-FM5K~zT zl#^ku;;4-rd3%-!f{LR7*Yla(rR~7sHdAplHnAh`&I0?ixD?&jfs8Q1YEE?>nqtd~ zH)l~02I#n=AMMPb5Fn*_f>O9*nMW14IxT4`;I+U1L*fdGQu4 zqG7HOv`2gh2I?iom0SlXiC~KSXT1j@z(fcaWH$pSdzThPVW_`)s;+{lZg4qA%wN~3 zcfvsp0**_p^4K6)KyhKXva$@WwO+JOkjG+|Nt{IZNbB4?tgMn*B(#Qi7i;XUR$5^v zpXC=X2lQ{yx@2;Y3+w$lTtR4RX)fNWMM0Q%AjFC!tsH<^Q?@*>1M`KJtm@*8TA*#R zza>>D*`Kqx!0nKT94uXY33{jC)QR(fDZ}AR85Zx;vLeL4AwN4-DjK|Rf}+3Yp`yvx zap1>|8@*G@%4#1acC(>GTx@!yAo zq~@7rSD~#FWfHf7MOU`_&fasv6$Dgom_FLXXlq7rq_XobCIY?mgo@w}%F6f+0(mbO(N~|Pe!&JKSgK(V#W<=hV0`ET;g9%O95!IOJ zpC+>6fXrH+{s|e$CeG?jS|$oa#w)>0l2p(MIY)|`(04mO2IX~JyyiIS0PmauaD%Pf zhk6D;SXtrd{QFBTSYG?fG1k2^OZok)OM;jSe+wxTL=dQ)HHF)||NYkk@Wv&u^h8#m z*ws)nL~%D z2Z78@Ana|h9K{hoQ_5mhLqqAJsSLoRM;2Vqwfox;)e&YKgKM6dAeqWQz7wde^8_F; zjH?m5|A0wM-U>6PcT}++g!ZO0<1`lpK3bFb>m=~;bdR$5yiP(2Fll*hm|$qeV#Ix|@ukU;KekTq%@Di&7jP zq=J#CQX&cslAiZv5hrV+Ca7x+;^t@)ub1K&dd~;tWe|+k!j@T6a_4~h=#+QewaO7< zD2W=T4Yf2%gu^`y-jqdTO(Dv-kFec6!B+)L08P?=eD?l0hWJBs@aQdBX3oK&nHx0C zT@q0>A58QN7{XCBu!c|VqgF#;o2av~C8xAp@bMa!I`Y0|d$$d4%#(Ry*O!pJ7yu9<@R z1pWY3+h8M1D8%Gx9Ffs9(-oXFYy>#}XspM(s7{({DbcgYaA{}Yx|_Me>TOt<&7%oM z2!f9Th$t6|M0A{{+WzWISb~ytD}-?jXp=q?DTKj9c^UbO)%&o-a{%EJ)~b{vujgQb zjk2G;*T`3^1X4(OXf}OU>_tq8d~dRZ5)5s_$}U_U4nOln4uL%d7DvPq7yw!NM*@^N z1;7QXQh@;F?%zb60`ajL$jRz0SRxhNS~xUJoAz&1D zq4y>+jsS>>Bjdrgvms!kOR9L%g433RVo>G^{OA26s8=p*YKBVC#l48yW(7a3+Z$v~ zmfCXBb20HnR@`++-gyOue!wA~#H#$TfD&lcAm~gqq2POZJSLmYgY!Ff~pvNl;-l^W%!chWiT1Krt9kib1r7 zi$$e)h=2vdl0y7KdmA7|PAPF^|G;HLu;P`)oj3@pn6aKobr8@xB_G(7=nKT_RS4;e zBDha?nP|IH7RFdPJ5{Kafw4OWaT#KrO=A@yu2|<*KItB_srb^MWlM%-B-_JTDf|;?{%D`Ik zP}w@?*XX(h@42D}Kp_YX5EaVWcu!R&Ld$im+|@g-1d@FB3KdCC)im0fk~docc43+z zGU}z4D5}9pg_KAE<&A|U$$^^J0Q~9mR8dedG@OcTd5(4cTwBDC?{lk7m-pP&)4iM23BvmLZ^vhCk6|~hZJL^1T3lvZI zmt&sM0K4~~UIOjvl=py3a4IP>VM^jp$sri@78)uM;9oWd zzC^6KKv|Fq>COeETI!yNTJ{t8{zf+Nek-F^+K~h+Tbojet3*`ot#Lm(pRYv-me*ng zUoR#0wU}#MQi(uurAAI9hQ%ppG|Zr(Z-n5kjo5F7gOjT^I!4|F^DM%)b|Kh{ zpb5_)z^NA6L+k}I?wP`nuYjj?j1D^Tjw>SoD(mYvjy`H%2RVpDwGpF5Lg4sU-gD&+ zLB-LjjIK?_G&nlF;y|zH7P{q^;I4wSEW|#dDbN^2F_333TyI>MdgmctO#;0#&7w^Q zzD6VlG@BfK7>L3Q;9l&Au}_kf?%t|5Vt~rS;T}eBx+285#GrNxWo?tmVj6!=^~=z2 zM%OHP%N1!smSO6}K2ijV=usN>5g}+<@2uW%rO>a7rvRs+Z0Jxf$!9@xhVHF*Dr7LQ zpfEV-i1yEA#ApUP)c4OgOJj7=RiP3oExZR)65^w^PiTnXreg@j=P zGYae|k?l^qQ}CuM5rVMY(M^yuBlCp)=)GO6Qh2RK!F#UIC#(WYw57K}Va93!M4f7B zWou*VraGFIf7#il{qplqKmYBwUw`@W%WpsY{>S&FVIFxD>~zsPu0#N0x)=fIY`XXm zfHxyxi^Dqt{K{ui;2i--%FEUbDfuY^?}fnItwacbOu4?z2FAzu#2yHY@S{@e*i*Q8diHUV_E}Xl*Kala*~_ zQ3=?%QZEbFib;wprD5p(4qVGx()aNaKe8bPIfr7zdXQ9iXdphc=RKI_izr> z9`OCV-Tb)ey7yR#AP7ZAGW&zOfslbVHUQ9uZb-NfLAc(7;l-9VKdwt^c&q>n3{pds zVJ+JntZ}iNU3@o5X#R}6lc|~{YumkgbCn3dWvM|DhyVa00892hQY-gh@*2UbcUFlz zpf_QpHHteRofF!o&LeO^M*a$Lp&L1X>0z0p6pl$f0g2`){sMS6mH72bGJcohAt`WT zceA{PQ|}-_J^zj0zlRIe1L*fJww**^m%9=E$2Ymg*xo&d4Qi z-BiX8-n>_3+yY6U5}OpD^(!>(%G^jhyIM^mX(U?2kU}`T+tu-Iy?@HYgQv~3dJ8l# zAOd;r01;SOOk3SR-MgpM2*kqfB(PM8kii;iIi0_QB@t?Zh(!8fwEk9(xw{E8LyN%j z0u^x+00>Tzt@6nFNDLX??QXAvMGR4dhDpKrIPL=N0HgF=x1njcw>IokY7j)P+a(ju z=x7kjNGGBn%<$<|P+bVoY(Nfoa0HWve+qZMybBliG{o`~aZiZ>q8>E2hHKUEP!X{} zBjvh{Fp(NYjg&LJ4a-R&PRFij7^zhMj6y;#{A(NpAZuPENbw8QG#q*?GCh!xB4A+Jl;G>d`Zz?&++=H$df6k`81F_)|0#Iq8m;s5ds*9v`n1;V$Cdhmpz4f1jX_=^5ZDk z4I>q3$g8wHWS~QBJ)>$cXgdKBEF392PY1dQTZ4DiFj3+AG1mKb3mCUv+Zsu3!PdZ( z8~!Qr`IU_>PpOp?lZTEDa3BV%dkSoMIM)jhd#iB)5@83;8(>RA1)$u3ilWVN1M)Np z8%e-{N8UFj0&v&H+=1dZnFml7dS=z3H*cJBUxGSY)+G=Dxu`pIKU=;=OO0EwdE=CD zS*+qd>W?-UyBH3x+mxg#Zt9$E-Z>>=puR|C>UsW-KC5B6;Gk`B-ArqQI z&0g-R82_Y=?Z!k^F~2TCVA|x(o2STSwS<6&0TcSt9L-u_O|zoL5jfdYJWW}=dGnOG z3U^gd^FgAjK+dxhKc+O=pjJEhupR{AC2VVx4>%Ys?g=m1`k`Y#bjcMeXwKVZnf68y zf{`t#K)0bUMs_0x2NU_*DDv=kgbL=z@y`k__6=$^#c!4OA?;-}?O8C{K{CioQvr zM{xlva!;anPnqfkh$k^FK&mIPaRYp57y+nF5|cF6*de2*AmCn2QZonm!Lmes$N?7# zn}IT-KC&Xz{%RHy_Turf%{!+|5dpn~nyd;vVvQx!&N`s6N6a?woDzv3cGe>iB-&YT zUISkesxgv}V4a*y3zHLJ=y{$(=p~vYKBJ}^b-t^HA_UxnqI}8ZM3U%f3PQ~fXMS8! z>^)Q9TA>Fm%B7wGe)~laTB0`cO-Mn=CkTE`ar1^L%6{b{1OYQHLLTUt5J(K#Tm)~I z5~rZzhH(f|;fACFmkGR8N}K^ef?-t(sAnJ zlsE)2LMe5sMjaFJtpQDUk?n(q(-PGLbIFi6?P#PvYMjrTl6CPG!=c{^1|K z`})g|zyA5Zeg`P{?VkK;T)!*D^q;=`>HJRE%HRK!UR-_|cQijfcB<`zKbMK2yefNUo%`A(BXjX@AFE`|cW&q7~&8A&yR z0F8Gw3>`5t-w47+QMIAMzRV2dfbMse0nf1)HQ`nen!^aMFJEs1^GN10_&3+vuwhcR z9la<3JjS422L>)L<_)IM@)GkAgyPx!EhX?ULFVlJAl$PE5!>Bx5_yYvZo@>20evx2 z!bU67%l_xnIk-d6SbyBS%zR|U^}v4&`&K1{jjd7K2iO4Wgs#?#L314ARpw_Ffc5L& zHq4u;&atK|raar_y3lzL-UA|;u$hZ6OA_Y%*rX98`YzDZK_IrS=(|s+;0^#bM6)w( z)y|F!0t&)A{|La#C*=W_ty+)Yc50@n_nYu728|Wa&CATs5d(@M{ykA3GxC~lbfMec z3kcIX30O`*;Bs}hSDNR)4`qAhKGX_E2u?KQzdz^`8x*8s1VTmSm>an7P6rlMQ4}fX;`O;MIT38@p|(M5|aFHd~2P! z2PdlliCU-a)j;LE+I&PneG~er9}8PPL^M<11gDj(Xp^EPY%Cmk<-l4aEcn-o|Cp&p zXi-|d()@h}uKJ+fflT=jR`<(c2VQ3W{{F~?l*{t2%#;hc1P#)L*O`w?5M48ufTk%? z)7-oQ7MZV~f8&TX2PDD~o8NCSM1&`0IQ0SW!fqepkw8a?M)G$s#cq_vpUUF`8Q?tA zl0(?Mz`T|j4&J`N5YZR@1Wn5H7E%~D-a;=hzc8rf_x-IPqCLWtEK@5MrrPUdlp!t zqmAnPRjdQn25jhM=I_ZO{oxLHc25=&N;#%pP2*w3Q&> z%Y{ZeowEjwNlpSR1N@uaNw5&&eG=+~ea3@@|Gi`rcADB&6f6%>*b$t=d%~_LOpvv5 zP1y0CmawWj3sw-|M$n=}Wa|MVf=mMyAT($O*1&o5^7HfcI^58~^*Uri4%#{~UVOer zASSDNA2I7pHCYvM(0m~+ig@S6GF`pj$5iaAroQmzwdYsyPJs=hR76M+4jN;oG-OQj z;h`Uw6TS3&#DMjX&jXtNN^abh6hYc?_Rdfw5P)^!#}RJ4_Wa6f{3JrAOk2TIS1D)$ zup=$oJ(_$0NDSI{1VRqC26^EKxu|lkFv=y1p?zd?yOEb6RE5!FFV()(MqW(gItH z<}7&a`894trK8<9BF_?+8tB#rlh>Y~`1nIKb;xLll3ltH;3On(p zmNBBa4MlAHR0z~imMDFV zz;Ib|+!5f8q*?j53oN_Wq(^30tP5C~{Hf(u?tyXvoK13V=Lzx6Td;dc`WYLVk$*(_ zZ(+uOg&(TB7jcu6(0L3hVR?eQKeR z#V>X*ORpt=YUDc#TJ^q`oHIpXIVhA4gS2bPY~DtFb?FjVYdqNGkt_-%UMTNaR&{?L z>V?3A0W`(n2)h@iuUarFl4MY@Fov4Ioc9sO+qwH7T$vH$YqnVoq9p#EI|#rCY(f-9 z&MtYV>v7m75&3%;KBz=BvN;ME23w>8v@y6=e2EmKZMIoh@SN&nG53!n=p1OfO>8~W zF=&0?or8mVP%C{fwzT|%dvY;B7n>W1q4yWEWCTF9dF98jl)wXA6z)YwqA;Q4elI$f zz4t6pSa!Djc9$2uNIjKOacOeyG2f;f827Wn8Z1`>!FwC0j22;&HidorjRt*{LO=RgNQ;{|5>9}pIK93=zN z6TiN7PEw)O(2JVl{A5JbW6HSAupUQ+dkK3Nq4lpYd1T%Fwu*|SXzVNHNDF9OC!P!blYLvS*VIZ6M}R0%=r!kz?xHPEMMAI2S} z6h^VB+K2f-S@dwP1NYnA2Cn|WZO|`%AbH#sBma3fdryswfJ!)W{x$}7*JWWE%}LSB zkqyX?1(;GX<3`i3Ja!D)_MwkH9O8~}t_?zY8Djk{UWQ!4qV2Im!=WWk!X=mzw;_{Yit=K^ z?`CgUv_ufpEsziwAeK#10osG>e%s}OS&2f6y|{ai7AmdcgnVxSN+SToJ<}E-LkBx^ z05&xlAtIpR>&Cj^N=H44-Opfp9D1kn7C41tAS*ogGFWhNVHI3_1Qvk-6PU@z7*Z7P zAtq2|@6i$iX;nreTJ5VOrNm8u=RR#Ih`f+^shL^!H%YG*QvVuhy?L3?d-tB7cRZGxmZqH$y;B~ALy zBnO*8*k*#@hVkC8r3N8{GjtoEGIu7N(F{Us0dQxP$CS)5jlW+8qOhoBW*D31X=vIM zNG0lxAjqply8t>03c}Wv7H{h)Fh-TKk|`Fwd5ew$JRiRL5+WVh4V@$%(3KErGYSXo z)8X1D@81GdZRfrD&1Lm2E)j(oy{K+H;PQ1fdTAbo9ngJupu0D7i6`O?g8Y17Eu{(qntSN(x%rEC zb3sFekrOY3I!SiLM@Ewa_ajv+iLE!7ihCx#o6E@XX@%2tp9Iy5$!^1r!`Hsr82GZ0 zgTUxXmBFfZ`sObJG%UT)+n-WGuz3%N-G|Kx7GaEYa6b-g0WOT9ay<^v>|U&Nn9`Zw zvndqrln}^@Q0BtwOoXf~xLhsHbksx(%bPTD6PYo?rHksTpAOb}y zAnt;8A0-u#3v0LKf%kK{k3j95F)e_tlB;p1Q7~-+Gj@{)?gLQEBXOEnc+XN-%2FPY z3H=GMSYkvV82xbt`eO7yrNSFn_95_2E^!I8`h4KUNZ!ccdbT*H*&eJLTwf9tI(4J>QfA&RcKrUJ9@rP zL7g|&*C1Dyu)Z8G%^SEx00Kj0rR5l*CZ$5t87|q`5`!Z1B1$>!WPL*n-C3M%nZ(N- zo{1aID7|L_fv61K2mQFgySH#TSn8QHU1f)5R(mk09MEnPV$5?dwB@H%a6gLewNDTs za~6<{!UG1Fpt3MRPAnG-qrL6tOZCv6u z1UD;gLo#j_{Ch2hyD-?wk&VIPX0sunv@l^|37jLr;F%SNb?#-S!S6oG$b}wqa0@;y zBbO@*GAa-UC88iXA&j^?xe-rM(2XDljGY~<>}_1+<-}so&BkHb3#m>0y{E;FMg(y4 zaTE;i;c`a+V10#*H8FIZCCl5@T8EDSIw4jj#2dIoE|6N16ohmOw9l{?uiVZrL76&p z3p|)~cmtRF3?P{^@_yX6AP@JVnFtPV;SwQ`V9th!gs#CPnqD5koaqIH-!b?PAQDp} z#yyA*I$ndmI_RfNP%uSK0sk^(fwYBf2(ITK_-Jtv`a%_3A&^D(b7gdR_m;Q_0V~FP z&=suMhyVk3H*c3>qB{f&40Ua;L{+4h5eOwkQFP&HQc!ECs2$$91)m3|D!^%StDqb} z2m$^Hw0#QZ{p`Ioj3_j-frS*Oc|iyT<4;LveM}1rP6#YzQqCe7`r`2LzAbkI=$H>U zSy&VxBgd#s9rM%+N%<)o#3^W$huXtvq=QAIyh}iB!kIxchFr&hZjO{-5Y@xmw#W#$ z1c8cBUoRtIl!h5HV1Ie^Ld|R)gb@$i$$8)&-nL~T8LpZ!1Zp6^H=HeUp$3@PN?OrW z2;R6wQ5fKz)U?Rn!U=&b*L|R{BL?<9_(CyaP^D2+HNj6ymKbN;Yi8$Ob9mbpX0GV+ z!%(k%0rWa-iHW6NUhG8+u;(Ps&SmhtPHl7{L5<2{5;Sdwk}=zpU`xht=HT@@43PC?2%PCUw95o< z+JZYe*Fhc?*Kk25$qPM1p5X$XmyWC|$7lC0&_N&Ac*MvRZVqfE(m|ThLcUpviUK?{u@P4q4;_YL6MLp>oEN(4l&B6baDFU&0aDmJfx-CUV8UDj?p zGRv4?U7$LwM(mzY#K`d$G+8(jQ#NTpF__9Pz0OvUf?%&NS5?r44<=h5Mi5jLNOXGU zLEHtgQWea5FFQ>3CIF{4(F5<&GLZ%j{t@l-N?H{&U`9>)dj>$1O zvcw6f$XWgU=R(dJ2f$94W5GYjXR+X)ihS1C@RysjDF^Nl#4>NyI7qb2+YErM3FY0n zN-Z>W0ws+_C6H*lAEL#}5UvjI!V&?v2kbCR(C*K)w?kLd;2U`xmdJzA8s9Hrn$~z~ zNWC1?Hzo_*FJa9BQ3`dH1)j>`%Cu=bgw0Y=rBEb+iQOe+9{NfGjqh*d09y(!5;p=1 zTagi`xB6I+bP(GNO*E2YFLQOK{L}FDIKKS+)6akV?bly^{PNomzyI-lr5rZpF%NIN zvQQ4Qviq^r4OYaXFs&TX6kJWAFNwY1%6$vU4hnW$ z$S6ZRCL>_Rbo7FZGy>4L1-2f%PXN<15zg)tAhcxZg<0|#fSL@wzs3P^u5k&J31{TK zW*ikF6KZ0x%-t*|JtTs+$^mA=jQ}VMpdSvO;M*CXEaqA4JPFkA_vHZT-F-jQLd1*~ zLBk0CL9_xWq#A%;L1onW_g^`%=|y*Vf0gA5!F>hR;gj=_=>oJFw_I_12(FrN0UkYR zA+hT%%-e-w2}Tv2pMofe8vdMzw^xbRaAh;|fM*(+P}YR!-g_o^2O?hW%s3vyyDzBa zP^P}%csb$((?E9zq8wys1}I1|z~(-hCJS3R=i2*Ac>VrcGh^?lQuE;56xF97Ra4Yh z$vnKB%2F6Zh=E5AnCXexT*{OKnts)XH&amz$OYfL_XhPUWa8 zAmTF9I1XDk&w&p?119pODN6d34LbW9JW}x~hXXEENe4*+fP4=Z!3|H@w=}s>F_1g^ zoe0>*Tj1R1N(3B(*zv3sgy63_Br$m($FI~ylH9R&eM1ObURntij3=M7ZuAh3XQqIaSS z>4b5mdGpYXbi>vN!pZ8v>GsgPe@c{#OJ&$ZxhQnKAJdGd7{qlz#DmJlodioZyiWov zsoGY$uLBu#TDqC8H>03C;S_DWe@a9FRWrB->KINm3_kEML^QganL;B7%YZTQV3UF` z8u?nL3ZSSf`BH82~$Dz5`I{ zR&f9l70k^5SRgS15LjvipffD>;RX~CsTlxYAu?2xQpeppLpM0V6Z7=W$lF=swYN?| zx90l(z)_)B;GNPNj_MCUi+Js=Q|1+B3Dska7xk-`Gkc;W0Emcw&0_Uypb)uEi6G2u z?y3|d{d4}o)p-gR^gj0^OI5@ej3~IO2yF0;DBM*MTZlXC(_CfIih|8*6>PkTN?eE= zRIL{x6{re%xB;Me8x;X3BO>~DRwze-K~q;u?1#J(0^xy`exCtvFm`y`l=~hO znakzdJs=k7z4h`aJj9^%jLmCctHk>dz|22DT;m$_)ie6<_k>h$mvVo9?HMst;}9Il2*;i3nl;$Le zhJ}IBsUkX6-fX3-Mpn!b6hNCulQ8WTn=;cLtI0)B((SvB5YLg9S<^?4i@VlSs zCB(xh*+5dT-RL_$4j1cSZNhhSa>k>lH%t-503QD=X*-Er1{JHU>~wwxZaQMaWAXHc zDH^EiIncraS+JCax(FJuBtX%wn*eo;XTgw@Pj8u`U;K{Ng=Ppl(j4(lS zoP_2gzeofwB?PD(DM7p2Gkk+oDPcwZ7hRg?S-Y~Hi-H{G3Y3mj0{22VYPk<(ov-(! z5GWb~&M(%_T@-w=h!Xe&E0=LK#UUDZ)JG%BzYH1pGe;EYm^Nrgo1r0{-aKWIz$Xg% zE3?)U@PH-mYlR6gVd@?}QEG&%K8^esZsLh*lerHOgBc-%SrR9)y3*Af={m=z%F*e~ zQxsfe+!Sy)e6fx+>(D6=hoU+J=oYfUH_Hj?r31Gw|P7<6fl+k;s z78_AuC)~-+PkM+#O$r-caGYX96aU_Gh)++6@eIKU8QwF`;?3>+yV(o6S*Aw0z3?cT{dsEm>UQ%O)~k8F(+ z1Rl#g6DJwWLC-rJnuO+`I|(q+U^CG!kR4eO$Dti@EdB~@wHpuCr-_R$L&Hbt^ad(u z!j{j!&%pKhiH^YX2AJmkQ%1H`CKLjtfrJ*;2ki%AXtfVnrjCk1W9|KH*r)K#Lepx6 zG{Mv4^HWtw3PMBw;AFIHa)EyF1VOZekv2PmQ0U8J?-f#c6chvfnAOgclWt=G6%X`; zP{@Kfs2Hj4!VD2%cCB;6NrhDf4c{dK!>yS>nh&v2m`6`jH;O>6Ho$Y0hG|+{o$Sq2 z0#m$o;$W?hh>T{^iCbuxSZ6W40teh&1;qgIo1zmpA*aUw9tE>T4Gf(6X`COhwAwf0 zzq>g9-P1d&L<|-NuIR#{4~IM!N2jRi?!Av$t{70uz1Go{h;#ytb5QX0(9*AWp|1^& zhhq>(+A+Tlhp5s7HA0}P5Lzg46{Ll-ck?o~LU6uLn++_K7&jqSx)v554=uQHGdkLI zZ^VG1Gv$GO7c7{_TLg^|h=EH94Xc$JgIiA*!kUPine=pLNP6s`nR?l~ zt*irM7FOS+{V*_Yxo6KL2Hu^{$F5N*Eei|qi=nWymf>!LqQHN@j9JQVn~=ofyp(6R zjS+)n#us}ZY{3{&(BrU(p96IfzEXJ|_O*9j&V3ekCM~Q$Z$woUy>CQcs-h2X zzP)32yE&rLVcQ(cy1jY=5>mj`Z%N>MRb;Ear0eq%a zHvviwMa|Qju*AZrz{N>hK6UZAfQ#L`QC-6pE0c9L3|M#=H-skR`vsy*F=$Bf{Sz$y z7L&hW!a@vSKi|coe)mNxEfJ{3a0nd;S1>n>SZWMdX3?TEg%VR}hK@Q9{Yd0Iyb2el z24e&f2=^#7oLK5rh*~kO0ySu&T9KW^7gJ(WF*n>;;vhi9;o3+(a6off-1f73@^TbO zh(i+udlYP`xYQs7u%^8ZGGsDftxe)?7_!8L2%EzCHgqPS_mC8BMha_>ZU-8hDc3vQ zM}bmNR)ujP@(3bmqk&2M?r>&r$ufc{(I-I9ysQ{*R!#~lhDy_$4px9I*zR3fM&Oha zHjbpG7cwFNExOx@q^2pCPs-)fl?mRLgN_4~CR-@iRgxd{!Wpwm0EC;%fXp&`9LGKL@IYOZbY?pNV!0IV{` z>1|o=000>bR0iVgiH@)g+G@#=3c*v^WwEb;#S-s3P+16(1NveiJmtan?tm>0M?5&n zubjnSZp%03zF5rNsD(WRpi)r=m?)-Q^j<8A0Fp4@vVcV6csUYf0RW`+wYp}}8?oFW zAP>N9AK~N;NRKKHEZqwP)sl$X*p|lLg=J*Tn?)Z6G$N=I0d|?Bx6FUsk)6H22IG$W z!R~UQH(|Mp!e|e)-O8(w>LQ?hN)Q})o)gqm1%-8Fmf3r>GX2Ulk>at7=*u<&6- zAi#8{bZq#M5W51?Z2(XhcMfe5xv_WPIs(xf#1Tl843!94s~b?u-U)(`ba-nz1)zpt zC15B0a8DkNL9LEQh*+Z~Vj=$If>2=s38l$%AzB1&Ig%ke?~>{QiyyGE$8G`;>;9;z zkQJv7k+9CP=E*io_ibVY(R~2C3rhqbfT9RM9-s(MHfKb2dJ7i5f0&En$MqaS)aBC? zy@nG`T#j!H6Fr5KcVRlc<4WBBFdN|jpb$p4 zn8$3SnE-4xcpm`Pxn)1ZdNVFm)B%a?hnh#gmV*%iNf~HcEg~>$gw~G&)I%jy-$1mF z3`zzHXp$gQV>!9U6DYY0E$yWll|a5F1-gdF`>ROZM(ga616XA)#ZamoFtrSuMKpJZ z00dwwtn2L)!JChf`@d;bhcV*O{lqM&HEnSV@3S)2D1^%hT~-kR>uhK3As0jxupozE zy?-ZXv^atwaQ3dU(Bxson&XJ<sVj*tc#BV_Nh z5@|rC;R$Fw&KQ(3WRNf2JoG+7t)*e}8Z?VTy#+Hb;f#vthzR1yVtZ$nLk}-v4FOw8 zb}7kwte_5z=KwQP7S-^X_<%~nW){hi)IiJBIZ7BsL90ggMk~Z%E>t>d&7!B&k@!CM(U2F--^h7yf64bNorV>JR`C(99lXrNJCWw5~I$U`=2N5BG# ziohV@Gbm^DOCQsT5E6eT8Z7~;zwGPityb;`&^4Atr~4ix>YbVw!TYS-$Dp=O_eB6<&(b<=e#*{g*g7#n5U{$eT6GgLHBMXw z4Vs>(Yy`nqiS*|axgdw36Xre|p#UfV zDJiOgtAAFBh)SyCqjL~^iAWgqBFa}nf=A#el!n5Sx)MBkI0$zbPC{`SaG5ap8nK2U zlESp%+(-~sR+v}&LU^wg{s&582&`SW!VI535!Ox=j!hmD?w#~@D-)=a-bb}c z+FSeP>z-zBO}_38+1PRLhAWCf89LPVX@-td%v*ulk}R+)3Jq6pqTmb1h=MG**wUDV zIx~V<*k$T1t?5RV{tgQ+0hn{cNFAh3yB4u4^iPpXsPW;0xICiEq68>1zS7bH=<6V=C~33 znPdv}-Wy>{$NMbQDb#%<;Ou3YLMaUT@dbme9U}}emSxMgIC*AjBnUyv*m)dUE-ZL; zs;j&RoD)wbQmkbpnPei#RvRjLaIjrs@HQ+H3iGGZVNDDZj|5YgM6@lf_BE`jI0<$- ztsrm`Vk$fFR7eS^GokqgzQACbJ7M1l@5B;EVUDTnbrj|`!%()ilyBrlZ^aTvA=+x( zJTWfG)K!lFEZhj25^UWVAwX9AKspN@-9m6jf$?)#yHQhqxD9a*TK1i!1Y0%+v;c8U zjT4yT1-2zB8xe#$cYf?dj;_coIaI&8dn(OPstl=5$j!ZjOtJdU#`A2sD&C5vh9JNd zgw_;-M4hDir-oGc_)@T3Zw-1t;M}j>?K?b zK8G_!CrK1q9^a!}irXpSt{1rvE5poO1*2C)Aq2i$jO#$>a4?X(uY;h4v3teH(1M_F zwz!J-Vu{-jP2|Kd?ijO8qZ&r%oCFIr*2f_hKJ+-~G9=pgSXz{w#n+1UDrn(jmz617 z(aMcl_!!qDR;DAP2RnsYe5n{Qs2d-0_0_wOY6`VL*RYV1w_v%;Z(a zS9)U%eGU+9IqhU?Ss~2RXQhH4I}~wbJ@dR z2wOYqE!b$dnM@F2-w_UkV{e);W(-~aeN z79`mWWb)w8f`u6sg@K(P^-o|?L;)K!3WiC9 L#q8Wwea-jERi74Q2L!E$j1~}7( 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 D<*7C^ literal 0 HcmV?d00001 diff --git a/lilypond/string_quartet_3/main/edited/includes/part_I.ly b/lilypond/string_quartet_3/main/edited/includes/part_I.ly new file mode 100644 index 0000000..466a637 --- /dev/null +++ b/lilypond/string_quartet_3/main/edited/includes/part_I.ly @@ -0,0 +1,14 @@ +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_I.ly" diff --git a/lilypond/string_quartet_3/main/edited/includes/part_II.ly b/lilypond/string_quartet_3/main/edited/includes/part_II.ly new file mode 100644 index 0000000..7fb1a01 --- /dev/null +++ b/lilypond/string_quartet_3/main/edited/includes/part_II.ly @@ -0,0 +1,14 @@ +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_II.ly" diff --git a/lilypond/string_quartet_3/main/edited/includes/part_III.ly b/lilypond/string_quartet_3/main/edited/includes/part_III.ly new file mode 100644 index 0000000..f6b1eb8 --- /dev/null +++ b/lilypond/string_quartet_3/main/edited/includes/part_III.ly @@ -0,0 +1,14 @@ +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_III.ly" diff --git a/lilypond/string_quartet_3/main/edited/includes/part_IV.ly b/lilypond/string_quartet_3/main/edited/includes/part_IV.ly new file mode 100644 index 0000000..3030ecb --- /dev/null +++ b/lilypond/string_quartet_3/main/edited/includes/part_IV.ly @@ -0,0 +1,14 @@ +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6522664c/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly" +\include "/home/mwinter/Sketches/seeds_and_ledgers/source/resources/string_quartet_3_rise/5f3f1c84/lilypond/part_IV.ly" diff --git a/lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.ly b/lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.ly new file mode 100644 index 0000000..392d692 --- /dev/null +++ b/lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.ly @@ -0,0 +1,157 @@ +\version "2.24.1" + +\paper { + #(set-paper-size "a4" 'portrait) + top-margin = 1 \cm + bottom-margin = 1 \cm + left-margin = 2 \cm + ragged-bottom = ##t + + top-system-spacing = + #'((basic-distance . 15 ) + (minimum-distance . 15 ) + (padding . 0 ) + (stretchability . 0)) + + system-system-spacing = + #'((basic-distance . 35 ) + (minimum-distance . 35 ) + (padding . 0 ) + (stretchability . 0)) + + last-bottom-spacing = + #'((basic-distance . 10 ) + (minimum-distance . 10 ) + (padding . 0 ) + (stretchability . 0)) + + %systems-per-page = 3 + first-page-number = 1 + print-first-page-number = ##t + + print-page-number = ##t + oddHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"test"}}}}}}} + evenHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"test"}}}}}}} + oddFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} + evenFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} +} + +\header { + title = \markup { \italic {"seeds and ledgers 3"}} + composer = \markup \right-column {"michael winter" "(berlin; 2023-24)"} + poet = "for irasema fernandez" + tagline = "" +} + +#(set-global-staff-size 11) + +\layout { + indent = 0.0\cm + line-width = 17.5\cm + ragged-last = ##f + ragged-right = ##f + + \context { + \Score + \override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \override Stem.stemlet-length = #0.75 + %proportionalNotationDuration = #(ly:make-moment 1/16) + \remove "Separating_line_group_engraver" + \override RehearsalMark.self-alignment-X = #-1 + \override RehearsalMark.Y-offset = #10 + \override RehearsalMark.X-offset = #-8 + %\override RehearsalMark.outside-staff-priority = #0 + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + \override Stem.stencil = ##f + %\override BarLine.stencil = ##f + } + \context { + \Staff + + \override VerticalAxisGroup.staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + \override TextScript.staff-padding = #2 + %\override TextScript.self-alignment-X = #0 + \remove "Time_signature_engraver" + } + \context { + \StaffGroup + \name "SemiStaffGroup" + \consists "Span_bar_engraver" + \override SpanBar.stencil = + #(lambda (grob) + (if (string=? (ly:grob-property grob 'glyph-name) "|") + (set! (ly:grob-property grob 'glyph-name) "")) + (ly:span-bar::print grob)) + } + \context { + \Score + \accepts SemiStaffGroup + } +} + + +\score{ + << + \new SemiStaffGroup { + << + \new Staff = "I" \with { + instrumentName = "I" + shortInstrumentName = "I" + midiInstrument = #"clarinet" + } + { + %\numericTimeSignature \time 4/1 + \include "includes/part_I.ly" + } + \new Staff = "II" \with { + instrumentName = "II" + shortInstrumentName = "II" + midiInstrument = #"clarinet" + } + { + \include "includes/part_II.ly" + } + \new Staff = "III" \with { + instrumentName = "III" + shortInstrumentName = "III" + midiInstrument = #"clarinet" + \clef alto + } + { + \include "includes/part_III.ly" + } + \new Staff = "IV" \with { + instrumentName = "IV" + shortInstrumentName = "IV" + midiInstrument = #"clarinet" + \clef bass + } + { + \include "includes/part_IV.ly" + } + >> + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.pdf b/lilypond/string_quartet_3/main/edited/seeds_and_ledgers_3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..93261feee9b668de8c6856c0239be97d5137bdab GIT binary patch literal 432251 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

    #o~jF%zyvls4Uk}|2y;}t#KGF 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 z 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%0A;NRAp>T-W>FAxXjyc0LZ1FDF1-XWQQyUv58 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 literal 0 HcmV?d00001 diff --git a/lilypond/string_quartet_2/score_template.ly b/lilypond/string_quartet_3/main/original_output/score_template.ly similarity index 97% rename from lilypond/string_quartet_2/score_template.ly rename to lilypond/string_quartet_3/main/original_output/score_template.ly index 46c9512..0da07de 100644 --- a/lilypond/string_quartet_2/score_template.ly +++ b/lilypond/string_quartet_3/main/original_output/score_template.ly @@ -72,6 +72,8 @@ \override RehearsalMark.X-offset = #-8 %\override RehearsalMark.outside-staff-priority = #0 \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + \override Stem.stencil = ##f + %\override BarLine.stencil = ##f } \context { \Staff @@ -117,6 +119,7 @@ midiInstrument = #"clarinet" } { + %\numericTimeSignature \time 4/1 \include "includes/part_I.ly" } \new Staff = "II" \with { diff --git a/lilypond/string_quartet_3/main/original_output/score_template.pdf b/lilypond/string_quartet_3/main/original_output/score_template.pdf new file mode 100644 index 0000000000000000000000000000000000000000..44ea5c360049a7575f81f23315b2697b3d54aa93 GIT binary patch literal 481407 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

    !H9H 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 literal 0 HcmV?d00001 diff --git a/resources/string_quartet_1/4200a90d/lilypond/part_IV.ly b/resources/string_quartet_1/4200a90d/lilypond/part_IV.ly index 5e43176..5089c4a 100644 --- a/resources/string_quartet_1/4200a90d/lilypond/part_IV.ly +++ b/resources/string_quartet_1/4200a90d/lilypond/part_IV.ly @@ -13,6 +13,6 @@ \bar "|" { g,1 ~ } \bar "|" - { g,1} + { g,1 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/43b009ff/lilypond/part_I.ly b/resources/string_quartet_1/43b009ff/lilypond/part_I.ly index af37609..cd1909c 100644 --- a/resources/string_quartet_1/43b009ff/lilypond/part_I.ly +++ b/resources/string_quartet_1/43b009ff/lilypond/part_I.ly @@ -1,7 +1,5 @@ { - { r1 } - \bar "|" - { r1 } + { r1\fermata^4 } \bar "|" { r1 } \bar "|" @@ -19,10 +17,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^6 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/43b009ff/lilypond/part_II.ly b/resources/string_quartet_1/43b009ff/lilypond/part_II.ly index 5c63449..91bb82b 100644 --- a/resources/string_quartet_1/43b009ff/lilypond/part_II.ly +++ b/resources/string_quartet_1/43b009ff/lilypond/part_II.ly @@ -7,8 +7,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" { r8[ gis'8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}] ~ gis'2. ~ } \bar "|" { gis'1 ~ } @@ -20,9 +18,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/43b009ff/lilypond/part_III.ly b/resources/string_quartet_1/43b009ff/lilypond/part_III.ly index 0795a41..e11f018 100644 --- a/resources/string_quartet_1/43b009ff/lilypond/part_III.ly +++ b/resources/string_quartet_1/43b009ff/lilypond/part_III.ly @@ -13,16 +13,10 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } - \bar "|" { fis'4 ~ fis'8[ r8] r2 } \bar "|" { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/43b009ff/lilypond/part_IV.ly b/resources/string_quartet_1/43b009ff/lilypond/part_IV.ly index ce1dd80..d7c3c9b 100644 --- a/resources/string_quartet_1/43b009ff/lilypond/part_IV.ly +++ b/resources/string_quartet_1/43b009ff/lilypond/part_IV.ly @@ -1,6 +1,4 @@ { - { r1 } - \bar "|" { r1 } \bar "|" { r2. r8[ cis'8^\markup { \pad-markup #0.2 "-19"}] ~ } @@ -20,9 +18,5 @@ { cis'4 ~ cis'16[ r8.] r2 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/443ec222/lilypond/part_I.ly b/resources/string_quartet_1/443ec222/lilypond/part_I.ly index da8950a..7b7a02f 100644 --- a/resources/string_quartet_1/443ec222/lilypond/part_I.ly +++ b/resources/string_quartet_1/443ec222/lilypond/part_I.ly @@ -11,8 +11,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^4 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/443ec222/lilypond/part_II.ly b/resources/string_quartet_1/443ec222/lilypond/part_II.ly index 3245478..7dfdd31 100644 --- a/resources/string_quartet_1/443ec222/lilypond/part_II.ly +++ b/resources/string_quartet_1/443ec222/lilypond/part_II.ly @@ -12,7 +12,5 @@ { f'16[ r8.] r2. } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/443ec222/lilypond/part_III.ly b/resources/string_quartet_1/443ec222/lilypond/part_III.ly index 0f68e02..ad15bd5 100644 --- a/resources/string_quartet_1/443ec222/lilypond/part_III.ly +++ b/resources/string_quartet_1/443ec222/lilypond/part_III.ly @@ -12,7 +12,5 @@ { c'4 ~ c'8[ r8] r2 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/443ec222/lilypond/part_IV.ly b/resources/string_quartet_1/443ec222/lilypond/part_IV.ly index a524c1b..b1f888c 100644 --- a/resources/string_quartet_1/443ec222/lilypond/part_IV.ly +++ b/resources/string_quartet_1/443ec222/lilypond/part_IV.ly @@ -12,7 +12,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/46985d14/lilypond/part_I.ly b/resources/string_quartet_1/46985d14/lilypond/part_I.ly index f38f2bd..c54873f 100644 --- a/resources/string_quartet_1/46985d14/lilypond/part_I.ly +++ b/resources/string_quartet_1/46985d14/lilypond/part_I.ly @@ -35,16 +35,10 @@ \bar "|" { cis'1 ~ } \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } + { cis'1\fermata^2 ~ } \bar "|" { cis'1 ~ } \bar "|" - { cis'1} + { cis'1\fermata^8 ~ } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/46985d14/lilypond/part_II.ly b/resources/string_quartet_1/46985d14/lilypond/part_II.ly index 2bae7a3..a0e6d4d 100644 --- a/resources/string_quartet_1/46985d14/lilypond/part_II.ly +++ b/resources/string_quartet_1/46985d14/lilypond/part_II.ly @@ -40,11 +40,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/46985d14/lilypond/part_III.ly b/resources/string_quartet_1/46985d14/lilypond/part_III.ly index 3ee54a1..a58edeb 100644 --- a/resources/string_quartet_1/46985d14/lilypond/part_III.ly +++ b/resources/string_quartet_1/46985d14/lilypond/part_III.ly @@ -40,11 +40,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/46985d14/lilypond/part_IV.ly b/resources/string_quartet_1/46985d14/lilypond/part_IV.ly index f0e3f84..24915bb 100644 --- a/resources/string_quartet_1/46985d14/lilypond/part_IV.ly +++ b/resources/string_quartet_1/46985d14/lilypond/part_IV.ly @@ -40,11 +40,5 @@ { g2 ~ g16[ r8.] r4 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/490b1e6e/lilypond/part_II.ly b/resources/string_quartet_1/490b1e6e/lilypond/part_II.ly index 212ca16..1de6aa4 100644 --- a/resources/string_quartet_1/490b1e6e/lilypond/part_II.ly +++ b/resources/string_quartet_1/490b1e6e/lilypond/part_II.ly @@ -21,6 +21,6 @@ \bar "|" { ais1 ~ } \bar "|" - { ais1} + { ais1 ~ } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4a8a6e53/lilypond/part_I.ly b/resources/string_quartet_1/4a8a6e53/lilypond/part_I.ly index 35e6ebb..211c4b0 100644 --- a/resources/string_quartet_1/4a8a6e53/lilypond/part_I.ly +++ b/resources/string_quartet_1/4a8a6e53/lilypond/part_I.ly @@ -45,16 +45,10 @@ \bar "|" { b1 ~ } \bar "|" + { b1\fermata^4 ~ } + \bar "|" { b1 ~ } \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1} + { b1\fermata^6 ~ } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4a8a6e53/lilypond/part_II.ly b/resources/string_quartet_1/4a8a6e53/lilypond/part_II.ly index 7ce04eb..9ccf385 100644 --- a/resources/string_quartet_1/4a8a6e53/lilypond/part_II.ly +++ b/resources/string_quartet_1/4a8a6e53/lilypond/part_II.ly @@ -47,14 +47,8 @@ \bar "|" { e'1 ~ } \bar "|" - { e'1 ~ } - \bar "|" { e'4 ~ e'16[ r8.] r2 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4a8a6e53/lilypond/part_III.ly b/resources/string_quartet_1/4a8a6e53/lilypond/part_III.ly index 158131f..bc2446a 100644 --- a/resources/string_quartet_1/4a8a6e53/lilypond/part_III.ly +++ b/resources/string_quartet_1/4a8a6e53/lilypond/part_III.ly @@ -46,15 +46,9 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" + \bar "|" { r1 } \bar "|" - { r1 } + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4a8a6e53/lilypond/part_IV.ly b/resources/string_quartet_1/4a8a6e53/lilypond/part_IV.ly index a80f515..d3630ac 100644 --- a/resources/string_quartet_1/4a8a6e53/lilypond/part_IV.ly +++ b/resources/string_quartet_1/4a8a6e53/lilypond/part_IV.ly @@ -47,14 +47,8 @@ \bar "|" { gis1 ~ } \bar "|" - { gis1 ~ } - \bar "|" { gis1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4b7745df/lilypond/part_I.ly b/resources/string_quartet_1/4b7745df/lilypond/part_I.ly index d9ec1f9..1d66fa3 100644 --- a/resources/string_quartet_1/4b7745df/lilypond/part_I.ly +++ b/resources/string_quartet_1/4b7745df/lilypond/part_I.ly @@ -1,13 +1,9 @@ { - { r1 } + { r1\fermata^6 } \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^2 } \bar "|" { r2 r16[ d''8.^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}] ~ d''4 ~ } \bar "|" @@ -15,14 +11,12 @@ \bar "|" { d''4 ~ d''8[ dis''8^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}] ~ dis''2 ~ } \bar "|" - { dis''1 ~ } + { dis''1\fermata^2 ~ } \bar "|" { dis''1 ~ } \bar "|" { dis''2. ~ dis''8[ r8] } \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^4 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4b7745df/lilypond/part_II.ly b/resources/string_quartet_1/4b7745df/lilypond/part_II.ly index 6118a4a..bff3b50 100644 --- a/resources/string_quartet_1/4b7745df/lilypond/part_II.ly +++ b/resources/string_quartet_1/4b7745df/lilypond/part_II.ly @@ -7,10 +7,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" { r2 a'2^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } \bar "|" { a'1 ~ } @@ -22,7 +18,5 @@ { a'4 ~ a'16[ r8.] r2 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4b7745df/lilypond/part_III.ly b/resources/string_quartet_1/4b7745df/lilypond/part_III.ly index 80764d9..9680972 100644 --- a/resources/string_quartet_1/4b7745df/lilypond/part_III.ly +++ b/resources/string_quartet_1/4b7745df/lilypond/part_III.ly @@ -13,16 +13,10 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" { fis'16[ r8.] r2. } \bar "|" { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4b7745df/lilypond/part_IV.ly b/resources/string_quartet_1/4b7745df/lilypond/part_IV.ly index 8cc8f1d..26586e1 100644 --- a/resources/string_quartet_1/4b7745df/lilypond/part_IV.ly +++ b/resources/string_quartet_1/4b7745df/lilypond/part_IV.ly @@ -1,8 +1,4 @@ { - { r1 } - \bar "|" - { r1 } - \bar "|" { r1 } \bar "|" { r2. cis'4^\markup { \pad-markup #0.2 "-19"} ~ } @@ -22,7 +18,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/4e7d35e5/lilypond/part_I.ly b/resources/string_quartet_1/4e7d35e5/lilypond/part_I.ly index 18a5337..bc1a376 100644 --- a/resources/string_quartet_1/4e7d35e5/lilypond/part_I.ly +++ b/resources/string_quartet_1/4e7d35e5/lilypond/part_I.ly @@ -9,6 +9,6 @@ \bar "|" { r1 } \bar "|" - { r1 } + { r1\fermata^2 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/52c9a980/lilypond/part_I.ly b/resources/string_quartet_1/52c9a980/lilypond/part_I.ly index ba446df..d0c956b 100644 --- a/resources/string_quartet_1/52c9a980/lilypond/part_I.ly +++ b/resources/string_quartet_1/52c9a980/lilypond/part_I.ly @@ -13,6 +13,6 @@ \bar "|" { r1 } \bar "|" - { r1 } + { r1\fermata^2 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/61ce9067/lilypond/part_III.ly b/resources/string_quartet_1/61ce9067/lilypond/part_III.ly index 80195eb..8e9f2ad 100644 --- a/resources/string_quartet_1/61ce9067/lilypond/part_III.ly +++ b/resources/string_quartet_1/61ce9067/lilypond/part_III.ly @@ -5,6 +5,6 @@ \bar "|" { g8[ b8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ b2. ~ } \bar "|" - { b8.[ g16^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ g2.} + { b8.[ g16^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ g2. ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/66f6a618/lilypond/part_I.ly b/resources/string_quartet_1/66f6a618/lilypond/part_I.ly index a684605..8940281 100644 --- a/resources/string_quartet_1/66f6a618/lilypond/part_I.ly +++ b/resources/string_quartet_1/66f6a618/lilypond/part_I.ly @@ -7,11 +7,7 @@ \bar "|" { b1 ~ } \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } + { b1\fermata^6 ~ } \bar "|" { b2 ~ b8[ d'8^\markup { \pad-markup #0.2 "-22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ d'4 ~ } \bar "|" @@ -23,11 +19,7 @@ \bar "|" { f'1 ~ } \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } + { f'1\fermata^2 ~ } \bar "|" { f'1 ~ } \bar "|" @@ -35,13 +27,15 @@ \bar "|" { f'1 ~ } \bar "|" + { f'1\fermata^4 ~ } + \bar "|" { f'8.[ gis'16^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}] ~ gis'2. ~ } \bar "|" { gis'16[ a'8.^\markup { \pad-markup #0.2 "-20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}] ~ a'2. } \bar "|" { gis'4^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ gis'16[ fis'8.^\markup { \pad-markup #0.2 "+49"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ fis'8[ fis'8^\markup { \pad-markup #0.2 "-49"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}] ~ fis'4 ~ } \bar "|" - { fis'1 ~ } + { fis'1\fermata^6 ~ } \bar "|" { fis'1 ~ } \bar "|" @@ -51,7 +45,7 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } + { fis'1\fermata^4 ~ } \bar "|" { fis'1 ~ } \bar "|" @@ -63,13 +57,7 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } + { fis'1\fermata^2 ~ } \bar "|" { fis'2 ~ fis'8.[ r16] r4} \bar "||" diff --git a/resources/string_quartet_1/66f6a618/lilypond/part_II.ly b/resources/string_quartet_1/66f6a618/lilypond/part_II.ly index 82d5004..ea791d3 100644 --- a/resources/string_quartet_1/66f6a618/lilypond/part_II.ly +++ b/resources/string_quartet_1/66f6a618/lilypond/part_II.ly @@ -28,13 +28,7 @@ { b1 ~ } \bar "|" { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" + \bar "|" { b1 ~ } \bar "|" { b1 ~ } @@ -52,13 +46,7 @@ { b1 ~ } \bar "|" { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" + \bar "|" { b2 ~ b8.[ r16] r4 } \bar "|" { r1 } diff --git a/resources/string_quartet_1/66f6a618/lilypond/part_III.ly b/resources/string_quartet_1/66f6a618/lilypond/part_III.ly index d1f7beb..4620e8e 100644 --- a/resources/string_quartet_1/66f6a618/lilypond/part_III.ly +++ b/resources/string_quartet_1/66f6a618/lilypond/part_III.ly @@ -9,10 +9,6 @@ \bar "|" { b1 ~ } \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" { b2. ~ b8.[ a16^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}] ~ } \bar "|" { a1 ~ } @@ -40,13 +36,7 @@ { fis1 ~ } \bar "|" { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" + \bar "|" { fis4 f2.^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } \bar "|" { f8.[ gis16^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}] ~ gis2. } @@ -56,9 +46,7 @@ { e4 ~ e16[ e8.^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ e2 ~ } \bar "|" { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" + \bar "|" { e1 ~ } \bar "|" { e1 ~ } @@ -71,6 +59,6 @@ \bar "|" { dis1 ~ } \bar "|" - { dis1} + { dis1 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/66f6a618/lilypond/part_IV.ly b/resources/string_quartet_1/66f6a618/lilypond/part_IV.ly index ebec60a..55f99d9 100644 --- a/resources/string_quartet_1/66f6a618/lilypond/part_IV.ly +++ b/resources/string_quartet_1/66f6a618/lilypond/part_IV.ly @@ -11,10 +11,6 @@ \bar "|" { d1 ~ } \bar "|" - { d1 ~ } - \bar "|" - { d1 ~ } - \bar "|" { d4 b,4^\markup { \pad-markup #0.2 "+47"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ b,8[ dis8^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }}] ~ dis4 ~ } \bar "|" { dis1 ~ } @@ -32,13 +28,7 @@ { cis4 b,2^\markup { \pad-markup #0.2 "+47"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ b,8[ c8^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }}] ~ } \bar "|" { c1 ~ } - \bar "|" - { c1 ~ } - \bar "|" - { c1 ~ } - \bar "|" - { c1 ~ } - \bar "|" + \bar "|" { c1 ~ } \bar "|" { c1 ~ } @@ -56,9 +46,7 @@ { c1 ~ } \bar "|" { c1 ~ } - \bar "|" - { c1 ~ } - \bar "|" + \bar "|" { c8.[ r16] r2. } \bar "|" { r1 } diff --git a/resources/string_quartet_1/66f6a618/lilypond/part_IV.pdf b/resources/string_quartet_1/66f6a618/lilypond/part_IV.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0e9505cc022cf4e9639260a799e8f3862918c0db GIT binary patch literal 69957 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 literal 0 HcmV?d00001 diff --git a/resources/string_quartet_1/6fb60ab6/lilypond/part_I.ly b/resources/string_quartet_1/6fb60ab6/lilypond/part_I.ly index 3ed19b7..b964231 100644 --- a/resources/string_quartet_1/6fb60ab6/lilypond/part_I.ly +++ b/resources/string_quartet_1/6fb60ab6/lilypond/part_I.ly @@ -21,8 +21,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^4 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/6fb60ab6/lilypond/part_II.ly b/resources/string_quartet_1/6fb60ab6/lilypond/part_II.ly index af38e4d..815f722 100644 --- a/resources/string_quartet_1/6fb60ab6/lilypond/part_II.ly +++ b/resources/string_quartet_1/6fb60ab6/lilypond/part_II.ly @@ -22,7 +22,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/6fb60ab6/lilypond/part_III.ly b/resources/string_quartet_1/6fb60ab6/lilypond/part_III.ly index ff528bb..09e0b1f 100644 --- a/resources/string_quartet_1/6fb60ab6/lilypond/part_III.ly +++ b/resources/string_quartet_1/6fb60ab6/lilypond/part_III.ly @@ -22,7 +22,5 @@ { fis'4 r2. } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/6fb60ab6/lilypond/part_IV.ly b/resources/string_quartet_1/6fb60ab6/lilypond/part_IV.ly index 1592265..7a36d6b 100644 --- a/resources/string_quartet_1/6fb60ab6/lilypond/part_IV.ly +++ b/resources/string_quartet_1/6fb60ab6/lilypond/part_IV.ly @@ -22,7 +22,5 @@ { cis'4 r2. } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/761e4585/lilypond/part_I.ly b/resources/string_quartet_1/761e4585/lilypond/part_I.ly index 8f69c77..6dd21fc 100644 --- a/resources/string_quartet_1/761e4585/lilypond/part_I.ly +++ b/resources/string_quartet_1/761e4585/lilypond/part_I.ly @@ -31,6 +31,6 @@ \bar "|" { dis'1 ~ } \bar "|" - { dis'1} + { dis'1\fermata^2} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/761e4585/lilypond/part_IV.ly b/resources/string_quartet_1/761e4585/lilypond/part_IV.ly index 89e838d..d91b9ab 100644 --- a/resources/string_quartet_1/761e4585/lilypond/part_IV.ly +++ b/resources/string_quartet_1/761e4585/lilypond/part_IV.ly @@ -31,6 +31,6 @@ \bar "|" { cis'1 ~ } \bar "|" - { cis'1} + { cis'1 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/784130cc/lilypond/part_I.ly b/resources/string_quartet_1/784130cc/lilypond/part_I.ly index 18a5337..bc1a376 100644 --- a/resources/string_quartet_1/784130cc/lilypond/part_I.ly +++ b/resources/string_quartet_1/784130cc/lilypond/part_I.ly @@ -9,6 +9,6 @@ \bar "|" { r1 } \bar "|" - { r1 } + { r1\fermata^2 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/79e0a4a7/lilypond/part_I.ly b/resources/string_quartet_1/79e0a4a7/lilypond/part_I.ly index 3d68499..ba7d549 100644 --- a/resources/string_quartet_1/79e0a4a7/lilypond/part_I.ly +++ b/resources/string_quartet_1/79e0a4a7/lilypond/part_I.ly @@ -1,11 +1,9 @@ { + { r1\fermata^4 } + \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^2 } \bar "|" { r2 a'2^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } \bar "|" @@ -19,10 +17,6 @@ \bar "|" { a'2 ~ a'8[ r8] r4 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^6 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/79e0a4a7/lilypond/part_II.ly b/resources/string_quartet_1/79e0a4a7/lilypond/part_II.ly index 771f45e..f932469 100644 --- a/resources/string_quartet_1/79e0a4a7/lilypond/part_II.ly +++ b/resources/string_quartet_1/79e0a4a7/lilypond/part_II.ly @@ -7,8 +7,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" { r4 r8[ gis'8^\markup { \pad-markup #0.2 "-18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ gis'2 ~ } \bar "|" { gis'1 ~ } @@ -20,9 +18,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/79e0a4a7/lilypond/part_III.ly b/resources/string_quartet_1/79e0a4a7/lilypond/part_III.ly index c1f7fda..a451b52 100644 --- a/resources/string_quartet_1/79e0a4a7/lilypond/part_III.ly +++ b/resources/string_quartet_1/79e0a4a7/lilypond/part_III.ly @@ -13,16 +13,10 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } - \bar "|" { fis'4 ~ fis'16[ r8.] r2 } \bar "|" { r1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/79e0a4a7/lilypond/part_IV.ly b/resources/string_quartet_1/79e0a4a7/lilypond/part_IV.ly index 5984926..ca216b5 100644 --- a/resources/string_quartet_1/79e0a4a7/lilypond/part_IV.ly +++ b/resources/string_quartet_1/79e0a4a7/lilypond/part_IV.ly @@ -1,6 +1,4 @@ { - { r1 } - \bar "|" { r1 } \bar "|" { r4 r8[ cis'8^\markup { \pad-markup #0.2 "-19"}] ~ cis'2 ~ } @@ -20,9 +18,5 @@ { cis'1 } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/7d3c9a80/lilypond/part_I.ly b/resources/string_quartet_1/7d3c9a80/lilypond/part_I.ly index e9da74f..a2f659d 100644 --- a/resources/string_quartet_1/7d3c9a80/lilypond/part_I.ly +++ b/resources/string_quartet_1/7d3c9a80/lilypond/part_I.ly @@ -1,13 +1,9 @@ { - { r1 } + { r1\fermata^6 } \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^2 } \bar "|" { r4 c''2.^\markup { \pad-markup #0.2 "+27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} ~ } \bar "|" @@ -15,7 +11,7 @@ \bar "|" { c''2 cis''2^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } \bar "|" - { cis''1 ~ } + { cis''1\fermata^2 ~ } \bar "|" { cis''1 ~ } \bar "|" @@ -23,8 +19,6 @@ \bar "|" { cis''4 ~ cis''16[ r8.] r2 } \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^4 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/7d3c9a80/lilypond/part_II.ly b/resources/string_quartet_1/7d3c9a80/lilypond/part_II.ly index 544ce2c..e90f18a 100644 --- a/resources/string_quartet_1/7d3c9a80/lilypond/part_II.ly +++ b/resources/string_quartet_1/7d3c9a80/lilypond/part_II.ly @@ -7,10 +7,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" { r8[ a'8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }}] ~ a'2. ~ } \bar "|" { a'1 ~ } @@ -24,7 +20,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/7d3c9a80/lilypond/part_III.ly b/resources/string_quartet_1/7d3c9a80/lilypond/part_III.ly index 924f946..8a75569 100644 --- a/resources/string_quartet_1/7d3c9a80/lilypond/part_III.ly +++ b/resources/string_quartet_1/7d3c9a80/lilypond/part_III.ly @@ -13,10 +13,6 @@ \bar "|" { fis'1 ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" { fis'4 ~ fis'8.[ r16] r2 } \bar "|" { r1 } @@ -24,7 +20,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/7d3c9a80/lilypond/part_IV.ly b/resources/string_quartet_1/7d3c9a80/lilypond/part_IV.ly index 91a8502..0d26492 100644 --- a/resources/string_quartet_1/7d3c9a80/lilypond/part_IV.ly +++ b/resources/string_quartet_1/7d3c9a80/lilypond/part_IV.ly @@ -1,8 +1,4 @@ { - { r1 } - \bar "|" - { r1 } - \bar "|" { r1 } \bar "|" { r8[ cis'8^\markup { \pad-markup #0.2 "-19"}] ~ cis'2. ~ } @@ -24,7 +20,5 @@ { r1 } \bar "|" { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_1/7edbdceb/lilypond/part_I.ly b/resources/string_quartet_1/7edbdceb/lilypond/part_I.ly index 18a5337..bc1a376 100644 --- a/resources/string_quartet_1/7edbdceb/lilypond/part_I.ly +++ b/resources/string_quartet_1/7edbdceb/lilypond/part_I.ly @@ -9,6 +9,6 @@ \bar "|" { r1 } \bar "|" - { r1 } + { r1\fermata^2 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/41e447bc/41e447bc_mus_model.json b/resources/string_quartet_2/41e447bc/41e447bc_mus_model.json index 105ee42..a6388e0 100644 --- a/resources/string_quartet_2/41e447bc/41e447bc_mus_model.json +++ b/resources/string_quartet_2/41e447bc/41e447bc_mus_model.json @@ -22,7 +22,7 @@ [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, -1, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 0, 1, -1, 0, 0, 0 ] ], 1.375 ] ], [ - [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, -1, 1, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 0, 1, -1, 0, 0, 0 ] ], 4.625 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, -1, 1, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 0, 1, -1, 0, 0, 0 ] ], 3.5 ], [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, -1, 1, 0, 0, 0 ], [ "Rest" ], [ 0, 1, -1, 0, 0, 0 ] ], 0 ], [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, -1, 1, 0, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ], [ [ [ 0, 0, 0, 0, 0, 0 ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 0 ] diff --git a/resources/string_quartet_2/41e447bc/lilypond/part_I.ly b/resources/string_quartet_2/41e447bc/lilypond/part_I.ly index 9aaa7f4..9e6f66a 100644 --- a/resources/string_quartet_2/41e447bc/lilypond/part_I.ly +++ b/resources/string_quartet_2/41e447bc/lilypond/part_I.ly @@ -1,20 +1,20 @@ { - { r1 } + { r1\fermata^2 } \bar "|" { r16[ c''8.^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ c''2. ~ } \bar "|" - { c''1 ~ } + { c''1\fermata^2 ~ } \bar "|" { c''4 ~ c''8.[ e'16^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ e'2 ~ } \bar "|" { e'2. ~ e'8[ e'8^\markup { \pad-markup #0.2 "-41"}] ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'2 ~ e'16[ dis'8.^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}] ~ dis'4 ~ } \bar "|" { dis'1 ~ } \bar "|" - { dis'1} + { dis'1\fermata^2 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/4c059f33/4c059f33_mus_model.json b/resources/string_quartet_2/4c059f33/4c059f33_mus_model.json index 772a988..6836cd9 100644 --- a/resources/string_quartet_2/4c059f33/4c059f33_mus_model.json +++ b/resources/string_quartet_2/4c059f33/4c059f33_mus_model.json @@ -16,7 +16,7 @@ [ [ [ [ -2, 3, -2, -1, 1, 0 ], [ -2, 3, -1, -1, 1, 0 ], [ 0, 2, -2, -1, 1, 0 ], [ -1, 4, -2, -1, 1, 0 ] ], 0 ], [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 1, -1 ], [ 0, 2, -2, -1, 1, 0 ], [ -1, 4, -2, -1, 1, 0 ] ], 0 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 1, -1 ], [ 0, 2, -2, -1, 1, 0 ], [ 0, 3, -3, -1, 1, 0 ] ], 4.125 ], + [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 1, -1 ], [ 0, 2, -2, -1, 1, 0 ], [ 0, 3, -3, -1, 1, 0 ] ], 5.125 ], [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 1, -1 ], [ "Rest" ], [ 0, 3, -3, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ -1, 3, -2, -1, 1, -1 ], [ "Rest" ], [ 0, 3, -3, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ 0, 3, -3, -1, 1, 0 ] ], 0 ] diff --git a/resources/string_quartet_2/4c059f33/lilypond/part_I.ly b/resources/string_quartet_2/4c059f33/lilypond/part_I.ly index 9587605..91a8999 100644 --- a/resources/string_quartet_2/4c059f33/lilypond/part_I.ly +++ b/resources/string_quartet_2/4c059f33/lilypond/part_I.ly @@ -1,16 +1,14 @@ { { r2 e'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'2. ~ e'8.[ e'16^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ } \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } + { e'1\fermata^4 ~ } \bar "|" { e'4 ~ e'16[ f'8.^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ f'2 ~ } \bar "|" - { f'1} + { f'1\fermata^4} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/4c059f33/lilypond/part_II.ly b/resources/string_quartet_2/4c059f33/lilypond/part_II.ly index 3515b71..f5187d6 100644 --- a/resources/string_quartet_2/4c059f33/lilypond/part_II.ly +++ b/resources/string_quartet_2/4c059f33/lilypond/part_II.ly @@ -6,9 +6,7 @@ { cis'2. ~ cis'8.[ cis'16^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ } \bar "|" { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" + \bar "|" { cis'4 ~ cis'16[ d'8.^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] ~ d'2 ~ } \bar "|" { d'1} diff --git a/resources/string_quartet_2/4c059f33/lilypond/part_III.ly b/resources/string_quartet_2/4c059f33/lilypond/part_III.ly index e46bd01..87d8167 100644 --- a/resources/string_quartet_2/4c059f33/lilypond/part_III.ly +++ b/resources/string_quartet_2/4c059f33/lilypond/part_III.ly @@ -6,9 +6,7 @@ { a2. ~ a8.[ cis16^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ } \bar "|" { cis1 ~ } - \bar "|" - { cis1 ~ } - \bar "|" + \bar "|" { cis4 ~ cis16[ cis8.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ cis2 ~ } \bar "|" { cis1} diff --git a/resources/string_quartet_2/4c059f33/lilypond/part_IV.ly b/resources/string_quartet_2/4c059f33/lilypond/part_IV.ly index 4db8109..0d6284a 100644 --- a/resources/string_quartet_2/4c059f33/lilypond/part_IV.ly +++ b/resources/string_quartet_2/4c059f33/lilypond/part_IV.ly @@ -6,11 +6,9 @@ { a,1 ~ } \bar "|" { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" + \bar "|" { a,1 ~ } \bar "|" - { a,1} + { a,1 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/5201b8af/5201b8af_mus_model.json b/resources/string_quartet_2/5201b8af/5201b8af_mus_model.json index aa90760..8bd1469 100644 --- a/resources/string_quartet_2/5201b8af/5201b8af_mus_model.json +++ b/resources/string_quartet_2/5201b8af/5201b8af_mus_model.json @@ -16,10 +16,11 @@ [ [ [ [ 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ] ], 0 ], [ [ [ 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 0 ], - [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, -1, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 4.125 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, -1, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 5.125 ], [ [ [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, -1, 0, 0, 0 ], [ "Rest" ], [ 1, 0, 0, 0, 0, -1 ] ], 0 ], [ [ [ "Rest" ], [ 1, 0, -1, 0, 0, 0 ], [ "Rest" ], [ 1, 0, 0, 0, 0, -1 ] ], 0 ], - [ [ [ "Rest" ], [ 1, 0, -1, 0, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ] + [ [ [ "Rest" ], [ 1, 0, -1, 0, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ], + [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 6 ] ] ] ], diff --git a/resources/string_quartet_2/5201b8af/lilypond/part_I.ly b/resources/string_quartet_2/5201b8af/lilypond/part_I.ly index 01ab702..5f0d006 100644 --- a/resources/string_quartet_2/5201b8af/lilypond/part_I.ly +++ b/resources/string_quartet_2/5201b8af/lilypond/part_I.ly @@ -1,16 +1,16 @@ { { r2 c''2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } \bar "|" - { c''1 ~ } + { c''1\fermata^2 ~ } \bar "|" { c''2. ~ c''8.[ e'16^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ } \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } + { e'1\fermata^4 ~ } \bar "|" { e'4 ~ e'16[ e'8.^\markup { \pad-markup #0.2 "-41"}] ~ e'2 ~ } \bar "|" - { e'1} + { e'1\fermata^4} + \bar "|" + { r1\fermata^6 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/5201b8af/lilypond/part_II.ly b/resources/string_quartet_2/5201b8af/lilypond/part_II.ly index f176e75..c69c532 100644 --- a/resources/string_quartet_2/5201b8af/lilypond/part_II.ly +++ b/resources/string_quartet_2/5201b8af/lilypond/part_II.ly @@ -7,10 +7,10 @@ \bar "|" { e'1 ~ } \bar "|" - { e'1 ~ } - \bar "|" { e'4 ~ e'16[ f'8.^\markup { \pad-markup #0.2 "-2"}] ~ f'2 ~ } \bar "|" { f'1} + \bar "|" + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/5201b8af/lilypond/part_III.ly b/resources/string_quartet_2/5201b8af/lilypond/part_III.ly index 5f83063..7964085 100644 --- a/resources/string_quartet_2/5201b8af/lilypond/part_III.ly +++ b/resources/string_quartet_2/5201b8af/lilypond/part_III.ly @@ -7,10 +7,10 @@ \bar "|" { g'1 ~ } \bar "|" - { g'1 ~ } - \bar "|" { g'4 ~ g'16[ gis'8.^\markup { \pad-markup #0.2 "+14"}] ~ gis'2 ~ } \bar "|" { gis'1} + \bar "|" + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/5201b8af/lilypond/part_IV.ly b/resources/string_quartet_2/5201b8af/lilypond/part_IV.ly index 67fc5d0..119a54e 100644 --- a/resources/string_quartet_2/5201b8af/lilypond/part_IV.ly +++ b/resources/string_quartet_2/5201b8af/lilypond/part_IV.ly @@ -9,8 +9,8 @@ \bar "|" { c'1 ~ } \bar "|" - { c'1 ~ } - \bar "|" { c'1} + \bar "|" + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/525274f2/525274f2_mus_model.json b/resources/string_quartet_2/525274f2/525274f2_mus_model.json index a8be70b..b551430 100644 --- a/resources/string_quartet_2/525274f2/525274f2_mus_model.json +++ b/resources/string_quartet_2/525274f2/525274f2_mus_model.json @@ -24,10 +24,11 @@ ], [ [ [ [ 1, -1, 0, 0, -1, 0 ], [ 1, 0, 1, 0, 0, -1 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 0 ], - [ [ [ 1, -1, 0, 0, -1, 0 ], [ 2, -1, 0, -1, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 2.625 ], + [ [ [ 1, -1, 0, 0, -1, 0 ], [ 2, -1, 0, -1, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, -1 ] ], 3 ], [ [ [ 1, -1, 0, 0, -1, 0 ], [ 2, -1, 0, -1, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ], [ "Rest" ] ], 0 ], [ [ [ 1, -1, 0, 0, -1, 0 ], [ 2, -1, 0, -1, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ], - [ [ [ "Rest" ], [ 2, -1, 0, -1, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ] + [ [ [ "Rest" ], [ 2, -1, 0, -1, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ], + [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 6 ] ] ] ], diff --git a/resources/string_quartet_2/525274f2/lilypond/part_I.ly b/resources/string_quartet_2/525274f2/lilypond/part_I.ly index a568867..0eb4f7f 100644 --- a/resources/string_quartet_2/525274f2/lilypond/part_I.ly +++ b/resources/string_quartet_2/525274f2/lilypond/part_I.ly @@ -1,14 +1,18 @@ { { r2 c''2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } \bar "|" - { c''1 ~ } + { c''1\fermata^2 ~ } \bar "|" { c''8.[ e'16^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ e'2 ~ e'16[ e'8.^\markup { \pad-markup #0.2 "-41"}] ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'1 ~ } \bar "|" - { e'1} + { e'1 ~} + \bar "|" + { e'1\fermata^2} + \bar "|" + { r1\fermata^6} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/525274f2/lilypond/part_II.ly b/resources/string_quartet_2/525274f2/lilypond/part_II.ly index 9a7f7ed..4b1cd33 100644 --- a/resources/string_quartet_2/525274f2/lilypond/part_II.ly +++ b/resources/string_quartet_2/525274f2/lilypond/part_II.ly @@ -9,6 +9,10 @@ \bar "|" { f'1 ~ } \bar "|" + { f'1 ~ } + \bar "|" { f'1} + \bar "|" + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/525274f2/lilypond/part_III.ly b/resources/string_quartet_2/525274f2/lilypond/part_III.ly index ac151b0..c3a2a81 100644 --- a/resources/string_quartet_2/525274f2/lilypond/part_III.ly +++ b/resources/string_quartet_2/525274f2/lilypond/part_III.ly @@ -9,6 +9,10 @@ \bar "|" { gis'4 ~ gis'8[ g'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ~ g'2 ~ } \bar "|" - { g'2 g'2^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }}} + { g'2 g'2^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} ~} + \bar "|" + {g'1} + \bar "|" + {r1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/525274f2/lilypond/part_IV.ly b/resources/string_quartet_2/525274f2/lilypond/part_IV.ly index e646018..2ecb4d0 100644 --- a/resources/string_quartet_2/525274f2/lilypond/part_IV.ly +++ b/resources/string_quartet_2/525274f2/lilypond/part_IV.ly @@ -9,6 +9,10 @@ \bar "|" { c'4 ~ c'8[ c'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }}] ~ c'2 ~ } \bar "|" - { c'2 b2^\markup { \pad-markup #0.2 "+47"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }}} -\bar "||" + { c'2 b2^\markup { \pad-markup #0.2 "+47"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~} + \bar "|" + {b1} + \bar "|" + {r1} + \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/525274f2/lilypond/part_IV.pdf b/resources/string_quartet_2/525274f2/lilypond/part_IV.pdf new file mode 100644 index 0000000000000000000000000000000000000000..74c1351a16fa5e60499523d6d8b66be4ff2e6dbf GIT binary patch literal 34944 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 literal 0 HcmV?d00001 diff --git a/resources/string_quartet_2/60adbbef/60adbbef_mus_model.json b/resources/string_quartet_2/60adbbef/60adbbef_mus_model.json index 494aac6..48a94d3 100644 --- a/resources/string_quartet_2/60adbbef/60adbbef_mus_model.json +++ b/resources/string_quartet_2/60adbbef/60adbbef_mus_model.json @@ -25,7 +25,7 @@ [ [ [ "Rest" ], [ -1, 3, -1, -1, 1, 0 ], [ 0, 3, -2, -1, 0, 0 ], [ 0, 3, -2, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ -1, 3, -1, -1, 1, 0 ], [ "Rest" ], [ 0, 3, -2, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ -1, 3, -1, -1, 1, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ], - [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 10.75 ] + [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 9 ] ] ] ], diff --git a/resources/string_quartet_2/60adbbef/lilypond/part_I.ly b/resources/string_quartet_2/60adbbef/lilypond/part_I.ly index eafa3f1..745ebef 100644 --- a/resources/string_quartet_2/60adbbef/lilypond/part_I.ly +++ b/resources/string_quartet_2/60adbbef/lilypond/part_I.ly @@ -1,29 +1,21 @@ { - { r1 } + { r1\fermata^2 } \bar "|" { r2. r8[ a'8^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } + { a'1\fermata^4 ~ } \bar "|" { a'4 fis'2.^\markup { \pad-markup #0.2 "-44"} ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" + { fis'1\fermata^4 ~ } + \bar "|" { fis'2. ~ fis'16[ g'8.^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ } \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" + { g'1\fermata^4 ~ } + \bar "|" { g'16[ a'8.^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ a'2. ~ } \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } + { a'1\fermata^4 ~ } \bar "|" { a'2 r2 } \bar "|" diff --git a/resources/string_quartet_2/60adbbef/lilypond/part_II.ly b/resources/string_quartet_2/60adbbef/lilypond/part_II.ly index 3f5836d..e2312d8 100644 --- a/resources/string_quartet_2/60adbbef/lilypond/part_II.ly +++ b/resources/string_quartet_2/60adbbef/lilypond/part_II.ly @@ -4,27 +4,19 @@ { r2. r8[ cis'8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ } \bar "|" { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" + \bar "|" { cis'4 d'2.^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } \bar "|" { d'1 ~ } \bar "|" - { d'1 ~ } - \bar "|" { d'2. ~ d'16[ dis'8.^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}] ~ } \bar "|" { dis'1 ~ } \bar "|" - { dis'1 ~ } - \bar "|" { dis'16[ e'8.^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ e'2. ~ } \bar "|" { e'1 ~ } \bar "|" - { e'1 ~ } - \bar "|" { e'2 r2 } \bar "|" { r1 } diff --git a/resources/string_quartet_2/60adbbef/lilypond/part_III.ly b/resources/string_quartet_2/60adbbef/lilypond/part_III.ly index 708ce11..e27bd19 100644 --- a/resources/string_quartet_2/60adbbef/lilypond/part_III.ly +++ b/resources/string_quartet_2/60adbbef/lilypond/part_III.ly @@ -4,27 +4,19 @@ { r2. r8[ e8^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ } \bar "|" { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" + \bar "|" { e4 f2.^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } \bar "|" { f1 ~ } \bar "|" - { f1 ~ } - \bar "|" { f2. ~ f16[ cis'8.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ } \bar "|" { cis'1 ~ } \bar "|" - { cis'1 ~ } - \bar "|" { cis'16[ cis'8.^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ cis'2. ~ } \bar "|" { cis'1 ~ } \bar "|" - { cis'1 ~ } - \bar "|" { cis'2 r2 } \bar "|" { r1 } diff --git a/resources/string_quartet_2/60adbbef/lilypond/part_IV.ly b/resources/string_quartet_2/60adbbef/lilypond/part_IV.ly index 98319b9..c144b19 100644 --- a/resources/string_quartet_2/60adbbef/lilypond/part_IV.ly +++ b/resources/string_quartet_2/60adbbef/lilypond/part_IV.ly @@ -17,14 +17,6 @@ \bar "|" { a,1 ~ } \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" { a,2 r2 } \bar "|" { r1 } diff --git a/resources/string_quartet_2/62300302/62300302_mus_model.json b/resources/string_quartet_2/62300302/62300302_mus_model.json index da50172..d05bb15 100644 --- a/resources/string_quartet_2/62300302/62300302_mus_model.json +++ b/resources/string_quartet_2/62300302/62300302_mus_model.json @@ -30,12 +30,9 @@ ], [ [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ 0, 3, -2, -1, 1, -1 ], [ -1, 3, -2, 0, 1, 0 ] ], 1 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ 0, 2, -2, -1, 1, 0 ], [ -1, 3, -2, 0, 1, 0 ] ], 1 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ 0, 2, -2, -1, 1, 0 ], [ 0, 3, -2, -1, 1, 0 ] ], 1.5 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ "Rest" ], [ 0, 3, -2, -1, 1, 0 ] ], 1 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ "Rest" ], [ "Rest" ], [ 0, 3, -2, -1, 1, 0 ] ], 1.375 ], - [ [ [ -2, 3, -2, -1, 1, 0 ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 0 ], - [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 0 ] + [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ 0, 2, -2, -1, 1, 0 ], [ -1, 3, -2, 0, 1, 0 ] ], 3 ], + [ [ [ -2, 3, -2, -1, 1, 0 ], [ -1, 3, -2, -1, 0, 0 ], [ 0, 2, -2, -1, 1, 0 ], [ 0, 3, -2, -1, 1, 0 ] ], 5 ], + [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 6 ] ] ] ], diff --git a/resources/string_quartet_2/62300302/lilypond/part_I.ly b/resources/string_quartet_2/62300302/lilypond/part_I.ly index 0afcad2..a82a2da 100644 --- a/resources/string_quartet_2/62300302/lilypond/part_I.ly +++ b/resources/string_quartet_2/62300302/lilypond/part_I.ly @@ -1,5 +1,5 @@ { - { r1 } + { r1\fermata^2 } \bar "|" { r1 } \bar "|" @@ -29,8 +29,12 @@ \bar "|" { g'1 ~ } \bar "|" - { g'2 a'2^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + { g'1\fermata^2 ~ } + \bar "|" + { g'2 a'2^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } \bar "|" - { a'1} + { a'1\fermata^4} + \bar "|" + { r1\fermata^6} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/62300302/lilypond/part_II.ly b/resources/string_quartet_2/62300302/lilypond/part_II.ly index 8af6926..eef40c6 100644 --- a/resources/string_quartet_2/62300302/lilypond/part_II.ly +++ b/resources/string_quartet_2/62300302/lilypond/part_II.ly @@ -31,6 +31,10 @@ \bar "|" { d'1^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } \bar "|" - { d'4 r2. } + { d'1 ~} + \bar "|" + { d'1 } + \bar "|" + { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/62300302/lilypond/part_III.ly b/resources/string_quartet_2/62300302/lilypond/part_III.ly index a6fa808..b6c96c7 100644 --- a/resources/string_quartet_2/62300302/lilypond/part_III.ly +++ b/resources/string_quartet_2/62300302/lilypond/part_III.ly @@ -31,6 +31,10 @@ \bar "|" { e1 ~ } \bar "|" - { e2. r4} + { e1 ~} + \bar "|" + { e1} + \bar "|" + { r1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/62300302/lilypond/part_IV.ly b/resources/string_quartet_2/62300302/lilypond/part_IV.ly index 19d2217..cdd4ed6 100644 --- a/resources/string_quartet_2/62300302/lilypond/part_IV.ly +++ b/resources/string_quartet_2/62300302/lilypond/part_IV.ly @@ -31,6 +31,10 @@ \bar "|" { a,1 ~ } \bar "|" + { a,1 ~} + \bar "|" { a,1} + \bar "|" + { r1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/72dc057f/lilypond/part_I.ly b/resources/string_quartet_2/72dc057f/lilypond/part_I.ly index 5c2e756..1f6ef54 100644 --- a/resources/string_quartet_2/72dc057f/lilypond/part_I.ly +++ b/resources/string_quartet_2/72dc057f/lilypond/part_I.ly @@ -1,30 +1,20 @@ { - { r1 } - \bar "|" - { r1 } - \bar "|" + { r1\fermata^4 } + \bar "|" { r2 e'2^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } + { e'1\fermata^4 ~ } \bar "|" { e'2. ~ e'8.[ e'16^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'2. ~ e'8[ d'8^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ } \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" + { d'1\fermata^4 ~ } + \bar "|" { d'2. ~ d'8.[ r16] } \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } + { r1\fermata^6 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/72dc057f/lilypond/part_II.ly b/resources/string_quartet_2/72dc057f/lilypond/part_II.ly index 101d6df..e800cba 100644 --- a/resources/string_quartet_2/72dc057f/lilypond/part_II.ly +++ b/resources/string_quartet_2/72dc057f/lilypond/part_II.ly @@ -1,14 +1,10 @@ { { r1 } - \bar "|" - { r1 } - \bar "|" + \bar "|" { r2 dis''2^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} ~ } \bar "|" { dis''1 ~ } - \bar "|" - { dis''1 ~ } - \bar "|" + \bar "|" { dis''2. ~ dis''8.[ cis''16^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ } \bar "|" { cis''1 ~ } @@ -16,15 +12,9 @@ { cis''2. ~ cis''8[ d''8^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] ~ } \bar "|" { d''1 ~ } - \bar "|" - { d''1 ~ } - \bar "|" + \bar "|" { d''2. ~ d''8.[ r16] } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/72dc057f/lilypond/part_III.ly b/resources/string_quartet_2/72dc057f/lilypond/part_III.ly index e774c53..cc6490b 100644 --- a/resources/string_quartet_2/72dc057f/lilypond/part_III.ly +++ b/resources/string_quartet_2/72dc057f/lilypond/part_III.ly @@ -1,14 +1,10 @@ { { r1 } - \bar "|" - { r1 } - \bar "|" + \bar "|" { r2 cis'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } \bar "|" { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" + \bar "|" { cis'2. ~ cis'8.[ cis'16^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ } \bar "|" { cis'1 ~ } @@ -17,14 +13,8 @@ \bar "|" { f'1 ~ } \bar "|" - { f'1 ~ } - \bar "|" { f'2. ~ f'8.[ r16] } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/72dc057f/lilypond/part_IV.ly b/resources/string_quartet_2/72dc057f/lilypond/part_IV.ly index e37440b..d954fe8 100644 --- a/resources/string_quartet_2/72dc057f/lilypond/part_IV.ly +++ b/resources/string_quartet_2/72dc057f/lilypond/part_IV.ly @@ -12,19 +12,9 @@ { a,1 ~ } \bar "|" { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" + \bar "|" { a,2. ~ a,8.[ r16] } \bar "|" { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/74307bb4/74307bb4_mus_model.json b/resources/string_quartet_2/74307bb4/74307bb4_mus_model.json index 6d6bd44..418272b 100644 --- a/resources/string_quartet_2/74307bb4/74307bb4_mus_model.json +++ b/resources/string_quartet_2/74307bb4/74307bb4_mus_model.json @@ -78,7 +78,7 @@ [ [ [ -3, 3, -1, 1, 0, 0 ], [ "Rest" ], [ -1, 2, -1, 1, 0, 0 ], [ -1, 2, -2, 1, 0, 0 ] ], 0 ], [ [ [ -3, 3, -1, 1, 0, 0 ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ -1, 2, -2, 1, 0, 0 ] ], 0 ], [ [ [ -2, 2, -2, 1, 0, 0 ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ -1, 2, -2, 1, 0, 0 ] ], 4.375 ], - [ [ [ -3, 2, -1, 1, 0, 1 ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ -1, 2, -2, 1, 0, 0 ] ], 4.375 ], + [ [ [ -3, 2, -1, 1, 0, 1 ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ -1, 2, -2, 1, 0, 0 ] ], 4.75 ], [ [ [ -3, 2, -1, 1, 0, 1 ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ "Rest" ] ], 0 ], [ [ [ "Rest" ], [ 0, 2, -1, 0, 0, 0 ], [ -1, 2, -1, 1, 0, 0 ], [ "Rest" ] ], 0 ], [ [ [ "Rest" ], [ 0, 2, -1, 0, 0, 0 ], [ "Rest" ], [ "Rest" ] ], 0 ] diff --git a/resources/string_quartet_2/74307bb4/lilypond/part_I.ly b/resources/string_quartet_2/74307bb4/lilypond/part_I.ly index 8b64a06..5c59f6f 100644 --- a/resources/string_quartet_2/74307bb4/lilypond/part_I.ly +++ b/resources/string_quartet_2/74307bb4/lilypond/part_I.ly @@ -3,13 +3,11 @@ \bar "|" { dis'1 ~ } \bar "|" - { dis'1 ~ } - \bar "|" - { dis'1 ~ } + { dis'1\fermata^4 ~ } \bar "|" { dis'1 ~ } \bar "|" - { dis'1 ~ } + { dis'1\fermata^2 ~ } \bar "|" { dis'1 ~ } \bar "|" @@ -17,21 +15,21 @@ \bar "|" { dis'1 ~ } \bar "|" - { dis'1 ~ } + { dis'1\fermata^2 ~ } \bar "|" { dis'1 ~ } \bar "|" { dis'2. e'4^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }} ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'2. ~ e'8.[ f'16^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }}] ~ } \bar "|" - { f'1 ~ } + { f'1\fermata^2 ~ } \bar "|" { f'8.[ fis'16^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }}] ~ fis'2 ~ fis'8[ fis'8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↑" }}] ~ } \bar "|" - { fis'1 ~ } + { fis'1\fermata^2 ~ } \bar "|" { fis'2. g'4^\markup { \pad-markup #0.2 "+33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } \bar "|" @@ -39,27 +37,25 @@ \bar "|" { gis'8[ a'8^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}] ~ a'2. ~ } \bar "|" - { a'1 ~ } + { a'1\fermata^2 ~ } \bar "|" { a'2 ~ a'8[ a'8^\markup { \pad-markup #0.2 "+25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }}] ~ a'4 ~ } \bar "|" { a'4 ~ a'8.[ b'16^\markup { \pad-markup #0.2 "-47"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ b'2 ~ } \bar "|" - { b'1 ~ } + { b'1\fermata^2 ~ } \bar "|" { b'2. ~ b'8.[ e'16^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }}] ~ } \bar "|" - { e'1 } + { e'1\fermata^2 } \bar "|" { fis'1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" + { fis'1\fermata^4 ~ } + \bar "|" { fis'8.[ f'16^\markup { \pad-markup #0.2 "+20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}] ~ f'2. ~ } \bar "|" - { f'1 ~ } + { f'1\fermata^2 ~ } \bar "|" { f'8.[ fis'16^\markup { \pad-markup #0.2 "+31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ fis'2. ~ } \bar "|" @@ -69,59 +65,55 @@ \bar "|" { g'2 ~ g'16[ gis'8.^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ gis'4 ~ } \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^4 ~ } \bar "|" { gis'1 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'1 ~ } \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } + { gis'1\fermata^2 ~ } \bar "|" { gis'4 ~ gis'8[ g'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ g'2 ~ } \bar "|" - { g'1 ~ } + { g'1\fermata^2 ~ } \bar "|" { g'2 ~ g'8[ fis'8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ fis'4 ~ } \bar "|" - { fis'1 ~ } + { fis'1\fermata^2 ~ } \bar "|" { fis'2. ~ fis'8[ cis''8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ } \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 ~ } + { cis''1\fermata^4 ~ } \bar "|" { cis''4 ~ cis''16[ cis'8.^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ cis'2 ~ } \bar "|" - { cis'1 ~ } + { cis'1\fermata^2 ~ } \bar "|" { cis'4 ~ cis'8.[ b16^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}] ~ b2 ~ } \bar "|" @@ -133,10 +125,10 @@ \bar "|" { dis'4 ~ dis'8.[ e'16^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}] ~ e'2 ~ } \bar "|" - { e'1 ~ } + { e'1\fermata^2 ~ } \bar "|" { e'1 ~ } \bar "|" - { e'1} + { e'1\fermata^4} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/74307bb4/lilypond/part_II.ly b/resources/string_quartet_2/74307bb4/lilypond/part_II.ly index 222dcb4..2149064 100644 --- a/resources/string_quartet_2/74307bb4/lilypond/part_II.ly +++ b/resources/string_quartet_2/74307bb4/lilypond/part_II.ly @@ -5,8 +5,6 @@ \bar "|" { f'1 ~ } \bar "|" - { f'1 ~ } - \bar "|" { f'16[ g'8.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }}] ~ g'2. ~ } \bar "|" { g'1 ~ } @@ -55,8 +53,6 @@ \bar "|" { cis''1 ~ } \bar "|" - { cis''1 ~ } - \bar "|" { cis''8.[ d''16^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ d''2. ~ } \bar "|" { d''1 ~ } @@ -103,8 +99,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" { r4 r8[ dis''8^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ dis''2 ~ } \bar "|" { dis''1 ~ } @@ -121,8 +115,6 @@ \bar "|" { gis'1 ~ } \bar "|" - { gis'1 ~ } - \bar "|" { gis'4 ~ gis'8.[ r16] r2 } \bar "|" { r1 } diff --git a/resources/string_quartet_2/74307bb4/lilypond/part_III.ly b/resources/string_quartet_2/74307bb4/lilypond/part_III.ly index 0991a78..ce9f73d 100644 --- a/resources/string_quartet_2/74307bb4/lilypond/part_III.ly +++ b/resources/string_quartet_2/74307bb4/lilypond/part_III.ly @@ -13,8 +13,6 @@ \bar "|" { ais'1 ~ } \bar "|" - { ais'1 ~ } - \bar "|" { ais'4 ais'2.^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } \bar "|" { ais'1 ~ } @@ -69,8 +67,6 @@ \bar "|" { ais'1 ~ } \bar "|" - { ais'1 ~ } - \bar "|" { ais'2. ~ ais'8[ r8] } \bar "|" { r1 } @@ -103,8 +99,6 @@ \bar "|" { r1 } \bar "|" - { r1 } - \bar "|" { r4 r8[ a'8^\markup { \pad-markup #0.2 "+37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ a'2 ~ } \bar "|" { a'1 ~ } @@ -116,9 +110,7 @@ { ais'1 ~ } \bar "|" { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" + \bar "|" { ais'1 ~ } \bar "|" { ais'1 ~ } @@ -137,6 +129,6 @@ \bar "|" { ais'1 ~ } \bar "|" - { ais'1} + { ais'1 ~} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/74307bb4/lilypond/part_IV.ly b/resources/string_quartet_2/74307bb4/lilypond/part_IV.ly index 0d3677b..f4f7839 100644 --- a/resources/string_quartet_2/74307bb4/lilypond/part_IV.ly +++ b/resources/string_quartet_2/74307bb4/lilypond/part_IV.ly @@ -19,8 +19,6 @@ \bar "|" { c'1 ~ } \bar "|" - { c'1 ~ } - \bar "|" { c'2. r4 } \bar "|" { r1 } @@ -55,8 +53,6 @@ \bar "|" { b1 ~ } \bar "|" - { b1 ~ } - \bar "|" { b8.[ ais16^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais2. ~ } \bar "|" { ais1 ~ } @@ -79,8 +75,6 @@ \bar "|" { c'1 ~ } \bar "|" - { c'1 ~ } - \bar "|" { c'4 cis'2.^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } \bar "|" { cis'2. ~ cis'8[ cis'8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}] ~ } @@ -129,8 +123,6 @@ \bar "|" { dis1 ~ } \bar "|" - { dis1 ~ } - \bar "|" { dis4 ~ dis8.[ e16^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ e2 ~ } \bar "|" { e1 ~ } diff --git a/resources/string_quartet_2/74b8f8d9/74b8f8d9_mus_model.json b/resources/string_quartet_2/74b8f8d9/74b8f8d9_mus_model.json index 239177d..0d21a95 100644 --- a/resources/string_quartet_2/74b8f8d9/74b8f8d9_mus_model.json +++ b/resources/string_quartet_2/74b8f8d9/74b8f8d9_mus_model.json @@ -35,7 +35,7 @@ [ [ [ -2, 3, -2, -1, 1, 0 ], [ "Rest" ], [ -1, 3, -2, -1, 1, 1 ], [ 0, 2, -2, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ "Rest" ], [ -1, 3, -2, -1, 1, 1 ], [ 0, 2, -2, -1, 1, 0 ] ], 0 ], [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ 0, 2, -2, -1, 1, 0 ] ], 0 ], - [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 10.125 ] + [ [ [ "Rest" ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 9.625 ] ] ] ], diff --git a/resources/string_quartet_2/74b8f8d9/lilypond/part_I.ly b/resources/string_quartet_2/74b8f8d9/lilypond/part_I.ly index 1e8996c..607f119 100644 --- a/resources/string_quartet_2/74b8f8d9/lilypond/part_I.ly +++ b/resources/string_quartet_2/74b8f8d9/lilypond/part_I.ly @@ -1,42 +1,30 @@ { - { r1 } + { r1\fermata^2 } \bar "|" { r2. r8[ a'8^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } + { a'1\fermata^4 ~ } \bar "|" { a'4 fis'2.^\markup { \pad-markup #0.2 "-44"} ~ } \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" + { fis'1\fermata^4 ~ } + \bar "|" { fis'2. ~ fis'16[ g'8.^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ } \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } + { g'1\fermata^4 ~ } \bar "|" { g'16[ a'8.^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ a'2. ~ } \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" + { a'1\fermata^4 ~ } + \bar "|" { a'2 cis'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } + { cis'1\fermata^4 ~ } \bar "|" { cis'8[ d'8^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] ~ d'2. ~ } \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" + { d'1\fermata^4 ~ } + \bar "|" { d'8.[ r16] r2. } \bar "|" { r1 } diff --git a/resources/string_quartet_2/74b8f8d9/lilypond/part_II.ly b/resources/string_quartet_2/74b8f8d9/lilypond/part_II.ly index afb9df3..16c2d82 100644 --- a/resources/string_quartet_2/74b8f8d9/lilypond/part_II.ly +++ b/resources/string_quartet_2/74b8f8d9/lilypond/part_II.ly @@ -5,38 +5,26 @@ \bar "|" { cis'1 ~ } \bar "|" - { cis'1 ~ } - \bar "|" { cis'4 d'2.^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } \bar "|" { d'1 ~ } \bar "|" - { d'1 ~ } - \bar "|" { d'2. ~ d'16[ dis'8.^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}] ~ } \bar "|" { dis'1 ~ } \bar "|" - { dis'1 ~ } - \bar "|" { dis'16[ e'8.^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ e'2. ~ } \bar "|" { e'1 ~ } \bar "|" - { e'1 ~ } - \bar "|" { e'2 e'2^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } \bar "|" { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" + \bar "|" { e'8[ fis'8^\markup { \pad-markup #0.2 "-44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}] ~ fis'2. ~ } \bar "|" { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" + \bar "|" { fis'8.[ r16] r2. } \bar "|" { r1 } diff --git a/resources/string_quartet_2/74b8f8d9/lilypond/part_III.ly b/resources/string_quartet_2/74b8f8d9/lilypond/part_III.ly index 2d48723..d5db128 100644 --- a/resources/string_quartet_2/74b8f8d9/lilypond/part_III.ly +++ b/resources/string_quartet_2/74b8f8d9/lilypond/part_III.ly @@ -4,39 +4,27 @@ { r2. r8[ e8^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ } \bar "|" { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" + \bar "|" { e4 f2.^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } \bar "|" { f1 ~ } - \bar "|" - { f1 ~ } - \bar "|" + \bar "|" { f2. ~ f16[ cis'8.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ } \bar "|" { cis'1 ~ } \bar "|" - { cis'1 ~ } - \bar "|" { cis'16[ cis'8.^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ cis'2. ~ } \bar "|" { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" + \bar "|" { cis'2 d'2^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } \bar "|" { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" + \bar "|" { d'8[ f8^\markup { \pad-markup #0.2 "+29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ f2. ~ } \bar "|" { f1 ~ } \bar "|" - { f1 ~ } - \bar "|" { f8.[ r16] r2. } \bar "|" { r1 } diff --git a/resources/string_quartet_2/74b8f8d9/lilypond/part_IV.ly b/resources/string_quartet_2/74b8f8d9/lilypond/part_IV.ly index eca3efa..1aeccc8 100644 --- a/resources/string_quartet_2/74b8f8d9/lilypond/part_IV.ly +++ b/resources/string_quartet_2/74b8f8d9/lilypond/part_IV.ly @@ -16,13 +16,7 @@ { a,1 ~ } \bar "|" { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" + \bar "|" { a,1 ~ } \bar "|" { a,1 ~ } @@ -30,13 +24,7 @@ { a,1 ~ } \bar "|" { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" + \bar "|" { a,8.[ r16] r2. } \bar "|" { r1 } diff --git a/resources/string_quartet_2/76e45e56/lilypond/part_I.ly b/resources/string_quartet_2/76e45e56/lilypond/part_I.ly index 3279f32..97d0bfe 100644 --- a/resources/string_quartet_2/76e45e56/lilypond/part_I.ly +++ b/resources/string_quartet_2/76e45e56/lilypond/part_I.ly @@ -1,38 +1,24 @@ { { r2 e'2^\markup { \pad-markup #0.2 "+18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" + { e'1\fermata^6 } + \bar "|" { e'1^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} ~ } \bar "|" { e'1 ~ } \bar "|" { e'2. d'4^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } \bar "|" - { d'1 ~ } + { d'1\fermata^2 ~ } \bar "|" { d'2. cis'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } + { cis'1\fermata^4 ~ } \bar "|" { cis'2 ~ cis'16[ cis'8.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ cis'4 ~ } \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } + { cis'1\fermata^4 ~ } \bar "|" { cis'2. ~ cis'16[ r8.] } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/76e45e56/lilypond/part_II.ly b/resources/string_quartet_2/76e45e56/lilypond/part_II.ly index 20c6582..a0447e4 100644 --- a/resources/string_quartet_2/76e45e56/lilypond/part_II.ly +++ b/resources/string_quartet_2/76e45e56/lilypond/part_II.ly @@ -1,11 +1,7 @@ { { r2 dis''2^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} ~ } \bar "|" - { dis''1 ~ } - \bar "|" - { dis''1 ~ } - \bar "|" - { dis''1 } + { dis''1 } \bar "|" { cis''1^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } \bar "|" @@ -19,20 +15,10 @@ \bar "|" { b'1 ~ } \bar "|" - { b'1 ~ } - \bar "|" { b'2 ~ b'16[ a'8.^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ a'4 ~ } \bar "|" { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" + \bar "|" { a'2. ~ a'16[ r8.] } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/76e45e56/lilypond/part_III.ly b/resources/string_quartet_2/76e45e56/lilypond/part_III.ly index 2edf028..1fd4cfc 100644 --- a/resources/string_quartet_2/76e45e56/lilypond/part_III.ly +++ b/resources/string_quartet_2/76e45e56/lilypond/part_III.ly @@ -1,10 +1,6 @@ { { r2 cis'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" { cis'1 } \bar "|" { cis'1^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }} ~ } @@ -18,21 +14,11 @@ { f'2. fis'4^\markup { \pad-markup #0.2 "-44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }} ~ } \bar "|" { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" + \bar "|" { fis'2 ~ fis'16[ g'8.^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] ~ g'4 ~ } \bar "|" { g'1 ~ } \bar "|" - { g'1 ~ } - \bar "|" { g'2. ~ g'16[ r8.] } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_2/76e45e56/lilypond/part_IV.ly b/resources/string_quartet_2/76e45e56/lilypond/part_IV.ly index c9189fc..330fb86 100644 --- a/resources/string_quartet_2/76e45e56/lilypond/part_IV.ly +++ b/resources/string_quartet_2/76e45e56/lilypond/part_IV.ly @@ -19,20 +19,6 @@ \bar "|" { a,1 ~ } \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" - { a,1 ~ } - \bar "|" { a,2. ~ a,16[ r8.] } - \bar "|" - { r1 } - \bar "|" - { r1 } - \bar "|" - { r1 } \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise.json b/resources/string_quartet_3_rise.json index aebc7d6..6adddb6 100644 --- a/resources/string_quartet_3_rise.json +++ b/resources/string_quartet_3_rise.json @@ -27,6 +27,7 @@ "5ef20586", "4dd2a130", "767e70f0", - "536cac90" + "536cac90", + "67633b5a" ] } \ No newline at end of file diff --git a/resources/string_quartet_3_rise.json_bak b/resources/string_quartet_3_rise.json_bak index 69a714a..aebc7d6 100644 --- a/resources/string_quartet_3_rise.json_bak +++ b/resources/string_quartet_3_rise.json_bak @@ -26,6 +26,7 @@ "5f0075ab", "5ef20586", "4dd2a130", - "767e70f0" + "767e70f0", + "536cac90" ] } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly b/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly index 7554f1b..e5d535a 100644 --- a/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/44490863/lilypond/part_I.ly @@ -1,48 +1,26 @@ { - { cis'1^\markup { \pad-markup #0.2 "-12"} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'2 gis'2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } - \bar "|" - { gis'2^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ais'2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { ais'2 cis''2^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis''1 } - \bar "|" - { gis1^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { gis2 c'2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { c'1 } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { dis'2 d''2^\markup { \pad-markup #0.2 "-20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''2 gis2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { gis1 ~ } - \bar "|" - { gis2 dis'2^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { cis''1 } - \bar "|" - { b1^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b2 fis'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1} -\bar "||" + { s4 s4 s4 s4 } + + { s4 s4 s4 gis'4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + + { gis'4^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ais'4^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} s4 cis''4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } + + { s4 s4 gis4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 } + + { s4 c'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} s4 s4 } + + { dis'4^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 d''4^\markup { \pad-markup #0.2 "-20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} } + + { s4 s4 s4 gis4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 s4 s4 dis'4^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} } + + { cis''4^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 s4 s4 } + + { b4^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 s4 } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly b/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly index 38f577f..b6eff14 100644 --- a/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/44490863/lilypond/part_II.ly @@ -1,48 +1,26 @@ { - { a'1^\markup { \pad-markup #0.2 "+2"} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 cis''2^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'2 dis'2^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { dis'1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { e'1 } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} ~ } - \bar "|" - { g'2 cis''2^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''2 gis'2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { ais'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { d''2 cis''2^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { cis''1} -\bar "||" + { s4 s4 s4 s4 } + + { s4 cis''4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 cis'4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 } + + { s4 s4 s4 dis'4^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } + + { s4 s4 e'4^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 s4 g'4^\markup { \pad-markup #0.2 "-22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} s4 } + + { s4 cis''4^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} s4 s4 } + + { s4 gis'4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 ais'4^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { s4 s4 b'4^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 } + + { d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} s4 s4 cis''4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly b/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly index 791ea32..5ef3b56 100644 --- a/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/44490863/lilypond/part_III.ly @@ -1,48 +1,26 @@ { - { gis'1^\markup { \pad-markup #0.2 "-10"} } - \bar "|" - { a2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} fis'2^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'2 gis'2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 } - \bar "|" - { gis'1^\markup { \pad-markup #0.2 "+43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'2 b'2^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { b'2 cis''2^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 } - \bar "|" - { a1^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a1} -\bar "||" + { gis'4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} fis'4^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 gis'4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { gis'4^\markup { \pad-markup #0.2 "+43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} s4 s4 s4 } + + { s4 s4 s4 b'4^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} } + + { s4 cis''4^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 a4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly b/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly index 24d5f90..5c2d7b7 100644 --- a/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/44490863/lilypond/part_IV.ly @@ -1,48 +1,26 @@ { - { ais'2^\markup { \pad-markup #0.2 "-45"} cis''2^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis''1 } - \bar "|" - { fis1^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } - \bar "|" - { gis1^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { gis1 ~ } - \bar "|" - { gis1 } - \bar "|" - { cis1^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis1 } - \bar "|" - { e1^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ~ } - \bar "|" - { e2 gis2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { gis2 ais2^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } - \bar "|" - { ais1 } - \bar "|" - { c'1^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { dis'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { c''2 cis'2^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'2 e'2^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" - { b'2^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} fis,2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} -\bar "||" + { s4 cis''4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { \clef bass fis4^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 gis4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 } + + { s4 s4 s4 s4 } + + { cis4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 s4 } + + { e4^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} s4 s4 gis4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 ais4^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} s4 s4 } + + { c'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} s4 dis'4^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 } + + { s4 s4 \clef treble c''4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} s4 } + + { s4 cis'4^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 e'4^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { b'4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} \clef bass fis,4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly index 8aeb6a9..274dce3 100644 --- a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_I.ly @@ -1,52 +1,28 @@ { - { cis''1^\markup { \pad-markup #0.2 "+50"} } - \bar "|" - { g1^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g1 ~ } - \bar "|" - { g1 ~ } - \bar "|" - { g2 d'2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 b2^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'2 f'2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'2 c''2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 } - \bar "|" - { g1^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}} -\bar "||" + { s4 s4 g4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 s4 s4 s4 } + + { s4 d'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 b4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { fis'4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} s4 s4 s4 } + + { s4 s4 s4 f'4^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } + + { s4 s4 s4 c''4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } + + { s4 s4 s4 s4 } + + { ais'4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { g4^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly index b7d26c3..aae608d 100644 --- a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_II.ly @@ -1,52 +1,28 @@ { - { cis''1^\markup { \pad-markup #0.2 "-48"} ~ } - \bar "|" - { cis''1 } - \bar "|" - { d'2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} a'2^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} } - \bar "|" - { a1^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { dis'1 } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { ais'1 } - \bar "|" - { ais2^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} dis'2^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { dis'1 } - \bar "|" - { gis'1^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} ~ } - \bar "|" - { gis'2 d''2^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} } - \bar "|" - { ais1^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { ais1} -\bar "||" + { cis''4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} s4 s4 s4 } + + { d'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} a'4^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} cis'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} s4 } + + { a4^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 s4 } + + { e'4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { b'4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 dis'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 } + + { s4 s4 ais'4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 } + + { s4 s4 ais4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} dis'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} } + + { s4 s4 gis'4^\markup { \pad-markup #0.2 "+16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} s4 } + + { s4 d''4^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} ais4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly index eba99ed..d2d2884 100644 --- a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_III.ly @@ -1,52 +1,28 @@ { - { cis'2^\markup { \pad-markup #0.2 "+50"} g'2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 c''2^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { c''1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'2 g'2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { e1^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } - \bar "|" - { b1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } - \bar "|" - { b1 } - \bar "|" - { cis''2^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ais'2^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'2 ais2^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { ais1 ~ } - \bar "|" - { ais2 f'2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'2 fis'2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1} -\bar "||" + { s4 g'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 c''4^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} } + + { s4 s4 a'4^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 } + + { s4 g'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { b'4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 s4 } + + { e4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 b4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ais'4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} } + + { s4 s4 s4 s4 } + + { s4 ais4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 s4 } + + { s4 f'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} s4 s4 } + + { s4 fis'4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { c''4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 s4 s4 } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly index b468bd1..541b946 100644 --- a/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/47bdba0e/lilypond/part_IV.ly @@ -1,52 +1,28 @@ { - { g,1^\markup { \pad-markup #0.2 "+1"} ~ } - \bar "|" - { g,2 d2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d2 g2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { g1 } - \bar "|" - { ais'2^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} e2^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { e1 } - \bar "|" - { a2^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} b,2^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b,2 g2^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { g2 b'2^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'2 fis2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis2 b2^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b1 } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ~ } - \bar "|" - { fis'1 } - \bar "|" - { fis1^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis2 fis,2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis,1 ~ } - \bar "|" - { fis,2 c2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { c2 f2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}} -\bar "||" + { s4 s4 s4 d4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 g4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} } + + { s4 s4 \clef treble ais'4^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} \clef bass e4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } + + { s4 s4 a4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} b,4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 g4^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 \clef treble b'4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 \clef bass fis4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { s4 b4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 } + + { fis'4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} s4 s4 s4 } + + { fis4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} s4 s4 s4 } + + { s4 s4 s4 fis,4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 s4 s4 c4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 f4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly b/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly index 521c9ce..6c3d7e3 100644 --- a/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/4874dd07/lilypond/part_I.ly @@ -1,38 +1,22 @@ { - { r2 d'2^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 a2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } - \bar "|" - { b1^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } - \bar "|" - { c'1^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { c'1 } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'2 g'2^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { c''1 } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}} -\bar "||" + { s4 d'4^\markup { \pad-markup #0.2 "+0"} s4 s4 } + + { s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} b4^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 } + + { c'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 s4 s4 } + + { d'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 g'4^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { a'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 s4 c''4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} s4 } + + { s4 s4 d''4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 s4 cis'4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly b/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly index 5f32320..9c3195e 100644 --- a/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/4874dd07/lilypond/part_II.ly @@ -1,38 +1,22 @@ { - { r1 } - \bar "|" - { r2 a'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 b'2^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'2 d''2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''2 a'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 d''2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''1 } - \bar "|" - { g1^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'2 a'2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1} -\bar "||" + { s4 s4 s4 a'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 b'4^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 d''4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { s4 a'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { s4 d''4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 } + + { s4 s4 g4^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { d'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 a'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly b/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly index 34b4e69..b30de93 100644 --- a/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/4874dd07/lilypond/part_III.ly @@ -1,38 +1,22 @@ { - { r1 } - \bar "|" - { d1^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 } - \bar "|" - { a1^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { a1 } - \bar "|" - { ais1^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { ais1 } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 d2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d2 a2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { e'1} -\bar "||" + { s4 s4 d4^\markup { \pad-markup #0.2 "+0"} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 } + + { s4 s4 ais4^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { s4 s4 d'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 } + + { s4 s4 s4 d4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 } + + { e'4^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly b/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly index aa3b55a..34f6121 100644 --- a/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/4874dd07/lilypond/part_IV.ly @@ -1,38 +1,22 @@ { - { d'1^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'2 d2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d1 ~ } - \bar "|" - { d1 } - \bar "|" - { g1^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g2 a2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a2 g'2^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 d''2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+0"} ~ } - \bar "|" - { d'2 g2^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { g2 a2^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a2 gis'2^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}} -\bar "||" + { d'4^\markup { \pad-markup #0.2 "+0"} s4 s4 s4 } + + { e'4^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 s4 s4 } + + { s4 s4 s4 d4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } + + { s4 s4 s4 s4 } + + { g4^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } + + {\clef treble s4 g'4^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 s4 } + + { s4 d''4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { d'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 \clef bass g4^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} } + + { s4 a4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 \clef treble gis'4^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} } + + { ais'4^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly index f6077e0..f045fb4 100644 --- a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_I.ly @@ -1,22 +1,12 @@ { - { b'1^\markup { \pad-markup #0.2 "+1"} } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} ~ } - \bar "|" - { d''2 ais2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { ais2 b2^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b2 cis'2^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1} -\bar "||" + { b'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 d''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} s4 } + + { s4 ais4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 b4^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} } + + { s4 s4 s4 cis'4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly index f2264a1..3181290 100644 --- a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_II.ly @@ -1,22 +1,12 @@ { - { f'2^\markup { \pad-markup #0.2 "-48"} f'2^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } - \bar "|" - { g1^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { g1 ~ } - \bar "|" - { g1 ~ } - \bar "|" - { g2 ais2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} ~ } - \bar "|" - { ais1} -\bar "||" + { s4 f'4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }} s4 s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} s4 } + + { d''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 g4^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 } + + { s4 s4 s4 s4 } + + { s4 ais4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly index 2b5bf61..1c221af 100644 --- a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_III.ly @@ -1,22 +1,12 @@ { - { gis'1^\markup { \pad-markup #0.2 "+11"} ~ } - \bar "|" - { gis'2 ais'2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'2 b'2^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}} -\bar "||" + { s4 s4 s4 ais'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 b'4^\markup { \pad-markup #0.2 "+5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }} s4 s4 } + + { d''4^\markup { \pad-markup #0.2 "-6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 e'4^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly index d6a93f5..3cea585 100644 --- a/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/4b40ed47/lilypond/part_IV.ly @@ -1,22 +1,12 @@ { - { gis'1^\markup { \pad-markup #0.2 "+38"} ~ } - \bar "|" - { gis'1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 a'2^\markup { \pad-markup #0.2 "-26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } - \bar "|" - { a'1 } - \bar "|" - { f'1^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } - \bar "|" - { f'2^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} c''2^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''2 cis''2^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} -\bar "||" + { s4 s4 s4 s4 } + + { a'4^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 s4 s4 } + + { s4 a'4^\markup { \pad-markup #0.2 "-26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} s4 s4 } + + { f'4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 f'4^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} c''4^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} } + + { s4 s4 s4 cis''4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly index 81901d2..10c891d 100644 --- a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_I.ly @@ -1,22 +1,14 @@ { - { a'1^\markup { \pad-markup #0.2 "-21"} ~ } - \bar "|" - { a'2 b'2^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'2 fis'2^\markup { \pad-markup #0.2 "-36"} ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { a'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "-36"}} -\bar "||" + { a'4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 b'4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 s4 } + + { s4 s4 a'4^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 } + + { s4 s4 b'4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 } + + { s4 s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly index a98c260..d76e3cd 100644 --- a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_II.ly @@ -1,22 +1,14 @@ { - { cis''1^\markup { \pad-markup #0.2 "-34"} } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'2 cis''2^\markup { \pad-markup #0.2 "-34"} ~ } - \bar "|" - { cis''2 fis'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis'2 cis''2^\markup { \pad-markup #0.2 "-34"} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''2 d''2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}} -\bar "||" + { s4 s4 d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { s4 s4 b'4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 cis''4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + + { s4 cis''4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 } + + { s4 s4 s4 d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly index 09bfdcb..f544f41 100644 --- a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_III.ly @@ -1,22 +1,14 @@ { - { a2^\markup { \pad-markup #0.2 "-21"} b2^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { cis'1 } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { dis'2 fis'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis'2 fis2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { fis1} -\bar "||" + { s4 b4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 s4 } + + { s4 s4 s4 s4 } + + { cis'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 s4 } + + { dis'4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} s4 s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + + { s4 fis4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 s4 } + + { a4^\markup { \pad-markup #0.2 "-21"}}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly index 3c23e1f..0d13cff 100644 --- a/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/4bf1af12/lilypond/part_IV.ly @@ -1,22 +1,14 @@ { - { fis,1^\markup { \pad-markup #0.2 "-36"} ~ } - \bar "|" - { fis,1 } - \bar "|" - { b,1^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b,2 fis2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis'1} -\bar "||" + { s4 s4 s4 s4 } + + { b,4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 fis4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { cis'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4c646e0e/4c646e0e_code.scd b/resources/string_quartet_3_rise/4c646e0e/4c646e0e_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise/4c646e0e/4c646e0e_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise/4c646e0e/4c646e0e_mus_model.json b/resources/string_quartet_3_rise/4c646e0e/4c646e0e_mus_model.json new file mode 100644 index 0000000..b69f8b2 --- /dev/null +++ b/resources/string_quartet_3_rise/4c646e0e/4c646e0e_mus_model.json @@ -0,0 +1,342 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -2, 2, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -4, 2, 1, 2, -2, 2 ], [ -2, 2, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -2, 2, 1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 4, 1, 3, -2, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -3, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 4, 1, 3, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -3, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 4, 1, 3, -2, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -3, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -3, 4, 0, 2, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -3, 4, 0, 2, -2, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 5, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 4, 1, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 5, 1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -3, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -4, 5, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -3, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -3, 4, 0, 2, -2, 2 ] ], 0 ], + [ [ [ -3, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 3, 0, 2, -2, 2 ], [ -3, 4, 0, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -3, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -3, 4, 0, 2, -2, 2 ] ], 0 ], + [ [ [ -3, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -4, 3, 0, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -4, 3, 0, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -3, 3, 0, 2, -2, 2 ], [ -4, 3, 0, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -3, 3, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 0, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 5, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 5, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 5, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 5, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -6, 4, 0, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -7, 6, 1, 2, -3, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 1, 1, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 1, 2, -3, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 2, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 2, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -5, 6, 2, 2, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 2, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 3 ], [ -7, 7, 2, 2, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 3 ], [ -7, 6, 2, 2, -2, 3 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 3, -2, 2 ], [ -7, 6, 2, 2, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 3, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 7, 3, 2, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 7, 3, 2, -2, 2 ], [ -6, 7, 3, 2, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -6, 7, 3, 2, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -6, 7, 3, 2, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -5, 6, 3, 2, -2, 2 ] ], 0.25 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -7, 6, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 2 ] ], 0 ], + [ [ [ -8, 6, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 3, 1, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -7, 6, 4, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 6, 3, 1, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 3, 2, -2, 1 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 3, 2, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 3 ], [ -6, 6, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 3 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -6, 5, 3, 2, -2, 3 ], [ -7, 5, 3, 2, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 2, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -7, 5, 3, 2, -2, 3 ] ], 0 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -7, 5, 3, 2, -2, 3 ] ], 0.25 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 4, 3, 1, -2, 2 ] ], 0.75 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 5, 4, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -4, 5, 2, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 5, 4, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 5, 4, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 3, 1, -2, 2 ], [ -5, 5, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -7, 5, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -3, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -7, 5, 3, 1, -2, 2 ], [ -5, 6, 2, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -5, 6, 2, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -4, 5, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 7, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 7, 3, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 7, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -8, 7, 3, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 3, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, 3, 0, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0.25 ], + [ [ [ -7, 6, 4, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 2 ] ], 0 ], + [ [ [ -7, 6, 4, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 4, 1, -2, 2 ], [ -6, 7, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 6, 4, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ], + [ [ [ -6, 5, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 7, 3, 1, -2, 2 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 7, 3, 1, -2, 2 ], [ -7, 6, 3, 2, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 6, 3, 1, -2, 3 ], [ -7, 6, 3, 2, -2, 3 ], [ -5, 6, 3, 1, -2, 2 ], [ -5, 6, 3, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 6, 3, 1, -2, 3 ], [ -7, 6, 3, 2, -2, 3 ], [ -5, 5, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 6, 3, 1, -2, 3 ], [ -7, 6, 3, 2, -2, 3 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 6, 3, 1, -2, 3 ], [ -7, 7, 3, 1, -2, 3 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 6, 3, 1, -2, 3 ], [ -6, 5, 3, 1, -2, 3 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -6, 5, 3, 1, -2, 3 ], [ -6, 6, 3, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -6, 5, 3, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -5, 6, 3, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -6, 5, 3, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 5, 2, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -6, 5, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 5, 2, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -5, 5, 2, 0, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 5, 2, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 5, 3, 1, -2, 3 ], [ -5, 5, 2, 0, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 4, 2, 1, -2, 3 ] ], 0 ], + [ [ [ -6, 4, 2, 1, -2, 3 ], [ -5, 5, 2, 0, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 4, 2, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 2, 1, -2, 3 ], [ -5, 4, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 4, 2, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -5, 4, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -4, 4, 2, 1, -2, 3 ] ], 0 ], + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -5, 4, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -5, 6, 2, 1, -2, 3 ] ], 0.25 ], + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -5, 4, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -1, 3 ] ], 0 ], + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -6, 6, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -1, 3 ] ], 0.25 ], + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -5, 5, 2, 1, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 2, 1, -2, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -6, 4, 2, 1, -1, 3 ] ], 0 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -5, 5, 2, 1, -2, 3 ], [ -6, 4, 2, 1, -1, 3 ] ], 0 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -6, 5, 2, 1, 0, 3 ], [ -6, 4, 2, 1, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -6, 5, 2, 1, 0, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -6, 5, 2, 1, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -5, 5, 2, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -6, 6, 2, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -6, 5, 2, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ], [ -4, 4, 2, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ], [ -4, 4, 2, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -5, 4, 1, 0, -1, 3 ], [ -4, 4, 2, -1, -1, 3 ], [ -4, 4, 2, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -5, 4, 1, 0, -1, 3 ], [ -4, 4, 2, -1, -1, 3 ], [ -4, 4, 2, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ] ], 0 ], + [ [ [ -5, 4, 1, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -4, 4, 2, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ] ], 0 ], + [ [ [ -5, 3, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -5, 4, 2, 0, -1, 3 ] ], 0 ], + [ [ [ -5, 3, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -4, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -6, 5, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -4, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 5, 4, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -4, 5, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -4, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -4, 5, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -4, 4, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -5, 4, 3, 0, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -7, 6, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -5, 5, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 6, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 7, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -8, 6, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 7, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 6, 3, -1, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 7, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -7, 6, 3, -1, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -5, 6, 2, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0.25 ], + [ [ [ -7, 6, 3, -1, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 1, -1, 3 ], [ -6, 6, 3, 0, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 3, -1, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 4 ], [ -6, 6, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -8, 6, 4, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 4 ], [ -6, 6, 3, 0, -1, 3 ] ], 0 ], + [ [ [ -8, 6, 4, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 4 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 4 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -8, 7, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -6, 6, 3, 0, -1, 4 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -8, 7, 3, 0, -1, 3 ], [ -5, 6, 3, 0, -1, 3 ], [ -5, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -8, 7, 3, 0, -1, 3 ], [ -5, 6, 3, -1, -1, 4 ], [ -5, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -7, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 4 ], [ -5, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -7, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 4 ], [ -5, 6, 3, -1, 0, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ], + [ [ [ -7, 7, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 4 ], [ -4, 5, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 3, -1, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -4, 5, 3, -1, -1, 3 ], [ -5, 6, 3, -1, -1, 3 ] ], 0 ], + [ [ [ -7, 6, 3, -1, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -5, 6, 2, -1, -1, 4 ], [ -5, 6, 3, -1, -1, 3 ] ], 0 ], + [ [ [ -7, 6, 3, -1, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -5, 6, 2, -1, -1, 4 ], [ -5, 5, 3, -1, -1, 4 ] ], 0.25 ], + [ [ [ -7, 6, 3, -1, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -6, 6, 3, -1, -1, 4 ], [ -5, 5, 3, -1, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, 3, -2, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -6, 6, 3, -1, -1, 4 ], [ -5, 5, 3, -1, -1, 4 ] ], 0 ], + [ [ [ -6, 6, 3, -2, -1, 4 ], [ -5, 6, 3, -1, -1, 4 ], [ -6, 6, 3, -1, -1, 4 ], [ -6, 7, 3, -1, -1, 4 ] ], 0.25 ], + [ [ [ -6, 6, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -6, 6, 3, -1, -1, 4 ], [ -6, 7, 3, -1, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 6, 3, -2, -1, 4 ], [ -6, 7, 3, -1, -1, 4 ] ], 0.25 ], + [ [ [ -6, 6, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 6, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 6, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 5, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, 3, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 5, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ], + [ [ [ -5, 6, 3, -2, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 5, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ], + [ [ [ -5, 6, 3, -2, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -6, 7, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ], + [ [ [ -5, 6, 3, -2, -1, 4 ], [ -6, 6, 3, -2, -1, 4 ], [ -6, 7, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ], + [ [ [ -5, 6, 3, -2, -1, 4 ], [ -7, 7, 4, -2, -1, 4 ], [ -6, 7, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -7, 7, 4, -2, -1, 4 ], [ -6, 7, 3, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -7, 7, 4, -2, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -5, 7, 4, -3, -1, 4 ], [ -7, 7, 4, -2, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -5, 7, 4, -3, -1, 4 ], [ -6, 7, 4, -3, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 7, 3, -2, -1, 4 ] ], 0 ], + [ [ [ -5, 7, 4, -3, -1, 4 ], [ -6, 7, 4, -3, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], 0.25 ], + [ [ [ -6, 7, 5, -2, -1, 4 ], [ -6, 7, 4, -3, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 5, -2, -1, 4 ], [ -6, 7, 4, -3, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, 0, 4 ], [ -6, 7, 4, -3, -1, 4 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, 0, 4 ], [ -6, 7, 4, -2, -1, 3 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -1, 3 ], [ -5, 7, 4, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -1, 3 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -4, 6, 3, -2, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -5, 6, 4, -1, -1, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -5, 6, 4, -1, -1, 4 ], [ -5, 7, 4, -2, -2, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -5, 6, 4, -1, -1, 4 ], [ -5, 7, 4, -2, -2, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -4, 7, 4, -2, -1, 3 ], [ -5, 7, 4, -2, -2, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -4, 7, 4, -2, -1, 3 ], [ -6, 8, 4, -2, -1, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -7, 8, 4, -2, -1, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], 0.25 ] + ], + [ + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], 0 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 7, 4, -2, 0, 4 ] ], 0.25 ], + [ [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -5, 6, 4, -2, -1, 4 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -7, 8, 4, -2, -1, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], + [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 7, 4, -2, -2, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], + [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 8, 4, -2, -1, 4 ] ], + [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -6, 7, 4, -2, 0, 4 ] ], + [ [ -6, 7, 4, -2, -1, 4 ], [ -6, 6, 4, -2, -1, 4 ], [ -7, 7, 4, -2, 0, 4 ], [ -5, 6, 4, -2, -1, 4 ] ] +], +"cur_uid": "4c646e0e", +"ref_uid": "536cac90", +"order_seed": 316517, +"dur_seed": 436877, +"motifs_seed": 728398, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 0.03, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 1 ], [ 3, 0, 2, 3, 2, 2 ], [ ] ], + [ [ 2 ], [ 3, 1, 0, 3, 1, 3, 0 ], [ ] ], + [ [ 1 ], [ 0, 3, 2 ], [ ] ], + [ [ 1 ], [ 2, 3, 0, 2, 3, 2 ], [ ] ], + [ [ 3 ], [ 1, 0, 2, 0 ], [ ] ], + [ [ 3 ], [ 1, 0, 2, 0, 1, 1, 2 ], [ ] ], + [ [ 1 ], [ 2, 3, 0, 0, 3 ], [ ] ], + [ [ 2 ], [ 3, 1, 0, 0, 3, 0, 3 ], [ ] ], + [ [ 1 ], [ 0, 2, 3, 2, 3, 2 ], [ ] ], + [ [ 0 ], [ 3, 2, 1 ], [ ] ], + [ [ 0 ], [ 1, 3, 2, 3, 3, 3, 2 ], [ ] ], + [ [ 2 ], [ 1, 3, 0, 3, 0, 0 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 0 ], [ 2, 1, 3, 3, 1 ], [ ] ], + [ [ 2 ], [ 1, 3, 0, 0, 1, 1 ], [ ] ], + [ [ 2 ], [ 0, 1, 3, 1 ], [ ] ], + [ [ 2 ], [ 1, 3, 0, 0, 0, 3 ], [ ] ], + [ [ 2 ], [ 3, 1, 0, 0 ], [ ] ], + [ [ 3 ], [ 1, 0, 2, 2, 1, 1, 0 ], [ ] ], + [ [ 0 ], [ 2, 3, 1 ], [ ] ], + [ [ 2 ], [ 1, 3, 0 ], [ ] ], + [ [ 2 ], [ 1, 0, 3, 3, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2 ], [ ] ], + [ [ 0 ], [ 3, 2, 1, 1, 1, 2 ], [ ] ], + [ [ 2 ], [ 0, 1, 3, 1 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 2 ], [ 0, 3, 1, 1, 1, 3, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 0, 0, 2, 2 ], [ ] ], + [ [ 1 ], [ 2, 0, 3, 0, 0 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 2, 2 ], [ ] ], + [ [ 1 ], [ 0, 2, 3, 2 ], [ ] ], + [ [ 2 ], [ 0, 3, 1 ], [ ] ], + [ [ 1 ], [ 2, 3, 0, 2 ], [ ] ], + [ [ 3 ], [ 0, 1, 2, 1, 1, 0, 2 ], [ ] ], + [ [ 2 ], [ 0, 1, 3, 0, 3, 0, 1 ], [ ] ], + [ [ 3 ], [ 0, 2, 1, 2 ], [ ] ], + [ [ 0 ], [ 3, 1, 2, 3, 2 ], [ ] ], + [ [ 0 ], [ 2, 1, 3, 3 ], [ ] ] +], +"sus_weights": [ 0.7, 0, 0 ], +"order_size": [ 38.377551020408, 38.377551020408 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_I.ly b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_I.ly index bad9fe0..07fa029 100644 --- a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_I.ly @@ -1,4 +1,6 @@ { - { f'1^\markup { \pad-markup #0.2 "-38"}} + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_II.ly b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_II.ly index 2db37cc..702338f 100644 --- a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_II.ly @@ -1,4 +1,6 @@ { - { f''8^\markup { \pad-markup #0.2 "-38"}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais'8[ c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] f''4^\markup { \pad-markup #0.2 "-38"}} + { f''8^\markup { \pad-markup #0.2 "-38"}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais'8[ c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] f''4^\markup { \pad-markup #0.2 "-38"} } + \bar "|" + { cis'1^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_III.ly b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_III.ly index d7a92c3..683b743 100644 --- a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_III.ly @@ -1,4 +1,6 @@ { - { ais2^\markup { \pad-markup #0.2 "-40"} c'4^\markup { \pad-markup #0.2 "-37"} cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}]} + { ais2^\markup { \pad-markup #0.2 "-40"} c'4^\markup { \pad-markup #0.2 "-37"} cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { f8[ g8^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}] a8^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] ~ ais2} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_IV.ly b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_IV.ly index 992a465..74ec7e4 100644 --- a/resources/string_quartet_3_rise/4dd2a130/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/4dd2a130/lilypond/part_IV.ly @@ -1,4 +1,6 @@ { - { c''4^\markup { \pad-markup #0.2 "-37"} cis''2.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}} + { c''4^\markup { \pad-markup #0.2 "-37"} cis''2.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} ~ } + \bar "|" + { cis''8[ c''8^\markup { \pad-markup #0.2 "-37"}] cis''8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais'2} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly index ba567c1..2ade969 100644 --- a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_I.ly @@ -1,22 +1,12 @@ { - { cis'1^\markup { \pad-markup #0.2 "+36"} } - \bar "|" - { gis'1^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''2 cis''2^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }}} -\bar "||" + { s4 s4 gis'4^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 b'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 } + + { s4 s4 c''4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 } + + { s4 s4 s4 cis''4^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly index 05fdfba..06c9294 100644 --- a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_II.ly @@ -1,22 +1,12 @@ { - { ais1^\markup { \pad-markup #0.2 "-23"} ~ } - \bar "|" - { ais1 } - \bar "|" - { f'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1} -\bar "||" + { s4 s4 s4 s4 } + + { f'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly index 0794eb2..571c881 100644 --- a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_III.ly @@ -1,22 +1,12 @@ { - { d''1^\markup { \pad-markup #0.2 "-37"} ~ } - \bar "|" - { d''2 e'2^\markup { \pad-markup #0.2 "+25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } - \bar "|" - { e'2 b'2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} ~ } - \bar "|" - { c''2 cis''2^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }} ~ } - \bar "|" - { cis''2 f2^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { f1 } - \bar "|" - { c'2^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} cis'2^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} ~ } - \bar "|" - { cis'1} -\bar "||" + { d''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 s4 e'4^\markup { \pad-markup #0.2 "+25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} } + + { s4 b'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 s4 } + + { c''4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} s4 s4 cis''4^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }} } + + { s4 f4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 } + + { c'4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} cis'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly index 6e90c4e..cce6686 100644 --- a/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/4e9f1dcc/lilypond/part_IV.ly @@ -1,22 +1,12 @@ { - { cis''2^\markup { \pad-markup #0.2 "+36"} fis2^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }} ~ } - \bar "|" - { fis1 ~ } - \bar "|" - { fis1 } - \bar "|" - { cis'2^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} cis'2^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { cis'2 dis'2^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } - \bar "|" - { dis'1 } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} ~ } - \bar "|" - { g'2 ais'2^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { ais'1 } - \bar "|" - { g,1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }}} -\bar "||" + { s4 \clef bass fis4^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }} s4 s4 } + + { s4 s4 \clef treble cis'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} cis'4^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} } + + { s4 dis'4^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} s4 s4 } + + { g'4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} s4 s4 ais'4^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } + + { s4 s4 \clef bass g,4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/4f53a446/4f53a446_mus_model.json b/resources/string_quartet_3_rise/4f53a446/4f53a446_mus_model.json index 5af5206..c1c5431 100644 --- a/resources/string_quartet_3_rise/4f53a446/4f53a446_mus_model.json +++ b/resources/string_quartet_3_rise/4f53a446/4f53a446_mus_model.json @@ -24,7 +24,7 @@ [ [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], 0.75 ], [ [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], [ [ [ -3, 5, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], - [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 6.25 ] + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 4.25 ] ] ] ], diff --git a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_I.ly b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_I.ly index 0080f12..e1ef119 100644 --- a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_I.ly @@ -1,6 +1,8 @@ { { cis''2^\markup { \pad-markup #0.2 "-29"} d'2^\markup { \pad-markup #0.2 "-18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} } \bar "|" - { dis'1^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}} + { dis'1^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { dis'1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_II.ly b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_II.ly index bf238e6..02fc9d9 100644 --- a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_II.ly @@ -1,6 +1,8 @@ { { a'2^\markup { \pad-markup #0.2 "-16"} b'8^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] d''8^\markup { \pad-markup #0.2 "-18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] } \bar "|" - { fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ ais'2 dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}]} + { fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ ais'2 dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}] } + \bar "|" + { dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ gis'8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] g'4^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ais2^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_III.ly b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_III.ly index db9e500..2c18edf 100644 --- a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_III.ly @@ -1,6 +1,8 @@ { { d'8^\markup { \pad-markup #0.2 "-18"}[ dis'8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }}[ fis'8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] ~ fis'2 ~ } \bar "|" - { fis'8[ g'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ ais4} + { fis'8[ g'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ ais4 } + \bar "|" + { gis4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}[ dis8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ d''8^\markup { \pad-markup #0.2 "+26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] cis''4^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_IV.ly b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_IV.ly index 5ff227c..5f683d4 100644 --- a/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/50c2b0ad/lilypond/part_IV.ly @@ -1,6 +1,8 @@ { { ais2^\markup { \pad-markup #0.2 "+40"} fis2^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } \bar "|" - { fis8[ g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] dis2^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ais'4^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}} + { fis8[ g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] dis2^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ais'4^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { ais'2 gis'8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}[ g'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] a'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly b/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly index 9dbd058..c5c1a29 100644 --- a/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/521654f8/lilypond/part_I.ly @@ -1,22 +1,14 @@ { - { g'1^\markup { \pad-markup #0.2 "-25"} ~ } - \bar "|" - { g'2 d''2^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }} ~ } - \bar "|" - { d''2 a2^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis'2 c''2^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''2 c''2^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { c''1} -\bar "||" + { g'4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 d''4^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }} } + + { s4 a4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 cis'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 c''4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 s4 } + + { s4 c''4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly b/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly index ed0f60d..5a88746 100644 --- a/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/521654f8/lilypond/part_II.ly @@ -1,22 +1,14 @@ { - { ais'1^\markup { \pad-markup #0.2 "-9"} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 } - \bar "|" - { cis''2^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }} d''2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "-20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}} -\bar "||" + {s4 s4 s4 s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "-8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }} d''4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} } + + { s4 s4 fis'4^\markup { \pad-markup #0.2 "-20"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }} s4 } + + { g'4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly b/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly index 41a7194..14709ca 100644 --- a/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/521654f8/lilypond/part_III.ly @@ -1,22 +1,14 @@ { - { b'2^\markup { \pad-markup #0.2 "+46"} d''2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''2 d'2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } - \bar "|" - { f'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'1 } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { ais'2 fis2^\markup { \pad-markup #0.2 "+7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}} -\bar "||" + { s4 d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 } + + { s4 s4 s4 d'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { f'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { ais'4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 s4 fis4^\markup { \pad-markup #0.2 "+7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly b/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly index c33586c..67995de 100644 --- a/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/521654f8/lilypond/part_IV.ly @@ -1,22 +1,14 @@ { - { g1^\markup { \pad-markup #0.2 "-25"} } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 cis2^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis2 gis2^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'1} -\bar "||" + { s4 s4 \clef treble d'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 } + + { a'4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 s4 s4 } + + { s4 \clef bass cis4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 gis4^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} } + + { d'4^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly b/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly index 7220198..bc33e13 100644 --- a/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/531df78c/lilypond/part_I.ly @@ -1,48 +1,26 @@ { - { gis'1^\markup { \pad-markup #0.2 "+21"} } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 a'2^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { a'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "-44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''2 d''2^\markup { \pad-markup #0.2 "-24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { ais1^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { ais1 } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 ais'2^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { ais'1} -\bar "||" + { s4 s4 e'4^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 } + + { fis'4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 g'4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 a'4^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 } + + { b'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 s4 s4 } + + { cis''4^\markup { \pad-markup #0.2 "-44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 s4 s4 } + + { s4 s4 s4 d''4^\markup { \pad-markup #0.2 "-24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} } + + { s4 s4 ais4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 } + + { s4 s4 g'4^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} s4 } + + { s4 s4 s4 ais'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly b/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly index 3208fce..1a9b8e3 100644 --- a/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/531df78c/lilypond/part_II.ly @@ -1,48 +1,26 @@ { - { b1^\markup { \pad-markup #0.2 "-48"} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b2 c'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { c'2 d'2^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} } - \bar "|" - { gis'1^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ~ } - \bar "|" - { c''2 a2^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a2 b2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b2 dis'2^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { dis'1 ~ } - \bar "|" - { dis'1 ~ } - \bar "|" - { dis'2 f'2^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { f'2 gis'2^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}} -\bar "||" + { b4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 c'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } + + { s4 d'4^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} gis'4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 } + + { c''4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} s4 s4 a4^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 s4 s4 b4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 s4 s4 dis'4^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { s4 f'4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 gis'4^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} } + + { c''4^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { e'4^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly b/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly index 9a6bd85..49298e0 100644 --- a/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/531df78c/lilypond/part_III.ly @@ -1,48 +1,26 @@ { - { b'1^\markup { \pad-markup #0.2 "-48"} ~ } - \bar "|" - { b'1 ~ } - \bar "|" - { b'2 cis''2^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis''2 d''2^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''1 } - \bar "|" - { g1^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} ~ } - \bar "|" - { e'2 f'2^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'2 fis'2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { fis'1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 } - \bar "|" - { c'1^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} ~ } - \bar "|" - { g'2 d''2^\markup { \pad-markup #0.2 "-24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}} -\bar "||" + { s4 s4 s4 s4 } + + { s4 cis''4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 d''4^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} } + + { s4 s4 g4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 } + + { e'4^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 s4 s4 } + + { s4 s4 e'4^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} s4 } + + { s4 f'4^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} s4 s4 } + + { s4 fis'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 s4 } + + { a'4^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }} s4 ais'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { c'4^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 g'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} s4 } + + { s4 d''4^\markup { \pad-markup #0.2 "-24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly b/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly index bbcb5c1..e0a48f0 100644 --- a/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.ly @@ -1,48 +1,26 @@ { - { e2^\markup { \pad-markup #0.2 "-50"} fis2^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { fis2 cis'2^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 } - \bar "|" - { d'2^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} b'2^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'1 ~ } - \bar "|" - { b'1 ~ } - \bar "|" - { b'2 d''2^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'1 } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ~ } - \bar "|" - { ais'2 b'2^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { b'1 } - \bar "|" - { dis1^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { dis1 ~ } - \bar "|" - { dis2 f2^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { f2 g2^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g2 c2^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { c1 ~ } - \bar "|" - { c1} -\bar "||" + { s4 fis4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 cis'4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } + + { s4 s4 s4 s4 } + + { \clef treble d'4^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} b'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 d''4^\markup { \pad-markup #0.2 "-32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 a'4^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 } + + { s4 s4 ais'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} s4 } + + { s4 b'4^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 s4 } + + { \clef bass dis4^\markup { \pad-markup #0.2 "-13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 f4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 g4^\markup { \pad-markup #0.2 "+22"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + + { s4 c4^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.pdf b/resources/string_quartet_3_rise/531df78c/lilypond/part_IV.pdf new file mode 100644 index 0000000000000000000000000000000000000000..19f26d0f9956c4132caea78fdacfd0c8280692ea GIT binary patch literal 38954 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%0Drgs1GeB@3R*H^vb^MZ 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 v= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise/67633b5a/67633b5a_mus_model.json b/resources/string_quartet_3_rise/67633b5a/67633b5a_mus_model.json new file mode 100644 index 0000000..b423cb1 --- /dev/null +++ b/resources/string_quartet_3_rise/67633b5a/67633b5a_mus_model.json @@ -0,0 +1,50 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -8, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ] +], +"cur_uid": "67633b5a", +"ref_uid": "536cac90", +"order_seed": 701357, +"dur_seed": 777611, +"motifs_seed": 941681, +"entrances_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 1, 2, 0, 0 ], [ ] ], + [ [ 3 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 4, 4.030612244898 ], +"passages_size": [ 0, 5 ], +"motif_edited": "true", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/67633b5a/lilypond/part_I.ly b/resources/string_quartet_3_rise/67633b5a/lilypond/part_I.ly new file mode 100644 index 0000000..8a6be3a --- /dev/null +++ b/resources/string_quartet_3_rise/67633b5a/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { ais'2.^\markup { \pad-markup #0.2 "-40"} ~ ais'8[ d''8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { d''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/67633b5a/lilypond/part_II.ly b/resources/string_quartet_3_rise/67633b5a/lilypond/part_II.ly new file mode 100644 index 0000000..62241d4 --- /dev/null +++ b/resources/string_quartet_3_rise/67633b5a/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { dis''4^\markup { \pad-markup #0.2 "-42"} e''2^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ e''8[ d''8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { d''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/67633b5a/lilypond/part_III.ly b/resources/string_quartet_3_rise/67633b5a/lilypond/part_III.ly new file mode 100644 index 0000000..806f823 --- /dev/null +++ b/resources/string_quartet_3_rise/67633b5a/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { dis'8^\markup { \pad-markup #0.2 "-42"}[ cis'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ~ cis'2 ~ cis'8[ a'8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ } + \bar "|" + { a'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/67633b5a/lilypond/part_IV.ly b/resources/string_quartet_3_rise/67633b5a/lilypond/part_IV.ly new file mode 100644 index 0000000..d224ecd --- /dev/null +++ b/resources/string_quartet_3_rise/67633b5a/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { e8^\markup { \pad-markup #0.2 "+8"}[ e,8^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}] e8^\markup { \pad-markup #0.2 "+8"}[ fis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}] g8^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}[ a8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 21↑" }}] a,8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 21↑" }}[ d8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { d1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly index aa0857d..ad3d5c7 100644 --- a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_I.ly @@ -1,22 +1,12 @@ { - { c'1^\markup { \pad-markup #0.2 "-11"} ~ } - \bar "|" - { c'2 a'2^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { b'1 ~ } - \bar "|" - { b'1} -\bar "||" + { c'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 s4 a'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} } + + { ais'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 b'4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 } + + { s4 s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly index a4955d2..abd7ef4 100644 --- a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_II.ly @@ -1,22 +1,12 @@ { - { g'1^\markup { \pad-markup #0.2 "-9"} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { g'1 } - \bar "|" - { gis'2^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} dis'2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { dis'1 ~ } - \bar "|" - { dis'2 c''2^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { c''2 d''2^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} ~ } - \bar "|" - { d''2 gis2^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } - \bar "|" - { gis1 } - \bar "|" - { f'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}} -\bar "||" + { s4 s4 g'4^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 } + + { s4 s4 gis'4^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} dis'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} } + + { s4 s4 s4 c''4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } + + { s4 d''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }} s4 gis4^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} } + + { s4 s4 f'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly index ef75055..30a78f8 100644 --- a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_III.ly @@ -1,22 +1,12 @@ { - { fis2^\markup { \pad-markup #0.2 "+7"} gis2^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} ~ } - \bar "|" - { gis1 ~ } - \bar "|" - { gis1 ~ } - \bar "|" - { gis1 ~ } - \bar "|" - { gis2 ais2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { ais1 ~ } - \bar "|" - { ais1 ~ } - \bar "|" - { ais1 } - \bar "|" - { cis'1^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} ~ } - \bar "|" - { cis'2 gis'2^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }}} -\bar "||" + { s4 gis4^\markup { \pad-markup #0.2 "-28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 ais4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { cis'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} s4 s4 gis'4^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↓" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly index 9a82eee..a399fcc 100644 --- a/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/6db2efcc/lilypond/part_IV.ly @@ -1,22 +1,12 @@ { - { d'1^\markup { \pad-markup #0.2 "+21"} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 f'2^\markup { \pad-markup #0.2 "+41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { f'1 } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} } - \bar "|" - { fis'1^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 gis'2^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } - \bar "|" - { gis'1} -\bar "||" + { s4 s4 s4 s4 } + + { s4 \clef treble f'4^\markup { \pad-markup #0.2 "+41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 s4 } + + { fis'4^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} s4 fis'4^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }} s4 } + + { g'4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 s4 s4 } + + { s4 gis'4^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly b/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly index 180336b..134474e 100644 --- a/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/7276dc78/lilypond/part_I.ly @@ -1,48 +1,26 @@ { - { ais'1^\markup { \pad-markup #0.2 "-11"} } - \bar "|" - { gis1^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "+7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} ~ } - \bar "|" - { d'2 gis'2^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { gis'1 ~ } - \bar "|" - { gis'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} ~ } - \bar "|" - { cis''2 a2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a2 dis'2^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { b'2 c''2^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 } - \bar "|" - { c'1^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { c'1 ~ } - \bar "|" - { c'1 ~ } - \bar "|" - { c'1 ~ } - \bar "|" - { c'2 e'2^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { e'2 a'2^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'2 cis''2^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}} -\bar "||" + { s4 s4 gis4^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }} s4 } + + { d'4^\markup { \pad-markup #0.2 "+7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} s4 s4 gis'4^\markup { \pad-markup #0.2 "-46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { cis''4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} s4 s4 a4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 dis'4^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { b'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 s4 c''4^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { c'4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 e'4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 a'4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + + { s4 cis''4^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly b/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly index 70474f1..d14ba4f 100644 --- a/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/7276dc78/lilypond/part_II.ly @@ -1,48 +1,26 @@ { - { e'1^\markup { \pad-markup #0.2 "+38"} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" - { a'1^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { a'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { cis''2 e'2^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } - \bar "|" - { g'1 } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} } - \bar "|" - { a1^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a2 d'2^\markup { \pad-markup #0.2 "-5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 g'2^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'1} -\bar "||" + {s4 s4 s4 s4 } + + { s4 s4 a'4^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 } + + { s4 e'4^\markup { \pad-markup #0.2 "+42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} b'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} s4 } + + { g'4^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} s4 s4 s4 } + + { g'4^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 s4 s4 } + + { s4 s4 cis''4^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { e'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} s4 a4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 s4 s4 d'4^\markup { \pad-markup #0.2 "-5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }} } + + { s4 s4 s4 g'4^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly b/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly index e7f6e42..9493bf3 100644 --- a/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/7276dc78/lilypond/part_III.ly @@ -1,48 +1,26 @@ { - { a'1^\markup { \pad-markup #0.2 "+36"} ~ } - \bar "|" - { a'2 cis''2^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} ~ } - \bar "|" - { cis''1 ~ } - \bar "|" - { cis''1 } - \bar "|" - { b1^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} ~ } - \bar "|" - { b2 e'2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 ~ } - \bar "|" - { e'1 } - \bar "|" - { dis1^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }} ~ } - \bar "|" - { dis2 f'2^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''1 ~ } - \bar "|" - { c''2 e2^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e2 a2^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1 ~ } - \bar "|" - { a1} -\bar "||" + { a'4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} s4 s4 cis''4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} } + + { s4 s4 s4 s4 } + + { b4^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} s4 s4 e'4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 dis4^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }} s4 } + + { s4 f'4^\markup { \pad-markup #0.2 "+0"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }} c''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 e4^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} s4 s4 } + + { s4 a4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 cis'4^\markup { \pad-markup #0.2 "+50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly b/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly index f291f2f..7e69105 100644 --- a/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/7276dc78/lilypond/part_IV.ly @@ -1,48 +1,26 @@ { - { c2^\markup { \pad-markup #0.2 "+21"} g2^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} ~ } - \bar "|" - { g1 ~ } - \bar "|" - { g2 cis'2^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'2 fis'2^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'1 ~ } - \bar "|" - { fis'2 e2^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { e2 b2^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b1 ~ } - \bar "|" - { b2 f'2^\markup { \pad-markup #0.2 "+15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'2 a'2^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } - \bar "|" - { a'2 fis,2^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} ~ } - \bar "|" - { fis,1 } - \bar "|" - { c1^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } - \bar "|" - { fis1^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } - \bar "|" - { f,1^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} } - \bar "|" - { cis1^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} } - \bar "|" - { d,1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } - \bar "|" - { g,1^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}} -\bar "||" + { s4 g4^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} s4 s4 } + + { s4 cis'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 s4 } + + { s4 fis'4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 e4^\markup { \pad-markup #0.2 "+3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 b4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} } + + { s4 s4 s4 s4 } + + { s4 \clef treble f'4^\markup { \pad-markup #0.2 "+15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} s4 s4 } + + { s4 a'4^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 \clef bass fis,4^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} } + + { s4 s4 c4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 } + + { fis4^\markup { \pad-markup #0.2 "+12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 f,4^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} s4 } + + { cis4^\markup { \pad-markup #0.2 "+14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }} s4 d,4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 } + + { g,4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/736745da/lilypond/part_I.ly b/resources/string_quartet_3_rise/736745da/lilypond/part_I.ly index bad9fe0..07fa029 100644 --- a/resources/string_quartet_3_rise/736745da/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/736745da/lilypond/part_I.ly @@ -1,4 +1,6 @@ { - { f'1^\markup { \pad-markup #0.2 "-38"}} + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/736745da/lilypond/part_II.ly b/resources/string_quartet_3_rise/736745da/lilypond/part_II.ly index c31cc8d..a55b3bd 100644 --- a/resources/string_quartet_3_rise/736745da/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/736745da/lilypond/part_II.ly @@ -1,4 +1,6 @@ { - { cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ b8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}] ais'4^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} c''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}} + { cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ b8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}] ais'4^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} c''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { c''1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/736745da/lilypond/part_III.ly b/resources/string_quartet_3_rise/736745da/lilypond/part_III.ly index 81984f4..52edbce 100644 --- a/resources/string_quartet_3_rise/736745da/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/736745da/lilypond/part_III.ly @@ -1,4 +1,6 @@ { - { ais4^\markup { \pad-markup #0.2 "-40"} gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}]} + { ais4^\markup { \pad-markup #0.2 "-40"} gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] } + \bar "|" + { f1^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/736745da/lilypond/part_IV.ly b/resources/string_quartet_3_rise/736745da/lilypond/part_IV.ly index b57cf57..13044d9 100644 --- a/resources/string_quartet_3_rise/736745da/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/736745da/lilypond/part_IV.ly @@ -1,4 +1,6 @@ { - { ais,2.^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }} c8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ ais,8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}]} + { ais,2.^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }} c8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ ais,8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] ~ } + \bar "|" + { ais,8[ f,8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ f,2.} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/767e70f0/lilypond/part_I.ly b/resources/string_quartet_3_rise/767e70f0/lilypond/part_I.ly index bad9fe0..07fa029 100644 --- a/resources/string_quartet_3_rise/767e70f0/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/767e70f0/lilypond/part_I.ly @@ -1,4 +1,6 @@ { - { f'1^\markup { \pad-markup #0.2 "-38"}} + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/767e70f0/lilypond/part_II.ly b/resources/string_quartet_3_rise/767e70f0/lilypond/part_II.ly index df080a2..e7ebc1a 100644 --- a/resources/string_quartet_3_rise/767e70f0/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/767e70f0/lilypond/part_II.ly @@ -1,4 +1,6 @@ { - { ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'4^\markup { \pad-markup #0.2 "-25"} d'4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}} + { ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'4^\markup { \pad-markup #0.2 "-25"} d'4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } + \bar "|" + { d'1} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/767e70f0/lilypond/part_III.ly b/resources/string_quartet_3_rise/767e70f0/lilypond/part_III.ly index 1c9ff64..95e6e0a 100644 --- a/resources/string_quartet_3_rise/767e70f0/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/767e70f0/lilypond/part_III.ly @@ -1,4 +1,6 @@ { - { c'4^\markup { \pad-markup #0.2 "-37"} cis'4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ g8^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}} + { c'4^\markup { \pad-markup #0.2 "-37"} cis'4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ g8^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} } + \bar "|" + { ais8^\markup { \pad-markup #0.2 "-40"}[ gis8^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }}] ~ gis2.} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/767e70f0/lilypond/part_IV.ly b/resources/string_quartet_3_rise/767e70f0/lilypond/part_IV.ly index 7b06638..85ee8f1 100644 --- a/resources/string_quartet_3_rise/767e70f0/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/767e70f0/lilypond/part_IV.ly @@ -1,4 +1,6 @@ { - { c''2.^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ c''8[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}]} + { c''2.^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ c''8[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}] } + \bar "|" + { c''8^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ f2.} \bar "||" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly index c30b269..ef4a5ce 100644 --- a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_I.ly @@ -1,26 +1,14 @@ { - { d''1^\markup { \pad-markup #0.2 "-15"} } - \bar "|" - { g'1^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { g'1 ~ } - \bar "|" - { g'2 d''2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''1 ~ } - \bar "|" - { d''2 c'2^\markup { \pad-markup #0.2 "+35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { c'2 f'2^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} ~ } - \bar "|" - { f'1 } - \bar "|" - { c''1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } - \bar "|" - { cis''2^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} cis'2^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'2 gis'2^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}} -\bar "||" + { d''4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 g'4^\markup { \pad-markup #0.2 "-17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} s4 } + + { s4 s4 s4 d''4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 s4 s4 c'4^\markup { \pad-markup #0.2 "+35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} } + + { s4 f'4^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }} s4 s4 } + + { c''4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} s4 cis''4^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} cis'4^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} } + + { s4 s4 s4 gis'4^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly index d2a3ff5..5030ae9 100644 --- a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_II.ly @@ -1,26 +1,14 @@ { - { f'2^\markup { \pad-markup #0.2 "-48"} c''2^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ } - \bar "|" - { c''2 d''2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { d''2 b2^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } - \bar "|" - { b1 } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d'1 } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { dis'1 ~ } - \bar "|" - { dis'2 f'2^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } - \bar "|" - { f'1 ~ } - \bar "|" - { f'2 c''2^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }} } - \bar "|" - { cis''1^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}} -\bar "||" + { s4 c''4^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} s4 d''4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } + + { s4 b4^\markup { \pad-markup #0.2 "-30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 s4 } + + { d'4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 s4 } + + { dis'4^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 s4 s4 } + + { s4 f'4^\markup { \pad-markup #0.2 "+1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} s4 s4 } + + { s4 c''4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }} cis''4^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly index 105fd79..f7ace8f 100644 --- a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_III.ly @@ -1,26 +1,14 @@ { - { cis'1^\markup { \pad-markup #0.2 "-34"} ~ } - \bar "|" - { cis'1 } - \bar "|" - { d'1^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } - \bar "|" - { dis'1^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} ~ } - \bar "|" - { dis'2 ais'2^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 ~ } - \bar "|" - { ais'1 } - \bar "|" - { b'1^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { b'1} -\bar "||" + { s4 s4 s4 s4 } + + { d'4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} s4 dis'4^\markup { \pad-markup #0.2 "-3"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }} s4 } + + { s4 ais'4^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }} s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { b'4^\markup { \pad-markup #0.2 "-48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly index 81f9b8d..2d803cd 100644 --- a/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/78a94ed1/lilypond/part_IV.ly @@ -1,26 +1,14 @@ { - { g,1^\markup { \pad-markup #0.2 "-17"} ~ } - \bar "|" - { g,1 ~ } - \bar "|" - { g,1 ~ } - \bar "|" - { g,1 ~ } - \bar "|" - { g,1 } - \bar "|" - { g,1^\markup { \pad-markup #0.2 "+37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↑" }} ~ } - \bar "|" - { g,1 } - \bar "|" - { d2^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} e2^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e1} -\bar "||" + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 g,4^\markup { \pad-markup #0.2 "+37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↑" }} s4 } + + { s4 s4 d4^\markup { \pad-markup #0.2 "-15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} e4^\markup { \pad-markup #0.2 "-50"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly index 02e083d..a34025d 100644 --- a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly +++ b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_I.ly @@ -1,18 +1,12 @@ { - { a'1^\markup { \pad-markup #0.2 "-21"} ~ } - \bar "|" - { a'2 cis''2^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } - \bar "|" - { a1^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} } - \bar "|" - { e'1^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } - \bar "|" - { e'2 fis'2^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} } - \bar "|" - { gis'2^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} b'2^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } - \bar "|" - { b'2 d''2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } - \bar "|" - { d''1} -\bar "||" + { s4 s4 s4 cis''4^\markup { \pad-markup #0.2 "-34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} } + + { a4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 e'4^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} s4 } + + { s4 fis'4^\markup { \pad-markup #0.2 "-36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} gis'4^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} b'4^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} } + + { s4 d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} s4 s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly index d4f569b..12a9e0b 100644 --- a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly +++ b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_II.ly @@ -1,18 +1,12 @@ { - { cis'1^\markup { \pad-markup #0.2 "-34"} ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 ~ } - \bar "|" - { cis'1 } - \bar "|" - { gis'1^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} } - \bar "|" - { ais'1^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}} -\bar "||" + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { s4 s4 s4 s4 } + + { gis'4^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} s4 ais'4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} s4 } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly index f190197..f9297b9 100644 --- a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly +++ b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_III.ly @@ -1,18 +1,12 @@ { - { gis2^\markup { \pad-markup #0.2 "-33"} d'2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'1 ~ } - \bar "|" - { d'2 a'2^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'1 ~ } - \bar "|" - { a'2 b'2^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}} -\bar "||" + { s4 d'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} s4 s4 } + + { s4 s4 s4 a'4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + + { s4 s4 s4 s4 } + + { s4 s4 s4 b'4^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} } + + { s4} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly index 138d391..9b8bf30 100644 --- a/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly +++ b/resources/string_quartet_3_rise/7ede7adb/lilypond/part_IV.ly @@ -1,18 +1,12 @@ { - { ais'1^\markup { \pad-markup #0.2 "+34"} } - \bar "|" - { d''1^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } - \bar "|" - { d''2 a,2^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { a,1 } - \bar "|" - { e1^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e1 ~ } - \bar "|" - { e1} -\bar "||" + { ais'4^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }} s4 d''4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} s4 } + + { s4 \clef bass a,4^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 } + + { e4^\markup { \pad-markup #0.2 "-19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} s4 s4 s4 } + + { s4 s4 s4 s4 } + + { g4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}} + } \ No newline at end of file diff --git a/resources/string_quartet_3_rise/tmp/tmp_mus_model.json b/resources/string_quartet_3_rise/tmp/tmp_mus_model.json index 6bf2b11..bb6185b 100644 --- a/resources/string_quartet_3_rise/tmp/tmp_mus_model.json +++ b/resources/string_quartet_3_rise/tmp/tmp_mus_model.json @@ -3,94 +3,164 @@ [ [ [ - [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 2, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 2, 0, 0, 0, -1 ] ], 1 ], + [ [ [ 1, 0, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 2, 0, 0, 0, -1 ] ], 2.375 ] ], [ - [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 1, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 1, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 0.25 ] + [ [ [ 1, 0, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, 0, 0, -1 ] ], 1 ], + [ [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, 0, 0, -1 ] ], 3.625 ] ], [ - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 1, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 2, 0, 0, 0, 0 ] ], 8.125 ] ], [ - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 2, 1, 3, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 3 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, -1, 0, 0 ] ], 1 ], + [ [ [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, -1, 0, 0 ] ], 1 ], + [ [ [ 0, 1, 0, 0, -1, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, -1, 0, 0 ] ], 7.375 ] ], [ - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -4, 1, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 1, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -1, 1, 1, 1, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 1, 0, -1, 0, 0 ] ], 1 ], + [ [ [ -1, 1, 1, 1, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ 1, 1, 0, -1, 0, 0 ] ], 1 ], + [ [ [ -1, 1, 1, 1, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ 0, 1, 2, 0, 0, 0 ] ], 6.125 ] ], [ - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 3, 1, 2, -1, 1 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 3, 1, 2, -1, 1 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -2, 1, 2, 0, 1, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ 0, 1, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 1, 2, 0, 1, 0 ], [ 0, 0, 2, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ 0, 1, 2, 0, 0, 0 ] ], 4.875 ] ], [ - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -2, 1, 2, 0, 1, 0 ], [ 0, 0, 2, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -2, 1, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 8.625 ] ], [ - [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ], - [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0 ], - [ [ [ -6, 3, 0, 2, -1, 2 ], [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], 0.25 ] + [ [ [ -1, 0, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 0, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -1, 0, 2, 0, 1, 0 ], [ -2, 0, 2, 0, 1, 0 ], [ -1, 1, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -1, 0, 2, 0, 1, 0 ], [ -2, 0, 2, 0, 1, 0 ], [ 0, 0, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 3.625 ] + ], + [ + [ [ [ -1, 1, 2, 0, 1, 0 ], [ -2, 0, 2, 0, 1, 0 ], [ 0, 0, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 9.875 ] + ], + [ + [ [ [ -1, 1, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 1, 0 ], [ 0, 0, 1, 0, 1, 0 ], [ -1, 0, 1, 0, 1, 0 ] ], 9.375 ] + ], + [ + [ [ [ -1, 1, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 1, 0 ], [ 0, 0, 1, 0, 1, 0 ], [ -1, 1, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -1, 1, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 1, 0 ], [ -1, 1, 2, 0, 1, -1 ], [ -1, 1, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -2, 0, 2, 0, 1, 0 ], [ -2, 1, 2, 0, 1, 0 ], [ -1, 1, 2, 0, 1, -1 ], [ -1, 1, 1, 0, 1, 0 ] ], 7.75 ] + ], + [ + [ [ [ -1, 1, 1, 0, 1, -1 ], [ -2, 1, 2, 0, 1, 0 ], [ -1, 1, 2, 0, 1, -1 ], [ -1, 1, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -1, 1, 1, 0, 1, -1 ], [ -2, 1, 2, 0, 1, 0 ], [ -1, 1, 2, 0, 1, -1 ], [ 0, 1, 2, -1, 1, 0 ] ], 7.625 ] + ], + [ + [ [ [ -1, 1, 1, 0, 1, -1 ], [ -2, 1, 2, 0, 1, 0 ], [ 0, 1, 1, -1, 1, 0 ], [ 0, 1, 2, -1, 1, 0 ] ], 6.875 ] + ], + [ + [ [ [ -1, 1, 1, 0, 1, -1 ], [ 0, 1, 0, -1, 1, 0 ], [ 0, 1, 1, -1, 1, 0 ], [ 0, 1, 2, -1, 1, 0 ] ], 1 ], + [ [ [ 0, 1, 1, -1, 0, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 0, 1, 1, -1, 1, 0 ], [ 0, 1, 2, -1, 1, 0 ] ], 9.5 ] + ], + [ + [ [ [ 0, 1, 1, -1, 0, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 0, 1, 1, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 0, 1, 1, -1, 0, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 1, 1, -1, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 0, 1, -1, -1, 1, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 1, 1, -1, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1.75 ] + ], + [ + [ [ [ 1, 0, 0, -1, 1, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 1, 1, -1, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 1, 0, 0, -1, 1, 0 ], [ 0, 1, 0, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1.375 ] + ], + [ + [ [ [ 1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 0, 0 ], [ 1, 1, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 0, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 9.625 ] + ], + [ + [ [ [ -1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 0, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 1 ], + [ [ [ -1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 1 ], + [ [ [ -1, 0, 0, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 1, 0 ], [ 0, 0, -1, 0, 1, 0 ] ], 1.375 ] + ], + [ + [ [ [ -1, 0, -1, 0, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 1, 0 ], [ 0, 0, -1, 0, 1, 0 ] ], 1 ], + [ [ [ -1, 0, -1, 0, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 1, 0 ] ], 1 ], + [ [ [ -1, 0, -1, 0, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 1 ], [ 1, 0, 0, -1, 1, 0 ] ], 6.125 ] + ], + [ + [ [ [ -1, 0, -1, 0, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 0, 0, 0, 0, 1, 0 ], [ 1, 0, 0, -1, 1, 0 ] ], 3.875 ] + ], + [ + [ [ [ -1, 0, -1, 0, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 0, 0, 0, 0, 1, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 0, 0, 0, 0, 1, -1 ], [ 0, 0, -1, -1, 1, 0 ], [ 0, 0, 0, 0, 1, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 6.625 ] + ], + [ + [ [ [ 0, 0, 0, 0, 1, -1 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, 0, -1, -1, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, 0, -1, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, 0, -1, -1, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, 0, -1, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 2, 0, -1, -1, 0, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 2.375 ] + ], + [ + [ [ [ 1, 0, -1, -1, 1, 0 ], [ 0, 0, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 1, 0, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 0, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 1.375 ] + ], + [ + [ [ [ 1, 0, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 1 ], + [ [ [ 2, -1, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], 6.5 ] + ], + [ + [ [ [ 2, -1, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 2, -2, -1, -1, 1, 0 ] ], 1 ], + [ [ [ 2, -1, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 0, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 2, -2, -1, -1, 1, 0 ] ], 1 ], + [ [ [ 2, -1, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 0, 0 ], [ 1, -1, -1, -1, 1, 1 ], [ 2, -2, -1, -1, 1, 0 ] ], 7 ] ] ] ], "last_changes": [ - [ [ -6, 2, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], - [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], - [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], - [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ], - [ [ -6, 3, 0, 2, -1, 2 ], [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ] ] + [ [ 1, 0, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], + [ [ 2, -1, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 0, 0, 0, -1, 1, 0 ] ], + [ [ 2, -1, -1, -1, 1, 0 ], [ 1, -1, -1, -1, 1, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 2, -2, -1, -1, 1, 0 ] ], + [ [ 2, -1, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 0, 0 ], [ 1, 0, 1, -1, 1, 0 ], [ 2, -2, -1, -1, 1, 0 ] ], + [ [ 2, -1, -1, -1, 1, 0 ], [ 2, -1, -1, -1, 0, 0 ], [ 1, -1, -1, -1, 1, 1 ], [ 2, -2, -1, -1, 1, 0 ] ] ], "cur_uid": "tmp", -"ref_uid": "536cac90", -"order_seed": 837263, -"dur_seed": 651054, -"motifs_seed": 787003, -"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], -"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], -"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], -"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], -"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], -"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], -"hd_exp": 10, +"ref_uid": "4874dd07", +"order_seed": 572533, +"dur_seed": 356252, +"motifs_seed": 222682, +"entrances_probs_vals": [ 0, 0, 10, 1, 2.8846153846154, 0, 0.5, 0.27124183006536, 0.7027027027027, 0.5, 0.5, 0.65359477124183, 0.31081081081081, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 10, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 10, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1489.7832817337 ] ], +"step_probs_vals": [ 0, 1200, 0, 0, 0.069958847736626, 0, 0.31481481481481, 0, 0.38271604938272, 0.13068181818182, 0.45884773662551, 0.14772727272727, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.79218106995885, 0, 1, 0 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.45 ], +"hd_exp": 3.87, "hd_invert": 0, "order": [ - [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], - [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], - [ [ 1, 0 ], [ 3, 2 ], [ ] ], - [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], - [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], - [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], - [ [ 3 ], [ 2, 1, 0 ], [ ] ], - [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 1, 0, 2 ], [ 3 ], [ ] ], + [ [ 2 ], [ 3, 1, 0 ], [ ] ], + [ [ 1 ], [ 0, 2, 3 ], [ ] ], + [ [ 3, 2 ], [ 0, 1 ], [ ] ], + [ [ 2, 0 ], [ 3, 1 ], [ ] ], + [ [ 3 ], [ 0, 1, 2 ], [ ] ], + [ [ 2, 3, 1 ], [ 0 ], [ ] ], + [ [ 0, 3, 2 ], [ 1 ], [ ] ], + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 2, 1 ], [ 0, 3 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 2, 3 ], [ 1, 0 ], [ ] ], + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 1, 3 ], [ 0, 2 ], [ ] ], + [ [ 0 ], [ 1, 2, 3 ], [ ] ], + [ [ 1 ], [ 0, 2, 3 ], [ ] ], + [ [ 1 ], [ 0, 3, 2 ], [ ] ], + [ [ 3, 0, 1 ], [ 2 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 3, 0 ], [ 2, 1 ], [ ] ], + [ [ 3, 1 ], [ 2, 0 ], [ ] ], + [ [ 0 ], [ 3, 1, 2 ], [ ] ] ], -"sus_weights": [ 0.7, 0.48, 0.49 ], -"order_size": [ 14.132653061224, 14.132653061224 ], -"passages_size": [ 0, 5 ], +"sus_weights": [ 0.52, 0.37, 0.38 ], +"order_size": [ 25, 25.244897959184 ], +"passages_size": [ 0, 0 ], "motif_edited": "false", "order_edited": "false" } \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only.json b/resources/string_quartet_3_rise_coda_only.json new file mode 100644 index 0000000..8dee13f --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only.json @@ -0,0 +1,18 @@ +{ +"ledger": +[ + "4f53a446", + "624f7439", + "61207e49", + "50c2b0ad", + "66b20499", + "65120e88", + "567a9375", + "736745da", + "5f0075ab", + "5ef20586", + "4dd2a130", + "767e70f0", + "536cac90" +] +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only.json_bak b/resources/string_quartet_3_rise_coda_only.json_bak new file mode 100644 index 0000000..8dee13f --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only.json_bak @@ -0,0 +1,18 @@ +{ +"ledger": +[ + "4f53a446", + "624f7439", + "61207e49", + "50c2b0ad", + "66b20499", + "65120e88", + "567a9375", + "736745da", + "5f0075ab", + "5ef20586", + "4dd2a130", + "767e70f0", + "536cac90" +] +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/44490863/44490863_code.scd b/resources/string_quartet_3_rise_coda_only/44490863/44490863_code.scd new file mode 100644 index 0000000..23ccdf1 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/44490863/44490863_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(mSeq.maxDepth - 5).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/44490863/44490863_mus_model.json b/resources/string_quartet_3_rise_coda_only/44490863/44490863_mus_model.json new file mode 100644 index 0000000..b1d0e34 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/44490863/44490863_mus_model.json @@ -0,0 +1,154 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ 0, 1, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, 1, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ 1, 0, 1, -1, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ], [ 0, 0, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ], [ 0, 0, 2, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 1, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ], [ 0, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 1, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 0, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 0, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ], [ -2, 2, 2, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 0, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ -2, 2, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ -2, 2, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 4, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -3, 4, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 2, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 4, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 2, 0, 0, 0 ], [ -2, 4, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 2, 2, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 2, 0, 0, 0 ], [ -2, 4, 2, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 2, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 4, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 3, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 4, 2, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 3, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 3, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 3, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 3, 2, 0, 1, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 2, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -2, 3, 2, 0, 1, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -2, 3, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 3, 2, 0, 1, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 1, 0, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -2, 3, 1, 0, 1, 0 ], [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ] ], 1 ], + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ], [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ], [ -1, 2, 0, 0, 1, 0 ], [ -3, 2, 1, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -1, 2, 0, 0, 1, 0 ], [ -3, 2, 1, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 2, 1, 0, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ], [ -3, 2, 1, 1, 1, 0 ] ], 1 ], + [ [ [ -2, 1, 1, 1, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ], [ -3, 2, 1, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 1, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 1, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -2, 1, 1, 1, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 1, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -2, 0, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 1, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -2, 1, 1, 1, 1, 0 ], [ -1, 2, 1, 0, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -2, 1, 1, 1, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -2, 1, 1, 1, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -2, 0, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -5, 1, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ] +], +"cur_uid": "44490863", +"ref_uid": "4874dd07", +"order_seed": 903957, +"dur_seed": 360025, +"motifs_seed": 692248, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3, 2 ], [ 1, 0 ], [ ] ], + [ [ 3, 2, 0 ], [ 1 ], [ ] ], + [ [ 3 ], [ 1, 0, 2 ], [ ] ], + [ [ 1, 2 ], [ 0, 3 ], [ ] ], + [ [ 1, 2, 0 ], [ 3 ], [ ] ], + [ [ 0, 1 ], [ 3, 2 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 0, 2 ], [ 1, 3 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 3, 1 ], [ 0, 2 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 3, 0 ], [ 1, 2 ], [ ] ], + [ [ 1, 2 ], [ 0, 3 ], [ ] ], + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 0, 3 ], [ 2, 1 ], [ ] ], + [ [ 2, 0, 1 ], [ 3 ], [ ] ], + [ [ 2, 0, 3 ], [ 1 ], [ ] ], + [ [ 1, 3 ], [ 2, 0 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 2, 0 ], [ 3, 1 ], [ ] ], + [ [ 1, 3 ], [ 2, 0 ], [ ] ], + [ [ 1, 2, 3 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 5.0408163265306, 25.244897959184 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_code.scd b/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_code.scd new file mode 100644 index 0000000..070e09d --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_mus_model.json b/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_mus_model.json new file mode 100644 index 0000000..d9ac111 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/47bdba0e/47bdba0e_mus_model.json @@ -0,0 +1,161 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -2, 2 ], [ -7, 5, 1, 4, 0, 2 ], [ -6, 5, 1, 4, -2, 2 ] ], 1 ], + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, 0, 2 ], [ -6, 5, 1, 4, -2, 2 ] ], 1 ], + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, 0, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, 0, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -8, 7, 1, 4, -1, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -8, 5, 1, 4, 0, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -8, 6, 1, 5, -1, 2 ], [ -8, 5, 1, 4, 0, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -8, 6, 1, 5, -1, 2 ], [ -9, 7, 1, 4, -1, 2 ], [ -8, 5, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -8, 6, 1, 5, -1, 2 ], [ -9, 7, 1, 4, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 6, 1, 4, -1, 2 ], [ -8, 7, 1, 4, -1, 2 ], [ -9, 7, 1, 4, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -8, 5, 1, 4, -1, 2 ], [ -8, 7, 1, 4, -1, 2 ], [ -9, 7, 1, 4, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -8, 5, 1, 4, -1, 2 ], [ -8, 7, 1, 4, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -7, 6, 0, 4, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 6, 1, 3, -1, 2 ], [ -7, 5, 1, 4, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -8, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 6, 1, 4, -1, 2 ] ], 1 ], + [ [ [ -8, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 7, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 7, 1, 3, -1, 2 ], [ -8, 6, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 1, 2, -1, 2 ], [ -8, 6, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ], + [ [ [ -7, 6, 1, 2, -1, 2 ], [ -7, 6, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -8, 7, 1, 3, -1, 2 ] ], 1 ], + [ [ [ -7, 7, 1, 3, -1, 2 ], [ -7, 6, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 8, 1, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -7, 6, 1, 3, -1, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -6, 6, 1, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -6, 6, 1, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ] ], 1 ], + [ [ [ -7, 6, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -8, 8, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -7, 7, 1, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -8, 8, 2, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 7, 1, 3, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -8, 8, 2, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 7, 1, 3, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -8, 8, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -7, 7, 1, 3, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ], [ -7, 6, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 1, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ], [ -6, 7, 1, 2, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 7, 1, 3, -2, 2 ], [ -7, 7, 1, 3, -2, 2 ], [ -6, 7, 1, 2, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -9, 7, 1, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -6, 7, 1, 2, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -9, 7, 1, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 3, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 7, 1, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], 1 ], + [ [ [ -8, 7, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -8, 8, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -8, 8, 2, 2, -2, 2 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -9, 7, 1, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 3, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], + [ [ -9, 7, 1, 3, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], + [ [ -8, 7, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -7, 7, 2, 3, -2, 2 ] ], + [ [ -8, 7, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -8, 8, 2, 2, -2, 2 ] ], + [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -8, 8, 2, 2, -2, 2 ] ] +], +"cur_uid": "47bdba0e", +"ref_uid": "7276dc78", +"order_seed": 343288, +"dur_seed": 721067, +"motifs_seed": 895119, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0, 0, 0.069958847736626, 0, 0.31481481481481, 0, 0.38271604938272, 0.13068181818182, 0.45884773662551, 0.14772727272727, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.79218106995885, 0, 1, 0 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0 ], [ 2, 1, 3 ], [ ] ], + [ [ 1, 3 ], [ 0, 2 ], [ ] ], + [ [ 0, 1, 3 ], [ 2 ], [ ] ], + [ [ 1, 3, 0 ], [ 2 ], [ ] ], + [ [ 0 ], [ 1, 2, 3 ], [ ] ], + [ [ 3 ], [ 1, 0, 2 ], [ ] ], + [ [ 3, 2 ], [ 1, 0 ], [ ] ], + [ [ 2 ], [ 0, 1, 3 ], [ ] ], + [ [ 1, 3, 2 ], [ 0 ], [ ] ], + [ [ 3, 2, 1 ], [ 0 ], [ ] ], + [ [ 0, 3, 2 ], [ 1 ], [ ] ], + [ [ 2, 3 ], [ 0, 1 ], [ ] ], + [ [ 2, 1 ], [ 0, 3 ], [ ] ], + [ [ 3, 2 ], [ 0, 1 ], [ ] ], + [ [ 0, 3 ], [ 1, 2 ], [ ] ], + [ [ 1, 3, 2 ], [ 0 ], [ ] ], + [ [ 1 ], [ 2, 3, 0 ], [ ] ], + [ [ 2, 0, 3 ], [ 1 ], [ ] ], + [ [ 1 ], [ 2, 3, 0 ], [ ] ], + [ [ 3, 0 ], [ 1, 2 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 0 ], [ 3, 1, 2 ], [ ] ], + [ [ 3 ], [ 0, 1, 2 ], [ ] ], + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 1, 3, 2 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 25, 25.244897959184 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_code.scd b/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_code.scd new file mode 100644 index 0000000..c4e3d1b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_code.scd @@ -0,0 +1,979 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(mSeq.maxDepth - 5).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_mus_model.json b/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_mus_model.json new file mode 100644 index 0000000..74fb11d --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4874dd07/4874dd07_mus_model.json @@ -0,0 +1,121 @@ +{ +"music_data": +[ + [ + [ + [ [ [ 0, 0, 0, 0, 0, 0 ], [ "Rest" ], [ "Rest" ], [ "Rest" ] ], 1 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ "Rest" ], [ "Rest" ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ "Rest" ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -2, 3, 0, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ -1, 3, 0, 0, 0, 0 ], [ -2, 3, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ -1, 3, 0, 0, 0, 0 ], [ -1, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 1, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 2, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 0, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 0, 0, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, -1, 0, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 0, -1, 0, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 0, -1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 1, -1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, -1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, -1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, -1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 1, -1, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, -1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, -1, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ], + [ [ [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ] ], 1 ], + [ [ [ 0, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, -1, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ 0, -1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ], + [ [ [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ 0, -1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], + [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ] ], + [ [ -1, 1, 0, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], + [ [ -1, 2, 1, 0, 0, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ], + [ [ -1, 2, 0, 0, 1, 0 ], [ -1, 2, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0 ], [ -1, 1, 1, 0, 0, 0 ] ] +], +"cur_uid": "4874dd07", +"ref_uid": "nil", +"order_seed": 701987, +"dur_seed": 150121, +"motifs_seed": 970221, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 3 ], [ 1, 2 ], [ ] ], + [ [ 2, 1 ], [ 0, 3 ], [ ] ], + [ [ 0, 1 ], [ 3, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 0 ], [ 2, 1, 3 ], [ ] ], + [ [ 3 ], [ 0, 2, 1 ], [ ] ], + [ [ 3, 1, 2 ], [ 0 ], [ ] ], + [ [ 1 ], [ 3, 0, 2 ], [ ] ], + [ [ 3 ], [ 1, 2, 0 ], [ ] ], + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 2, 0 ], [ 1, 3 ], [ ] ], + [ [ 2, 1, 3 ], [ 0 ], [ ] ], + [ [ 2, 3 ], [ 1, 0 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 1, 2, 3 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 4.8265306122449, 25 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_code.scd b/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_mus_model.json b/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_mus_model.json new file mode 100644 index 0000000..85dcea4 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4b40ed47/4b40ed47_mus_model.json @@ -0,0 +1,86 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 3, 2, 1, -1 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 3, 2, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 3, 2, 1, -1 ], [ -5, 2, 4, 2, 1, 1 ], [ -3, 2, 3, 2, 0, 0 ] ], 1 ], + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 3, 2, 1, -1 ], [ -5, 2, 4, 2, 1, 1 ], [ -3, 2, 3, 2, 2, -1 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -4, 1, 4, 2, 1, 1 ], [ -5, 2, 4, 2, 1, 1 ], [ -3, 2, 3, 2, 2, -1 ] ], 1 ], + [ [ [ -5, 2, 5, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -5, 2, 4, 2, 1, 1 ], [ -3, 2, 3, 2, 2, -1 ] ], 1 ], + [ [ [ -5, 2, 5, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -5, 2, 4, 2, 1, 1 ], [ -5, 1, 4, 2, 1, 1 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 5, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -3, 1, 4, 2, 1, 0 ], [ -5, 1, 4, 2, 1, 1 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 5, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -3, 1, 4, 2, 1, 0 ], [ -5, 1, 4, 3, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 5, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -4, 1, 5, 2, 1, 1 ], [ -5, 1, 4, 3, 1, 0 ] ], 1 ], + [ [ [ -5, 1, 4, 4, 1, 0 ], [ -4, 1, 4, 2, 1, 1 ], [ -4, 1, 5, 2, 1, 1 ], [ -5, 1, 4, 3, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 1, 4, 4, 1, 0 ], [ -4, 1, 4, 2, 1, 1 ], [ -6, 1, 4, 3, 1, 1 ], [ -5, 1, 4, 3, 1, 0 ] ], 1 ], + [ [ [ -5, 1, 4, 4, 1, 0 ], [ -4, 1, 4, 2, 1, 1 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 1 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 4, 2, 1, 1 ], [ -4, 1, 4, 3, 1, 0 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 5, 2, 1, 0 ], [ -4, 1, 4, 3, 1, 0 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 1, 0 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 0, 1 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 0, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 0, 4, 3, 1, 1 ], [ -3, 1, 4, 1, 1, 0 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 1, 4, 2, 1, 0 ], [ -3, 1, 4, 1, 1, 0 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 1, 0 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], + [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 0, 1 ], [ -6, 1, 4, 3, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], + [ [ -4, 0, 4, 3, 1, 1 ], [ -4, 1, 4, 3, 0, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], + [ [ -4, 0, 4, 3, 1, 1 ], [ -3, 1, 4, 1, 1, 0 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], + [ [ -3, 1, 4, 2, 1, 0 ], [ -3, 1, 4, 1, 1, 0 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ] +], +"cur_uid": "4b40ed47", +"ref_uid": "6db2efcc", +"order_seed": 401316, +"dur_seed": 325935, +"motifs_seed": 749229, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.4 ], +"hd_exp": 4, +"hd_invert": 0, +"order": +[ + [ [ 0, 1, 2 ], [ 3 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 0, 1, 3 ], [ 2 ], [ ] ], + [ [ 1, 2, 0 ], [ 3 ], [ ] ], + [ [ 1, 3 ], [ 2, 0 ], [ ] ], + [ [ 1 ], [ 2, 3, 0 ], [ ] ], + [ [ 3, 2 ], [ 1, 0 ], [ ] ], + [ [ 2, 3 ], [ 0, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_code.scd b/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_mus_model.json b/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_mus_model.json new file mode 100644 index 0000000..c3b7f03 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4bb01bac/4bb01bac_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -3, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 0, 3, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 0, 3, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 3, 2, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 2, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 4.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -4, 3, 2, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -4, 3, 2, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -4, 3, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ] +], +"cur_uid": "4bb01bac", +"ref_uid": "536cac90", +"order_seed": 307485, +"dur_seed": 941079, +"motifs_seed": 841607, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "true", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_code.scd b/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_mus_model.json b/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_mus_model.json new file mode 100644 index 0000000..8d43276 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4bf1af12/4bf1af12_mus_model.json @@ -0,0 +1,87 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 1, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 1, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 1, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 1, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 0, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 0, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -3, 0, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 1, 2, 3, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 1, 2, 3, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -4, 1, 2, 3, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 1, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], + [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 0, 2, 2, 1, 0 ] ], + [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 1, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], + [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ] +], +"cur_uid": "4bf1af12", +"ref_uid": 44490863, +"order_seed": 556699, +"dur_seed": 515215, +"motifs_seed": 916157, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.9 ], +"hd_exp": 9, +"hd_invert": 0, +"order": +[ + [ [ 0, 1, 2 ], [ 3 ], [ ] ], + [ [ 3, 0, 2 ], [ 1 ], [ ] ], + [ [ 3, 0, 1 ], [ 2 ], [ ] ], + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 0 ], [ 1, 2, 3 ], [ ] ], + [ [ 3, 0 ], [ 2, 1 ], [ ] ], + [ [ 0 ], [ 2, 3, 1 ], [ ] ], + [ [ 2 ], [ 0, 1, 3 ], [ ] ], + [ [ 0, 3 ], [ 2, 1 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_code.scd b/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_mus_model.json b/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_mus_model.json new file mode 100644 index 0000000..bf4b64e --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/4dd2a130_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, -1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, -1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -1, 3 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "4dd2a130", +"ref_uid": "5ef20586", +"order_seed": 837263, +"dur_seed": 562162, +"motifs_seed": 328077, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46296296296296, 0.39204545454545, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_I.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_II.ly new file mode 100644 index 0000000..702338f --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { f''8^\markup { \pad-markup #0.2 "-38"}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais'8[ c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] f''4^\markup { \pad-markup #0.2 "-38"} } + \bar "|" + { cis'1^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_III.ly new file mode 100644 index 0000000..683b743 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { ais2^\markup { \pad-markup #0.2 "-40"} c'4^\markup { \pad-markup #0.2 "-37"} cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { f8[ g8^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}] a8^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] ~ ais2} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_IV.ly new file mode 100644 index 0000000..74ec7e4 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4dd2a130/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { c''4^\markup { \pad-markup #0.2 "-37"} cis''2.^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} ~ } + \bar "|" + { cis''8[ c''8^\markup { \pad-markup #0.2 "-37"}] cis''8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais'2} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_code.scd b/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_mus_model.json b/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_mus_model.json new file mode 100644 index 0000000..38e73bd --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4e9f1dcc/4e9f1dcc_mus_model.json @@ -0,0 +1,86 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -3, 1, 4, 2, 1, 0 ], [ -4, 1, 5, 2, 1, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 4, 2, 1, 2 ], [ -4, 1, 5, 2, 1, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 4, 2, 1, 0 ] ], 1 ], + [ [ [ -6, 1, 4, 2, 1, 2 ], [ -4, 1, 5, 2, 1, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 4, 2, 1, 2 ], [ -4, 1, 4, 2, 0, 1 ], [ -5, 1, 4, 2, 1, 1 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ], + [ [ [ -6, 1, 4, 2, 1, 2 ], [ -4, 1, 4, 2, 0, 1 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 4, 2, 1, 2 ], [ -4, 1, 5, 2, -1, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ], + [ [ [ -5, 1, 4, 2, 0, 2 ], [ -4, 1, 5, 2, -1, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 5, 2, 0, 1 ], [ -4, 1, 5, 2, -1, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 5, 2, 0, 1 ], [ -3, 1, 5, 2, 0, 0 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ], + [ [ [ -5, 2, 5, 2, 0, 1 ], [ -3, 1, 5, 2, 0, 0 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, 0, 1 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 5, 2, 0, 1 ], [ -3, 1, 5, 2, 0, 0 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, -1, 2 ] ], 1 ], + [ [ [ -5, 2, 5, 2, 0, 1 ], [ -5, 1, 5, 2, 0, 3 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, -1, 2 ] ], 1 ], + [ [ [ -4, 1, 5, 1, 0, 2 ], [ -5, 1, 5, 2, 0, 3 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -4, 1, 5, 1, 0, 2 ], [ -6, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 1, 5, 2, -1, 2 ] ], 1 ], + [ [ [ -4, 1, 5, 1, 0, 2 ], [ -6, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], 1 ], + [ [ [ -4, 0, 5, 2, 0, 2 ], [ -6, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 5, 2, 0, 2 ], [ -6, 2, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -4, 0, 5, 2, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 3 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -4, 0, 5, 2, 0, 2 ], [ -6, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], + [ [ -4, 0, 5, 2, 0, 2 ], [ -6, 2, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], + [ [ -4, 0, 5, 2, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], + [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 2, 5, 2, 0, 2 ] ], + [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 3 ] ] +], +"cur_uid": "4e9f1dcc", +"ref_uid": "4b40ed47", +"order_seed": 207247, +"dur_seed": 435476, +"motifs_seed": 299289, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.3 ], +"hd_exp": 3, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1 ], [ ] ], + [ [ 1, 2 ], [ 0, 3 ], [ ] ], + [ [ 0, 3 ], [ 1, 2 ], [ ] ], + [ [ 3, 2 ], [ 1, 0 ], [ ] ], + [ [ 3, 1, 2 ], [ 0 ], [ ] ], + [ [ 2, 3 ], [ 1, 0 ], [ ] ], + [ [ 2 ], [ 3, 1, 0 ], [ ] ], + [ [ 2 ], [ 1, 3, 0 ], [ ] ], + [ [ 3, 0, 2 ], [ 1 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_code.scd b/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_mus_model.json b/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_mus_model.json new file mode 100644 index 0000000..c1c5431 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/4f53a446_mus_model.json @@ -0,0 +1,64 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.125 ], + [ [ [ -3, 4, 0, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.875 ], + [ [ [ -4, 6, 0, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 2 ], + [ [ [ -4, 5, 0, 1, -2, 3 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.5 ], + [ [ [ -3, 5, 0, 1, -3, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.5 ] + ], + [ + [ [ [ -2, 4, 0, 1, -2, 1 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.875 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 1.75 ] + ], + [ + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 4, 0, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ] ], 1.125 ], + [ [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], 0.75 ], + [ [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 4.25 ] + ] + ] +], +"last_changes": +[ + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], + [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ] +], +"cur_uid": "4f53a446", +"ref_uid": "5f3f1c84", +"order_seed": 818224, +"dur_seed": 715279, +"motifs_seed": 485520, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 3, 0.0098039215686275, 0, 0.20915032679739, 0, 0.44444444444444, 0.80743243243243, 0.76470588235294, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 3, 0.0098039215686275, 0, 0.20915032679739, 0, 0.44444444444444, 0.80743243243243, 0.76470588235294, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 3, 0.0098039215686275, 0, 0.20915032679739, 0, 0.44444444444444, 0.80743243243243, 0.76470588235294, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 2, 1 ], [ 3, 0, 0, 0 ], [ ] ], + [ [ 3, 1 ], [ 0, 2, 0 ], [ ] ], + [ [ 1, 2, 3 ], [ 0, 0 ], [ ] ], + [ [ 2 ], [ 1, 3, 0, 3, 3, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 4, 4.030612244898 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_I.ly new file mode 100644 index 0000000..629df46 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_I.ly @@ -0,0 +1,22 @@ +{ + { ais1^\markup { \pad-markup #0.2 "-45"} ~ } + \bar "|" + { ais1 ~ } + \bar "|" + { ais1 ~ } + \bar "|" + { ais1 ~ } + \bar "|" + { ais1 ~ } + \bar "|" + { ais1 ~ } + \bar "|" + { ais4 ~ ais16[ ais8.^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}] ~ ais4 ~ ais8[ a8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { a4 gis2.^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }} ~ } + \bar "|" + { gis1 ~ } + \bar "|" + { gis1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_II.ly new file mode 100644 index 0000000..74ba4e1 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_II.ly @@ -0,0 +1,22 @@ +{ + { d'1^\markup { \pad-markup #0.2 "+26"} ~ } + \bar "|" + { d'1 ~ } + \bar "|" + { d'1 } + \bar "|" + { cis'1^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_III.ly new file mode 100644 index 0000000..69d6915 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_III.ly @@ -0,0 +1,22 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-43"} ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'4 ~ f'16[ fis'8.^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }}] ~ fis'2 ~ } + \bar "|" + { fis'4 gis'2.^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } + \bar "|" + { gis'1 ~ } + \bar "|" + { gis'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.ly new file mode 100644 index 0000000..21a8095 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.ly @@ -0,0 +1,22 @@ +{ + { a'2^\markup { \pad-markup #0.2 "+28"} ~ a'16[ ais'8.^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ ais'4 ~ } + \bar "|" + { ais'2 c''2^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } + \bar "|" + { c''2 cis''2^\markup { \pad-markup #0.2 "-2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }} } + \bar "|" + { cis''2.^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} b'4^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} ~ } + \bar "|" + { b'2 cis''2^\markup { \pad-markup #0.2 "+15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} ~ } + \bar "|" + { cis''4 ~ cis''8.[ g'16^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}] ~ g'2 ~ } + \bar "|" + { g'4 ~ g'16[ a'8.^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↓" }}] ~ a'2 ~ } + \bar "|" + { a'4 gis,2.^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { gis,1 ~ } + \bar "|" + { gis,1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.pdf b/resources/string_quartet_3_rise_coda_only/4f53a446/lilypond/part_IV.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6aecdbde9f3e76304eff9e724cae77815eea745c GIT binary patch literal 47841 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 min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5015ba0f/5015ba0f_mus_model.json b/resources/string_quartet_3_rise_coda_only/5015ba0f/5015ba0f_mus_model.json new file mode 100644 index 0000000..85a4277 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5015ba0f/5015ba0f_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "5015ba0f", +"ref_uid": "767e70f0", +"order_seed": 965367, +"dur_seed": 717894, +"motifs_seed": 779371, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_code.scd b/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_mus_model.json b/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_mus_model.json new file mode 100644 index 0000000..10eff06 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/50c2b0ad_mus_model.json @@ -0,0 +1,96 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -2, 3, -1, 1, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -2, 4, -2, 1, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -3, 4, -2, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -2, 4, -1, 1, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -4, 3, -1, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -4, 3, -1, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -2, 4, -1, 1, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -4, 3, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -4, 3, -1, 2, -2, 2 ], [ -3, 3, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -3, 3, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 4, -1, 2, -2, 2 ], [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -5, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -3, 3, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, 0, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, -1, 3, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 4, -1, 3, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -3, 3, -1, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], + [ [ -4, 4, 0, 2, -2, 2 ], [ -3, 4, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], + [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 5, 0, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], + [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, -1, 3, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], + [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 4, -1, 3, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ] +], +"cur_uid": "50c2b0ad", +"ref_uid": "61207e49", +"order_seed": 837263, +"dur_seed": 454936, +"motifs_seed": 788402, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_I.ly new file mode 100644 index 0000000..e1ef119 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_I.ly @@ -0,0 +1,8 @@ +{ + { cis''2^\markup { \pad-markup #0.2 "-29"} d'2^\markup { \pad-markup #0.2 "-18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} } + \bar "|" + { dis'1^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { dis'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_II.ly new file mode 100644 index 0000000..02fc9d9 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_II.ly @@ -0,0 +1,8 @@ +{ + { a'2^\markup { \pad-markup #0.2 "-16"} b'8^\markup { \pad-markup #0.2 "-33"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] d''8^\markup { \pad-markup #0.2 "-18"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}] } + \bar "|" + { fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ ais'2 dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ fis''8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }}] } + \bar "|" + { dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ gis'8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] g'4^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ais2^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_III.ly new file mode 100644 index 0000000..2c18edf --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_III.ly @@ -0,0 +1,8 @@ +{ + { d'8^\markup { \pad-markup #0.2 "-18"}[ dis'8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }}[ fis'8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] ~ fis'2 ~ } + \bar "|" + { fis'8[ g'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] gis8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}[ ais8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ ais4 } + \bar "|" + { gis4^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }} g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}[ dis8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] dis''8^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ d''8^\markup { \pad-markup #0.2 "+26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] cis''4^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_IV.ly new file mode 100644 index 0000000..5f683d4 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/50c2b0ad/lilypond/part_IV.ly @@ -0,0 +1,8 @@ +{ + { ais2^\markup { \pad-markup #0.2 "+40"} fis2^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { fis8[ g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] dis2^\markup { \pad-markup #0.2 "+38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ais'4^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { ais'2 gis'8^\markup { \pad-markup #0.2 "+36"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}[ g'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] a'4^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_code.scd b/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_mus_model.json b/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_mus_model.json new file mode 100644 index 0000000..6106aa7 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/521654f8/521654f8_mus_model.json @@ -0,0 +1,87 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -3, 0, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 0, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 0, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 0, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 1, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 0, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 1, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -1, 1, 0, 2, 1, -1 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -1, 1, 0, 2, 1, -1 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 2, 2, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 2, 2, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -4, 3, 3, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -4, 2, 3, 2, 1, 1 ], [ -4, 3, 3, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 3, 3, 1, 1, 0 ], [ -4, 3, 3, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -3, 3, 3, 1, 1, 0 ], [ -4, 3, 3, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -3, 3, 3, 1, 1, 0 ], [ -5, 2, 3, 4, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -4, 2, 3, 3, 1, -1 ], [ -5, 2, 3, 4, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 4, 3, 1, 0 ], [ -4, 2, 3, 3, 1, -1 ], [ -5, 2, 3, 4, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 4, 3, 1, 0 ], [ -6, 3, 3, 4, 1, 0 ], [ -5, 2, 3, 4, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -3, 3, 3, 1, 1, 0 ], [ -4, 3, 3, 2, 1, 0 ] ], + [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -3, 3, 3, 1, 1, 0 ], [ -5, 2, 3, 4, 1, 0 ] ], + [ [ -5, 2, 3, 3, 1, 0 ], [ -4, 2, 2, 3, 1, 0 ], [ -4, 2, 3, 3, 1, -1 ], [ -5, 2, 3, 4, 1, 0 ] ], + [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 4, 3, 1, 0 ], [ -4, 2, 3, 3, 1, -1 ], [ -5, 2, 3, 4, 1, 0 ] ], + [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 4, 3, 1, 0 ], [ -6, 3, 3, 4, 1, 0 ], [ -5, 2, 3, 4, 1, 0 ] ] +], +"cur_uid": "521654f8", +"ref_uid": "7ede7adb", +"order_seed": 185690, +"dur_seed": 954582, +"motifs_seed": 356283, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.6 ], +"hd_exp": 6, +"hd_invert": 0, +"order": +[ + [ [ 1, 0, 2 ], [ 3 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 2, 1, 3 ], [ 0 ], [ ] ], + [ [ 0 ], [ 3, 2, 1 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 1, 2, 3 ], [ 0 ], [ ] ], + [ [ 1 ], [ 0, 3, 2 ], [ ] ], + [ [ 0, 3 ], [ 2, 1 ], [ ] ], + [ [ 0 ], [ 3, 2, 1 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_code.scd b/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_mus_model.json b/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_mus_model.json new file mode 100644 index 0000000..4f78cc2 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/531df78c/531df78c_mus_model.json @@ -0,0 +1,157 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 2, 1, 2 ] ], 1 ], + [ [ [ -7, 4, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 2, 1, 2 ] ], 1 ], + [ [ [ -7, 4, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 0, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 3, 4, 0, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -6, 4, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 0, 1, 2 ], [ -4, 3, 4, 0, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -6, 4, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 0, 1, 2 ], [ -4, 3, 4, 0, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 0, 1, 2 ], [ -5, 4, 3, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 4, 3, 1, 1, 2 ], [ -5, 4, 3, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -5, 4, 3, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 3, 1, 1, 2 ], [ -6, 3, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -6, 3, 3, 1, 1, 2 ], [ -5, 2, 3, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -5, 2, 3, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -6, 4, 3, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -4, 1, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -4, 1, 4, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -4, 2, 3, 1, 1, 2 ], [ -5, 3, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 2 ], [ -4, 2, 3, 1, 1, 2 ], [ -6, 5, 3, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 4, 3, 0, 1, 2 ], [ -4, 2, 3, 1, 1, 2 ], [ -6, 5, 3, 1, 1, 2 ] ], 1 ], + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 4, 3, 0, 1, 2 ], [ -7, 5, 3, 1, 1, 2 ], [ -6, 5, 3, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -5, 4, 3, 0, 1, 2 ], [ -7, 5, 3, 1, 1, 2 ], [ -5, 5, 3, 0, 1, 2 ] ], 1 ], + [ [ [ -5, 4, 3, 1, 1, 2 ], [ -6, 5, 2, 1, 1, 2 ], [ -7, 5, 3, 1, 1, 2 ], [ -5, 5, 3, 0, 1, 2 ] ], 1 ], + [ [ [ -6, 5, 3, 1, 1, 2 ], [ -6, 5, 2, 1, 1, 2 ], [ -7, 5, 3, 1, 1, 2 ], [ -5, 5, 3, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 3, 1, 1, 2 ], [ -6, 5, 2, 1, 1, 2 ], [ -6, 5, 3, 0, 1, 2 ], [ -5, 5, 3, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 3, 1, 1, 2 ], [ -6, 5, 2, 1, 1, 2 ], [ -6, 5, 3, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ], + [ [ [ -6, 5, 3, 1, 1, 2 ], [ -6, 6, 3, 0, 1, 2 ], [ -6, 5, 3, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 4, 0, 1, 2 ], [ -6, 6, 3, 0, 1, 2 ], [ -6, 5, 3, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 4, 0, 1, 2 ], [ -6, 6, 3, 0, 1, 2 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ], + [ [ [ -6, 6, 4, 0, 1, 2 ], [ -7, 5, 4, 1, 1, 3 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 4, 0, 1, 3 ], [ -7, 5, 4, 1, 1, 3 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ], + [ [ [ -6, 5, 4, 0, 1, 3 ], [ -6, 6, 4, 0, 1, 2 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 5, 4, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 4, 0, 1, 3 ], [ -6, 6, 4, 0, 1, 2 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 6, 5, 0, 1, 2 ] ], 1 ], + [ [ [ -7, 5, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -6, 5, 4, 0, 1, 2 ], [ -6, 6, 5, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -7, 7, 4, 0, 1, 2 ], [ -6, 6, 5, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -7, 7, 4, 0, 1, 2 ], [ -7, 6, 4, 0, 1, 2 ] ], 1 ], + [ [ [ -7, 5, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -7, 6, 4, 1, 1, 2 ], [ -7, 6, 4, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -7, 6, 4, 0, 1, 2 ] ], 1 ], + [ [ [ -8, 7, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -7, 6, 4, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 7, 4, 0, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], 1 ], + [ [ [ -7, 7, 4, -1, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], 1 ], + [ [ [ -7, 7, 4, -1, 1, 2 ], [ -6, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -6, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], 1 ], + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], 1 ], + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], 1 ], + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -6, 6, 5, 0, 1, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 6, 4, -1, 1, 2 ], [ -6, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], + [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 7, 4, -1, 1, 2 ] ], + [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -5, 6, 4, -1, 1, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], + [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 6, 4, -1, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], + [ [ -7, 6, 4, -1, 1, 2 ], [ -6, 6, 5, 0, 1, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ] +], +"cur_uid": "531df78c", +"ref_uid": "78a94ed1", +"order_seed": 561112, +"dur_seed": 221568, +"motifs_seed": 960151, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 0.08, 0.47, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 1 ], [ 2, 0, 3 ], [ ] ], + [ [ 2, 1 ], [ 0, 3 ], [ ] ], + [ [ 0, 2, 3 ], [ 1 ], [ ] ], + [ [ 2, 1, 0 ], [ 3 ], [ ] ], + [ [ 0, 2, 3 ], [ 1 ], [ ] ], + [ [ 1, 3, 2 ], [ 0 ], [ ] ], + [ [ 3 ], [ 0, 1, 2 ], [ ] ], + [ [ 3, 2, 0 ], [ 1 ], [ ] ], + [ [ 1, 3, 0 ], [ 2 ], [ ] ], + [ [ 3, 1 ], [ 2, 0 ], [ ] ], + [ [ 1, 3, 0 ], [ 2 ], [ ] ], + [ [ 0 ], [ 3, 1, 2 ], [ ] ], + [ [ 2 ], [ 3, 1, 0 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 0, 2 ], [ 3, 1 ], [ ] ], + [ [ 2, 1, 3 ], [ 0 ], [ ] ], + [ [ 3, 0 ], [ 2, 1 ], [ ] ], + [ [ 3, 2 ], [ 0, 1 ], [ ] ], + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 1, 3, 0 ], [ 2 ], [ ] ], + [ [ 0, 1 ], [ 3, 2 ], [ ] ], + [ [ 3, 1 ], [ 2, 0 ], [ ] ], + [ [ 2 ], [ 3, 0, 1 ], [ ] ], + [ [ 2 ], [ 0, 1, 3 ], [ ] ], + [ [ 3, 0 ], [ 2, 1 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 25, 25.244897959184 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_code.scd b/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_mus_model.json b/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_mus_model.json new file mode 100644 index 0000000..1017c6b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/536cac90_mus_model.json @@ -0,0 +1,98 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, 0, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 1, 1, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -4, 3, 1, 1, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -5, 3, 2, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -4, 2, 1, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -4, 3, 1, 2, -1, 1 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 0, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 1, 2, -1, 1 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 1, -1, 2 ], [ -5, 3, 1, 2, 0, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, 0, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -4, 2, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 2, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, 0, 2 ], [ -5, 3, 1, 2, 0, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, 0, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.5 ], + [ [ [ -6, 3, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -3, 3, 2, 2, -2, 2 ], [ -4, 3, 1, 3, -2, 2 ] ], 1.5 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -2, 2 ] ], 2.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, 0, 2 ], [ -5, 3, 1, 2, 0, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, 0, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ] +], +"cur_uid": "536cac90", +"ref_uid": "767e70f0", +"order_seed": 837263, +"dur_seed": 210094, +"motifs_seed": 299013, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_I.ly new file mode 100644 index 0000000..4aeeb9f --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_I.ly @@ -0,0 +1,14 @@ +{ + { f'2^\markup { \pad-markup #0.2 "-38"} g2^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }} ~ } + \bar "|" + { g8[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ ais'2. ~ } + \bar "|" + { ais'1 ~ } + \bar "|" + { ais'2 d''2^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} ~ } + \bar "|" + { d''4 a'2.^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { a'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_II.ly new file mode 100644 index 0000000..3e38076 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_II.ly @@ -0,0 +1,14 @@ +{ + { d'2^\markup { \pad-markup #0.2 "+30"} ~ d'8[ f'8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] dis'8^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}[ dis'8^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] } + \bar "|" + { cis'4^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} c'8^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}[ fis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ fis'2 } + \bar "|" + { f'8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}[ dis'8^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}[ dis'8^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}] f'4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} dis''4^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { dis''2 gis''2^\markup { \pad-markup #0.2 "-5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ~ } + \bar "|" + { gis''4 e''2.^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { e''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_III.ly new file mode 100644 index 0000000..8b4f748 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_III.ly @@ -0,0 +1,14 @@ +{ + { ais8^\markup { \pad-markup #0.2 "+13"}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] b8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] ~ ais2 ~ } + \bar "|" + { ais4 ~ ais8[ c'8^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}] cis'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}[ dis'8^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}] cis'8^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { ais4 c'4^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} cis'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}[ dis'8^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ dis'8[ f'8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ } + \bar "|" + { f'8[ dis'8^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] e'4^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }} b'2^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } + \bar "|" + { b'4 e'2.^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { e'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_IV.ly new file mode 100644 index 0000000..d79bdff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/536cac90/lilypond/part_IV.ly @@ -0,0 +1,14 @@ +{ + { f2^\markup { \pad-markup #0.2 "-38"} ~ f8[ ais,8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ ais,4 ~ } + \bar "|" + { ais,4 ~ ais,8[ c8^\markup { \pad-markup #0.2 "-9"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] cis2^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }} } + \bar "|" + { dis1^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} } + \bar "|" + { f8^\markup { \pad-markup #0.2 "-38"}[ dis8^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}] e4^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} e,2^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } + \bar "|" + { e,4 a,2.^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } + \bar "|" + { a,1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_code.scd b/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_mus_model.json b/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_mus_model.json new file mode 100644 index 0000000..22703b5 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/567a9375_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 4, 0, 3, -1, 2 ], [ -7, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 0, 3, -1, 2 ], [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -7, 4, 1, 3, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -2, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 2, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -7, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 5, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -7, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 5, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "567a9375", +"ref_uid": "65120e88", +"order_seed": 837263, +"dur_seed": 805746, +"motifs_seed": 806271, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_I.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_II.ly new file mode 100644 index 0000000..720922d --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}[ b8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}] ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] ais4^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} c'4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} ~ } + \bar "|" + { c'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_III.ly new file mode 100644 index 0000000..1098871 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { d4^\markup { \pad-markup #0.2 "+30"} f4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} e8^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}[ dis8^\markup { \pad-markup #0.2 "-42"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] f4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} } + \bar "|" + { g8^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }}[ gis8^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }}] ~ gis2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_IV.ly new file mode 100644 index 0000000..4b11c42 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/567a9375/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { ais,2.^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} c8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ cis8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}] ~ } + \bar "|" + { cis8[ d8^\markup { \pad-markup #0.2 "-5"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↓" }}] ~ d2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_code.scd b/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_mus_model.json b/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_mus_model.json new file mode 100644 index 0000000..975b346 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5c1e1d32/5c1e1d32_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 3, 1, 2, -1, 3 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 3, 1, 2, -1, 3 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 5, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "5c1e1d32", +"ref_uid": "767e70f0", +"order_seed": 345666, +"dur_seed": 923700, +"motifs_seed": 727115, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_code.scd b/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_mus_model.json b/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_mus_model.json new file mode 100644 index 0000000..f52e7df --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/5ededd80_mus_model.json @@ -0,0 +1,42 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 3, 1, 2, -2, 2 ], [ -4, 4, 1, 2, -2, 2 ], [ -3, 3, 2, 2, -2, 2 ], [ -3, 3, 1, 3, -2, 2 ] ], 0.5 ], + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -2, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -2, 2, 1, 2, -2, 2 ] ], 2.25 ] + ] + ] +], +"last_changes": +[ + [ [ -4, 2, 1, 3, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -3, 1, 1, 2, -1, 2 ] ], + [ [ -4, 2, 1, 3, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 2, 2, -1, 2 ] ], + [ [ -3, 2, 0, 2, -1, 2 ], [ -4, 2, 0, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 2, 2, -1, 2 ] ], + [ [ -3, 2, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 2, 2, -1, 2 ] ], + [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 2, 2, 2, -1, 2 ] ] +], +"cur_uid": "5ededd80", +"ref_uid": "536cac90", +"order_seed": 445563, +"dur_seed": 232539, +"motifs_seed": 702074, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 2 ], [ 3, 0, 1, 1, 3, 0, 1 ], [ ] ], + [ [ 2 ], [ 3, 0, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0, 0 ], +"order_size": [ 2, 2.0102040816327 ], +"passages_size": [ 0, 6 ], +"motif_edited": "true", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_I.ly new file mode 100644 index 0000000..136105a --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { d'''4^\markup { \pad-markup #0.2 "-23"} a''2.^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { a''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_II.ly new file mode 100644 index 0000000..36fb6c9 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { gis''4^\markup { \pad-markup #0.2 "-5"} e''2.^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { e''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_III.ly new file mode 100644 index 0000000..bb36c57 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { b'4^\markup { \pad-markup #0.2 "+10"} e'2.^\markup { \pad-markup #0.2 "+8"} ~ } + \bar "|" + { e'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_IV.ly new file mode 100644 index 0000000..ebe7849 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ededd80/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { e,4^\markup { \pad-markup #0.2 "+8"} a,2.^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } + \bar "|" + { a,1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_code.scd b/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_mus_model.json b/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_mus_model.json new file mode 100644 index 0000000..c78bd2a --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/5ef20586_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -3, 4, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -3, 4, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 4, 2, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "5ef20586", +"ref_uid": "5f0075ab", +"order_seed": 837263, +"dur_seed": 148789, +"motifs_seed": 771884, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_I.ly new file mode 100644 index 0000000..ab18089 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { ais'2.^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} ~ ais'8[ gis'8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] } + \bar "|" + { ais'8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}[ c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ c''2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_II.ly new file mode 100644 index 0000000..953bcf0 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { d''8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}[ f''8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] g''8^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} f''4^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { f''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_III.ly new file mode 100644 index 0000000..b38e65b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { cis'4^\markup { \pad-markup #0.2 "-25"} d'4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} cis'8^\markup { \pad-markup #0.2 "+46"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 5↑" }}[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ ais8[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] } + \bar "|" + { ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}] ~ c'2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_IV.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5ef20586/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_code.scd b/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_mus_model.json b/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_mus_model.json new file mode 100644 index 0000000..11843ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/5f0075ab_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 2, 1, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 2, 1, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 1, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 3, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "5f0075ab", +"ref_uid": "736745da", +"order_seed": 837263, +"dur_seed": 820526, +"motifs_seed": 826853, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_I.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_II.ly new file mode 100644 index 0000000..775b507 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { c''8^\markup { \pad-markup #0.2 "-37"}[ ais'8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↑" }}] g'8^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis'8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ais'4^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} c''8^\markup { \pad-markup #0.2 "-37"}[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}] ~ } + \bar "|" + { cis''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_III.ly new file mode 100644 index 0000000..46fcd27 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { g4^\markup { \pad-markup #0.2 "-7"} ~ g8[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ gis8[ ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] b8^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}[ cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] } + \bar "|" + { ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ c'2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_IV.ly new file mode 100644 index 0000000..a3fcbc8 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f0075ab/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { f,4^\markup { \pad-markup #0.2 "-38"} g,2^\markup { \pad-markup #0.2 "-7"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ g,8[ f,8^\markup { \pad-markup #0.2 "-38"}] } + \bar "|" + { fis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ f2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_code.scd b/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_code.scd new file mode 100644 index 0000000..070e09d --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_mus_model.json b/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_mus_model.json new file mode 100644 index 0000000..e7cfeec --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/5f3f1c84/5f3f1c84_mus_model.json @@ -0,0 +1,105 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -8, 7, 2, 3, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -8, 8, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -7, 7, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -3, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ] ], 1 ], + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 7, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ] ], 1 ], + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -6, 6, 3, 2, -2, 2 ] ], 1 ], + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 3 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 0, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 3 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ], + [ [ [ -6, 6, 0, 2, -2, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 7, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ], + [ [ [ -6, 6, 0, 2, -2, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -6, 7, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -6, 7, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ], + [ [ [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ], + [ [ [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, 0, 2, -2, 1 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -4, 6, 0, 2, -2, 1 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ], + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -6, 5, 1, 2, -2, 2 ], [ -5, 6, 1, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -6, 5, 1, 2, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -6, 6, 1, 2, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -5, 5, 0, 2, -1, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 6, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 5, 1, 2, -2, 2 ], [ -5, 5, 0, 2, -1, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 6, 0, 2, -2, 2 ], [ -5, 5, 0, 2, -1, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], 1 ], + [ [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], 1 ], + [ [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ] ], 1 ] + ], + [ + [ [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -6, 6, 0, 2, -2, 2 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 5, 1, 2, -2, 2 ], [ -5, 5, 0, 2, -1, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], + [ [ -5, 6, 0, 2, -2, 2 ], [ -5, 5, 0, 2, -1, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], + [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 5, 0, 3, -2, 2 ] ], + [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -5, 4, 0, 2, -2, 2 ] ], + [ [ -5, 6, 0, 2, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 5, 0, 2, -2, 2 ], [ -6, 6, 0, 2, -2, 2 ] ] +], +"cur_uid": "5f3f1c84", +"ref_uid": "47bdba0e", +"order_seed": 108266, +"dur_seed": 863525, +"motifs_seed": 142859, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 0.23, 0.47, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 3, 1 ], [ 0, 2 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 3, 1, 0 ], [ 2 ], [ ] ], + [ [ 3 ], [ 0, 2, 1 ], [ ] ], + [ [ 3 ], [ 0, 2, 1 ], [ ] ], + [ [ 2, 3 ], [ 0, 1 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 3, 0, 2 ], [ 1 ], [ ] ], + [ [ 3, 2, 0 ], [ 1 ], [ ] ], + [ [ 1, 2, 0 ], [ 3 ], [ ] ], + [ [ 2 ], [ 0, 1, 3 ], [ ] ], + [ [ 0, 2, 1 ], [ 3 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 5.0408163265306, 25.244897959184 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_code.scd b/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_mus_model.json b/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_mus_model.json new file mode 100644 index 0000000..cdac35c --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/61207e49_mus_model.json @@ -0,0 +1,141 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 2, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 7, -2, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 7, -1, 2, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 3 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -3, 7, -1, 0, -2, 2 ] ], 0 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -3, 7, -1, 0, -2, 2 ] ], 0.25 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 7, 0, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 7, 0, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 7, 0, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 3 ] ], 0.25 ] + ], + [ + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -6, 8, -1, 1, -2, 3 ], [ -5, 7, -1, 1, -2, 3 ] ], 0 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -6, 8, -1, 1, -2, 3 ], [ -5, 8, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -6, 9, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -6, 9, -1, 1, -2, 2 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 8, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 1 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 7, -2, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 1 ], [ -4, 7, -2, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 7, -1, 1, -1, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 1 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 7, -1, 1, -1, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -1, 2 ], [ -4, 7, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 7, -1, 1, -1, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 8, -1, 1, -2, 2 ], [ -4, 7, -2, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 1 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 3 ], [ -3, 6, -1, 1, -2, 1 ], [ -4, 7, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 3 ], [ -3, 6, -1, 1, -2, 1 ], [ -3, 5, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 3 ], [ -3, 6, -1, 1, -2, 1 ], [ -4, 7, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 1 ], [ -4, 7, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 1 ], [ -3, 6, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 6, -2, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -3, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -3, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -3, 2 ], [ -4, 7, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -3, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -5, 7, -1, 1, -3, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -3, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -5, 7, -1, 1, -3, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 5, -1, 0, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, 0, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 2, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 5, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], + [ [ -5, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], + [ [ -4, 5, -2, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], + [ [ -4, 5, -2, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ], + [ [ -5, 5, -1, 2, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ] ] +], +"cur_uid": "61207e49", +"ref_uid": "624f7439", +"order_seed": 716491, +"dur_seed": 454936, +"motifs_seed": 126393, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ], + [ [ 0 ], [ 1, 3, 2, 2, 3, 2, 1 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 0, 2 ], [ 1, 3, 3, 1, 1 ], [ ] ], + [ [ 1 ], [ 0, 2, 3, 2, 0, 3 ], [ ] ], + [ [ 1, 3 ], [ 0, 2, 0, 0, 0, 0 ], [ ] ], + [ [ 3, 1 ], [ 2, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_I.ly new file mode 100644 index 0000000..c6af1e7 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_I.ly @@ -0,0 +1,14 @@ +{ + { cis'2^\markup { \pad-markup #0.2 "-29"} dis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}[ e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] f'8^\markup { \pad-markup #0.2 "+41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}[ dis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] } + \bar "|" + { e''8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}[ dis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ dis''2 f''8^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}[ g''8^\markup { \pad-markup #0.2 "-39"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] } + \bar "|" + { ais'8^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ b'8^\markup { \pad-markup #0.2 "+15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }}] ais'4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} b'4^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ~ b'8[ cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] } + \bar "|" + { dis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}[ e''8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ e''8[ d''8^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ d''2 } + \bar "|" + { g'8^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ fis'8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↓" }}] ~ fis'8[ gis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] ~ gis'4 ~ gis'8[ a'8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { a'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_II.ly new file mode 100644 index 0000000..d08b37b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_II.ly @@ -0,0 +1,14 @@ +{ + { dis'8^\markup { \pad-markup #0.2 "-25"}[ e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] f'8^\markup { \pad-markup #0.2 "+41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }}[ gis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ gis'2 ~ } + \bar "|" + { gis'8[ ais'8^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}] b'8^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c''8^\markup { \pad-markup #0.2 "+43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}] b'8^\markup { \pad-markup #0.2 "+15"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↑" }}[ gis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}] ~ gis'4 } + \bar "|" + { g'4^\markup { \pad-markup #0.2 "-39"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} fis'8^\markup { \pad-markup #0.2 "+17"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}[ f'8^\markup { \pad-markup #0.2 "-21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] fis'8^\markup { \pad-markup #0.2 "+34"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 13↓" }}[ gis'8^\markup { \pad-markup #0.2 "+26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ais'8^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}[ b'8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] ~ } + \bar "|" + { b'4 cis''4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }} c''4^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} dis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}[ cis'8^\markup { \pad-markup #0.2 "-29"}] ~ } + \bar "|" + { cis'1 ~ } + \bar "|" + { cis'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_III.ly new file mode 100644 index 0000000..ce3d023 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_III.ly @@ -0,0 +1,14 @@ +{ + { gis2^\markup { \pad-markup #0.2 "-27"} gis''2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + \bar "|" + { dis'1^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} ~ } + \bar "|" + { dis'2. ~ dis'8[ e'8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}] } + \bar "|" + { c'2^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} ais8^\markup { \pad-markup #0.2 "+35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ a8^\markup { \pad-markup #0.2 "+23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ a4 } + \bar "|" + { gis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }}[ cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] ~ cis''2. ~ } + \bar "|" + { cis''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_IV.ly new file mode 100644 index 0000000..45e9d09 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/61207e49/lilypond/part_IV.ly @@ -0,0 +1,14 @@ +{ + { gis,2^\markup { \pad-markup #0.2 "-27"} gis2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { gis8[ ais8^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] b2^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} ais4^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }} ~ } + \bar "|" + { ais2 b8^\markup { \pad-markup #0.2 "-12"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ gis8^\markup { \pad-markup #0.2 "+26"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }}] gis4^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } + \bar "|" + { gis1 } + \bar "|" + { g8^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↓" }}[ fis8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] cis8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}[ dis8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}] f8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}[ gis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] a4^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }} } + \bar "|" + { ais1^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_code.scd b/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_mus_model.json b/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_mus_model.json new file mode 100644 index 0000000..835be59 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/624f7439_mus_model.json @@ -0,0 +1,141 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 3 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 0, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -4, 6, -1, 1, -3, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -5, 6, -1, 1, -1, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, -1, 0, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -4, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 2, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 6, -1, 1, -1, 2 ], [ -5, 6, -1, 2, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 7, -1, 1, -2, 2 ], [ -5, 6, -1, 2, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -6, 7, -1, 1, -2, 2 ], [ -5, 7, 0, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -6, 7, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -5, 6, 0, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 2, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0.25 ], + [ [ [ -5, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 6, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0 ], + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 0, -2, 2 ], [ -3, 5, -1, 1, -3, 2 ] ], 0 ], + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 0, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -2, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -3, 5, -2, 1, -2, 2 ] ], 0 ], + [ [ [ -5, 6, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 1, -3, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0 ], + [ [ [ -4, 4, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -5, 6, 0, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 5, -1, 1, -2, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ], + [ [ [ -4, 6, -1, 1, -3, 2 ], [ -3, 5, -1, 1, -2, 2 ], [ -4, 5, 0, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], + [ [ -3, 5, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], + [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ] +], +"cur_uid": "624f7439", +"ref_uid": "4f53a446", +"order_seed": 192987, +"dur_seed": 454936, +"motifs_seed": 709798, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ], + [ [ 0 ], [ 1, 3, 2, 2, 3, 2, 1 ], [ ] ], + [ [ 1, 0, 3 ], [ 2 ], [ ] ], + [ [ 0, 2 ], [ 1, 3, 3, 1, 1 ], [ ] ], + [ [ 1 ], [ 0, 2, 3, 2, 0, 3 ], [ ] ], + [ [ 1, 3 ], [ 0, 2, 0, 0, 0, 0 ], [ ] ], + [ [ 3, 1 ], [ 2, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_I.ly new file mode 100644 index 0000000..7901a68 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_I.ly @@ -0,0 +1,14 @@ +{ + { gis2^\markup { \pad-markup #0.2 "-27"} gis''2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} } + \bar "|" + { gis1^\markup { \pad-markup #0.2 "-27"} ~ } + \bar "|" + { gis2. ~ gis8[ a8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] } + \bar "|" + { gis'2^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} a'8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}[ g'8^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 11↓" }}] ~ g'4 } + \bar "|" + { a'8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ gis'2. ~ } + \bar "|" + { gis'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_II.ly new file mode 100644 index 0000000..79346aa --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_II.ly @@ -0,0 +1,14 @@ +{ + { cis'2^\markup { \pad-markup #0.2 "-29"} gis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}[ ais8^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}] c'8^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}[ cis'8^\markup { \pad-markup #0.2 "-29"}] } + \bar "|" + { dis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}[ e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}] ~ e'2 dis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}[ c''8^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] } + \bar "|" + { cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }}[ dis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] gis'4^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }} c'4^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ c'8[ cis'8^\markup { \pad-markup #0.2 "-29"}] } + \bar "|" + { f'8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}[ fis'8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] ~ fis'8[ e'8^\markup { \pad-markup #0.2 "-14"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}] ~ e'2 } + \bar "|" + { dis'8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }}[ f'8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] ~ f'8[ fis'8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}] ~ fis'4 ~ fis'8[ f'8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_III.ly new file mode 100644 index 0000000..f4cbb75 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_III.ly @@ -0,0 +1,14 @@ +{ + { a'8^\markup { \pad-markup #0.2 "-16"}[ gis'8^\markup { \pad-markup #0.2 "-27"}] a'8^\markup { \pad-markup #0.2 "+11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }}[ gis'8^\markup { \pad-markup #0.2 "-27"}] ~ gis'2 ~ } + \bar "|" + { gis'8[ cis'8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] d'8^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}[ dis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] cis'8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}[ c'8^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ~ c'4 } + \bar "|" + { cis'4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} dis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ f'8^\markup { \pad-markup #0.2 "-43"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] f'8^\markup { \pad-markup #0.2 "+41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}[ g'8^\markup { \pad-markup #0.2 "-39"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] gis'8^\markup { \pad-markup #0.2 "-27"}[ a'8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}] ~ } + \bar "|" + { a'4 ais'4^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↑" }} cis''4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} d''8^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}[ cis''8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ } + \bar "|" + { cis''1 ~ } + \bar "|" + { cis''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_IV.ly new file mode 100644 index 0000000..dc2b6a7 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/624f7439/lilypond/part_IV.ly @@ -0,0 +1,14 @@ +{ + { gis,2^\markup { \pad-markup #0.2 "-27"} cis''2^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { cis''8[ gis'8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ais,2^\markup { \pad-markup #0.2 "+4"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↓" }} c4^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { c2 cis8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}[ dis8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] cis4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }} ~ } + \bar "|" + { cis1 } + \bar "|" + { a8^\markup { \pad-markup #0.2 "-16"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}[ gis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}] g8^\markup { \pad-markup #0.2 "+19"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }}[ fis8^\markup { \pad-markup #0.2 "-31"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] cis'8^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-41"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] cis'4^\markup { \pad-markup #0.2 "-29"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} } + \bar "|" + { d'1^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_code.scd b/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_mus_model.json b/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_mus_model.json new file mode 100644 index 0000000..f07d71f --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/65120e88_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ] ], 0.25 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 0, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 1 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 0, 3, -1, 2 ], [ -6, 3, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "65120e88", +"ref_uid": "66b20499", +"order_seed": 837263, +"dur_seed": 378109, +"motifs_seed": 521249, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_I.ly new file mode 100644 index 0000000..e332e79 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 11↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'4^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} d'4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ } + \bar "|" + { d'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_II.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_III.ly new file mode 100644 index 0000000..03337bd --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { cis''4^\markup { \pad-markup #0.2 "-25"} c''4^\markup { \pad-markup #0.2 "-37"} cis''8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 13↑" }}[ d''8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}] f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ fis8^\markup { \pad-markup #0.2 "-10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↓" }}] } + \bar "|" + { g1^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_IV.ly new file mode 100644 index 0000000..0dca1f5 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/65120e88/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { cis8^\markup { \pad-markup #0.2 "-25"}[ c8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 3↑" }}] ~ c2 cis8^\markup { \pad-markup #0.2 "-25"}[ d8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] } + \bar "|" + { ais,1^\markup { \pad-markup #0.2 "+44"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_code.scd b/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_mus_model.json b/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_mus_model.json new file mode 100644 index 0000000..e6c59fc --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6522664c/6522664c_mus_model.json @@ -0,0 +1,85 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 1, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -2, 0, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -2, 0, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 2, 2, 1, 0 ], [ -3, 1, 3, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 1, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 3, 1, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], + [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], + [ [ -3, 2, 2, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], + [ [ -4, 2, 1, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], + [ [ -4, 3, 1, 2, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ] +], +"cur_uid": "6522664c", +"ref_uid": "4bf1af12", +"order_seed": 347999, +"dur_seed": 441379, +"motifs_seed": 667646, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.8 ], +"hd_exp": 8, +"hd_invert": 0, +"order": +[ + [ [ 2, 0 ], [ 3, 1 ], [ ] ], + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 2, 3, 1 ], [ 0 ], [ ] ], + [ [ 2, 0 ], [ 3, 1 ], [ ] ], + [ [ 1, 0, 2 ], [ 3 ], [ ] ], + [ [ 3 ], [ 1, 0, 2 ], [ ] ], + [ [ 2, 1 ], [ 0, 3 ], [ ] ], + [ [ 0, 2, 3 ], [ 1 ], [ ] ], + [ [ 2 ], [ 1, 3, 0 ], [ ] ], + [ [ 3, 2, 1 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_code.scd b/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_mus_model.json b/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_mus_model.json new file mode 100644 index 0000000..2a8636b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/66b20499_mus_model.json @@ -0,0 +1,96 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 4, -1, 2, -2, 3 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 5, -1, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -3, 4, -2, 2, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, -1, 2, -2, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, -1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 5, -1, 2, -2, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, -1, 2, -1, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -4, 4, 0, 1, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 5, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 1, -2, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 4, 0, 2, -2, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 2, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "66b20499", +"ref_uid": "50c2b0ad", +"order_seed": 837263, +"dur_seed": 582673, +"motifs_seed": 530509, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0, 2, 3 ], [ 1, 1, 1, 1 ], [ ] ], + [ [ 1 ], [ 3, 0, 2, 2, 2, 2 ], [ ] ], + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 0, 1, 1, 1 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_I.ly new file mode 100644 index 0000000..148c963 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_I.ly @@ -0,0 +1,10 @@ +{ + { dis'2^\markup { \pad-markup #0.2 "+38"} dis'2^\markup { \pad-markup #0.2 "+6"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 7↓" }} ~ } + \bar "|" + { dis'8[ f'8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }}] ~ f'2. ~ } + \bar "|" + { f'1 ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_II.ly new file mode 100644 index 0000000..3e62d03 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_II.ly @@ -0,0 +1,10 @@ +{ + { ais2^\markup { \pad-markup #0.2 "+40"} ~ ais8[ cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] a8^\markup { \pad-markup #0.2 "-11"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}[ g8^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] } + \bar "|" + { gis8^\markup { \pad-markup #0.2 "-23"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}[ ais8^\markup { \pad-markup #0.2 "-45"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 7↓" }}] c'2^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }} cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↓" }}[ d'8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}] } + \bar "|" + { ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] cis'4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} d'2^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } + \bar "|" + { d'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_III.ly new file mode 100644 index 0000000..e12cc1e --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_III.ly @@ -0,0 +1,10 @@ +{ + { c''8^\markup { \pad-markup #0.2 "-22"}[ ais'8^\markup { \pad-markup #0.2 "+40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] c''8^\markup { \pad-markup #0.2 "-49"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }}] ~ cis''2 ~ } + \bar "|" + { cis''4 c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ cis''8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 13↑" }}] c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ ais'8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↓" }}] gis'4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 5↑" }} } + \bar "|" + { ais'4^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }}] d''4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} cis''8^\markup { \pad-markup #0.2 "+2"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↑" }}[ c''8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↑" }}] ~ } + \bar "|" + { c''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_IV.ly new file mode 100644 index 0000000..845aaae --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/66b20499/lilypond/part_IV.ly @@ -0,0 +1,10 @@ +{ + { a'2^\markup { \pad-markup #0.2 "-11"} g'2^\markup { \pad-markup #0.2 "+24"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }} ~ } + \bar "|" + { g'4 gis'8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ f4 ais,4^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 3↓" }} ~ } + \bar "|" + { ais,2 b,8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↓" }}[ d8^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ d4 } + \bar "|" + { cis1^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_code.scd b/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_mus_model.json b/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_mus_model.json new file mode 100644 index 0000000..d52f251 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/67633b5a_mus_model.json @@ -0,0 +1,49 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.75 ], + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -8, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ] ], 2.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ] +], +"cur_uid": "67633b5a", +"ref_uid": "536cac90", +"order_seed": 701357, +"dur_seed": 777611, +"motifs_seed": 941681, +"entrances_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0.78, 0, 0, 2, 2, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 1, 2, 0, 0 ], [ ] ], + [ [ 3 ], [ 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 4, 4.030612244898 ], +"passages_size": [ 0, 5 ], +"motif_edited": "true", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_I.ly new file mode 100644 index 0000000..c42c22c --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_I.ly @@ -0,0 +1,8 @@ +{ + { ais'1^\markup { \pad-markup #0.2 "-40"} } + \bar "|" + { d''1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { d''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_II.ly new file mode 100644 index 0000000..51ae8ce --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_II.ly @@ -0,0 +1,8 @@ +{ + { dis''4^\markup { \pad-markup #0.2 "-42"} ~ dis''8[ e''8^\markup { \pad-markup #0.2 "+8"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] ~ e''2 } + \bar "|" + { d''1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} ~ } + \bar "|" + { d''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_III.ly new file mode 100644 index 0000000..0d6d185 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_III.ly @@ -0,0 +1,8 @@ +{ + { cis'1^\markup { \pad-markup #0.2 "+46"} } + \bar "|" + { a'1^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }} ~ } + \bar "|" + { a'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_IV.ly new file mode 100644 index 0000000..58c7caf --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/67633b5a/lilypond/part_IV.ly @@ -0,0 +1,8 @@ +{ + { e,4^\markup { \pad-markup #0.2 "+8"} ~ e,8[ e8^\markup { \pad-markup #0.2 "+8"}] fis8^\markup { \pad-markup #0.2 "-27"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}[ g8^\markup { \pad-markup #0.2 "+28"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }}] a8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 21↑" }}[ a,8^\markup { \pad-markup #0.2 "+32"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 21↑" }}] } + \bar "|" + { d1^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { d1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_code.scd b/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_mus_model.json b/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_mus_model.json new file mode 100644 index 0000000..aabe8b9 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6975a80a/6975a80a_mus_model.json @@ -0,0 +1,61 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 2, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 2, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.75 ], + [ [ [ -5, 3, 1, 2, -2, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 0, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -8, 5, 1, 3, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -3, 3, 1, 2, -2, 2 ], [ -4, 3, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 3, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ] ], 2.25 ] + ] + ] +], +"last_changes": +[ + [ [ -1, 1, 1, 0, -2, 2 ], [ -1, -1, 1, 0, -2, 2 ], [ -1, 0, 1, 1, -2, 2 ], [ 0, 0, 1, 0, -2, 2 ] ], + [ [ -1, 1, 1, 0, -2, 2 ], [ -1, -1, 1, 0, -2, 2 ], [ -1, 0, 1, 0, -2, 3 ], [ 0, 0, 1, 0, -2, 2 ] ], + [ [ -1, 1, 1, 0, -2, 2 ], [ -1, -1, 1, 0, -2, 2 ], [ -1, 0, 1, 0, -2, 3 ], [ -1, 0, 1, -1, -2, 3 ] ], + [ [ -1, 1, 1, 0, -2, 2 ], [ -1, -1, 1, 0, -2, 2 ], [ -1, 0, 1, 0, -2, 3 ], [ -1, 0, 1, 0, -2, 2 ] ], + [ [ -1, 1, 1, 0, -2, 2 ], [ -1, -1, 1, 0, -2, 2 ], [ -1, 0, 1, 0, -2, 3 ], [ -2, 2, 1, 0, -2, 2 ] ] +], +"cur_uid": "6975a80a", +"ref_uid": "536cac90", +"order_seed": 354287, +"dur_seed": 728320, +"motifs_seed": 836040, +"entrances_probs_vals": [ 0.78, 0, 10, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 10, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 10, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46913580246914, 0.67045454545455, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 0 ], [ 2, 1, 3, 3 ], [ ] ], + [ [ 0, 1, 2 ], [ 3, 3, 3 ], [ ] ], + [ [ 3 ], [ 1, 2, 0, 1, 2, 2 ], [ ] ], + [ [ 1 ], [ 3, 2, 0 ], [ ] ], + [ [ 3 ], [ 0, 1, 2, 1 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 0, 1, 0, 0 ], [ ] ], + [ [ 2, 1, 0 ], [ 3, 3 ], [ ] ], + [ [ 1, 3 ], [ 2, 0 ], [ ] ], + [ [ 1, 3 ], [ 2, 0, 0 ], [ ] ], + [ [ 0, 3, 2 ], [ 1, 1, 1, 1, 1 ], [ ] ], + [ [ 2 ], [ 1, 3, 0, 0, 3, 3, 0 ], [ ] ], + [ [ 1, 3 ], [ 0, 2 ], [ ] ], + [ [ 3 ], [ 2, 1, 0, 2, 1, 2 ], [ ] ], + [ [ 1, 0, 2 ], [ 3, 3, 3 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "true", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_code.scd b/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_mus_model.json b/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_mus_model.json new file mode 100644 index 0000000..d66bfdd --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/6db2efcc/6db2efcc_mus_model.json @@ -0,0 +1,86 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 4, 3, 1, 0 ], [ -6, 3, 3, 4, 1, 0 ], [ -6, 2, 3, 4, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -6, 3, 3, 4, 1, 0 ], [ -6, 2, 3, 4, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 3, 1, 0 ], [ -6, 2, 3, 4, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 3, 1, 0 ], [ -4, 2, 3, 3, 0, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 3, 1, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -6, 2, 3, 4, 2, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 3, 1, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -6, 2, 3, 4, 2, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -5, 2, 3, 3, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ] + ], + [ + [ [ [ -6, 2, 3, 4, 2, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 2, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 2, 0 ], [ -6, 2, 3, 3, 2, 0 ], [ -4, 1, 3, 2, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 2, 2, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -4, 1, 3, 2, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 3, 2, 2, 1 ], [ -5, 2, 3, 2, 2, 0 ], [ -4, 1, 3, 2, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -5, 2, 3, 2, 2, 1 ], [ -5, 2, 3, 2, 2, 0 ], [ -3, 2, 3, 1, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 3, 1, 1, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -3, 2, 3, 1, 2, 0 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 3, 1, 1, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -3, 2, 3, 2, 2, -1 ], [ -4, 2, 3, 2, 2, 0 ] ], 1 ], + [ [ [ -3, 2, 3, 1, 1, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -3, 2, 3, 2, 2, -1 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -3, 2, 3, 1, 1, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ], + [ [ [ -3, 2, 3, 1, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 3, 2, 1, -1 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -3, 2, 3, 1, 1, 0 ], [ -5, 2, 3, 2, 2, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], + [ [ -3, 2, 3, 1, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], + [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -5, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], + [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 4, 0, 1, 0 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ], + [ [ -4, 2, 4, 2, 1, 0 ], [ -3, 2, 3, 2, 1, -1 ], [ -4, 2, 3, 2, 1, 0 ], [ -3, 2, 4, 1, 1, 0 ] ] +], +"cur_uid": "6db2efcc", +"ref_uid": "521654f8", +"order_seed": 213803, +"dur_seed": 264333, +"motifs_seed": 980711, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.5 ], +"hd_exp": 5, +"hd_invert": 0, +"order": +[ + [ [ 0 ], [ 3, 1, 2 ], [ ] ], + [ [ 0, 1, 2 ], [ 3 ], [ ] ], + [ [ 1 ], [ 3, 0, 2 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ], + [ [ 3, 1 ], [ 0, 2 ], [ ] ], + [ [ 1, 2, 3 ], [ 0 ], [ ] ], + [ [ 1, 0 ], [ 2, 3 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 0, 1, 3 ], [ 2 ], [ ] ], + [ [ 3, 2, 0 ], [ 1 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_code.scd b/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_mus_model.json b/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_mus_model.json new file mode 100644 index 0000000..6d0340b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7276dc78/7276dc78_mus_model.json @@ -0,0 +1,158 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 6, 4, -1, 1, 2 ], [ -5, 5, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], 1 ], + [ [ [ -6, 6, 4, -1, 0, 2 ], [ -5, 5, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 1, 2 ] ], 1 ], + [ [ [ -6, 6, 4, -1, 0, 2 ], [ -5, 5, 4, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -7, 6, 5, 0, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 4, -1, 0, 2 ], [ -5, 6, 3, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -7, 6, 5, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 4, -1, 0, 2 ], [ -5, 6, 3, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -7, 6, 4, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 3, 0, 0, 2 ], [ -5, 6, 3, 0, 0, 2 ], [ -6, 6, 4, 0, 0, 2 ], [ -7, 6, 4, 1, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 3, 0, 0, 2 ], [ -5, 6, 3, 0, 0, 2 ], [ -5, 6, 2, 0, 0, 2 ], [ -7, 6, 4, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 3, 0, 0, 2 ], [ -5, 6, 3, 0, 0, 2 ], [ -5, 6, 2, 0, 0, 2 ], [ -6, 7, 3, 0, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 3, 0, 0, 2 ], [ -5, 6, 2, -1, 0, 2 ], [ -5, 6, 2, 0, 0, 2 ], [ -6, 7, 3, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -5, 6, 2, -1, 0, 2 ], [ -5, 6, 2, 0, 0, 2 ], [ -6, 7, 3, 0, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -5, 6, 2, -1, 0, 2 ], [ -6, 7, 2, 1, 0, 2 ], [ -6, 7, 3, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 7, 2, 1, 0, 2 ], [ -6, 7, 3, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 7, 2, 1, 0, 2 ], [ -5, 6, 2, 1, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -5, 6, 2, 1, -1, 1 ], [ -5, 6, 2, 1, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 6, 2, 2, -1, 2 ], [ -5, 6, 2, 1, -1, 2 ] ], 1 ], + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 6, 2, 2, -1, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 6, 2, 1, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -7, 5, 2, 3, 0, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ], + [ [ [ -8, 6, 2, 2, 0, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -7, 5, 2, 3, 0, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ], + [ [ [ -8, 6, 2, 2, 0, 2 ], [ -7, 5, 2, 2, -1, 2 ], [ -7, 5, 2, 3, 0, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -7, 5, 2, 2, -1, 2 ], [ -7, 5, 2, 3, 0, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -7, 5, 2, 2, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ], + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -6, 6, 2, 2, -2, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 5, 2, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 2, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 2, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 6, 2, 2, -1, 2 ] ], 1 ], + [ [ [ -6, 5, 1, 2, 0, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 6, 2, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 1, 2, 0, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 5, 0, 2, 0, 2 ], [ -6, 6, 2, 2, -1, 2 ] ], 1 ], + [ [ [ -6, 5, 1, 2, 0, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 5, 0, 2, 0, 2 ], [ -6, 6, 1, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 1, 2, 0, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 6, 1, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 5, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -7, 6, 2, 2, 0, 2 ], [ -6, 6, 1, 2, 0, 2 ] ], 1 ], + [ [ [ -6, 5, 1, 3, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ], + [ [ [ -7, 5, 1, 2, -2, 2 ], [ -7, 5, 1, 3, -2, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -7, 5, 1, 3, -2, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -7, 5, 1, 3, -2, 2 ], [ -5, 5, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ], + [ [ [ -6, 5, 1, 2, -2, 2 ], [ -7, 5, 1, 3, -2, 2 ], [ -5, 5, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ], + [ [ [ -6, 5, 1, 2, -2, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -5, 5, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 5, 0, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -5, 5, 1, 1, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ], + [ [ [ -8, 5, 0, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 6, 1, 2, -2, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -8, 4, 1, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ] ], 1 ], + [ [ [ -8, 4, 1, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ] ], 1 ] + ], + [ + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 4, -2, 2 ] ], 1 ], + [ [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -2, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 4, -2, 2 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -8, 4, 1, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -7, 6, 1, 3, -1, 2 ] ], + [ [ -8, 4, 1, 3, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ] ], + [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 3, -1, 2 ] ], + [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 3, -1, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 4, -2, 2 ] ], + [ [ -9, 5, 1, 4, -1, 2 ], [ -7, 5, 1, 4, -2, 2 ], [ -6, 6, 1, 2, -1, 2 ], [ -6, 5, 1, 4, -2, 2 ] ] +], +"cur_uid": "7276dc78", +"ref_uid": "531df78c", +"order_seed": 350501, +"dur_seed": 664373, +"motifs_seed": 429600, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0, 0, 0.069958847736626, 0, 0.31481481481481, 0, 0.38271604938272, 0.13068181818182, 0.45884773662551, 0.14772727272727, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.79218106995885, 0, 1, 0 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.45 ], +"hd_exp": 3.87, +"hd_invert": 0, +"order": +[ + [ [ 2 ], [ 1, 0, 3 ], [ ] ], + [ [ 2 ], [ 1, 3, 0 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ], + [ [ 2, 3 ], [ 1, 0 ], [ ] ], + [ [ 0 ], [ 2, 1, 3 ], [ ] ], + [ [ 3, 1, 0 ], [ 2 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ], + [ [ 1, 3, 2 ], [ 0 ], [ ] ], + [ [ 3, 0 ], [ 2, 1 ], [ ] ], + [ [ 0, 2, 3 ], [ 1 ], [ ] ], + [ [ 0, 2, 1 ], [ 3 ], [ ] ], + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 1, 0 ], [ 2, 3 ], [ ] ], + [ [ 1, 3, 0 ], [ 2 ], [ ] ], + [ [ 1, 3 ], [ 0, 2 ], [ ] ], + [ [ 2, 1, 3 ], [ 0 ], [ ] ], + [ [ 2 ], [ 3, 1, 0 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ], + [ [ 1, 3 ], [ 0, 2 ], [ ] ], + [ [ 3, 1, 2 ], [ 0 ], [ ] ], + [ [ 2, 0, 1 ], [ 3 ], [ ] ], + [ [ 1, 2 ], [ 0, 3 ], [ ] ], + [ [ 3, 2, 1 ], [ 0 ], [ ] ], + [ [ 2, 0 ], [ 3, 1 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 25.244897959184, 25.244897959184 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/736745da/736745da_code.scd b/resources/string_quartet_3_rise_coda_only/736745da/736745da_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/736745da_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/736745da/736745da_mus_model.json b/resources/string_quartet_3_rise_coda_only/736745da/736745da_mus_model.json new file mode 100644 index 0000000..bf97af4 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/736745da_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 5, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 5, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -2, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -6, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, 0, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "736745da", +"ref_uid": "567a9375", +"order_seed": 837263, +"dur_seed": 409865, +"motifs_seed": 622222, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_I.ly new file mode 100644 index 0000000..bd9bb10 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}[ b8^\markup { \pad-markup #0.2 "+10"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↓" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↑" }}] ais'4^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }} c''4^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 1↑" }} ~ } + \bar "|" + { c''1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_II.ly new file mode 100644 index 0000000..75b08b0 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { ais4^\markup { \pad-markup #0.2 "-40"} gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↑" }} ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}] cis'8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 5↓" }}[ c'8^\markup { \pad-markup #0.2 "-37"}] } + \bar "|" + { f1^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_III.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_IV.ly new file mode 100644 index 0000000..bf1047b --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/736745da/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { ais,2.^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 11↑" }} c8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ ais,8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 3↓" }}] ~ } + \bar "|" + { ais,8[ f,8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }}] ~ f,2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_code.scd b/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_code.scd new file mode 100644 index 0000000..e1a9d92 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_code.scd @@ -0,0 +1,992 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_mus_model.json b/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_mus_model.json new file mode 100644 index 0000000..8421367 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/767e70f0_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -7, 6, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -7, 6, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 4, 1, 4, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 4, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 4, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 1, 4, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 1, 4, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 1, 4, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "767e70f0", +"ref_uid": "4dd2a130", +"order_seed": 837263, +"dur_seed": 452719, +"motifs_seed": 173645, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.46296296296296, 0.39204545454545, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_I.ly b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_I.ly new file mode 100644 index 0000000..07fa029 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_I.ly @@ -0,0 +1,6 @@ +{ + { f'1^\markup { \pad-markup #0.2 "-38"} ~ } + \bar "|" + { f'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_II.ly b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_II.ly new file mode 100644 index 0000000..e7ebc1a --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_II.ly @@ -0,0 +1,6 @@ +{ + { ais8^\markup { \pad-markup #0.2 "-40"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}[ gis8^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }}] ais8^\markup { \pad-markup #0.2 "+13"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 11↑" }}[ c'8^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 1↑" }}] cis'4^\markup { \pad-markup #0.2 "-25"} d'4^\markup { \pad-markup #0.2 "+30"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 7↑" }} ~ } + \bar "|" + { d'1} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_III.ly b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_III.ly new file mode 100644 index 0000000..95e6e0a --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_III.ly @@ -0,0 +1,6 @@ +{ + { c'4^\markup { \pad-markup #0.2 "-37"} cis'4^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }} f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}[ g8^\markup { \pad-markup #0.2 "-35"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "IV"\normal-size-super " 3↑" }}] gis4^\markup { \pad-markup #0.2 "+48"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↑" }} } + \bar "|" + { ais8^\markup { \pad-markup #0.2 "-40"}[ gis8^\markup { \pad-markup #0.2 "+21"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 13↓" }}] ~ gis2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_IV.ly b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_IV.ly new file mode 100644 index 0000000..85ee8f1 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/767e70f0/lilypond/part_IV.ly @@ -0,0 +1,6 @@ +{ + { c''2.^\markup { \pad-markup #0.2 "-37"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "III"\normal-size-super " 1↑" }} ~ c''8[ cis''8^\markup { \pad-markup #0.2 "-25"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 5↓" }}] } + \bar "|" + { c''8^\markup { \pad-markup #0.2 "-1"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "II"\normal-size-super " 7↑" }}[ f8^\markup { \pad-markup #0.2 "-38"}_\markup { \lower #3 \pad-markup #0.2 \concat{ "I"\normal-size-super " 1↑" }}] ~ f2.} +\bar "||" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_code.scd b/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_mus_model.json b/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_mus_model.json new file mode 100644 index 0000000..078670e --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/78a94ed1/78a94ed1_mus_model.json @@ -0,0 +1,90 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -5, 1, 5, 2, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -3, 0, 5, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -3, 0, 5, 1, 0, 2 ], [ -4, 1, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 1, 4, 2, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ], [ -4, 1, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ], [ -4, 1, 5, 1, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -5, 1, 6, 1, 0, 2 ], [ -4, 1, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -5, 1, 6, 1, 0, 2 ], [ -4, 1, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -5, 1, 6, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -6, 1, 5, 1, 0, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ], + [ [ [ -7, 2, 5, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -4, 2, 5, 1, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 2, 5, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 2, 5, 1, 0, 2 ], [ -5, 1, 5, 1, 1, 2 ] ], 1 ], + [ [ [ -7, 2, 5, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -5, 1, 5, 1, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -7, 2, 5, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -3, 1, 4, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 2, 5, 1, 0, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -3, 1, 4, 0, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -3, 1, 4, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -4, 1, 4, 1, 0, 2 ], [ -3, 2, 4, 0, 0, 2 ] ], 1 ], + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -3, 2, 4, 0, 0, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -5, 2, 4, 2, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], 1 ], + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], 1 ], + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 3 ], [ -6, 2, 4, 2, 1, 2 ] ], 1 ] + ], + [ + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 2, 1, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], 1 ], + [ [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 2, 1, 2 ], [ -6, 3, 4, 2, 1, 2 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -6, 2, 4, 1, 1, 2 ], [ -4, 2, 4, 1, 0, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], + [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 0, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], + [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 1, 1, 3 ], [ -6, 2, 4, 2, 1, 2 ] ], + [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 2, 1, 2 ], [ -6, 2, 4, 2, 1, 2 ] ], + [ [ -6, 2, 4, 1, 1, 2 ], [ -5, 3, 4, 1, 1, 2 ], [ -5, 2, 4, 2, 1, 2 ], [ -6, 3, 4, 2, 1, 2 ] ] +], +"cur_uid": "78a94ed1", +"ref_uid": "4e9f1dcc", +"order_seed": 418736, +"dur_seed": 167372, +"motifs_seed": 741164, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.2 ], +"hd_exp": 2, +"hd_invert": 0, +"order": +[ + [ [ 1, 0 ], [ 3, 2 ], [ ] ], + [ [ 0 ], [ 3, 2, 1 ], [ ] ], + [ [ 0 ], [ 2, 1, 3 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 0, 1 ], [ 3, 2 ], [ ] ], + [ [ 1, 2 ], [ 3, 0 ], [ ] ], + [ [ 1 ], [ 0, 3, 2 ], [ ] ], + [ [ 2, 1, 0 ], [ 3 ], [ ] ], + [ [ 0 ], [ 3, 1, 2 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_code.scd b/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_mus_model.json b/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_mus_model.json new file mode 100644 index 0000000..6d71828 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/793d1587/793d1587_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -7, 5, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 4, 1, 2, -1, 3 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 2, -1, 3 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 2, -1, 3 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "793d1587", +"ref_uid": "767e70f0", +"order_seed": 197037, +"dur_seed": 579646, +"motifs_seed": 145432, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3 ], [ 1, 2, 0, 2, 2, 1, 2 ], [ ] ], + [ [ 0, 3 ], [ 1, 2, 1 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ], + [ [ 3, 2 ], [ 0, 1, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 14.132653061224, 14.132653061224 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_code.scd b/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_mus_model.json b/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_mus_model.json new file mode 100644 index 0000000..14cc626 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7c414d40/7c414d40_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 3, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 3, 2, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 3, 2, 2, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 1, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 3, 1, 1, -1, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -4, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -4, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 2, -2, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 1 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 0, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, 0, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "7c414d40", +"ref_uid": "793d1587", +"order_seed": 298820, +"dur_seed": 341195, +"motifs_seed": 997218, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 0.21, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3, 0 ], [ 2, 1, 1, 1, 1, 2 ], [ ] ], + [ [ 3, 2 ], [ 1, 0, 0, 1, 0 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 4.030612244898, 4.030612244898 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_code.scd b/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_code.scd new file mode 100644 index 0000000..d8f0e14 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_code.scd @@ -0,0 +1,994 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + //[chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + //[minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + /* + noSilentIns = (popSize - noSusIns).rand.clip(0, 1); + noProgIns = popSize - noSusIns - noSilentIns; + */ + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + //prog = ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}); + + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + //candidates.select({arg item; (item ++ voices).asSet.size >= 4}); + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + //recentlySoundedScore = inclusionScore.value(lastXChanges.flatten.collect({arg item; item.drop(1)}), candidate.drop(1), 0.01); + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}).postln; + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + nProbs.round(0.001).postln; + [candidates, nProbs.round(0.001)].flop.postln; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_mus_model.json b/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_mus_model.json new file mode 100644 index 0000000..50307f9 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7e833361/7e833361_mus_model.json @@ -0,0 +1,65 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -6, 4, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -8, 6, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -4, 3, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -7, 6, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -7, 6, 1, 2, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 4, 1, 1, -1, 2 ], [ -5, 5, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -5, 4, 1, 1, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], + [ [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ] +], +"cur_uid": "7e833361", +"ref_uid": "793d1587", +"order_seed": 986035, +"dur_seed": 143722, +"motifs_seed": 256606, +"entrances_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"passages_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"exits_probs_vals": [ 0.78, 0, 0, 0, 1.02, 0.0098039215686275, 0, 0.20915032679739, 0, 0.24183006535948, 0.82432432432432, 0.28758169934641, 0, 1, 0 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1453 ], [ -702, 1694 ], [ -702, 1973 ] ], +"step_probs_vals": [ -1200, 1200, 0, 0, 0.41358024691358, 0.0056818181818177, 0.45884773662551, 0.5, 0.52057613168724, 0, 0.56378600823045, 0.85795454545455, 0.60082304526749, 0, 1, 0 ], +"passages_weights": [ 1, 0.15, 0.43, 1, 1 ], +"hd_exp": 10, +"hd_invert": 0, +"order": +[ + [ [ 3, 0 ], [ 2, 1, 1, 1, 1, 2 ], [ ] ], + [ [ 3, 2 ], [ 1, 0, 0, 1, 0 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ], + [ [ 3 ], [ 2, 0, 1 ], [ ] ] +], +"sus_weights": [ 0.7, 0.48, 0.49 ], +"order_size": [ 4, 4.030612244898 ], +"passages_size": [ 0, 5 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_code.scd b/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_code.scd new file mode 100644 index 0000000..42b64ff --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_code.scd @@ -0,0 +1,981 @@ +( +// helper funcs +var hsArrayToCents, pDist, hdSum, hsChordalDistance, hsArrayToFreq; + +// score funcs +var isInRange, spacingScore, rangeScore, intervalScore, inclusionScore; + +// subroutines +var genTuples, initVoices, genOrders, genSubMotif, updateVoices, genDurFunc, genStepFunc; + +// primary routines +var genMotif, genSecondarySeq; + +// audition funcs +var genPatterns, genMidiPatterns; + +// resource management funcs +var seedFunc, genUID, writeResources, stringifyToDepth, setSeeds, sanityCheck, +msgInterpret, loadLedgerFile, loadLedgerJSON, loadModelFile, loadModelJSON, +setGlobalVars, globalVarsToDict, saveLedger; + +// model vars +//(model and global vars mostly set by OSC funcs +var seq, lastXChanges, +curUID, refUID, orderSeed, durSeed, motifSeed, +entrancesProbVals, passagesProbVals, exitsProbVals, +ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, +orders, susWeights, orderSize, passagesSize, +motifEdited, orderEdited; + +// model aux vars +var entrancesDurFunc, passagesDurFunc, exitsDurFunc, stepFunc; + +// other global vars +var popSize, exPath, dir, primes, dims, tuples, +group, player, resourceDir, ledgerPath, ledger, currentlyPlayingUID, +nameSpaces; + +// install JSON quark (not used) +/* +if(Quarks.isInstalled("JSONlib").not, { + Quarks.install("https://github.com/musikinformatik/JSONlib.git"); + thisProcess.recompile; + //HelpBrowser.openHelpFor("Classes/JSONlib"); +}); +*/ + + +//------helper funcs + +hsArrayToCents = { + arg hsArray; + hsArray.collect({arg dist, p; dist * 1200 * log2(primes[p][0]/primes[p][1])}).sum +}; + +pDist = { + arg array1, array2, signed = false; + var pDistance; + pDistance = hsArrayToCents.value(array2) - hsArrayToCents.value(array1); + if(signed, {pDistance}, {abs(pDistance)}) +}; + +hdSum = { + arg hsArrays; + var size, distances, mean; + size = hsArrays.size; + distances = (size - 1).collect({arg i; + ((i + 1)..(size - 1)).collect({arg j; + abs(hsArrays[i] - hsArrays[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsChordalDistance = { + arg hsArrays1, hsArrays2; + var size, distances, mean; + size = hsArrays1.size; + distances = hsArrays1.size.collect({arg i; + hsArrays2.size.collect({arg j; + abs(hsArrays1[i] - hsArrays2[j]).collect({arg dist, p; dist * log2(primes[p].product)}).sum + }); + }).flat; + mean = distances.sum / distances.size; + distances.sum + //mean + ((1 / sqrt((pow(distances - mean, 2)).sum / distances.size)) * mean) +}; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +//------score funcs + +/* +isInRange = { + arg hsArray, min, max; + var cents; + cents = hsArrayToCents.value(hsArray); + (cents >= min) && (cents <= max) +}; +*/ + +spacingScore = { + arg hsArrays, min; + var centsArray; + centsArray = hsArrays.collect({arg hsArray; hsArrayToCents.value(hsArray)}).sort({arg a, b; a < b}); + centsArray.differentiate.drop(1).collect({arg pDistance; if(pDistance >= min, {1}, {0.01})}).sum; +}; + +rangeScore = { + arg hsArray1, hsArray2, min, max, low, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + if((pDistance >= min) && (pDistance <= max), {1}, {low}); +}; + +/* +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = false; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + stepFunc.value(pDistance) +}; +*/ + +intervalScore = { + arg hsArray1, hsArray2, mean, sd, signed = true; + var pDistance; + pDistance = pDist.value(hsArray1, hsArray2, signed); + //pDistance.gaussCurve(1, mean, sd) + //if(pDistance >= 0, {stepFunc.value(abs(pDistance))}, {0.01}); + stepFunc.value(pDistance) +}; + +inclusionScore = { + arg array, test, min = 0.01; + if(array.collect({arg v; v.hash}).includes(test.hash), {min}, {1}); +}; + + +//------subroutines + +genTuples = { + var tuples; + tuples = dims.collect({[-1, 0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum <= 1) && (tuple[0] == 0)}); + //tuples = dims.collect({[0, 1]}).allTuples.select({arg tuple; (abs(tuple.drop(1)).sum == 1) && (tuple[0] == 0)}); + tuples = tuples ++ tuples.collect({arg tuple; [-3, -2, -1, 1, 2, 3].collect({arg octTrans; tuple.deepCopy.put(0, octTrans)})}).flatten; +}; + +initVoices = { + var init, voicesInit; + voicesInit = popSize.collect({dims.collect({0})}); + /* + voicesInit = [dims.collect({0})]; + (popSize - 1).do({ + arg rep, new; + rep = dims.rand; + new = voicesInit.last.deepCopy; + new[rep] = new[rep] + [-1, 1].choose(); + voicesInit = voicesInit.add(new); + }); + */ + voicesInit.deepCopy; +}; + +genDurFunc = {arg chordProb, minPad, maxPad, minDur, maxDur, envData, seed; + var env, pTable, durFunc; + env = Env.pairs([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).asSignal(256).asList.asArray; + pTable = env.asRandomTable; + [chordProb, minPad, maxPad, minDur, maxDur, envData].postln; + durFunc = {arg allowChord, pad = false; + var res; + res = if(allowChord.not, { + pTable.tableRand * (maxDur - minDur) + minDur + }, { + if(1.0.rand < chordProb, {0}, {pTable.tableRand * (maxDur - minDur) + minDur}); + }).round(0.125); + if(pad, {res = res + rrand(minPad.asFloat, maxPad.asFloat).round(0.125)}); + if(res.asInteger == res, {res = res.asInteger}); + res + }; + seedFunc.value(durFunc, seed); +}; + +genStepFunc = {arg minStep, maxStep, envData, seed; + var envDataNorm, env, pTable, stepFunc; + [minStep, maxStep, envData].postln; + envDataNorm = ([[0, 0]] ++ envData.clump(2) ++ [[1, 0]]).flop; + envDataNorm = [envDataNorm[0].normalize(minStep, maxStep), envDataNorm[1]].flop; + env = Env.pairs(envDataNorm); + stepFunc = {arg pDist; + env.at(pDist).clip(0.001, 1); + }; + seedFunc.value(stepFunc, seed); +}; + +genOrders = {arg minMotifLength = 1, maxMotifLength = 5, minProgLength = 0, maxProgLength = 5; + ((maxMotifLength.asInteger - minMotifLength.asInteger).rand + minMotifLength.asInteger).collect({ + var noProgIns, noSusIns, noSilentIns, prog, sus, silent, order; + noSusIns = [1, 2, 3].wchoose(susWeights.normalizeSum); + //noProgIns = (popSize - noSusIns).rand + 1; + noProgIns = (popSize - noSusIns); + noSilentIns = popSize - noSusIns - noProgIns; + + # prog, sus, silent = (0..(popSize-1)).scramble.clumps([noProgIns, noSusIns, noSilentIns]); + + prog = (prog.scramble ++ ((maxProgLength.asInteger - minProgLength.asInteger).rand + minProgLength.asInteger).collect({prog.choose}).scramble); + if(silent == nil, {silent = []}); + [sus.scramble, prog, silent.scramble] + }); +}; + +updateVoices = {arg ins, sus; + var voices, candidates, nWeights, nProbs, sel; + + voices = lastXChanges.deepCopy.last; + + candidates = sus.collect({arg v; tuples.collect({arg t; voices[v] + t})}).flatten; + candidates = difference(candidates.asSet, voices.asSet).asList; + nProbs = candidates.collect({arg candidate; + var stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore; + + //stepScore = intervalScore.value(voices[ins], candidate, 30, 400, 0.1); + stepScore = intervalScore.value(voices[ins], candidate, 100, 100); + recentlySoundedScore = inclusionScore.value(lastXChanges.flop[ins], candidate, 0.01); + + + + /* + if(rangeScore.value(candidate.collect({0}), voices[ins], ranges[ins][1] - 500, ranges[ins][1], 0, true) == 1, { + isInRangeScore = 1 - rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0] + 500, ranges[ins][1] - 500, 0, true); + isInRangeScore = isInRangeScore * rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true) + }, { + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + }); + */ + + + isInRangeScore = rangeScore.value(candidate.collect({0}), candidate, ranges[ins][0], ranges[ins][1], 0, true); + //old way - worked but actually by accident (I think) + //isInRangeScore = rangeScore.value(candidate, candidate.collect({0}), ranges[ins][0], ranges[ins][1], 0, true); + + + regScore = spacingScore.value(voices.deepCopy.put(ins, candidate), 300); + hdScore = pow(hdSum.value(voices.deepCopy.put(ins, candidate)), hdExp); + if(hdInvert == 0, {hdScore = 1/hdScore}); + //maybe what you want here is a vector to another root and then favoring movement towards it. + //distScore = pow(hsChordalDistance.value(voices, voices.put(ins, candidate)), 2); + + [stepScore, recentlySoundedScore, isInRangeScore, regScore, hdScore] + }); + + nWeights = passagesWeights; + + //this handles nWeights of 0; mainly for testing + nProbs = nProbs.flop.select({arg scores, s; nWeights[s] != 0}).flop; + nWeights = nWeights.select({arg weight; weight != 0}); + nProbs = nProbs.flop.collect({arg scores, s; + if(scores.sum == 0, {scores}, {scores.normalizeSum * nWeights[s]}) + }); + nProbs = nProbs.flop.collect({arg scores, s; scores.product}).normalizeSum; + + sel = candidates.wchoose(nProbs); + + voices[ins] = sel; + lastXChanges = lastXChanges.add(voices).keep(-5); +}; + +genSubMotif = {arg order, orderIndex, lastState, repeatLast = false, startFromLast = false, isLastOrder = false; + var sus, prog, silent, flatOrder, res, isInChord, allowChord, pad, lastXChangesHold, voices, adder; + # sus, prog, silent = order; + flatOrder = silent ++ sus ++ prog; + lastXChangesHold = lastXChanges.deepCopy; + voices = lastState.deepCopy; + isInChord = popSize.collect({false}); + allowChord = false; + pad = false; + res = []; + "------generating motif".postln; + //need to figure out here if voices move between motifs + flatOrder.do({arg ins, i; + + if(prog.includes(ins) && repeatLast.not, {updateVoices.value(ins, sus)}); + adder = if(silent.includes(ins), {["Rest"]}, {lastXChanges.last.deepCopy[ins]}); + + if(voices[ins] != adder, { + var dur; + + if((sus ++ silent).includes(ins), { + allowChord = (ins != sus.last); + pad = (ins == sus.last); + }, { + if(i < (flatOrder.size - 1), { + allowChord = (isInChord[flatOrder[i + 1]] || (ins == flatOrder[i + 1])).not; + pad = false; + }, { + allowChord = false; + pad = true + }); + }); + if((orderIndex == 0) && sus.includes(ins), { + dur = entrancesDurFunc.value(allowChord, pad); + }, { + dur = passagesDurFunc.value(allowChord, pad); + }); + if(dur == 0, {isInChord[ins] = true}, {isInChord = popSize.collect({false})}); + + voices[ins] = adder; + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + + // pad ending + /* + if(orderIndex == (orders.size - 1), { + (0..(popSize-1)).scramble.do({arg ins; + if(res.last.first[ins] != ["Rest"], { + var dur; + voices[ins] = ["Rest"]; + allowChord = (voices != popSize.collect({["Rest"]})); + pad = allowChord.not; + dur = exitsDurFunc.value(allowChord, pad); + res = res.add([voices.deepCopy.postln, dur]); + }); + }); + }); + */ + + //format and return + if(startFromLast, {lastXChanges = lastXChangesHold.deepCopy}); + res; +}; + + +//------primary routines + +genMotif = { + var repeats, fSeq, fDur, durAdd; + + repeats = 1; + fSeq = []; + + repeats.do({arg index; + var motif; + + motif = []; + + orders.do({arg order, o; + var lastState, subMotif; + //lastState = if(o == 0, {popSize.collect({["Rest"]})}, {motif.last.last.first}); + lastState = if(o == 0, {lastXChanges.last.deepCopy}, {motif.last.last.first}); + subMotif = genSubMotif.value(order, o, lastState, isLastOrder: o == (orders.size - 1)); + motif = motif.add(subMotif); + + }); + + sanityCheck.value(motif, index); + + fSeq = fSeq.add(motif); + }); + + //round last duration to measure + /* + fDur = fSeq.flatten.flatten.slice(nil, 1).sum; + durAdd = fDur.round(4) - fDur; + if(durAdd < 0, {durAdd = 4 - durAdd}); + fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] = fSeq[0][orders.size - 1][fSeq[0][orders.size - 1].size - 1][1] + durAdd; + */ + + fSeq +}; + +genSecondarySeq = {arg seq; + var curdles, fSeq; + curdles = []; + while({curdles.sum < seq.size}, {curdles = curdles ++ [3.rand + 1]}); + + fSeq = seq.clumps(curdles).collect({arg clump, m; + var repeats, paddedSeq; + + //add rest + paddedSeq = clump.add([[[popSize.collect({["Rest"]}), 0.5.rand]]]); + + //implement repeats + repeats = [0.rand + 1, 1].wchoose([1, 0].normalizeSum); + repeats.collect({paddedSeq}); + }); + fSeq +}; + + +//------audition funcs + +/* +Event.addEventType(\osc, { + if (~addr.postln.notNil) { + ~addr.sendMsg(~indexPath, ~indexMsg); + ~addr.sendMsg(~seqPath, stringifyToDepth.value(~seqMsg, 3)); + //~addr.sendMsg("/STATE/OPEN", (dir.replace("supercollider", "resources") +/+ ~idMsg +/+ ~idMsg ++ "_gui_state" ++ ".state").standardizePath.postln); + }; +}); +*/ + +Event.addEventType(\osc, { + if (~addr.notNil) { + ~msg; + ~addr.sendMsg(~path, *~msg); + }; +}); + +genPatterns = {arg inSeq, addr, oneShot = false; + var voices, durs, pbinds, res, indices, sectionDurs, msg, ids, seq; + seq = inSeq.collect({arg mSeq; mSeq[0]}); + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + # voices, durs = seq.flatten2(if(oneShot, {2}, {3})).flop; + pbinds = voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs, attacks, rels, amps; + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + //attacks = 2.collect({rrand(1, 3)}) ++ freqs.drop(2).collect({rrand(0.3, 0.5)}); + attacks = fDurs.collect({arg dur; dur * rrand(0.2, 0.4)}); + //rels = freqs.drop(2).collect({rrand(0.3, 0.5)}) ++ 2.collect({rrand(1, 3)}); + rels = (clumps.size - 1).collect({arg c; + if(clumps[c + 1][0] == ["Rest"], {rrand(1.0, 3.0)}, {rrand(0.3, 0.5)}); + }); + rels = rels.add(rrand(1.0, 3.0)); + amps = freqs.collect({rrand(0.6, 0.99)}); + + [ + Pbind( + \instrument, \string_model, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \attack, Pseq(attacks, 1), + \sustain, Pseq(fDurs, 1), + \release, Pseq(rels, 1), + //\amp, Pseq(amps, 1), + \amp, Pbrown(0.5, 1, 0.5), + \busIndex, v + ), + Pbind( + \instrument, \sine, + \group, group, + \freq, Pseq(freqs, 1), + \dur, Pseq(fDurs, 1), + \sustain, Pseq(fDurs, 1), + \busIndex, v + ) + ] + }).flatten; + if(oneShot.not, { + msg = inSeq.collect({arg mSeq, m; mSeq[1..]}); + //ids = inSeq.collect({arg mSeq, m; mSeq[2]}); + sectionDurs = seq.collect({arg mSeq; mSeq.flatten2(2).flop[1].sum}); + pbinds = pbinds ++ + [ + Pbind( + \type, \osc, + \addr, addr, + \path, "/playing", + \msg, Pseq(msg, 1), + \dur, Pseq(sectionDurs, 1) + ); + ] + }); + res = Ppar(pbinds); + res +}; + +/* +genMidiPatterns = {arg seq; + var voices, durs, patterns, res, mOut, pbRange; + pbRange = 1; //semitones - change this as needed for your situation + mOut = MIDIOut.newByName("TiMidity", "TiMidity port 0").latency_(Server.default.latency); + # voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + res = Ppar( + voices.flop.collect({arg voice, v; + var clumps, hdScores, freqs, fDurs; + + mOut.program(v, 70); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))}, {Rest(0)})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + + Pbind( + \type, \midi, + \chan, v, + \noteval, Pseq(freqs.cpsmidi - 24, 1), + \note, Pfunc({ | event | event[\noteval].floor }), + \dur, Pseq(fDurs, 1), + \midiout, mOut, + \amp, 1, + \bend, Pfunc({ + | event | + if (event[\note].isRest.not) { + var pitchbendvalue = event[\noteval].frac.linlin(0, pbRange, 8192, 8192*2).asInteger; + m.bend(v, pitchbendvalue); + }; + 0; // return something other than nil to avoid stopping the pattern + }), + ); + }); + ); + res +}; +*/ + + +//------resource management funcs + +genUID = {Date.seed.asHexString.toLower}; + +seedFunc = {arg func, seed; + var funcArgs, next; + next = Routine({loop{func.valueArray(funcArgs).yield }}); + next.randSeed_(seed); + {arg ...args; funcArgs = args; next.value} +}; + +stringifyToDepth = {arg data, maxDepth = 1; + var prettyString = "", rCount = 0, writeArray, indent; + + if(maxDepth == 0, { + data.asCompileString + }, { + indent = {arg size; size.collect({" "}).join("")}; + writeArray = {arg array; + prettyString = prettyString ++ indent.value(rCount) ++ "[\n"; + rCount = rCount + 1; + if(rCount < maxDepth, { + array.do({arg subArray; writeArray.value(subArray)}); + }, { + prettyString = prettyString ++ array.collect({arg subArray; + indent.value(rCount + 1) ++ subArray.asCompileString + }).join(",\n"); + }); + rCount = rCount - 1; + prettyString = prettyString ++ "\n" ++ indent.value(rCount) ++ "],\n"; + }; + + writeArray.value(data); + prettyString.replace(",\n\n", "\n").drop(-2); + }) +}; + +sanityCheck = {arg motif, index; + //print functions = very helpful + ("----------" + index + "------------").postln; + + motif.flatten.do({arg val, v; + if(v > 0, { + if(motif.flatten[v-1][0].hammingDistance(val[0]) > 1, {"problem 1".postln}); + if(motif.flatten[v-1][0].hammingDistance(val[0]) == 0, {"problem 2".postln}); + }); + val.postln + }); + "***********".postln; +}; + +msgInterpret = {arg in, escapeDoubleQuotes = true, escapeSingleQuotes = true; + var res; + + res = in; + if(res.isNil.not, { + if((res.isArray && res.isString.not), { + res = res.asCompileString; + res = res.replace(" ", "").replace("\n", "").replace("\t", ""); + if(escapeSingleQuotes, {res = res.replace("\'", "")}); + if(escapeDoubleQuotes, {res = res.replace("\"", "")}); + res = res.replace("Rest", "\"Rest\""); + res = res.interpret; + }, { + var tmpRes; + if(res.every({arg char; char.isDecDigit}), {tmpRes = res.asInteger}); + if(res.contains("."), {tmpRes = res.asFloat}); + if(tmpRes != nil, {res = tmpRes}); + }); + }); + res +}; + +writeResources = {arg path, dict; + var file, modelItems, resString; + file = File(path,"w"); + + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + + resString = nameSpaces.collect({arg nameSpace; + var depth = 0, insert = " "; + if(nameSpace == "music_data", {depth = 3; insert = "\n"}); + if(nameSpace == "last_changes", {depth = 1; insert = "\n"}); + if(nameSpace == "order", {depth = 1; insert = "\n"}); + if((nameSpace == "ref_uid") && (dict[nameSpace] == nil), {dict[nameSpace] = "nil"}); + "\"" ++ nameSpace ++ "\":" ++ insert ++ stringifyToDepth.value(dict[nameSpace], depth) + }).join(",\n"); + + resString = "{\n" ++ resString ++ "\n}"; + + file.write(resString); + file.close; + resString +}; + +loadModelFile = {arg path; loadModelJSON.value(File(path, "r").readAllString.parseJSON)}; + +loadModelJSON = {arg jsonObject; + var dict; + dict = Dictionary.with(*nameSpaces.collect({arg nS; nS->msgInterpret.value(jsonObject[nS])})); + dict +}; + +setGlobalVars = {arg dict, skipLastXChanges = false; + var tmpLastXChanges; + tmpLastXChanges = lastXChanges.deepCopy; + // order really matters!!!! + # seq, lastXChanges, curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited = nameSpaces.collect({arg nS; dict[nS]}); + if(skipLastXChanges, {lastXChanges = tmpLastXChanges}); + dict +}; + +globalVarsToDict = { + var modelItems, dict; + // order really matters!!!! + modelItems = [ + seq, lastXChanges, + curUID, refUID, orderSeed, durSeed, motifSeed, + entrancesProbVals, passagesProbVals, exitsProbVals, + ranges, stepProbsVals, passagesWeights, hdExp, hdInvert, + orders, susWeights, orderSize, passagesSize, + motifEdited, orderEdited + ]; + dict = Dictionary.with(*nameSpaces.collect({arg nS, n; nS->modelItems[n]})); +}; + +loadLedgerFile = {arg path; + ledgerPath = path; + resourceDir = path.splitext(".").drop(-1).join; + loadLedgerJSON.value(File(ledgerPath, "r").readAllString.parseJSON) +}; + +loadLedgerJSON = {arg jsonObject; ledger = jsonObject["ledger"]}; + +saveLedger = {arg ledger, path; + var file, curResourceDir; + file = File(path, "w"); + curResourceDir = resourceDir; + resourceDir = path.splitext(".").drop(-1).join; + if(curResourceDir != resourceDir, { + File.mkdir(resourceDir); + ledger.do({arg id; + File.copy(curResourceDir +/+ id, resourceDir +/+ id); + }); + }); + file.write("{\n\"ledger\":\n" ++ stringifyToDepth.value(ledger, 1) ++ "\n}"); + file.close; +}; + +//------global vars + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; +//ranges = [[-2400, 0], [-1200, 1200], [0, 2400], [0, 2400]]; +exPath = thisProcess.nowExecutingPath; +dir = exPath.dirname; +//popSize = 4; +dims = primes.size; +tuples = genTuples.value(); +//refUID = nil; +group = Group.new; +~group = group; +loadLedgerFile.value(dir +/+ ".." +/+ "resources" +/+ "piece_ledger.json"); +resourceDir = (dir +/+ ".." +/+ "resources" +/+ "piece_ledger"); +//passagesWeights = [1, 1, 1, 1, 1]; +//susWeights = [1, 1, 1]; +// order really matters!!!! +nameSpaces = [ + "music_data", "last_changes", "cur_uid", "ref_uid", "order_seed", "dur_seed", "motifs_seed", + "entrances_probs_vals","passages_probs_vals", "exits_probs_vals", + "ranges", "step_probs_vals", "passages_weights", "hd_exp", "hd_invert", + "order", "sus_weights", "order_size", "passages_size", + "motif_edited", "order_edited" +]; + + +//------OSC funcs + +OSCdef(\load_ledger, {arg msg, time, addr, port; + loadLedgerFile.value(msg[1].asString); +}, \load_ledger); + +OSCdef(\load_model, {arg msg, time, addr, port; + var dict; + dict = loadModelFile.value(msg[1].asString); + setGlobalVars.value(dict); +}, \load_model); + +OSCdef(\save_ledger, {arg msg, time, addr, port; + msg.postln; + ledger = msgInterpret.value(msg[1].asString.parseJSON["ledger"], false).postln; + //loadLedgerJSON.value(msg[0]) + saveLedger.value(ledger, msg[2].asString); + //loadLedgerFile.value(msg[1].asString); +}, \save_ledger); + +OSCdef(\generate, {arg msg, time, addr, port; + var path, dict, durSeeds, musPath, modelString; + msg.postln; + + path = msg[1].asString; + + dict = loadModelFile.value(path); + setGlobalVars.value(dict, true); + + popSize = ranges.size; + + //refUID.postln; + + loadLedgerFile.value(ledgerPath); + if(ledger == nil, {ledger = ["tmp"]}); + if(ledger.last != "tmp", {ledger = ledger.add("tmp")}); + + if(refUID == nil, {lastXChanges = [initVoices.value().deepCopy]}); + if((refUID != nil) && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + lastXChanges = msgInterpret.value(file.readAllString.parseJSON["last_changes"]); + }); + + refUID.postln; + lastXChanges.collect({arg item; item.postln}); + + durSeeds = seedFunc.value({3.collect({rrand(100000, 999999)})}, durSeed).value.postln; + entrancesDurFunc = genDurFunc.valueArray(entrancesProbVals[..4] ++ [entrancesProbVals[5..]] ++ [durSeeds[0]]); + passagesDurFunc = genDurFunc.valueArray(passagesProbVals[..4] ++ [passagesProbVals[5..]] ++ [durSeeds[1]]); + exitsDurFunc = genDurFunc.valueArray(exitsProbVals[..4] ++ [exitsProbVals[5..]] ++ [durSeeds[2]]); + + if(orders == nil, { + orders = seedFunc.value(genOrders, orderSeed).valueArray(orderSize ++ passagesSize); + //addr.sendMsg("/order", stringifyToDepth.value(orders, 1)); + }); + + stepFunc = genStepFunc.valueArray(stepProbsVals[..1] ++ [stepProbsVals[2..]] ++ [motifSeed]); + seq = seedFunc.value(genMotif, motifSeed).value; + + lastXChanges.collect({arg item; item.postln}); + + dict = globalVarsToDict.value; + modelString = writeResources.value(path, dict); + + //addr.sendMsg("/generated", musPath, stringifyToDepth.value(seq, 3)); + //~seq = seq; + + addr.sendMsg("/generated", path, modelString, ledgerPath); +}, \generate); + + +OSCdef(\commit, {arg msg, time, addr, port; + var musicData, musicChanged, dict, newLedger, modelPath, musString, musFile, test1, test2, lastCurUID, commitType, commitPos, equalityLedger; + //msg.postln; + + /* + test1 = msg[1].asString.parseJSON; + test2 = (dir +/+ ".." +/+ "resources/tmp/tmp_music" ++ ".json").standardizePath.parseJSONFile; + msgInterpret.value(test1["music"])[0][0][0][1].class.postln; + msgInterpret.value(test2["music_data"])[0][0][0][1].class.postln; + (test1["music"] == test2["music_data"]).postln; + */ + + musicData = loadModelJSON.value(msg[1].asString.parseJSON)["music_data"].postln; + musicChanged = (musicData != seq).postln; + commitType = msg[2].asString; + commitPos = msg[3].postln.asInteger; + + lastCurUID = curUID.deepCopy; + curUID = genUID.value; + + File.mkdir((resourceDir +/+ curUID).standardizePath); + File.copy(exPath, (resourceDir +/+ curUID +/+ curUID ++ "_code" ++ ".scd").standardizePath); + + modelPath = (resourceDir +/+ curUID +/+ curUID ++ "_mus_model" ++ ".json").standardizePath; + dict = globalVarsToDict.value; + if(musicChanged, { + seq = musicData; + dict["music_data"] = seq; + dict["motif_edited"] = "true" + }); + dict["cur_uid"] = curUID; + + writeResources.value(modelPath, dict); + + File.delete(ledgerPath ++ "_bak"); + File.copy(ledgerPath, ledgerPath ++ "_bak"); + File.delete(ledgerPath); + + /* + if(commitType == "add", { + if(lastCurUID == "tmp", { + ledger = ledger.drop(-1).add(curUID); + }, { + ledger = ledger.add(curUID); + }) + }); + */ + + ledger.postln; + + if(commitType == "add", {ledger = ledger.add(curUID)}); + + if(commitType == "insert", {ledger = ledger.insert(commitPos + 1, curUID)}); + + if(commitType == "replace", {ledger = ledger.put(commitPos, curUID)}); + + equalityLedger = ledger.collect({arg item; item.asSymbol}); + if(equalityLedger.includes(\tmp).postln, {ledger.removeAt(equalityLedger.indexOf(\tmp).postln)}); + + ledger.postln; + + saveLedger.value(ledger, ledgerPath); + + addr.sendMsg("/committed", curUID, ledgerPath); + //refUID = curUID; + +}, \commit); + +OSCdef(\transport, {arg msg, time, addr, port; + msg.postln; + if(msg[1] == 0, { + group.set(\release, 2); + group.set(\gate, 0); + player.stop; + }, { + // the cued sequence can now be read from file, so this can be cleaned up + var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + if(msg[1] == 1, { + pSeq = []; + cuedSeek = (seq != nil); + indexStart = msg[2].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.postln.parseJSON["music_data"]), path, indexStart + index, uid]); + file.close; + }); + }); + if(cuedSeek, { + var path, file; + path = (resourceDir +/+ "tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + patterns = genPatterns.value(pSeq, addr); + }, { + pSeq = [loadModelJSON.value(msg[2].asString.parseJSON)["music_data"].postln]; + patterns = genPatterns.value(pSeq, addr, true); + }); + player = Pfset(pattern: patterns, cleanupFunc: { + addr.sendMsg("/transport", 0); + addr.sendMsg("/one_shot", 0); + }); + player = player.play + }); +}, \transport); + + +OSCdef(\transcribe_motif, {arg msg, time, addr, port; + var tSeq, refChord, refUID; + + msg.postln; + + tSeq = [loadModelJSON.value(msg[1].asString.parseJSON)["music_data"]]; + refUID = msg[2].asString.postln; + + if((refUID != "nil") && (refUID != "tmp"), { + var file; + file = File((resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }, { + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + }); + + ~transcribe.value(tSeq, refChord, (dir +/+ ".." +/+ "lilypond" +/+ "includes").standardizePath, addr, "/transcribe_motif"); +}, \transcribe_motif); + + +OSCdef(\transcribe_all, {arg msg, time, addr, port; + var cSize, patterns, cuedSeek, indexStart, indexEnd, tmpLedger; + if(true, { + cuedSeek = (seq != nil); + indexStart = msg[1].asInteger; + indexEnd = ledger.size - if(cuedSeek, {2}, {1}); + + //tmp for testing transcription + //indexEnd = (indexStart+5); + + //ledger.postln; + if(((indexStart == (ledger.size - 1)) && cuedSeek).not, { + var lilyPartLedgerFiles; + + lilyPartLedgerFiles = 4.collect({arg p; + File((dir +/+ ".." +/+ "lilypond" +/+ "includes" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath, "w"); + }); + + ledger[indexStart..indexEnd].do({arg uid, index; + var path, file, fileString, tSeq, refUID, refChord; + path = (resourceDir +/+ uid +/+ uid ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + fileString = file.readAllString; + tSeq = msgInterpret.value(fileString.parseJSON["music_data"]); + refUID = msgInterpret.value(fileString.parseJSON["ref_uid"]); + file.close; + + //uid.postln; + //(refUID == "nil").postln; + + refChord = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]; + + if(refUID != "nil", { + path = (resourceDir +/+ refUID +/+ refUID ++ "_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + refChord = msgInterpret.value(file.readAllString.parseJSON["last_changes"]).last; + file.close; + }); + + if(index != indexEnd, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath); + }, { + ~transcribe.value(tSeq, refChord, (resourceDir +/+ uid +/+ "lilypond").standardizePath, addr, "/transcribe_all"); + }); + + lilyPartLedgerFiles.do({arg f, p; + f.write("\\include \"" ++ resourceDir +/+ uid +/+ "lilypond" +/+ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly\"\n"); + }); + + }); + + lilyPartLedgerFiles.do({arg f; + f.close + }); + }); + /* + if(cuedSeek, { + var path, file; + path = (dir +/+ ".." +/+ "resources/tmp/tmp_mus_model" ++ ".json").standardizePath; + file = File(path, "r"); + pSeq = pSeq.add([msgInterpret.value(file.readAllString.parseJSON["music_data"]), path, ledger.size - 1, "tmp"]); + file.close; + }); + */ + }, { + + }); + +}, \transcribe_all); + +) + + diff --git a/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_mus_model.json b/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_mus_model.json new file mode 100644 index 0000000..b5aa312 --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/7ede7adb/7ede7adb_mus_model.json @@ -0,0 +1,83 @@ +{ +"music_data": +[ + [ + [ + [ [ [ -4, 2, 2, 3, 1, 0 ], [ -5, 3, 2, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -4, 2, 2, 3, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 2, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -2, 1, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 2, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 2, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 1, 2, 1, 0 ], [ -3, 1, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 2, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -3, 1, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 2, 2, 2, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ] ], 1 ], + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], 1 ] + ], + [ + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], 1 ], + [ [ [ -3, 0, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], 1 ] + ] + ] +], +"last_changes": +[ + [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ], [ -2, 2, 1, 1, 1, 0 ] ], + [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -4, 3, 2, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], + [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 2, 1, 2, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], + [ [ -5, 3, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ], + [ [ -3, 0, 1, 2, 1, 0 ], [ -3, 1, 1, 3, 1, 0 ], [ -2, 1, 0, 2, 1, 0 ], [ -2, 1, 1, 2, 1, 0 ] ] +], +"cur_uid": "7ede7adb", +"ref_uid": "6522664c", +"order_seed": 455950, +"dur_seed": 308053, +"motifs_seed": 206233, +"entrances_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"passages_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"exits_probs_vals": [ 0, 0, 0, 1, 1, 0, 0.5, 0.5, 0.5, 1, 0.5 ], +"ranges": [ [ -2400, 1200 ], [ -1200, 1200 ], [ -702, 1200 ], [ -702, 1200 ] ], +"step_probs_vals": [ 0, 1200, 0.0061728395061728, 0.10227272727273, 0.074074074074074, 0.10227272727273, 0.2037037037037, 0.090909090909091, 0.45679012345679, 0.011363636363636, 0.53086419753086, 0, 0.54320987654321, 0.92045454545455, 0.58641975308642, 0.92613636363636, 0.61111111111111, 0, 0.7880658436214, 0.034090909090909, 1, 0.034090909090909 ], +"passages_weights": [ 1, 0.47, 0.43, 1, 0.7 ], +"hd_exp": 7, +"hd_invert": 0, +"order": +[ + [ [ 2, 3 ], [ 0, 1 ], [ ] ], + [ [ 1, 2 ], [ 0, 3 ], [ ] ], + [ [ 2, 1 ], [ 3, 0 ], [ ] ], + [ [ 0, 1, 2 ], [ 3 ], [ ] ], + [ [ 2, 3 ], [ 1, 0 ], [ ] ], + [ [ 2, 1, 0 ], [ 3 ], [ ] ], + [ [ 1, 0, 2 ], [ 3 ], [ ] ], + [ [ 2, 0, 1 ], [ 3 ], [ ] ], + [ [ 0, 1 ], [ 2, 3 ], [ ] ], + [ [ 3 ], [ 2, 1, 0 ], [ ] ] +], +"sus_weights": [ 0.35, 0.37, 0.38 ], +"order_size": [ 10.091836734694, 10.091836734694 ], +"passages_size": [ 0, 0 ], +"motif_edited": "false", +"order_edited": "false" +} \ No newline at end of file diff --git a/resources/string_quartet_3_rise_coda_only/tmp/tmp_mus_model.json b/resources/string_quartet_3_rise_coda_only/tmp/tmp_mus_model.json new file mode 100644 index 0000000..38a39fb --- /dev/null +++ b/resources/string_quartet_3_rise_coda_only/tmp/tmp_mus_model.json @@ -0,0 +1,119 @@ +{ + "schema_version": "1.0", + "cur_uid": "tmp", + "ref_uid": "767e70f0", + "order_seed": 290515, + "dur_seed": 385326, + "motifs_seed": 204830, + "entrances_probs_vals": [ + 0.78, + 0, + 10, + 0, + 1.02, + 0.0098039215686275, + 0, + 0.20915032679739, + 0, + 0.24183006535948, + 0.82432432432432, + 0.28758169934641, + 0, + 1, + 0 + ], + "passages_probs_vals": [ + 0.78, + 0, + 10, + 0, + 1.02, + 0.0098039215686275, + 0, + 0.20915032679739, + 0, + 0.24183006535948, + 0.82432432432432, + 0.28758169934641, + 0, + 1, + 0 + ], + "exits_probs_vals": [ + 0.78, + 0, + 10, + 0, + 1.02, + 0.0098039215686275, + 0, + 0.20915032679739, + 0, + 0.24183006535948, + 0.82432432432432, + 0.28758169934641, + 0, + 1, + 0 + ], + "ranges": [ + [ + -2400, + 1200 + ], + [ + -1200, + 1453 + ], + [ + -702, + 1694 + ], + [ + -702, + 1973 + ] + ], + "passages_weights": [ + 1, + 0.15, + 0.43, + 1, + 1 + ], + "hd_exp": 10, + "hd_invert": 0, + "sus_weights": [ + 0.7, + 0.48, + 0.49 + ], + "order_size": [ + 14, + 14.13265306122449 + ], + "passages_size": [ + 0, + 5 + ], + "step_probs_vals": [ + -1200, + 1200, + 0, + 0, + 0.41358024691358, + 0.0056818181818177, + 0.46913580246914, + 0.67045454545455, + 0.52057613168724, + 0, + 0.56378600823045, + 0.85795454545455, + 0.60082304526749, + 0, + 1, + 0 + ], + "motif_edited": false, + "order_edited": false +} \ No newline at end of file diff --git a/supercollider/material_tweak.scd b/supercollider/material_tweak.scd index 6493dec..8064aeb 100644 --- a/supercollider/material_tweak.scd +++ b/supercollider/material_tweak.scd @@ -57,18 +57,36 @@ swap = {arg data, swaplist; c = [ [ [ - [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 5, -1, 2, -2, 2 ] ], - [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -4, 5, -2, 1, -2, 2 ] ], - [ [ -3, 5, -2, 1, -2, 2 ], [ -3, 4, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], - [ [ -3, 5, -2, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ], - [ [ -6, 6, -1, 1, -2, 2 ], [ -4, 6, -1, 1, -2, 2 ], [ -4, 5, -1, 1, -2, 2 ], [ -5, 6, -1, 1, -2, 2 ] ] -] + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -6, 4, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -5, 4, 1, 3, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 4, 0, 2, -1, 2 ], [ -3, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -3, 4, 1, 1, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -6, 4, 1, 3, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 2, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -5, 3, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -4, 3, 1, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 2, 2, -1, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ], + [ + [ [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 4, 2, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 4, 1, 2, 0, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ], + [ [ [ -5, 4, 1, 2, 0, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0 ], + [ [ [ -5, 5, 1, 2, -1, 2 ], [ -6, 5, 1, 2, -1, 2 ], [ -4, 4, 1, 2, -1, 2 ], [ -5, 4, 1, 2, -1, 2 ] ], 0.25 ] + ] ] ]; //c = c.collect({arg x; x.collect({arg y; y.collect({arg z; [z[0].collect({arg item; if(item == ["Rest"], {item}, {item + [ 1, -1, 0, 0, -1, 0 ] })}), z[1]]})})}); -c = transpose.value(c, [ 1, 0, 0, 0, 0, 0 ], [1, 2, 3]); -//c = swap.value(c, [[1, 3]]); +//c = transpose.value(c, [ 1, 0, 0, 0, 0, 0 ], [1, 2, 3]); +c = swap.value(c, [[0, 3]]); f = File("tweak.txt", "w"); diff --git a/supercollider/seeds_and_ledgers_backend.scd b/supercollider/seeds_and_ledgers_backend.scd index c5b0896..0fd10fd 100644 --- a/supercollider/seeds_and_ledgers_backend.scd +++ b/supercollider/seeds_and_ledgers_backend.scd @@ -813,6 +813,7 @@ OSCdef(\transport, {arg msg, time, addr, port; }, { // the cued sequence can now be read from file, so this can be cleaned up var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + player.stop; if(msg[1] == 1, { pSeq = []; cuedSeek = (seq != nil); diff --git a/supercollider/seeds_and_ledgers_backend_rise.scd b/supercollider/seeds_and_ledgers_backend_rise.scd index e1a9d92..d8f0e14 100644 --- a/supercollider/seeds_and_ledgers_backend_rise.scd +++ b/supercollider/seeds_and_ledgers_backend_rise.scd @@ -860,6 +860,8 @@ OSCdef(\transport, {arg msg, time, addr, port; }, { // the cued sequence can now be read from file, so this can be cleaned up var cSize, patterns, pSeq, cuedSeek, indexStart, indexEnd, tmpLedger; + group.freeAllMsg; + //group = Group.new; if(msg[1] == 1, { pSeq = []; cuedSeek = (seq != nil); diff --git a/supercollider/seeds_and_ledgers_main.scd b/supercollider/seeds_and_ledgers_main.scd index d3f7a4c..a16ad4c 100644 --- a/supercollider/seeds_and_ledgers_main.scd +++ b/supercollider/seeds_and_ledgers_main.scd @@ -12,8 +12,8 @@ s.waitForBoot({ c = Condition.new; // load all files - "seeds_and_ledgers_backend.scd".loadRelative; - //"seeds_and_ledgers_backend_rise.scd".loadRelative; + //"seeds_and_ledgers_backend.scd".loadRelative; + "seeds_and_ledgers_backend_rise.scd".loadRelative; "seeds_and_ledgers_transcriber.scd".loadRelative; "seeds_and_ledgers_synthdefs.scd".loadRelative; s.sync(c); diff --git a/supercollider/seeds_and_ledgers_transcriber.scd b/supercollider/seeds_and_ledgers_transcriber.scd index a28840d..080a3ba 100644 --- a/supercollider/seeds_and_ledgers_transcriber.scd +++ b/supercollider/seeds_and_ledgers_transcriber.scd @@ -101,7 +101,7 @@ formatMusicData = {arg seq, refChord; }); clumps = voice.separate({arg a, b; a != b }); - freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(60.midicps * hsArrayToFreq.value(clump[0]))/*.cpsmidi.round(0.25).midicps*/}, {-1})}); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))/*.cpsmidi.round(0.25).midicps*/}, {-1})}); fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); refs = refs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump[0]}); [freqs, (fDurs / 0.125).round, refs].flop; @@ -121,7 +121,8 @@ formatMusicData = {arg seq, refChord; }); //make them all the same length - maxSize = maxSize.trunc(16);// + 16; + //maxSize = maxSize.trunc(16);// + 16; + maxSize = maxSize.trunc(16) + 16; musicData = musicData.collect({arg partData, p; partData.extend(maxSize, partData.last)}); musicData }; diff --git a/supercollider/seeds_and_ledgers_transcriber_rise.scd b/supercollider/seeds_and_ledgers_transcriber_rise.scd new file mode 100644 index 0000000..2a16b64 --- /dev/null +++ b/supercollider/seeds_and_ledgers_transcriber_rise.scd @@ -0,0 +1,362 @@ +( +var formatMusicData, spellingDict, lyNoteNameStr, lyOctStr, lyFinalizeMusic, lyMeasureDef, +lyRelMark, lyRelMarkNote, lyHBracket, lyStaffDef, lyTie, +lyNoteName, lyCentDev, lyFreqRatio, lyDur, lyNote, lyBeamOpen, lyBeamClosed, +consolidateNotes, consolidateRests, +primes, hsArrayDimDiff, hsArrayToFreq, hsArraysToFreqRatio; + +primes = [[2, 1], [3, 2], [5, 4], [7, 4], [11, 8], [13, 8]]; + +hsArrayToFreq = { + arg array; + array.collect({arg dim, d; pow(primes[d][0]/primes[d][1], dim)}).product +}; + +hsArraysToFreqRatio = { + arg array1, array2; + var fArray, num, den, gcd; + fArray = array2 - array1; + num = 1; + den = 1; + fArray.do({arg dim, d; + if(dim > 0, { + num = num * pow(primes[d][0], dim.abs); + den = den * pow(primes[d][1], dim.abs); + }); + if(dim < 0, { + num = num * pow(primes[d][1], dim.abs); + den = den * pow(primes[d][0], dim.abs); + }); + }); + gcd = gcd(num.asInteger, den.asInteger); + [num / gcd, den / gcd].asInteger +}; + + +hsArrayDimDiff = { + arg array1, array2; + var fArray; + fArray = array2.drop(1) - array1.drop(1); + if(fArray.sum == 0, {1}, {(primes[fArray.abs.indexOf(1) + 1][0] * fArray.sum)}) +}; + +// formats the data for the transcriber +formatMusicData = {arg seq, refChord; + var maxSize, voices, durs, baseData, musicData; + maxSize = 0; + # voices, durs = seq.flatten2(2).flop; + //# voices, durs = seq.flatten2(3).flop; + //# voices, durs = seq.flatten2(seq.maxDepth - 5).flop; + + baseData = voices.flop.collect({arg voice, v; + var isFirstNote, clumps, hdScores, freqs, fDurs, refs; + + isFirstNote = false; + //this gets the reference instrument and is another way to check things + refs = voice.collect({arg item, i; + var ref, isSus, isChanged, isFund; + + ref = [-1, [100, 100], 0]; + + /* + if((i > 0), { + if((item != voice[i - 1]) && (item != ["Rest"]), { + var ins; + ins = voices[i].minIndex({arg hsArray, h; + var res = 100000; + if((h != v) && (hsArray != ["Rest"]), {res = (hsArray.drop(1) - item.drop(1)).abs.sum}); + res + }); + if(voices[i][ins] != ["Rest"], { + ref = [ins, hsArraysToFreqRatio.value(voices[i][ins], item)] + }, { + ref = [ins, [100, 100]] + }) + }); + }); + */ + + //item.postln; + //refChord[v].postln; + + if((item != ["Rest"]) && isFirstNote.not, {isFirstNote = true}); + isSus = isFirstNote && (item == refChord[v]); + isChanged = (i > 0) && (item != voice[i - 1]) && (item != ["Rest"]); + isFund = (item == [0, 0, 0, 0, 0, 0]); + + if((item != ["Rest"]) && isSus.not && isChanged, { + var ins, fr, dd; + ins = voices[i].minIndex({arg hsArray, h; + var res = 100000; + if((h != v) && (hsArray != ["Rest"]), {res = (hsArray.drop(1) - item.drop(1)).abs.sum}); + res; + }); + fr = hsArraysToFreqRatio.value(voices[i][ins], item); + dd = hsArrayDimDiff.value(voices[i][ins], item); + ref = [ins, fr, dd] + }); + + if(isFund, {ref = [-1, [1, 1], 0]}); + ref + }); + + clumps = voice.separate({arg a, b; a != b }); + freqs = clumps.collect({arg clump; if(clump[0] != ["Rest"], {(62.midicps * hsArrayToFreq.value(clump[0]))/*.cpsmidi.round(0.25).midicps*/}, {-1})}); + fDurs = durs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump.sum}); + refs = refs.clumps(clumps.collect({arg clump; clump.size})).collect({arg clump; clump[0]}); + [freqs, (fDurs / 2 / 0.125).round, refs].flop; + }); + + musicData = baseData.collect({arg partData, p; + var res; + res = partData.collect({arg item, i; + var freq, dur, ref, amp, sus, note; + # freq, dur, ref = item; + sus = dur.asInteger; + note = sus.collect({[freq, ref, i]}); + note + }).flatten; + if(res.size > maxSize, {maxSize = res.size}); + res + }); + + //make them all the same length + //maxSize = maxSize.trunc(16);// + 16; + //maxSize = maxSize.trunc(16) + 16; + musicData = musicData.collect({arg partData, p; partData.extend(maxSize, partData.last)}); + musicData +}; + +// constants (spelling dictionary note names and octaves) +spellingDict = Dictionary.with(* + [ + \major -> Dictionary.with(* + [0, 7, 2, 9, 4, 11].collect({arg pc; pc->\sharps}) ++ + [5, 10, 3, 8, 1, 6].collect({arg pc; pc->\flats}) + ), + \minor -> Dictionary.with(* + [9, 4, 11, 6, 1, 8].collect({arg pc; pc->\sharps}) ++ + [2, 7, 0, 5, 10, 3].collect({arg pc; pc->\flats}) + ) + ] +); + +//define staff +lyStaffDef = {arg name, nameShort, nameMidi; + "\\new Staff = \"" ++ name ++ "\" \\with { \n" ++ + "instrumentName = \"" ++ name ++ "\" \n" ++ + "shortInstrumentName = \"" ++ nameShort ++ "\" \n" ++ + "midiInstrument = #\"" ++ nameMidi ++ "\" \n" ++ + "\n}\n" +}; + +// add music preamble +lyFinalizeMusic = {arg lyStr, part, name, nameShort, nameMidi, clef; + "\\new StaffGroup \\with {\\remove \"System_start_delimiter_engraver\"}\n<<\n" ++ + lyStaffDef.value(name, nameShort, nameMidi) ++ + "<<\n\n{ " + + "\n\\set Score.rehearsalMarkFormatter = #format-mark-box-numbers " + + "\\tempo 2 = 60\n" + + "\\numericTimeSignature \\time 2/2\n" + + "\\clef " ++ clef ++ "\n" ++ lyStr + "\\fermata" + + " }>> \\bar \"|.\" \n} \n\n>>" ++ + "\n>>" +}; + +// barline and ossia definition +lyMeasureDef = {arg insName, part, beat; + var barline = "|", break = ""; + barline = ""; + //if((beat % 24) == 0, {break = "\\break"}); + ////if((beat % 16) == 0, {break = "\\break \\noPageBreak"}); + ////if((beat % (16 * 3)) == 0, {break = "\\pageBreak"}); + ////if(beat != 0, {"}\n>>\n" + barline + break}, {""}) + "\n<<\n" /*++ ossia*/ + "{"; + if(beat != 0, {"}\n" + barline + break}, {""}) + "\n" /*++ ossia*/ + "{" +}; + +lyNoteNameStr = Dictionary.with(* + [ + \sharps -> ["c", "cis", "d", "dis","e", "f", "fis", "g", "gis", "a", "ais", "b"], + \flats -> ["c", "des", "d", "ees","e", "f", "ges", "g", "aes", "a", "bes", "b"], + ] +); + +lyOctStr = [",,", ",", "", "'", "''", "'''", "''''"]; + +lyTie = {"~"}; + +lyNoteName = {arg freq, spellingPref = \sharps; + if(freq != -1, { + lyNoteNameStr[spellingPref][((freq.cpsmidi).round(1) % 12)] ++ + lyOctStr[(((freq).cpsmidi).round(1) / 12).asInteger - 2]; + },{"r"}); +}; + +lyDur = {arg noteLength; + switch(noteLength, 1, {"16"}, 2, {"8"}, 3, {"8."}, 4, {"4"}); +}; + +lyBeamOpen = {"["}; + +lyBeamClosed = {"]"}; + +lyCentDev = {arg freq, padding = true; + var centDev; + centDev = ((freq.cpsmidi - (freq.cpsmidi).round(1)) * 100).round(1).asInteger; + "^\\markup { " ++ if(padding, {"\\pad-markup #0.2 \""}, {"\""}) ++ + if(centDev >= 0, {"+"}, {""}) ++ centDev.asString ++ "\"}" +}; + +lyFreqRatio = {arg freqRatioMult, dimDiff, ref, padding = true, lower = 3, attachedToNote = true; + var res, num, den, ratio; + res = "\\markup {" + if(attachedToNote, {""}, {"\\normalsize"}) + + "\\lower #" ++ lower + if(padding, {"\\pad-markup #0.2 "}, {" "}); + //ratio = "\"" ++ freqRatioMult[0].asInteger ++ "/" ++ freqRatioMult[1].asInteger ++ "\" }"; + /* + num = freqRatioMult[0].asInteger; + den = freqRatioMult[1].asInteger; + ratio = if(num > den, {"+" ++ freqRatioMult[0]}, {"-" ++ freqRatioMult[1]}); + ratio = "\"" ++ ratio ++ "\" }"; + */ + ratio = if(dimDiff > 0, {/*"+" ++ */dimDiff.abs.asString ++ "↑"}, {/*"-" ++ */dimDiff.abs.asString ++ "↓"}); + ratio = "\" " ++ ratio ++ "\" }"; + res = if(ref != -1, + { + res ++ "\\concat{ \"" ++ ["IV", "III", "II", "I"][ref] ++ "\"\\normal-size-super " ++ ratio ++ "}" + }, { + res ++ ratio + } + ); + if(attachedToNote, {"_" ++ res}, {res}) +}; + +lyNote = {arg freq, noteLength, freqRatioMult, dimDiff, ref, spellingPref = \sharps, frHide = false, centHide = false, padding = true; + //if(frHide.not, {lyNoteName.value(freq, spellingPref)}, {"s"}) ++ + //lyDur.value(noteLength) ++ + if(frHide.not || centHide.not, { + lyNoteName.value(freq, spellingPref) ++ + lyDur.value(noteLength) ++ + "" + }, {"s4"}) +}; + +consolidateNotes = {arg lyStr, part; + var noteRegex, markupRegex, fullNoteRegex, restRegex, fullRestRegex, res; + noteRegex = "(?[a-g](?:es|is)?(?:[,']*?)?4)"; + //markupRegex = if(part != 0, {"()?"}, {"()?"}); + markupRegex = "()?"; + fullNoteRegex = noteRegex ++ markupRegex ++ "(?:\\h+~\\h+\\k)"; + restRegex = "(?r4)"; + fullRestRegex = "(?r4)(?:(\\h+)\\k)"; + res = lyStr; + /* + [6, 4, 3, 2].do({arg len; + [fullNoteRegex, fullRestRegex].do({arg regex; + res.findRegexp(regex ++ "{" ++ (len-1) ++ "}").clump(3).do({arg match; + var word, note, markup, lyDur; + word = match[0][1]; + note = match[1][1]; + markup = match[2][1]; + lyDur = switch(len, 6, {"1."}, 4, {"1"}, 3, {"2."}, 2, {"2"}); + res = res.replace(word, note.replace("4", lyDur) ++ markup)}); + }); + }); + */ + res.replace("", ""); +}; + +~transcribe = {arg rawMusicData, refChord, dir, addr = nil, buttonID = nil; + var basePath, scoreFile, musicData, insData, insNames, insNamesShort, insMidi, insClef; + + basePath = dir; + basePath.mkdir; + + musicData = formatMusicData.value(rawMusicData, refChord); + + insData = [ + ["IV", "IV", "clarinet", "bass"], + ["III", "III", "clarinet", "alto"], + ["II", "II", "clarinet", "treble"], + ["I", "I", "clarinet", "treble"] + ]; + + insNames = insData.slice(nil, 0); + insNamesShort = insData.slice(nil, 1); + insMidi = insData.slice(nil, 2); + insClef = insData.slice(nil, 3); + + musicData.do({arg part, p; + var lyFile, lyStr, lastMusAtom, measureCount, spellingPref, + tmpSectionData, pcRoot, partLookup, quality; + + //create file + lyFile = File((basePath.postln +/+ /*"includes" +/+ */ "part_" ++ ["IV", "III", "II", "I"][p] ++ ".ly").standardizePath,"w"); + + //start lypond directives + lyStr = ""; + lastMusAtom = nil; + measureCount = 0; + spellingPref = \sharps; + tmpSectionData = nil; + part.clump(4).do({arg beat, i; + var gSum; + gSum = 0; + beat.separate({arg a, b; + ((a[0] != -1) || (b[0] != -1)) && (a != b)}).do({arg group, g; + var noteLength, curMusAtom, freq, freqRatioMult, dimDiff, ref, isSame, isRest, isFirst, isLast, + isTied, isMeasureBound, isBeamStart, isBeamEnd; + + noteLength = group.size; + gSum = gSum + noteLength; + curMusAtom = group[0]; + freq = curMusAtom[0]; + //freqRatioMult = curMusAtom[1]; + ref = curMusAtom[1][0]; + freqRatioMult = curMusAtom[1][1]; + dimDiff = curMusAtom[1][2]; + # isSame, isRest, isFirst, isLast = [curMusAtom == lastMusAtom, freq == -1, g == 0, gSum == 4]; + # isTied, isMeasureBound = [isSame && isRest.not, isFirst && ((i % 4) == 0)]; + # isBeamStart, isBeamEnd = [(noteLength != 4) && isFirst, (noteLength != 4) && isLast]; + + //add ties + //if(isTied, {lyStr = lyStr + lyTie.value}); + + //add barline and ossia definition + //if(isMeasureBound, {lyStr = lyStr + "\\bar \"|.|\""}); //lyMeasureDef.value(sectionData[i], insNames[p], p, i)}); + if(isMeasureBound, {lyStr = lyStr + lyMeasureDef.value(insNames[p], p, i)}); + + //add note data + + lyStr = lyStr + lyNote.value(freq, noteLength, freqRatioMult, dimDiff, ref, \sharps, isSame || isRest || (ref < 0), isSame || isRest); + + //beam group + //if(isBeamStart, {lyStr = lyStr ++ lyBeamOpen.value}); + //if(isBeamEnd, {lyStr = lyStr ++ lyBeamClosed.value}); + + lastMusAtom = curMusAtom; + }); + }); + + //wrap music and add staff definitions + lyStr = "{" ++ lyStr ++ "}\n\n}"; + + //consolidate notes and rests + lyStr = consolidateNotes.value(lyStr, p); + + //write file + lyFile.write(lyStr); + lyFile.close; + }); + if(addr != nil, {addr.sendMsg(buttonID, 0)}); +}; + + +//~transcribe.value(~seq); + +) + +//~transcribe.value(~seq); \ No newline at end of file

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 j3pf7qcbJ2yW6`44{l%QyZX20PC! delta 306590 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%0DTmWgs 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
j8Z%Ojv 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 BV>kc+ diff --git a/lilypond/string_quartet_2/includes/part_I.ly b/lilypond/string_quartet_2/edited/includes/part_I.ly similarity index 100% rename from lilypond/string_quartet_2/includes/part_I.ly rename to lilypond/string_quartet_2/edited/includes/part_I.ly diff --git a/lilypond/string_quartet_2/includes/part_II.ly b/lilypond/string_quartet_2/edited/includes/part_II.ly similarity index 100% rename from lilypond/string_quartet_2/includes/part_II.ly rename to lilypond/string_quartet_2/edited/includes/part_II.ly diff --git a/lilypond/string_quartet_2/includes/part_III.ly b/lilypond/string_quartet_2/edited/includes/part_III.ly similarity index 100% rename from lilypond/string_quartet_2/includes/part_III.ly rename to lilypond/string_quartet_2/edited/includes/part_III.ly diff --git a/lilypond/string_quartet_2/includes/part_IV.ly b/lilypond/string_quartet_2/edited/includes/part_IV.ly similarity index 100% rename from lilypond/string_quartet_2/includes/part_IV.ly rename to lilypond/string_quartet_2/edited/includes/part_IV.ly diff --git a/lilypond/string_quartet_2/edited/seeds_and_ledgers_2.ly b/lilypond/string_quartet_2/edited/seeds_and_ledgers_2.ly new file mode 100644 index 0000000..dfe1a12 --- /dev/null +++ b/lilypond/string_quartet_2/edited/seeds_and_ledgers_2.ly @@ -0,0 +1,154 @@ +\version "2.24.1" + +\paper { + #(set-paper-size "a4" 'portrait) + top-margin = 1 \cm + bottom-margin = 1 \cm + left-margin = 2 \cm + ragged-bottom = ##t + + top-system-spacing = + #'((basic-distance . 15 ) + (minimum-distance . 15 ) + (padding . 0 ) + (stretchability . 0)) + + system-system-spacing = + #'((basic-distance . 35 ) + (minimum-distance . 35 ) + (padding . 0 ) + (stretchability . 0)) + + last-bottom-spacing = + #'((basic-distance . 10 ) + (minimum-distance . 10 ) + (padding . 0 ) + (stretchability . 0)) + + %systems-per-page = 3 + first-page-number = 1 + print-first-page-number = ##t + + print-page-number = ##t + oddHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"seeds and ledgers 2"}}}}}}} + evenHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"seeds and ledgers 2"}}}}}}} + oddFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} + evenFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} +} + +\header { + title = \markup { \italic {"seeds and ledgers 2"}} + composer = \markup \right-column {"michael winter" "(berlin; 2023)"} + poet = "for cat lamb" + tagline = "" +} + +#(set-global-staff-size 11) + +\layout { + indent = 0.0\cm + line-width = 17.5\cm + ragged-last = ##f + ragged-right = ##f + + \context { + \Score + \override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \override Stem.stemlet-length = #0.75 + %proportionalNotationDuration = #(ly:make-moment 1/16) + \remove "Separating_line_group_engraver" + \override RehearsalMark.self-alignment-X = #-1 + \override RehearsalMark.Y-offset = #10 + \override RehearsalMark.X-offset = #-8 + %\override RehearsalMark.outside-staff-priority = #0 + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + } + \context { + \Staff + + \override VerticalAxisGroup.staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + \override TextScript.staff-padding = #2 + %\override TextScript.self-alignment-X = #0 + } + \context { + \StaffGroup + \name "SemiStaffGroup" + \consists "Span_bar_engraver" + \override SpanBar.stencil = + #(lambda (grob) + (if (string=? (ly:grob-property grob 'glyph-name) "|") + (set! (ly:grob-property grob 'glyph-name) "")) + (ly:span-bar::print grob)) + } + \context { + \Score + \accepts SemiStaffGroup + } +} + + +\score{ + << + \new SemiStaffGroup { + << + \new Staff = "I" \with { + instrumentName = "I" + shortInstrumentName = "I" + midiInstrument = #"clarinet" + } + { + \numericTimeSignature \time 2/2 + \include "includes/part_I.ly" + } + \new Staff = "II" \with { + instrumentName = "II" + shortInstrumentName = "II" + midiInstrument = #"clarinet" + } + { + \include "includes/part_II.ly" + } + \new Staff = "III" \with { + instrumentName = "III" + shortInstrumentName = "III" + midiInstrument = #"clarinet" + \clef alto + } + { + \include "includes/part_III.ly" + } + \new Staff = "IV" \with { + instrumentName = "IV" + shortInstrumentName = "IV" + midiInstrument = #"clarinet" + \clef bass + } + { + \include "includes/part_IV.ly" + } + >> + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_2/edited/seeds_and_ledgers_2.pdf b/lilypond/string_quartet_2/edited/seeds_and_ledgers_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..23be8dce05249590dc089523bf9af12b091a1924 GIT binary patch literal 922670 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

WJu||ojZ+26?IChqdydo%nJ+p~b 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≧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 + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_1/score_template.pdf b/lilypond/string_quartet_1/original_output/score_template.pdf similarity index 81% rename from lilypond/string_quartet_1/score_template.pdf rename to lilypond/string_quartet_1/original_output/score_template.pdf index aba09296a57789c2d2ce4484a1291392d45d92ac..553c9c356cfc262ca7cf954ae6b0e13ad194bb01 100644 GIT binary patch delta 302841 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%0D4PTFH{r2_h)%rWm?vZmntOw6%#P#|_qe9A3 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 F_g^bt(0>2` diff --git a/lilypond/string_quartet_1/includes/part_I.ly b/lilypond/string_quartet_1/edited/includes/part_I.ly similarity index 100% rename from lilypond/string_quartet_1/includes/part_I.ly rename to lilypond/string_quartet_1/edited/includes/part_I.ly diff --git a/lilypond/string_quartet_1/includes/part_II.ly b/lilypond/string_quartet_1/edited/includes/part_II.ly similarity index 100% rename from lilypond/string_quartet_1/includes/part_II.ly rename to lilypond/string_quartet_1/edited/includes/part_II.ly diff --git a/lilypond/string_quartet_1/includes/part_III.ly b/lilypond/string_quartet_1/edited/includes/part_III.ly similarity index 100% rename from lilypond/string_quartet_1/includes/part_III.ly rename to lilypond/string_quartet_1/edited/includes/part_III.ly diff --git a/lilypond/string_quartet_1/includes/part_IV.ly b/lilypond/string_quartet_1/edited/includes/part_IV.ly similarity index 100% rename from lilypond/string_quartet_1/includes/part_IV.ly rename to lilypond/string_quartet_1/edited/includes/part_IV.ly diff --git a/lilypond/string_quartet_1/edited/seeds_and_ledgers_1.ly b/lilypond/string_quartet_1/edited/seeds_and_ledgers_1.ly new file mode 100644 index 0000000..46dc972 --- /dev/null +++ b/lilypond/string_quartet_1/edited/seeds_and_ledgers_1.ly @@ -0,0 +1,155 @@ +\version "2.24.1" + +\paper { + #(set-paper-size "a4" 'portrait) + top-margin = 1 \cm + bottom-margin = 1 \cm + left-margin = 2 \cm + ragged-bottom = ##t + + top-system-spacing = + #'((basic-distance . 15 ) + (minimum-distance . 15 ) + (padding . 0 ) + (stretchability . 0)) + + system-system-spacing = + #'((basic-distance . 35 ) + (minimum-distance . 35 ) + (padding . 0 ) + (stretchability . 0)) + + last-bottom-spacing = + #'((basic-distance . 10 ) + (minimum-distance . 10 ) + (padding . 0 ) + (stretchability . 0)) + + %systems-per-page = 3 + first-page-number = 1 + print-first-page-number = ##t + + print-page-number = ##t + oddHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"seeds and ledgers 1"}}}}}}} + evenHeaderMarkup = \markup { \fill-line { \line { \unless \on-first-page {\pad-markup #2 { \concat {\italic {"seeds and ledgers 1"}}}}}}} + oddFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} + evenFooterMarkup = \markup { \fill-line { + \concat { + "-" + \fontsize #1.5 + \fromproperty #'page:page-number-string + "-"}}} +} + +\header { + title = \markup { \italic {"seeds and ledgers 1"}} + composer = \markup \right-column {"michael winter" "(berlin; 2023-24)"} + poet = "for lucie nezri" + tagline = "" +} + +#(set-global-staff-size 11) + +\layout { + indent = 0.0\cm + line-width = 17.5\cm + ragged-last = ##f + ragged-right = ##f + + \context { + \Score + \override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) + \override Stem.stemlet-length = #0.75 + %proportionalNotationDuration = #(ly:make-moment 1/16) + \remove "Separating_line_group_engraver" + \override RehearsalMark.self-alignment-X = #-1 + \override RehearsalMark.Y-offset = #10 + \override RehearsalMark.X-offset = #-8 + %\override RehearsalMark.outside-staff-priority = #0 + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) + \override Script.script-priority = #-100 + } + \context { + \Staff + + \override VerticalAxisGroup.staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + + \override VerticalAxisGroup.default-staff-staff-spacing = + #'((basic-distance . 20 ) + (minimum-distance . 20 ) + (padding . 0 ) + (stretchability . 0)) + \override TextScript.staff-padding = #2 + %\override TextScript.self-alignment-X = #0 + } + \context { + \StaffGroup + \name "SemiStaffGroup" + \consists "Span_bar_engraver" + \override SpanBar.stencil = + #(lambda (grob) + (if (string=? (ly:grob-property grob 'glyph-name) "|") + (set! (ly:grob-property grob 'glyph-name) "")) + (ly:span-bar::print grob)) + } + \context { + \Score + \accepts SemiStaffGroup + } +} + + +\score{ + << + \new SemiStaffGroup { + << + \new Staff = "I" \with { + instrumentName = "I" + shortInstrumentName = "I" + midiInstrument = #"clarinet" + } + { + \numericTimeSignature \time 2/2 + \include "includes/part_I.ly" + } + \new Staff = "II" \with { + instrumentName = "II" + shortInstrumentName = "II" + midiInstrument = #"clarinet" + } + { + \include "includes/part_II.ly" + } + \new Staff = "III" \with { + instrumentName = "III" + shortInstrumentName = "III" + midiInstrument = #"clarinet" + \clef alto + } + { + \include "includes/part_III.ly" + } + \new Staff = "IV" \with { + instrumentName = "IV" + shortInstrumentName = "IV" + midiInstrument = #"clarinet" + \clef bass + } + { + \include "includes/part_IV.ly" + } + >> + } + >> + \layout{} + %\midi{} %this creates a warning since custom staff is not defined for midi +} diff --git a/lilypond/string_quartet_1/edited/seeds_and_ledgers_1.pdf b/lilypond/string_quartet_1/edited/seeds_and_ledgers_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..67031d17f08a857b9e0765eb312697c6c6d5b359 GIT binary patch literal 1300225 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