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

Function vst_processReplacing

distrho/src/DistrhoPluginVST2.cpp:1003–1102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1001 }
1002
1003 void vst_processReplacing(const float** const inputs, float** const outputs, const int32_t sampleFrames)
1004 {
1005 if (! fPlugin.isActive())
1006 {
1007 // host has not activated the plugin yet, nasty!
1008 vst_dispatcher(VST_EFFECT_OPCODE_SUSPEND, 0, 1, nullptr, 0.0f);
1009 }
1010
1011 if (sampleFrames <= 0)
1012 {
1013 updateParameterOutputsAndTriggers();
1014 return;
1015 }
1016
1017 #if DISTRHO_PLUGIN_WANT_TIMEPOS
1018 static constexpr const int kWantVstTimeFlags = 0x2602;
1019
1020 if (const VstTimeInfo* const vstTimeInfo = (const VstTimeInfo*)hostCallback(VST_HOST_OPCODE_07, 0, kWantVstTimeFlags))
1021 {
1022 fTimePosition.frame = vstTimeInfo->samplePos;
1023 fTimePosition.playing = vstTimeInfo->flags & 0x2;
1024
1025 // ticksPerBeat is not possible with VST2
1026 fTimePosition.bbt.ticksPerBeat = 1920.0;
1027
1028 if (vstTimeInfo->flags & 0x400)
1029 fTimePosition.bbt.beatsPerMinute = vstTimeInfo->tempo;
1030 else
1031 fTimePosition.bbt.beatsPerMinute = 120.0;
1032
1033 if ((vstTimeInfo->flags & 0x2200) == 0x2200)
1034 {
1035 const double ppqPos = std::abs(vstTimeInfo->ppqPos);
1036 const int ppqPerBar = vstTimeInfo->timeSigNumerator * 4 / vstTimeInfo->timeSigDenominator;
1037 const double barBeats = (std::fmod(ppqPos, ppqPerBar) / ppqPerBar) * vstTimeInfo->timeSigNumerator;
1038 const double rest = std::fmod(barBeats, 1.0);
1039
1040 fTimePosition.bbt.valid = true;
1041 fTimePosition.bbt.bar = static_cast<int32_t>(ppqPos) / ppqPerBar + 1;
1042 fTimePosition.bbt.beat = static_cast<int32_t>(barBeats - rest + 0.5) + 1;
1043 fTimePosition.bbt.tick = rest * fTimePosition.bbt.ticksPerBeat;
1044 fTimePosition.bbt.beatsPerBar = vstTimeInfo->timeSigNumerator;
1045 fTimePosition.bbt.beatType = vstTimeInfo->timeSigDenominator;
1046
1047 if (vstTimeInfo->ppqPos < 0.0)
1048 {
1049 --fTimePosition.bbt.bar;
1050 fTimePosition.bbt.beat = vstTimeInfo->timeSigNumerator - fTimePosition.bbt.beat + 1;
1051 fTimePosition.bbt.tick = fTimePosition.bbt.ticksPerBeat - fTimePosition.bbt.tick - 1;
1052 }
1053 }
1054 else
1055 {
1056 fTimePosition.bbt.valid = false;
1057 fTimePosition.bbt.bar = 1;
1058 fTimePosition.bbt.beat = 1;
1059 fTimePosition.bbt.tick = 0.0;
1060 fTimePosition.bbt.beatsPerBar = 4.0f;

Callers

nothing calls this directly

Calls 6

vst_dispatcherFunction · 0.85
hostCallbackFunction · 0.85
isActiveMethod · 0.80
runMethod · 0.45

Tested by

no test coverage detected