MCPcopy Create free account
hub / github.com/audacity/audacity / Process

Method Process

libraries/lib-vst3/VST3Wrapper.cpp:860–946  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

858}
859
860size_t VST3Wrapper::Process(const float* const* inBlock, float* const* outBlock, size_t blockLen)
861{
862 using namespace Steinberg;
863
864 InputParameterChanges inputParameterChanges(mParameters, mParameterQueues.get());
865 mParameters.clear();
866
867 Vst::ProcessData data;
868 data.processMode = mSetup.processMode;
869 data.symbolicSampleSize = mSetup.symbolicSampleSize;
870 data.inputParameterChanges = &inputParameterChanges;
871 data.processContext = &mProcessContext;
872
873 static_assert(std::numeric_limits<decltype(blockLen)>::max()
874 >= std::numeric_limits<decltype(data.numSamples)>::max());
875
876 data.numSamples = static_cast<decltype(data.numSamples)>(std::min(
877 blockLen,
878 static_cast<decltype(blockLen)>(mSetup.maxSamplesPerBlock)
879 ));
880
881 data.numInputs = inBlock == nullptr ? 0 : mEffectComponent->getBusCount(Vst::kAudio, Vst::kInput);
882 data.numOutputs = outBlock == nullptr ? 0 : mEffectComponent->getBusCount(Vst::kAudio, Vst::kOutput);
883
884 if(data.numInputs > 0)
885 {
886 int inputBlocksOffset {0};
887
888 data.inputs = static_cast<Vst::AudioBusBuffers*>(
889 alloca(sizeof(Vst::AudioBusBuffers) * data.numInputs));
890
891 for(int busIndex = 0; busIndex < data.numInputs; ++busIndex)
892 {
893 Vst::BusInfo busInfo { };
894 if(mEffectComponent->getBusInfo(Vst::kAudio, Vst::kInput, busIndex, busInfo) != kResultOk)
895 {
896 return 0;
897 }
898 if(busInfo.busType == Vst::kMain)
899 {
900 data.inputs[busIndex].numChannels = busInfo.channelCount;
901 data.inputs[busIndex].channelBuffers32 = const_cast<float**>(inBlock + inputBlocksOffset);
902 inputBlocksOffset += busInfo.channelCount;
903 }
904 else
905 {
906 //aux is not yet supported
907 data.inputs[busIndex].numChannels = 0;
908 data.inputs[busIndex].channelBuffers32 = nullptr;
909 }
910 data.inputs[busIndex].silenceFlags = 0UL;
911 }
912 }
913 if(data.numOutputs > 0)
914 {
915 int outputBlocksOffset {0};
916
917 data.outputs = static_cast<Vst::AudioBusBuffers*>(

Callers 2

RealtimeProcessMethod · 0.45
ProcessBlockMethod · 0.45

Calls 5

maxFunction · 0.85
minFunction · 0.50
getMethod · 0.45
clearMethod · 0.45
processMethod · 0.45

Tested by

no test coverage detected