MCPcopy Create free account
hub / github.com/DISTRHO/DPF / process

Function process

distrho/src/DistrhoPluginVST3.cpp:1392–1658  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1390 }
1391
1392 v3_result process(v3_process_data* const data)
1393 {
1394 DISTRHO_SAFE_ASSERT_RETURN(data->symbolic_sample_size == V3_SAMPLE_32, V3_INVALID_ARG);
1395 // d_debug("process %i", data->symbolic_sample_size);
1396
1397 // activate plugin if not done yet
1398 if (! fPlugin.isActive())
1399 fPlugin.activate();
1400
1401 #if DISTRHO_PLUGIN_WANT_TIMEPOS
1402 if (v3_process_context* const ctx = data->ctx)
1403 {
1404 fTimePosition.playing = ctx->state & V3_PROCESS_CTX_PLAYING;
1405
1406 // ticksPerBeat is not possible with VST3
1407 fTimePosition.bbt.ticksPerBeat = 1920.0;
1408
1409 if (ctx->state & V3_PROCESS_CTX_PROJECT_TIME_VALID)
1410 fTimePosition.frame = ctx->project_time_in_samples;
1411 else if (ctx->state & V3_PROCESS_CTX_CONT_TIME_VALID)
1412 fTimePosition.frame = ctx->continuous_time_in_samples;
1413
1414 if (ctx->state & V3_PROCESS_CTX_TEMPO_VALID)
1415 fTimePosition.bbt.beatsPerMinute = ctx->bpm;
1416 else
1417 fTimePosition.bbt.beatsPerMinute = 120.0;
1418
1419 if ((ctx->state & (V3_PROCESS_CTX_PROJECT_TIME_VALID|V3_PROCESS_CTX_TIME_SIG_VALID)) == (V3_PROCESS_CTX_PROJECT_TIME_VALID|V3_PROCESS_CTX_TIME_SIG_VALID))
1420 {
1421 const double ppqPos = std::abs(ctx->project_time_quarters);
1422 const int ppqPerBar = ctx->time_sig_numerator * 4 / ctx->time_sig_denom;
1423 const double barBeats = (std::fmod(ppqPos, ppqPerBar) / ppqPerBar) * ctx->time_sig_numerator;
1424 const double rest = std::fmod(barBeats, 1.0);
1425
1426 fTimePosition.bbt.valid = true;
1427 fTimePosition.bbt.bar = static_cast<int32_t>(ppqPos) / ppqPerBar + 1;
1428 fTimePosition.bbt.beat = static_cast<int32_t>(barBeats - rest) + 1;
1429 fTimePosition.bbt.tick = rest * fTimePosition.bbt.ticksPerBeat;
1430 fTimePosition.bbt.beatsPerBar = ctx->time_sig_numerator;
1431 fTimePosition.bbt.beatType = ctx->time_sig_denom;
1432
1433 if (ctx->project_time_quarters < 0.0)
1434 {
1435 --fTimePosition.bbt.bar;
1436 fTimePosition.bbt.beat = ctx->time_sig_numerator - fTimePosition.bbt.beat + 1;
1437 fTimePosition.bbt.tick = fTimePosition.bbt.ticksPerBeat - fTimePosition.bbt.tick - 1;
1438 }
1439 }
1440 else
1441 {
1442 fTimePosition.bbt.valid = false;
1443 fTimePosition.bbt.bar = 1;
1444 fTimePosition.bbt.beat = 1;
1445 fTimePosition.bbt.tick = 0.0;
1446 fTimePosition.bbt.beatsPerBar = 4.0f;
1447 fTimePosition.bbt.beatType = 4.0f;
1448 }
1449

Callers

nothing calls this directly

Calls 12

isActiveMethod · 0.80
appendFromUIMethod · 0.80
appendEventMethod · 0.80
appendCCMethod · 0.80
convertMethod · 0.80
v3_cpp_objFunction · 0.50
activateMethod · 0.45
initMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected