435 |
eq1_gain_oncc.set(i, 0); |
eq1_gain_oncc.set(i, 0); |
436 |
eq2_gain_oncc.set(i, 0); |
eq2_gain_oncc.set(i, 0); |
437 |
eq3_gain_oncc.set(i, 0); |
eq3_gain_oncc.set(i, 0); |
438 |
|
|
439 |
|
pitchlfo_depthcc.set(i, 0); |
440 |
} |
} |
441 |
cutoff_cc = 0; |
cutoff_cc = 0; |
442 |
|
|
466 |
fileg_sustain = 100; // in percentage |
fileg_sustain = 100; // in percentage |
467 |
fileg_release = 0; |
fileg_release = 0; |
468 |
|
|
469 |
|
fileg_vel2delay = 0; |
470 |
|
fileg_vel2attack = 0; |
471 |
|
fileg_vel2hold = 0; |
472 |
|
fileg_vel2decay = 0; |
473 |
|
fileg_vel2sustain = 0; |
474 |
|
fileg_vel2release = 0; |
475 |
|
fileg_depth = 0; |
476 |
|
|
477 |
pitcheg_delay = 0; |
pitcheg_delay = 0; |
478 |
pitcheg_start = 0; //in percentage |
pitcheg_start = 0; //in percentage |
479 |
pitcheg_attack = 0; |
pitcheg_attack = 0; |
710 |
region->fileg_decay = fileg_decay; |
region->fileg_decay = fileg_decay; |
711 |
region->fileg_sustain = fileg_sustain; |
region->fileg_sustain = fileg_sustain; |
712 |
region->fileg_release = fileg_release; |
region->fileg_release = fileg_release; |
713 |
|
region->fileg_depth = fileg_depth; |
714 |
|
|
715 |
|
region->fileg_vel2delay = fileg_vel2delay; |
716 |
|
region->fileg_vel2attack = fileg_vel2attack; |
717 |
|
region->fileg_vel2hold = fileg_vel2hold; |
718 |
|
region->fileg_vel2decay = fileg_vel2decay; |
719 |
|
region->fileg_vel2sustain = fileg_vel2sustain; |
720 |
|
region->fileg_vel2release = fileg_vel2release; |
721 |
|
|
722 |
region->pitcheg_delay = pitcheg_delay; |
region->pitcheg_delay = pitcheg_delay; |
723 |
region->pitcheg_start = pitcheg_start; |
region->pitcheg_start = pitcheg_start; |
749 |
region->pitchlfo_fade = pitchlfo_fade; |
region->pitchlfo_fade = pitchlfo_fade; |
750 |
region->pitchlfo_freq = pitchlfo_freq; |
region->pitchlfo_freq = pitchlfo_freq; |
751 |
region->pitchlfo_depth = pitchlfo_depth; |
region->pitchlfo_depth = pitchlfo_depth; |
752 |
|
|
753 |
|
region->pitchlfo_depthcc = pitchlfo_depthcc; |
754 |
|
|
755 |
return region; |
return region; |
756 |
} |
} |
1216 |
else if (sscanf(key.c_str(), "amp_velcurve_%d", &x)) { |
else if (sscanf(key.c_str(), "amp_velcurve_%d", &x)) { |
1217 |
pCurDef->amp_velcurve.set(x, ToFloat(value)); |
pCurDef->amp_velcurve.set(x, ToFloat(value)); |
1218 |
} |
} |
1219 |
|
|
|
// CCs |
|
|
else if (key.find("cc") != std::string::npos) |
|
|
{ |
|
|
std::string::size_type delimiter_index = key.find("cc"); |
|
|
std::string key_cc = key.substr(0, delimiter_index); |
|
|
int num_cc = ToInt(key.substr(delimiter_index + 2)); |
|
|
|
|
|
// input controls |
|
|
if ("lo" == key_cc) pCurDef->locc.set(num_cc, ToInt(value)); |
|
|
else if ("hi" == key_cc) pCurDef->hicc.set(num_cc, ToInt(value)); |
|
|
else if ("start_lo" == key_cc) pCurDef->start_locc.set(num_cc, ToInt(value)); |
|
|
else if ("start_hi" == key_cc) pCurDef->start_hicc.set(num_cc, ToInt(value)); |
|
|
else if ("stop_lo" == key_cc) pCurDef->stop_locc.set(num_cc, ToInt(value)); |
|
|
else if ("stop_hi" == key_cc) pCurDef->stop_hicc.set(num_cc, ToInt(value)); |
|
|
else if ("on_lo" == key_cc) pCurDef->on_locc.set(num_cc, ToInt(value)); |
|
|
else if ("on_hi" == key_cc) pCurDef->on_hicc.set(num_cc, ToInt(value)); |
|
|
|
|
|
// sample player |
|
|
else if ("delay_on" == key_cc) pCurDef->delay_oncc.set(num_cc, ToFloat(value)); |
|
|
else if ("delay_samples_on" == key_cc) pCurDef->delay_samples_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("offset_on" == key_cc) pCurDef->offset_oncc.set(num_cc, ToInt(value)); |
|
|
|
|
|
// amplifier |
|
|
else if ("gain_on" == key_cc || "gain_" == key_cc) pCurDef->gain_oncc.set(num_cc, ToFloat(value)); |
|
|
else if ("xfin_lo" == key_cc) pCurDef->xfin_locc.set(num_cc, ToInt(value)); |
|
|
else if ("xfin_hi" == key_cc) pCurDef->xfin_hicc.set(num_cc, ToInt(value)); |
|
|
else if ("xfout_lo" == key_cc) pCurDef->xfout_locc.set(num_cc, ToInt(value)); |
|
|
else if ("xfout_hi" == key_cc) pCurDef->xfout_hicc.set(num_cc, ToInt(value)); |
|
|
|
|
|
// filter |
|
|
else if ("cutoff_on" == key_cc || "cutoff_" == key_cc) { |
|
|
pCurDef->cutoff_oncc.set(num_cc, ToInt(value)); |
|
|
pCurDef->cutoff_cc = num_cc; |
|
|
} else if ("cutoff2_on" == key_cc) pCurDef->cutoff2_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff_smooth" == key_cc) pCurDef->cutoff_smoothcc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff2_smooth" == key_cc) pCurDef->cutoff2_smoothcc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff_step" == key_cc) pCurDef->cutoff_stepcc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff2_step" == key_cc) pCurDef->cutoff2_stepcc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff_curve" == key_cc) pCurDef->cutoff_curvecc.set(num_cc, ToInt(value)); |
|
|
else if ("cutoff2_curve" == key_cc) pCurDef->cutoff2_curvecc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance_on" == key_cc) pCurDef->resonance_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance2_on" == key_cc) pCurDef->resonance2_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance_smooth" == key_cc) pCurDef->resonance_smoothcc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance2_smooth" == key_cc) pCurDef->resonance2_smoothcc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance_step" == key_cc) pCurDef->resonance_stepcc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance2_step" == key_cc) pCurDef->resonance2_stepcc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance_curve" == key_cc) pCurDef->resonance_curvecc.set(num_cc, ToInt(value)); |
|
|
else if ("resonance2_curve" == key_cc) pCurDef->resonance2_curvecc.set(num_cc, ToInt(value)); |
|
|
|
|
|
// per voice equalizer |
|
|
else if ("eq1_freq_on" == key_cc || "eq1_freq" == key_cc) pCurDef->eq1_freq_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq2_freq_on" == key_cc || "eq2_freq" == key_cc) pCurDef->eq2_freq_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq3_freq_on" == key_cc || "eq3_freq" == key_cc) pCurDef->eq3_freq_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq1_bw_on" == key_cc || "eq1_bw" == key_cc) pCurDef->eq1_bw_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq2_bw_on" == key_cc || "eq2_bw" == key_cc) pCurDef->eq2_bw_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq3_bw_on" == key_cc || "eq3_bw" == key_cc) pCurDef->eq3_bw_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq1_gain_on" == key_cc || "eq1_gain" == key_cc) pCurDef->eq1_gain_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq2_gain_on" == key_cc || "eq2_gain" == key_cc) pCurDef->eq2_gain_oncc.set(num_cc, ToInt(value)); |
|
|
else if ("eq3_gain_on" == key_cc || "eq3_gain" == key_cc) pCurDef->eq3_gain_oncc.set(num_cc, ToInt(value)); |
|
|
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
|
|
} |
|
1220 |
// v2 envelope generators |
// v2 envelope generators |
1221 |
else if (sscanf(key.c_str(), "eg%d%n", &x, &y)) { |
else if (sscanf(key.c_str(), "eg%d%n", &x, &y)) { |
1222 |
const char* s = key.c_str() + y; |
const char* s = key.c_str() + y; |
1253 |
else if ("fileg_decay" == key) pCurDef->fileg_decay = ToFloat(value); |
else if ("fileg_decay" == key) pCurDef->fileg_decay = ToFloat(value); |
1254 |
else if ("fileg_sustain" == key) pCurDef->fileg_sustain = ToFloat(value); |
else if ("fileg_sustain" == key) pCurDef->fileg_sustain = ToFloat(value); |
1255 |
else if ("fileg_release" == key) pCurDef->fileg_release = ToFloat(value); |
else if ("fileg_release" == key) pCurDef->fileg_release = ToFloat(value); |
1256 |
|
else if ("fileg_depth" == key) pCurDef->fileg_depth = check(key, -12000, 12000, ToInt(value)); |
1257 |
|
else if ("fileg_vel2delay" == key) pCurDef->fileg_vel2delay = check(key, -100.0f, 100.0f, ToFloat(value)); |
1258 |
|
else if ("fileg_vel2attack" == key) pCurDef->fileg_vel2attack = ToFloat(value); |
1259 |
|
else if ("fileg_vel2hold" == key) pCurDef->fileg_vel2hold = ToFloat(value); |
1260 |
|
else if ("fileg_vel2decay" == key) pCurDef->fileg_vel2decay = ToFloat(value); |
1261 |
|
else if ("fileg_vel2sustain" == key) pCurDef->fileg_vel2sustain = ToFloat(value); |
1262 |
|
else if ("fileg_vel2release" == key) pCurDef->fileg_vel2release = ToFloat(value); |
1263 |
else if ("pitcheg_delay" == key) pCurDef->pitcheg_delay = ToFloat(value); |
else if ("pitcheg_delay" == key) pCurDef->pitcheg_delay = ToFloat(value); |
1264 |
else if ("pitcheg_start" == key) pCurDef->pitcheg_start = ToFloat(value); |
else if ("pitcheg_start" == key) pCurDef->pitcheg_start = ToFloat(value); |
1265 |
else if ("pitcheg_attack" == key) pCurDef->pitcheg_attack = ToFloat(value); |
else if ("pitcheg_attack" == key) pCurDef->pitcheg_attack = ToFloat(value); |
1296 |
if (strcmp(s, "_freq") == 0) lfo(x).freq = check(key, 0.0f, 20.0f, ToFloat(value)); |
if (strcmp(s, "_freq") == 0) lfo(x).freq = check(key, 0.0f, 20.0f, ToFloat(value)); |
1297 |
else if (strcmp(s, "_wave") == 0) lfo(x).wave = ToInt(value); |
else if (strcmp(s, "_wave") == 0) lfo(x).wave = ToInt(value); |
1298 |
else if (strcmp(s, "_delay") == 0) lfo(x).delay = check(key, 0.0f, 100.0f, ToFloat(value)); |
else if (strcmp(s, "_delay") == 0) lfo(x).delay = check(key, 0.0f, 100.0f, ToFloat(value)); |
1299 |
|
else if (strcmp(s, "_fade") == 0) lfo(x).fade = check(key, 0.0f, 100.0f, ToFloat(value)); |
1300 |
|
else if (sscanf(s, "_fade_oncc%d", &y)) lfo(x).fade_oncc.add( CC(y, check(key, 0.0f, 100.0f, ToFloat(value))) ); |
1301 |
|
else if (strcmp(s, "_phase") == 0) lfo(x).phase = check(key, 0.0f, 360.0f, ToFloat(value)); |
1302 |
|
else if (sscanf(s, "_phase_oncc%d", &y)) lfo(x).phase_oncc.add( CC(y, check(key, 0.0f, 360.0f, ToFloat(value))) ); |
1303 |
else if (strcmp(s, "_volume") == 0) lfo(x).volume = check(key, -144.0f, 6.0f, ToFloat(value)); |
else if (strcmp(s, "_volume") == 0) lfo(x).volume = check(key, -144.0f, 6.0f, ToFloat(value)); |
1304 |
else if (strcmp(s, "_pitch") == 0) lfo(x).pitch = check(key, -9600, 9600, ToInt(value)); |
else if (strcmp(s, "_pitch") == 0) lfo(x).pitch = check(key, -9600, 9600, ToInt(value)); |
1305 |
|
else if (sscanf(s, "_pitch_oncc%d", &y)) lfo(x).pitch_oncc.add( CC(y, check(key, -9600, 9600, ToInt(value))) ); |
1306 |
else if (strcmp(s, "_cutoff") == 0) lfo(x).cutoff = check(key, -9600, 9600, ToInt(value)); |
else if (strcmp(s, "_cutoff") == 0) lfo(x).cutoff = check(key, -9600, 9600, ToInt(value)); |
1307 |
else if (strcmp(s, "_resonance") == 0) lfo(x).resonance = check(key, 0.0f, 40.0f, ToFloat(value)); |
else if (strcmp(s, "_resonance") == 0) lfo(x).resonance = check(key, 0.0f, 40.0f, ToFloat(value)); |
1308 |
else if (strcmp(s, "_pan") == 0) lfo(x).pan = check(key, -100.0f, 100.0f, ToFloat(value)); |
else if (strcmp(s, "_pan") == 0) lfo(x).pan = check(key, -100.0f, 100.0f, ToFloat(value)); |
1309 |
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1310 |
} |
} |
1311 |
|
|
1312 |
|
// CCs |
1313 |
|
else if (key.find("cc") != std::string::npos) |
1314 |
|
{ |
1315 |
|
std::string::size_type delimiter_index = key.find("cc"); |
1316 |
|
std::string key_cc = key.substr(0, delimiter_index); |
1317 |
|
int num_cc = ToInt(key.substr(delimiter_index + 2)); |
1318 |
|
|
1319 |
|
// input controls |
1320 |
|
if ("lo" == key_cc) pCurDef->locc.set(num_cc, ToInt(value)); |
1321 |
|
else if ("hi" == key_cc) pCurDef->hicc.set(num_cc, ToInt(value)); |
1322 |
|
else if ("start_lo" == key_cc) pCurDef->start_locc.set(num_cc, ToInt(value)); |
1323 |
|
else if ("start_hi" == key_cc) pCurDef->start_hicc.set(num_cc, ToInt(value)); |
1324 |
|
else if ("stop_lo" == key_cc) pCurDef->stop_locc.set(num_cc, ToInt(value)); |
1325 |
|
else if ("stop_hi" == key_cc) pCurDef->stop_hicc.set(num_cc, ToInt(value)); |
1326 |
|
else if ("on_lo" == key_cc) pCurDef->on_locc.set(num_cc, ToInt(value)); |
1327 |
|
else if ("on_hi" == key_cc) pCurDef->on_hicc.set(num_cc, ToInt(value)); |
1328 |
|
|
1329 |
|
// sample player |
1330 |
|
else if ("delay_on" == key_cc) pCurDef->delay_oncc.set(num_cc, ToFloat(value)); |
1331 |
|
else if ("delay_samples_on" == key_cc) pCurDef->delay_samples_oncc.set(num_cc, ToInt(value)); |
1332 |
|
else if ("offset_on" == key_cc) pCurDef->offset_oncc.set(num_cc, ToInt(value)); |
1333 |
|
|
1334 |
|
// amplifier |
1335 |
|
else if ("gain_on" == key_cc || "gain_" == key_cc) pCurDef->gain_oncc.set(num_cc, ToFloat(value)); |
1336 |
|
else if ("xfin_lo" == key_cc) pCurDef->xfin_locc.set(num_cc, ToInt(value)); |
1337 |
|
else if ("xfin_hi" == key_cc) pCurDef->xfin_hicc.set(num_cc, ToInt(value)); |
1338 |
|
else if ("xfout_lo" == key_cc) pCurDef->xfout_locc.set(num_cc, ToInt(value)); |
1339 |
|
else if ("xfout_hi" == key_cc) pCurDef->xfout_hicc.set(num_cc, ToInt(value)); |
1340 |
|
|
1341 |
|
// filter |
1342 |
|
else if ("cutoff_on" == key_cc || "cutoff_" == key_cc) { |
1343 |
|
pCurDef->cutoff_oncc.set(num_cc, ToInt(value)); |
1344 |
|
pCurDef->cutoff_cc = num_cc; |
1345 |
|
} else if ("cutoff2_on" == key_cc) pCurDef->cutoff2_oncc.set(num_cc, ToInt(value)); |
1346 |
|
else if ("cutoff_smooth" == key_cc) pCurDef->cutoff_smoothcc.set(num_cc, ToInt(value)); |
1347 |
|
else if ("cutoff2_smooth" == key_cc) pCurDef->cutoff2_smoothcc.set(num_cc, ToInt(value)); |
1348 |
|
else if ("cutoff_step" == key_cc) pCurDef->cutoff_stepcc.set(num_cc, ToInt(value)); |
1349 |
|
else if ("cutoff2_step" == key_cc) pCurDef->cutoff2_stepcc.set(num_cc, ToInt(value)); |
1350 |
|
else if ("cutoff_curve" == key_cc) pCurDef->cutoff_curvecc.set(num_cc, ToInt(value)); |
1351 |
|
else if ("cutoff2_curve" == key_cc) pCurDef->cutoff2_curvecc.set(num_cc, ToInt(value)); |
1352 |
|
else if ("resonance_on" == key_cc) pCurDef->resonance_oncc.set(num_cc, ToInt(value)); |
1353 |
|
else if ("resonance2_on" == key_cc) pCurDef->resonance2_oncc.set(num_cc, ToInt(value)); |
1354 |
|
else if ("resonance_smooth" == key_cc) pCurDef->resonance_smoothcc.set(num_cc, ToInt(value)); |
1355 |
|
else if ("resonance2_smooth" == key_cc) pCurDef->resonance2_smoothcc.set(num_cc, ToInt(value)); |
1356 |
|
else if ("resonance_step" == key_cc) pCurDef->resonance_stepcc.set(num_cc, ToInt(value)); |
1357 |
|
else if ("resonance2_step" == key_cc) pCurDef->resonance2_stepcc.set(num_cc, ToInt(value)); |
1358 |
|
else if ("resonance_curve" == key_cc) pCurDef->resonance_curvecc.set(num_cc, ToInt(value)); |
1359 |
|
else if ("resonance2_curve" == key_cc) pCurDef->resonance2_curvecc.set(num_cc, ToInt(value)); |
1360 |
|
|
1361 |
|
// per voice equalizer |
1362 |
|
else if ("eq1_freq_on" == key_cc || "eq1_freq" == key_cc) pCurDef->eq1_freq_oncc.set(num_cc, ToInt(value)); |
1363 |
|
else if ("eq2_freq_on" == key_cc || "eq2_freq" == key_cc) pCurDef->eq2_freq_oncc.set(num_cc, ToInt(value)); |
1364 |
|
else if ("eq3_freq_on" == key_cc || "eq3_freq" == key_cc) pCurDef->eq3_freq_oncc.set(num_cc, ToInt(value)); |
1365 |
|
else if ("eq1_bw_on" == key_cc || "eq1_bw" == key_cc) pCurDef->eq1_bw_oncc.set(num_cc, ToInt(value)); |
1366 |
|
else if ("eq2_bw_on" == key_cc || "eq2_bw" == key_cc) pCurDef->eq2_bw_oncc.set(num_cc, ToInt(value)); |
1367 |
|
else if ("eq3_bw_on" == key_cc || "eq3_bw" == key_cc) pCurDef->eq3_bw_oncc.set(num_cc, ToInt(value)); |
1368 |
|
else if ("eq1_gain_on" == key_cc || "eq1_gain" == key_cc) pCurDef->eq1_gain_oncc.set(num_cc, ToInt(value)); |
1369 |
|
else if ("eq2_gain_on" == key_cc || "eq2_gain" == key_cc) pCurDef->eq2_gain_oncc.set(num_cc, ToInt(value)); |
1370 |
|
else if ("eq3_gain_on" == key_cc || "eq3_gain" == key_cc) pCurDef->eq3_gain_oncc.set(num_cc, ToInt(value)); |
1371 |
|
else if ("pitchlfo_depth" == key_cc) pCurDef->pitchlfo_depthcc.set(num_cc, ToInt(value)); |
1372 |
|
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1373 |
|
} |
1374 |
|
|
1375 |
else { |
else { |
1376 |
std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1377 |
} |
} |
1437 |
} |
} |
1438 |
|
|
1439 |
LFO::LFO(): freq (-1),/* -1 is used to determine whether the LFO was initialized */ |
LFO::LFO(): freq (-1),/* -1 is used to determine whether the LFO was initialized */ |
1440 |
wave(0), delay(0), pitch(0), cutoff(0), resonance(0), pan(0) { |
fade(0), phase(0), wave(0), delay(0), pitch(0), cutoff(0), resonance(0), pan(0) { |
1441 |
|
|
1442 |
} |
} |
1443 |
|
|