public AudioBufferInfo(int count, int blockSize) { Count = count; // Create VST.NET output buffers Raw = new float *[count]; Buffers = new VstAudioBuffer[count]; mVstAudioBufferManager = new VstAudioBufferManager(count, blockSize); IEnumerator <VstAudioBuffer> bufferEnumerator = mVstAudioBufferManager.GetEnumerator(); bufferEnumerator.MoveNext(); for (int i = 0; i < count; i++) { Buffers[i] = (VstAudioBuffer)bufferEnumerator.Current; Raw[i] = ((IDirectBufferAccess32)Buffers[i]).Buffer; bufferEnumerator.MoveNext(); } }
public static int ProcessFile( string inputFile, string outputFile, VstPluginContext pluginContext, System.Threading.CancellationToken cancellationToken ) { var isDoublePrecision = pluginContext.PluginInfo.Flags.HasFlag(VstPluginFlags.CanDoubleReplacing); var pcmInput = new WAVParser(inputFile); var pcmOutput = new WAVParser { ChannelCount = pcmInput.ChannelCount, Samples = new List <List <double> >(), SampleRate = pcmInput.SampleRate, }; for (int i = 0; i < pcmOutput.ChannelCount; i++) { pcmOutput.Samples.Add(new List <double>()); } pluginContext.PluginCommandStub.SetSampleRate(pcmInput.SampleRate); pluginContext.PluginCommandStub.SetProcessPrecision(VstProcessPrecision.Process32); // hint: samples per buffer should be equal to pcmInput.SampleRate int samplesPerBuffer = (int)pcmInput.SampleRate; pluginContext.PluginCommandStub.SetBlockSize(samplesPerBuffer); int inputCount = pluginContext.PluginInfo.AudioInputCount; int outputCount = pluginContext.PluginInfo.AudioOutputCount; VstAudioBuffer[] vstBufIn = null, vstBufOut = null; VstAudioPrecisionBuffer[] vstBufIn2 = null, vstBufOut2 = null; if (isDoublePrecision) { var vstBufManIn = new VstAudioPrecisionBufferManager(inputCount, samplesPerBuffer); var vstBufManOut = new VstAudioPrecisionBufferManager(outputCount, samplesPerBuffer); vstBufIn2 = NumeratorToArray(vstBufManIn.GetEnumerator()); vstBufOut2 = NumeratorToArray(vstBufManOut.GetEnumerator()); } else { var vstBufManIn = new VstAudioBufferManager(inputCount, samplesPerBuffer); var vstBufManOut = new VstAudioBufferManager(outputCount, samplesPerBuffer); vstBufIn = NumeratorToArray(vstBufManIn.GetEnumerator()); vstBufOut = NumeratorToArray(vstBufManOut.GetEnumerator()); } pluginContext.PluginCommandStub.MainsChanged(true); pluginContext.PluginCommandStub.StartProcess(); for (int samplesOffset = 0; samplesOffset < pcmInput.SamplesCount; samplesOffset += (int)pcmInput.SampleRate) { if (cancellationToken.IsCancellationRequested) { return(ReturnCodeOffset + 20); } var result = ProcessSingleBuffer( pluginContext, samplesOffset, vstBufIn, vstBufOut, vstBufIn2, vstBufOut2, isDoublePrecision, pcmInput, pcmOutput, inputCount, outputCount, samplesPerBuffer ); if (result != 0) { return(result); } } // Close VST Context pluginContext.PluginCommandStub.StopProcess(); pluginContext.PluginCommandStub.MainsChanged(false); // Save pcmOutput.Save(outputFile); return(0); }