Пример #1
0
		static VstPluginBank Prepare(IVstPluginContext plugin)
		{
			VstPluginBank bank = new VstPluginBank();
			bank.ChunkMagic = ckMagic;
			bank.PluginId = plugin.PluginInfo.PluginID;
			return bank;
		}
Пример #2
0
        static VstPluginBank Prepare(IVstPluginContext plugin)
        {
            VstPluginBank bank = new VstPluginBank();

            bank.ChunkMagic = ckMagic;
            bank.PluginId   = plugin.PluginInfo.PluginID;
            return(bank);
        }
Пример #3
0
        private float[] ProcessReplace(int blockSize, IVstPluginContext plugin)
        {
            lock (this)
            {
                if (blockSize != BlockSize)
                {
                    UpdateBlockSize(blockSize, plugin);
                }
                try
                {
                    plugin.PluginCommandStub.StartProcess();
                    plugin.PluginCommandStub.ProcessReplacing(inputBuffers, outputBuffers);
                    plugin.PluginCommandStub.StopProcess();
                }
                catch (Exception ex)
                {
                    Debug.Print("IO Write Error");
                    Console.Out.WriteLine(ex.Message);
                }

                int indexOutput = 0;
                int oc          = plugin.PluginInfo.AudioOutputCount;

                float maxL = float.MinValue;
                float maxR = float.MinValue;

                for (int j = 0; j < BlockSize; j++)
                {
                    output[indexOutput]     = outputBuffers[0][j];
                    output[indexOutput + 1] = outputBuffers[(oc > 1)?1:0][j];
                    indexOutput            += 2;
                }

                //				// try to find when processing input file has reached
                //				// zero volume level
                //				float almostZero = 0.0000001f;
                //				if (maxL < almostZero && maxR < almostZero) {
                //					//Console.Out.Write("-");
                //
                //					// don't stop until we have x consequetive silence calls after each other
                //					if (foundSilenceCounter >= 5) {
                //						if (wavStream != null && wavStream.CurrentTime >= wavStream.TotalTime) {
                //							RaisePlayingStopped();
                //						}
                //					} else {
                //						foundSilenceCounter++;
                //					}
                //				} else {
                //					foundSilenceCounter = 0;
                //					//Console.Out.Write(".");
                //				}
                RaiseProcessCalled(maxL, maxR);
            }
            return(output);
        }
Пример #4
0
 /// .begin<br/>
 ///   set(pgmid)<br/>
 ///   ck=getchunk<br/>
 ///   if (ck.NotNull) setchunk<br/>
 /// .end
 /// <param name="pluginContext">plugin</param>
 /// <param name="pgmId">the program we're modifying</param>
 public void Apply(IVstPluginContext pluginContext, int pgmId /*, byte[] data*/)
 {
     {
         plugin.begin();
         pluginContext.PluginCommandStub.BeginSetProgram();
         plugin.PluginCommandStub.SetProgram(pgmId);
         byte[] ck = GetChunk(true);
         // if we have program data, send it to the plugin
         if (ck != null)
         {
             Apply(pluginContext, ck, true);
         }
         ck = null;
         plugin.end();
     }
     plugin.idle();
 }
Пример #5
0
        public static void IdleLoop(IVstPluginContext ctx, int loops)
        {
            var outputCount = ctx.PluginInfo.AudioOutputCount;
            var inputCount  = ctx.PluginInfo.AudioInputCount;

            using (var inputMgr = new VstAudioBufferManager(inputCount, BlockSize))
            {
                using (var outputMgr = new VstAudioBufferManager(outputCount, BlockSize))
                {
                    var outputBuffers = outputMgr.ToArray();
                    var inputBuffers  = inputMgr.ToArray();
                    int k;

                    for (k = 0; k < loops; k++)
                    {
                        ctx.PluginCommandStub.ProcessReplacing(inputBuffers, outputBuffers);
                    }
                }
            }
        }
Пример #6
0
        private void UpdateBlockSize(int blockSize, IVstPluginContext plugin)
        {
            BlockSize = blockSize;

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

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

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

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

            input  = new float[WaveFormat.Channels * blockSize];
            output = new float[WaveFormat.Channels * blockSize];
        }
Пример #7
0
        private static int ProcessSingleBuffer(
            IVstPluginContext pluginContext,
            int samplesOffset,
            VstAudioBuffer[] vstBufIn,
            VstAudioBuffer[] vstBufOut,
            VstAudioPrecisionBuffer[] vstBufIn2,
            VstAudioPrecisionBuffer[] vstBufOut2,
            bool isDoublePrecision,
            WAVParser pcmInput,
            WAVParser pcmOutput,
            int vstInputCount,
            int vstOutputCount,
            int samplesPerBuffer
            )
        {
            var result = ProcessSingleBufferClearBuffers(
                vstBufIn,
                vstBufOut,
                vstBufIn2,
                vstBufOut2,
                isDoublePrecision,
                vstInputCount,
                vstOutputCount,
                samplesPerBuffer
                );

            if (result != 0)
            {
                return(result);
            }

            result = ProcessSingleBufferFillBufferInput(
                samplesOffset,
                vstBufIn,
                vstBufIn2,
                isDoublePrecision,
                pcmInput,
                pcmOutput,
                vstOutputCount
                );
            if (result != 0)
            {
                return(result);
            }

            if (isDoublePrecision)
            {
                pluginContext.PluginCommandStub.ProcessReplacing(vstBufIn2, vstBufOut2);
            }
            else
            {
                pluginContext.PluginCommandStub.ProcessReplacing(vstBufIn, vstBufOut);
            }

            result = ProcessSingleBufferFillByteBuffer(
                vstBufOut,
                vstBufOut2,
                isDoublePrecision,
                pcmOutput,
                vstOutputCount,
                samplesPerBuffer
                );

            return(result);
        }
Пример #8
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="context">pugin</param>
 /// <param name="data">byte dump</param>
 /// <param name="isPresent">true if pgm</param>
 /// <returns></returns>
 public int SetChunk(IVstPluginContext context, byte[] data, bool isPreset)
 {
     return context.PluginCommandStub.SetChunk(data,isPreset);
 }
Пример #9
0
 /// .begin<br/>
 ///   set(pgmid)<br/>
 ///   ck=getchunk<br/>
 ///   if (ck.NotNull) setchunk<br/>
 /// .end
 /// <param name="pluginContext">plugin</param>
 /// <param name="pgmId">the program we're modifying</param>
 public void Apply(IVstPluginContext pluginContext, int pgmId/*, byte[] data*/)
 {
     {
         plugin.begin();
         pluginContext.PluginCommandStub.BeginSetProgram();
         plugin.PluginCommandStub.SetProgram(pgmId);
         byte[] ck = GetChunk(true);
         // if we have program data, send it to the plugin
         if (ck!=null) Apply(pluginContext,ck,true);
         ck = null;
         plugin.end();
     }
     plugin.idle();
 }
Пример #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context">pugin</param>
 /// <param name="data">byte dump</param>
 /// <param name="isPresent">true if pgm</param>
 /// <returns></returns>
 public int SetChunk(IVstPluginContext context, byte[] data, bool isPreset)
 {
     return(context.PluginCommandStub.SetChunk(data, isPreset));
 }
Пример #11
0
        private void UpdateBlockSize(int blockSize, IVstPluginContext plugin)
        {
            BlockSize = blockSize;

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

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

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

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

            input = new float[WaveFormat.Channels * blockSize];
            output = new float[WaveFormat.Channels * blockSize];
        }
Пример #12
0
        private float[] ProcessReplace(int blockSize, IVstPluginContext plugin)
        {
            lock (this)
            {
                if (blockSize != BlockSize) UpdateBlockSize(blockSize, plugin);
                try
                {
                    plugin.PluginCommandStub.StartProcess();
                    plugin.PluginCommandStub.ProcessReplacing(inputBuffers, outputBuffers);
                    plugin.PluginCommandStub.StopProcess();
                }
                catch (Exception ex)
                {
                    Debug.Print("IO Write Error");
                    Console.Out.WriteLine(ex.Message);
                }

                int indexOutput = 0;
                int oc = plugin.PluginInfo.AudioOutputCount;

                float maxL = float.MinValue;
                float maxR = float.MinValue;

                for (int j = 0; j < BlockSize; j++)
                {
                    output[indexOutput] = outputBuffers[0][j];
                    output[indexOutput + 1] = outputBuffers[(oc > 1)?1:0][j];
                    indexOutput += 2;
                }

            //				// try to find when processing input file has reached
            //				// zero volume level
            //				float almostZero = 0.0000001f;
            //				if (maxL < almostZero && maxR < almostZero) {
            //					//Console.Out.Write("-");
            //
            //					// don't stop until we have x consequetive silence calls after each other
            //					if (foundSilenceCounter >= 5) {
            //						if (wavStream != null && wavStream.CurrentTime >= wavStream.TotalTime) {
            //							RaisePlayingStopped();
            //						}
            //					} else {
            //						foundSilenceCounter++;
            //					}
            //				} else {
            //					foundSilenceCounter = 0;
            //					//Console.Out.Write(".");
            //				}
                RaiseProcessCalled(maxL, maxR);
            }
            return output;
        }
Пример #13
0
 ///
 /// <param name="pluginContext">plugin</param>
 public void Apply(IVstPluginContext pluginContext)
 {
     Apply(pluginContext, this.id);
 }
Пример #14
0
 /// set program or pattern data.
 /// <param name="isPat">true if data is pattern.  false if data is patch</param>
 /// <param name="data">binary dump</param>
 /// <param name="pluginContext">plugin</param>
 public void Apply(IVstPluginContext pluginContext, byte[] data, bool isPat)
 {
     SetChunk(pluginContext, data, true);
 }
Пример #15
0
 VstEditorViewer(INaudioVstContainer host, IVstPluginContext plugin)
 {
     this.Host   = host;
     this.Plugin = plugin;
 }
Пример #16
0
 /// set program or pattern data.
 /// <param name="isPat">true if data is pattern.  false if data is patch</param>
 /// <param name="data">binary dump</param>
 /// <param name="pluginContext">plugin</param>
 public void Apply(IVstPluginContext pluginContext, byte[] data, bool isPat)
 {
     SetChunk(pluginContext,data,true);
 }
Пример #17
0
 /// 
 /// <param name="pluginContext">plugin</param>
 public void Apply(IVstPluginContext pluginContext)
 {
     Apply(pluginContext,this.id);
 }
Пример #18
0
 VstEditorViewer( INaudioVstContainer host , IVstPluginContext plugin )
 {
     this.Host = host;
     this.Plugin = plugin;
 }
Пример #19
0
        public List <PluginInfoItem> GetPluginInfoItems(IVstPluginContext pluginContext)
        {
            var pluginInfoItems = new List <PluginInfoItem>();

            if (pluginContext == null)
            {
                return(pluginInfoItems);
            }

            // plugin product
            pluginInfoItems.Add(new PluginInfoItem("Base", "Plugin Name",
                                                   pluginContext.PluginCommandStub.GetEffectName()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Product",
                                                   pluginContext.PluginCommandStub.GetProductString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Vendor",
                                                   pluginContext.PluginCommandStub.GetVendorString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Vendor Version",
                                                   pluginContext.PluginCommandStub.GetVendorVersion().ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Vst Support",
                                                   pluginContext.PluginCommandStub.GetVstVersion().ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Plugin Category",
                                                   pluginContext.PluginCommandStub.GetCategory().ToString()));

            // plugin info
            pluginInfoItems.Add(new PluginInfoItem("Base", "Flags", pluginContext.PluginInfo.Flags.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Plugin ID",
                                                   pluginContext.PluginInfo.PluginID.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Plugin ID String",
                                                   VstUtils.PluginIdNumberToIdString(pluginContext.PluginInfo.PluginID)));

            pluginInfoItems.Add(new PluginInfoItem("Base", "Plugin Version",
                                                   pluginContext.PluginInfo.PluginVersion.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Audio Input Count",
                                                   pluginContext.PluginInfo.AudioInputCount.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Audio Output Count",
                                                   pluginContext.PluginInfo.AudioOutputCount.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Initial Delay",
                                                   pluginContext.PluginInfo.InitialDelay.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Program Count",
                                                   pluginContext.PluginInfo.ProgramCount.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Parameter Count",
                                                   pluginContext.PluginInfo.ParameterCount.ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Base", "Tail Size",
                                                   pluginContext.PluginCommandStub.GetTailSize().ToString()));

            // can do
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.Bypass),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.Bypass)).ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.MidiProgramNames),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.MidiProgramNames))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.Offline),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.Offline)).ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.ReceiveVstEvents),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.ReceiveVstEvents))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.ReceiveVstMidiEvent),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.ReceiveVstMidiEvent))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.ReceiveVstTimeInfo),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.ReceiveVstTimeInfo))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.SendVstEvents),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.SendVstEvents))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.SendVstMidiEvent),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.SendVstMidiEvent))
                                                   .ToString()));

            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.ConformsToWindowRules),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.ConformsToWindowRules))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.Metapass),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.Metapass))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.MixDryWet),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.MixDryWet))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.Multipass),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.Multipass))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.NoRealTime),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.NoRealTime))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.PlugAsChannelInsert),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.PlugAsChannelInsert))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.PlugAsSend),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.PlugAsSend))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.SendVstTimeInfo),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.SendVstTimeInfo))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x1in1out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x1in1out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x1in2out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x1in2out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x2in1out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x2in1out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x2in2out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x2in2out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x2in4out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x2in4out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x4in2out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x4in2out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x4in4out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x4in4out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x4in8out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x4in8out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x8in4out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x8in4out))
                                                   .ToString()));
            pluginInfoItems.Add(new PluginInfoItem("CanDo", nameof(VstPluginCanDo.x8in8out),
                                                   pluginContext.PluginCommandStub.CanDo(VstCanDoHelper.ToString(VstPluginCanDo.x8in8out))
                                                   .ToString()));

            pluginInfoItems.Add(new PluginInfoItem("Program", "Current Program Index",
                                                   pluginContext.PluginCommandStub.GetProgram().ToString()));
            pluginInfoItems.Add(new PluginInfoItem("Program", "Current Program Name",
                                                   pluginContext.PluginCommandStub.GetProgramName()));

            return(pluginInfoItems);
        }