Exemplo n.º 1
0
 public Plugin(string pluginPath)
 {
     bufferSize = Settings.GetInstance().BufferSize;
     sampleRate = Settings.GetInstance().SampleRate;
     _isMuted = false;
     HostCommandStub hcs = new HostCommandStub();
     _ctx = VstPluginContext.Create(pluginPath, hcs);
     _name = _ctx.PluginCommandStub.GetEffectName();
     _id = _name.GetHashCode() + DateTime.Now.Second;
     inMgr = new VstAudioBufferManager(_ctx.PluginInfo.AudioInputCount, bufferSize);
     outMgr = new VstAudioBufferManager(_ctx.PluginInfo.AudioOutputCount, bufferSize);
     inputBuffer = inMgr.ToArray();
     outputBuffer = outMgr.ToArray();
     _ctx.PluginCommandStub.SetBlockSize(bufferSize);
     _ctx.PluginCommandStub.SetSampleRate(sampleRate);
     pluginForm = new PluginWindow(_ctx);
     _ctx.PluginCommandStub.MainsChanged(true);
     _ctx.PluginCommandStub.StartProcess();
 }
Exemplo n.º 2
0
		private void UpdateBlockSize(int blockSize)
		{
			BlockSize = blockSize;

			int inputCount = pluginContext.PluginInfo.AudioInputCount;
			int outputCount = pluginContext.PluginInfo.AudioOutputCount;

			var inputMgr = new VstAudioBufferManager(inputCount, blockSize);
			var outputMgr = new VstAudioBufferManager(outputCount, blockSize);

			pluginContext.PluginCommandStub.SetBlockSize(blockSize);
			pluginContext.PluginCommandStub.SetSampleRate(WaveFormat.SampleRate);
			pluginContext.PluginCommandStub.SetProcessPrecision(VstProcessPrecision.Process32);

			inputBuffers = inputMgr.ToArray();
			outputBuffers = outputMgr.ToArray();

			input = new float[WaveFormat.Channels * blockSize];
			output = new float[WaveFormat.Channels * blockSize];
		}
Exemplo n.º 3
0
        static void Method(VstPluginContext PluginContext, int bytesWritten, byte[] destBuffer)
        {
            int inputCount = PluginContext.PluginInfo.AudioInputCount;
            int outputCount = PluginContext.PluginInfo.AudioOutputCount;
            int blockSize = bytesWritten;

            VstAudioBufferManager inputMgr = new VstAudioBufferManager(inputCount, blockSize);
            VstAudioBufferManager outputMgr = new VstAudioBufferManager(outputCount, blockSize);

            foreach (VstAudioBuffer buffer in inputMgr.ToArray())
            {
                for (int i = 0; i < blockSize; i++)
                {
                    buffer[i] = (float)destBuffer[i] / 128.0f - 1.0f;
                }
            }

            PluginContext.PluginCommandStub.SetBlockSize(blockSize);
            PluginContext.PluginCommandStub.SetSampleRate(44.8f);

            PluginContext.PluginCommandStub.StartProcess();
            PluginContext.PluginCommandStub.ProcessReplacing(inputMgr.ToArray(), outputMgr.ToArray());
            PluginContext.PluginCommandStub.StopProcess();

            foreach (VstAudioBuffer buffer in outputMgr.ToArray())
            {
                for (int i = 0; i < blockSize; i++)
                {
                    destBuffer[i] = Convert.ToByte(((float)buffer[i] + 1.0f) * 128.0f);
                }
            }
            inputMgr.ClearBuffer(inputMgr.ToArray()[0]);
            inputMgr.ClearBuffer(inputMgr.ToArray()[1]);
            inputMgr.Dispose();
            outputMgr.ClearBuffer(outputMgr.ToArray()[0]);
            outputMgr.ClearBuffer(outputMgr.ToArray()[1]);
            outputMgr.Dispose();
        }
Exemplo n.º 4
0
        private void GenerateNoiseBtn_Click(object sender, EventArgs e)
        {
            // plugin does not support processing audio
            if (( PluginContext.PluginInfo.Flags & VstPluginFlags.CanReplacing ) == 0)
            {
                MessageBox.Show(this, "This plugin does not process any audio.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            int inputCount = PluginContext.PluginInfo.AudioInputCount;
            int outputCount = PluginContext.PluginInfo.AudioOutputCount;
            int blockSize = 1024;

            // wrap these in using statements to automatically call Dispose and cleanup the unmanaged memory.
            using (VstAudioBufferManager inputMgr = new VstAudioBufferManager(inputCount, blockSize))
            {
                using (VstAudioBufferManager outputMgr = new VstAudioBufferManager(outputCount, blockSize))
                {
                    foreach (VstAudioBuffer buffer in inputMgr.ToArray())
                    {
                        Random rnd = new Random((int)DateTime.Now.Ticks);

                        for (int i = 0; i < blockSize; i++)
                        {
                            // generate a value between -1.0 and 1.0
                            buffer[i] = (float)((rnd.NextDouble() * 2.0) - 1.0);
                        }
                    }

                    PluginContext.PluginCommandStub.SetBlockSize(blockSize);
                    PluginContext.PluginCommandStub.SetSampleRate(44100f);

                    VstAudioBuffer[] inputBuffers = inputMgr.ToArray();
                    VstAudioBuffer[] outputBuffers = outputMgr.ToArray();

                    PluginContext.PluginCommandStub.MainsChanged(true);
                    PluginContext.PluginCommandStub.StartProcess();
                    PluginContext.PluginCommandStub.ProcessReplacing(inputBuffers, outputBuffers);
                    PluginContext.PluginCommandStub.StopProcess();
                    PluginContext.PluginCommandStub.MainsChanged(false);

                    for (int i = 0; i < inputBuffers.Length && i < outputBuffers.Length; i++)
                    {
                        for (int j = 0; j < blockSize; j++)
                        {
                            if (inputBuffers[i][j] != outputBuffers[i][j])
                            {
                                if (outputBuffers[i][j] != 0.0)
                                {
                                    MessageBox.Show(this, "The plugin has processed the audio.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    return;
                                }
                            }
                        }
                    }

                    MessageBox.Show(this, "The plugin has passed the audio unchanged to its outputs.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
Exemplo n.º 5
0
        private void UpdateBlockSize(int blockSize)
        {
            BlockSize = blockSize;

            int outputCount = pluginContext.PluginInfo.AudioOutputCount;

            VstAudioBufferManager outputMgr = new VstAudioBufferManager(outputCount, blockSize);

            pluginContext.PluginCommandStub.SetSampleRate(44800f);
            pluginContext.PluginCommandStub.SetBlockSize(blockSize);

            inputBuffers = new VstAudioBuffer[0];
            outputBuffers = outputMgr.ToArray();

            output = new float[2 * blockSize];
        }
Exemplo n.º 6
0
        /// <summary>
        /// we need to reflect the end of time in bars, or what-ever loop points are set.
        /// </summary>
        /// <param name="blockSize"></param>
        private void UpdateBlockSize(int blockSize)
        {
            VstAudioBufferManager ii = null, io = null, ei = null, eo = null;
            BlockSize = blockSize;
            ii  = new VstAudioBufferManager(instrument.PluginInfo.AudioInputCount, blockSize);
            io = new VstAudioBufferManager(instrument.PluginInfo.AudioOutputCount, blockSize);

            if (effect!=null)
            {
                ei  = new VstAudioBufferManager(effect.PluginInfo.AudioInputCount, blockSize);
                eo = new VstAudioBufferManager(effect.PluginInfo.AudioOutputCount, blockSize);
            }

            UpdateBlock(instrument,blockSize);
            if (effect!=null) UpdateBlock(effect,blockSize);

            insI = ii.ToArray();
            insO = io.ToArray();
            effI = ei.ToArray();
            effO = eo.ToArray();

            input  = new float[WaveFormat.Channels * blockSize];
            output = new float[WaveFormat.Channels * blockSize];
        }
        public override int Read(float[] buffer, int offset, int samplesRequested)
        {
            int sampleCount = samplesRequested / 2;

            plugin.SetBlockSize(sampleCount);
            plugin.SetSampleRate(WaveFormat.SampleRate);
            plugin.SetProcessPrecision(VstProcessPrecision.Process32);

            using (VstAudioBufferManager inputMgr = new VstAudioBufferManager(info.AudioInputCount, samplesRequested))
                using (VstAudioBufferManager outputMgr = new VstAudioBufferManager(info.AudioOutputCount, samplesRequested))
            {
                {
                    vstBufIn = inputMgr.ToArray();
                    vstBufOut = outputMgr.ToArray();

                    plugin.StartProcess();
                    plugin.ProcessReplacing(vstBufIn,vstBufOut);
                    plugin.StopProcess();

                    int i = 0, j = 0;
                    while (j < samplesRequested/2)
                    {
                        buffer[i++] = vstBufOut[0][j];
                        buffer[i++] = vstBufOut[1][j++];
                    }
                }
            }
            Debug.Print("Requested: {0}, Returned: {1}, Offset: {2}",samplesRequested,vstBufOut[0].SampleCount,offset);
            return samplesRequested;
        }
        public int Readx2x(float[] destBuffer, int position, int bytesRequested)
        {
            Debug.Print("VST Read Operation!!! {0}, {1}",position,bytesRequested);
            int inputCount = PluginContext.PluginInfo.AudioInputCount;
            int outputCount = PluginContext.PluginInfo.AudioOutputCount;

            PluginContext.PluginCommandStub.SetBlockSize(bytesRequested);
            PluginContext.PluginCommandStub.SetSampleRate(WaveFormat.SampleRate);
            PluginContext.PluginCommandStub.SetProcessPrecision(VstProcessPrecision.Process32);

            using (VstAudioBufferManager inputMgr = new VstAudioBufferManager(inputCount, bytesRequested))
                using (VstAudioBufferManager outputMgr = new VstAudioBufferManager(outputCount, bytesRequested))
            {
            //				if (IsProcessReplacing)
                foreach (VstAudioBuffer buffer in inputMgr.ToArray())
                    for (int i = 0; i < bytesRequested; i++)
                        buffer[i] = destBuffer[i];

                PluginContext.PluginCommandStub.ProcessReplacing(inputMgr.ToArray(), outputMgr.ToArray());

                foreach (VstAudioBuffer buffer in outputMgr.ToArray())
                    for (int i = 0; i < bytesRequested; i++)
                {
                    destBuffer[i] = (byte)buffer[i];
                    Debug.Print("index: {i}, data: {0}",i,buffer[i]);
                }
                lastPosition += bytesRequested;
                position += bytesRequested;
                return bytesRequested;
                // The Original
                // ---------------------------------------
            //				foreach (VstAudioBuffer buffer in outputMgr.ToArray())
            //					for (int i = 0; i < blockSize; i++)
            //				{
            //					destBuffer[i] = Convert.ToByte(((float)buffer[i] + 1.0f) * 128.0f);
            //				}
                // Jakobi's Process
                // ---------------------------------------
            //				for (int i = 0; i < inputBuffers.Length && i < outputBuffers.Length; i++)
            //					for (int j = 0; j < blockSize; j++)
            //						if (inputBuffers[i][j] != outputBuffers[i][j])
            //							if (outputBuffers[i][j] != 0.0)
            //				{
            //					MessageBox.Show(this, "The plugin has processed the audio.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            //					return;
            //				}
                // Continued Forum Post Code:
                // ---------------------------------------
            //			inputMgr.ClearBuffer(inputMgr.ToArray()[0]);
            //			inputMgr.ClearBuffer(inputMgr.ToArray()[1]);
            //			inputMgr.Dispose();
            //			outputMgr.ClearBuffer(outputMgr.ToArray()[0]);
            //			outputMgr.ClearBuffer(outputMgr.ToArray()[1]);
            //			outputMgr.Dispose();
            }
        }
Exemplo n.º 9
0
        protected void Load(string filename)
        {
            if (File.Exists(filename))
            {

                PluginContext = OpenPlugin(filename);
                if(PluginContext == null) return;

                SetOutputCount(PluginContext.PluginInfo.AudioOutputCount);

                PluginContext.PluginCommandStub.MainsChanged(true);
                PluginContext.PluginCommandStub.SetSampleRate(WaveFormat.SampleRate);
                PluginContext.PluginCommandStub.SetBlockSize(AudioService.Engine.Settings.BufferSize);
                FIsSynth = PluginContext.PluginInfo.Flags.HasFlag(VstPluginFlags.IsSynth);
                
                PluginContext.PluginCommandStub.StartProcess();

                FInputCount = PluginContext.PluginInfo.AudioInputCount;
                FOutputCount = PluginContext.PluginInfo.AudioOutputCount;

                FInputMgr = new VstAudioBufferManager(FInputCount, AudioService.Engine.Settings.BufferSize);
                FOutputMgr = new VstAudioBufferManager(FOutputCount, AudioService.Engine.Settings.BufferSize);

                FInputBuffers = FInputMgr.ToArray();
                FOutputBuffers = FOutputMgr.ToArray();

                // plugin does not support processing audio
                if ((PluginContext.PluginInfo.Flags & VstPluginFlags.CanReplacing) == 0)
                {
                    MessageBox.Show("This plugin does not process any audio.");
                    return;
                }

                FCanEvents = PluginContext.PluginCommandStub.CanDo("receiveVstMidiEvent") == VstCanDoResult.Yes; 

                InfoForm = new PluginInfoForm();
                InfoForm.PluginContext = PluginContext;
                InfoForm.DataToForm();
                InfoForm.Dock = DockStyle.Fill;

                GetPluginInfo();
                GetProgramNames();

                if (PluginChanged != null)
                    PluginChanged();

                FDoProcess = true;
            }
        }
Exemplo n.º 10
0
		protected void ManageBuffers(int count)
		{
			if(FInputMgr.BufferSize != count)
			{
				FInputMgr.Dispose();
				FOutputMgr.Dispose();
				
				FInputMgr = new VstAudioBufferManager(FInputCount, count);
				FOutputMgr = new VstAudioBufferManager(FOutputCount, count);
				
				FInputBuffers = FInputMgr.ToArray();
				FOutputBuffers = FOutputMgr.ToArray();
			}
		}
Exemplo n.º 11
0
        private void InitBuffer(int inputCount, int outputCount, int blockSize, int sampleRate)
        {
            VstAudioBufferManager inputMgr = new VstAudioBufferManager(inputCount, blockSize);
            VstAudioBufferManager outputMgr = new VstAudioBufferManager(outputCount, blockSize);

            this.vstInputBuffers = inputMgr.ToArray();
            this.vstOutputBuffers = outputMgr.ToArray();

            this.PluginContext.PluginCommandStub.SetBlockSize(blockSize);
            this.PluginContext.PluginCommandStub.SetSampleRate((float)sampleRate);
            this.PluginContext.PluginCommandStub.SetProcessPrecision(VstProcessPrecision.Process32);

            this.lastProcessedBufferRight = new float[BlockSize];
            this.lastProcessedBufferLeft = new float[BlockSize];
        }
Exemplo n.º 12
0
        private void GenerateNoiseBtn_Click(object sender, EventArgs e)
        {
            // plugin does not support processing audio
            if ((PluginContext.PluginInfo.Flags & VstPluginFlags.CanReplacing) == 0)
            {
                MessageBox.Show(this, "This plugin does not process any audio.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            int       inputCount  = PluginContext.PluginInfo.AudioInputCount;
            int       outputCount = PluginContext.PluginInfo.AudioOutputCount;
            const int blockSize   = 1024;

            // wrap these in using statements to automatically call Dispose and cleanup the unmanaged memory.
            using (var inputMgr = new VstAudioBufferManager(inputCount, blockSize))
            {
                using (var outputMgr = new VstAudioBufferManager(outputCount, blockSize))
                {
                    foreach (VstAudioBuffer buffer in inputMgr.ToArray())
                    {
                        try {
                            var rnd = new Random((int)DateTime.Now.Ticks);
                            for (int i = 0; i < blockSize; i++)
                            {
                                // generate a value between -1.0 and 1.0
                                buffer[i] = (float)((rnd.NextDouble() * 2.0) - 1.0);
                            }
                        } catch (OverflowException oe) {
                            System.Diagnostics.Debug.WriteLine(oe);
                        }
                    }

                    PluginContext.PluginCommandStub.SetBlockSize(blockSize);
                    PluginContext.PluginCommandStub.SetSampleRate(44100f);

                    VstAudioBuffer[] inputBuffers  = inputMgr.ToArray();
                    VstAudioBuffer[] outputBuffers = outputMgr.ToArray();

                    PluginContext.PluginCommandStub.MainsChanged(true);
                    PluginContext.PluginCommandStub.StartProcess();
                    PluginContext.PluginCommandStub.ProcessReplacing(inputBuffers, outputBuffers);
                    PluginContext.PluginCommandStub.StopProcess();
                    PluginContext.PluginCommandStub.MainsChanged(false);

                    for (int i = 0; i < inputBuffers.Length && i < outputBuffers.Length; i++)
                    {
                        for (int j = 0; j < blockSize; j++)
                        {
                            if (inputBuffers[i][j] != outputBuffers[i][j])
                            {
                                if (outputBuffers[i][j] != 0.0)
                                {
                                    MessageBox.Show(this, "The plugin has processed the audio.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    return;
                                }
                            }
                        }
                    }

                    MessageBox.Show(this, "The plugin has passed the audio unchanged to its outputs.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
Exemplo n.º 13
0
        public VSTStream(int sampleRate, int channels, int blockSize, List<IVstPluginCommandStub> plugins, string waveFilePath)
            : base(sampleRate, channels)
        {
            this.plugins = plugins;
            this.sampleRate = sampleRate;
            this.channels = channels;
            this.blockSize = blockSize;
            this.waveFilePath = waveFilePath;

            plugins[0].SetBlockSize(blockSize);
            plugins[0].SetSampleRate((float)sampleRate);
            plugins[0].SetProcessPrecision(VstProcessPrecision.Process32);

            vstBufManIn = new VstAudioBufferManager(channels, blockSize);
            vstBufManOut = new VstAudioBufferManager(channels, blockSize);

            vstBufIn = vstBufManIn.ToArray();
            vstBufOut = vstBufManOut.ToArray();

            // 4 bytes per sample (32 bit)
            naudioBuf = new byte[blockSize * channels * 4];

            wavStream = new WaveChannel32(new WaveFileReader(waveFilePath));
            wavStream.Volume = 1f;
        }
Exemplo n.º 14
0
 void UpdateBlockSize( NAudioVST naudiovst, VstPlugin plugin, AudioProcess parent)
 {
     VstAudioBufferManager io = new VstAudioBufferManager(plugin.PluginInfo.AudioOutputCount, BlockSize);
     UpdateBlock(naudiovst,plugin);
     binput = parent.boutput;
     boutput = io.ToArray();
 }
Exemplo n.º 15
0
        void UpdateBlockSize( NAudioVST naudiovst, VstPlugin plugin )
        {
            VstAudioBufferManager ii = null, io = null;

            ii  = new VstAudioBufferManager(plugin.PluginInfo.AudioInputCount, BlockSize);
            io = new VstAudioBufferManager(plugin.PluginInfo.AudioOutputCount, BlockSize);

            UpdateBlock(naudiovst,plugin);

            binput = ii.ToArray();
            boutput = io.ToArray();
        }