Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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);
        }