VST.NET 与 NAUDIO(vstaudiobuffer 与 pcmstream 缓冲区)

Posted

技术标签:

【中文标题】VST.NET 与 NAUDIO(vstaudiobuffer 与 pcmstream 缓冲区)【英文标题】:VST.NET vs NAUDIO (vstaudiobuffer vs pcmstream buffer) 【发布时间】:2010-06-21 21:18:55 【问题描述】:

请帮助我如何将 VSTaudiobuffer 转换为 PCMStream Buffer 我从http://vstnet.codeplex.com/Thread/View.aspx?ThreadId=216682 尝试过,但无济于事。

                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();

【问题讨论】:

这是一个非常奇怪的采样率 - 44.8?你是说 44100 还是 48000? 【参考方案1】:

问题在于您的输入缓冲区是 16 位整数,其范围为 -32767.0 .. 32767.0 。您需要除以/乘以该值,而不是 128,这将是 7 位。

此外,当您在转换后的值中减去/加上 1.0f 时,您的操作顺序错误,会导致发生削波。转换应该是:

buffer[i] = ((float)destBuffer[i]) / 32767.0f;

destBuffer[i] = Convert.ToByte(buffer[i] * 32768.0f);

【讨论】:

第二部分不应该是 Convert.ToShort 吗?

以上是关于VST.NET 与 NAUDIO(vstaudiobuffer 与 pcmstream 缓冲区)的主要内容,如果未能解决你的问题,请参考以下文章

创建 VST 插件 [关闭]

每个 VST SDK 似乎都是针对 C++ 的,那么 C# 呢?

每个 VST SDK 似乎都是针对 C++ 的,那么 C# 呢?

NAudio.Midi 延迟与 MidiIn

NAudio 与 MultiplexingSampleProvider 和 WasapiOut

NAudio - WaveOut 与 WaveOffsetStream 一起使用时不会引发 PlaybackStopped 事件