| 858 | } |
| 859 | |
| 860 | size_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*>( |
no test coverage detected