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 if ("pitchlfo_depth" == key_cc) pCurDef->pitchlfo_depthcc.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; |
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, "_phase") == 0) lfo(x).phase = check(key, 0.0f, 360.0f, ToFloat(value)); |
1300 |
|
else if (sscanf(s, "_phase_oncc%d", &y)) lfo(x).phase_oncc.add( CC(y, check(key, 0.0f, 360.0f, ToFloat(value))) ); |
1301 |
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)); |
1302 |
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)); |
1303 |
|
else if (sscanf(s, "_pitch_oncc%d", &y)) lfo(x).pitch_oncc.add( CC(y, check(key, -9600, 9600, ToInt(value))) ); |
1304 |
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)); |
1305 |
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)); |
1306 |
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)); |
1307 |
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1308 |
} |
} |
1309 |
|
|
1310 |
|
// CCs |
1311 |
|
else if (key.find("cc") != std::string::npos) |
1312 |
|
{ |
1313 |
|
std::string::size_type delimiter_index = key.find("cc"); |
1314 |
|
std::string key_cc = key.substr(0, delimiter_index); |
1315 |
|
int num_cc = ToInt(key.substr(delimiter_index + 2)); |
1316 |
|
|
1317 |
|
// input controls |
1318 |
|
if ("lo" == key_cc) pCurDef->locc.set(num_cc, ToInt(value)); |
1319 |
|
else if ("hi" == key_cc) pCurDef->hicc.set(num_cc, ToInt(value)); |
1320 |
|
else if ("start_lo" == key_cc) pCurDef->start_locc.set(num_cc, ToInt(value)); |
1321 |
|
else if ("start_hi" == key_cc) pCurDef->start_hicc.set(num_cc, ToInt(value)); |
1322 |
|
else if ("stop_lo" == key_cc) pCurDef->stop_locc.set(num_cc, ToInt(value)); |
1323 |
|
else if ("stop_hi" == key_cc) pCurDef->stop_hicc.set(num_cc, ToInt(value)); |
1324 |
|
else if ("on_lo" == key_cc) pCurDef->on_locc.set(num_cc, ToInt(value)); |
1325 |
|
else if ("on_hi" == key_cc) pCurDef->on_hicc.set(num_cc, ToInt(value)); |
1326 |
|
|
1327 |
|
// sample player |
1328 |
|
else if ("delay_on" == key_cc) pCurDef->delay_oncc.set(num_cc, ToFloat(value)); |
1329 |
|
else if ("delay_samples_on" == key_cc) pCurDef->delay_samples_oncc.set(num_cc, ToInt(value)); |
1330 |
|
else if ("offset_on" == key_cc) pCurDef->offset_oncc.set(num_cc, ToInt(value)); |
1331 |
|
|
1332 |
|
// amplifier |
1333 |
|
else if ("gain_on" == key_cc || "gain_" == key_cc) pCurDef->gain_oncc.set(num_cc, ToFloat(value)); |
1334 |
|
else if ("xfin_lo" == key_cc) pCurDef->xfin_locc.set(num_cc, ToInt(value)); |
1335 |
|
else if ("xfin_hi" == key_cc) pCurDef->xfin_hicc.set(num_cc, ToInt(value)); |
1336 |
|
else if ("xfout_lo" == key_cc) pCurDef->xfout_locc.set(num_cc, ToInt(value)); |
1337 |
|
else if ("xfout_hi" == key_cc) pCurDef->xfout_hicc.set(num_cc, ToInt(value)); |
1338 |
|
|
1339 |
|
// filter |
1340 |
|
else if ("cutoff_on" == key_cc || "cutoff_" == key_cc) { |
1341 |
|
pCurDef->cutoff_oncc.set(num_cc, ToInt(value)); |
1342 |
|
pCurDef->cutoff_cc = num_cc; |
1343 |
|
} else if ("cutoff2_on" == key_cc) pCurDef->cutoff2_oncc.set(num_cc, ToInt(value)); |
1344 |
|
else if ("cutoff_smooth" == key_cc) pCurDef->cutoff_smoothcc.set(num_cc, ToInt(value)); |
1345 |
|
else if ("cutoff2_smooth" == key_cc) pCurDef->cutoff2_smoothcc.set(num_cc, ToInt(value)); |
1346 |
|
else if ("cutoff_step" == key_cc) pCurDef->cutoff_stepcc.set(num_cc, ToInt(value)); |
1347 |
|
else if ("cutoff2_step" == key_cc) pCurDef->cutoff2_stepcc.set(num_cc, ToInt(value)); |
1348 |
|
else if ("cutoff_curve" == key_cc) pCurDef->cutoff_curvecc.set(num_cc, ToInt(value)); |
1349 |
|
else if ("cutoff2_curve" == key_cc) pCurDef->cutoff2_curvecc.set(num_cc, ToInt(value)); |
1350 |
|
else if ("resonance_on" == key_cc) pCurDef->resonance_oncc.set(num_cc, ToInt(value)); |
1351 |
|
else if ("resonance2_on" == key_cc) pCurDef->resonance2_oncc.set(num_cc, ToInt(value)); |
1352 |
|
else if ("resonance_smooth" == key_cc) pCurDef->resonance_smoothcc.set(num_cc, ToInt(value)); |
1353 |
|
else if ("resonance2_smooth" == key_cc) pCurDef->resonance2_smoothcc.set(num_cc, ToInt(value)); |
1354 |
|
else if ("resonance_step" == key_cc) pCurDef->resonance_stepcc.set(num_cc, ToInt(value)); |
1355 |
|
else if ("resonance2_step" == key_cc) pCurDef->resonance2_stepcc.set(num_cc, ToInt(value)); |
1356 |
|
else if ("resonance_curve" == key_cc) pCurDef->resonance_curvecc.set(num_cc, ToInt(value)); |
1357 |
|
else if ("resonance2_curve" == key_cc) pCurDef->resonance2_curvecc.set(num_cc, ToInt(value)); |
1358 |
|
|
1359 |
|
// per voice equalizer |
1360 |
|
else if ("eq1_freq_on" == key_cc || "eq1_freq" == key_cc) pCurDef->eq1_freq_oncc.set(num_cc, ToInt(value)); |
1361 |
|
else if ("eq2_freq_on" == key_cc || "eq2_freq" == key_cc) pCurDef->eq2_freq_oncc.set(num_cc, ToInt(value)); |
1362 |
|
else if ("eq3_freq_on" == key_cc || "eq3_freq" == key_cc) pCurDef->eq3_freq_oncc.set(num_cc, ToInt(value)); |
1363 |
|
else if ("eq1_bw_on" == key_cc || "eq1_bw" == key_cc) pCurDef->eq1_bw_oncc.set(num_cc, ToInt(value)); |
1364 |
|
else if ("eq2_bw_on" == key_cc || "eq2_bw" == key_cc) pCurDef->eq2_bw_oncc.set(num_cc, ToInt(value)); |
1365 |
|
else if ("eq3_bw_on" == key_cc || "eq3_bw" == key_cc) pCurDef->eq3_bw_oncc.set(num_cc, ToInt(value)); |
1366 |
|
else if ("eq1_gain_on" == key_cc || "eq1_gain" == key_cc) pCurDef->eq1_gain_oncc.set(num_cc, ToInt(value)); |
1367 |
|
else if ("eq2_gain_on" == key_cc || "eq2_gain" == key_cc) pCurDef->eq2_gain_oncc.set(num_cc, ToInt(value)); |
1368 |
|
else if ("eq3_gain_on" == key_cc || "eq3_gain" == key_cc) pCurDef->eq3_gain_oncc.set(num_cc, ToInt(value)); |
1369 |
|
else if ("pitchlfo_depth" == key_cc) pCurDef->pitchlfo_depthcc.set(num_cc, ToInt(value)); |
1370 |
|
else std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1371 |
|
} |
1372 |
|
|
1373 |
else { |
else { |
1374 |
std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
std::cerr << "The opcode '" << key << "' is unsupported by libsfz!" << std::endl; |
1375 |
} |
} |
1435 |
} |
} |
1436 |
|
|
1437 |
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 */ |
1438 |
wave(0), delay(0), pitch(0), cutoff(0), resonance(0), pan(0) { |
phase(0), wave(0), delay(0), pitch(0), cutoff(0), resonance(0), pan(0) { |
1439 |
|
|
1440 |
} |
} |
1441 |
|
|