Juce 实现 ResamplingAudioSource
Posted
技术标签:
【中文标题】Juce 实现 ResamplingAudioSource【英文标题】:Juce implementing ResamplingAudioSource 【发布时间】:2014-11-01 09:42:54 【问题描述】:我希望对在 Visual Basic 上运行的 JUCE 缓冲区内的信号进行过采样。 http://www.juce.com/about-juce
准确地说:过采样是指在相同的时间内增加采样的数量。例如,如果原始文件为 44100 khz,我希望采样率增加到 88200khz。这对于衰减信号中可能出现的任何数字伪影很有用。
据我了解,Juce 对此有一个类:ResamplingAudiosource http://www.juce.com/api/classResamplingAudioSource.html#details 我的问题是我不知道如何实现这个类。我试过像这样创建一个新的类实例:
类 PluginOversampler : public ResamplingAudioSource 上市: 插件过采样器(); ~PluginOversampler();
void setResamplingRatio (double samplesInPerOutputSample)
我的想法是我可以调用 PluginOversampler::setResamplingRatio(specified ratio here) 来更改重采样率。
但该项目无法在 Visual Basic 中编译。错误数不胜数,数以百计。其中一些与我在不同的 .cpp 和 .h 文件中使用的全局变量 string22 相关
std::string string22 = "";
当产生的错误是:
extern std::string string22;
1>c:\users\friendly2\downloads\final\ctrl\source\plugineditor.h(28): error C2377: 'std::string' : redefinition; typedef cannot be overloaded with any other symbol
当我省略
的声明时,项目编译正常 PluginOversampler : public ResamplingAudioSource
其他错误消息表明 Juce 头文件没有正确定义类型,但我认为错误来自我自己的编程,而不是 Juce 文件,因为该程序运行良好(vst 文件在DAW)在我实现这个之前。
我已经实例化了另一个类:
class PluginAudioProcessor : public PluginProcessor
public:
//==============================================================================
PluginWidthCtrlAudioProcessor();
~PluginWidthCtrlAudioProcessor();
...
...
我是否需要让“PluginAudioProcessor”类继承“ResamplingAudioSource”中的函数?我很迷茫。
【问题讨论】:
“在 Visual Basic 上运行”.... 这是什么意思? 【参考方案1】:你可以使用#define DONT_SET_USING_JUCE_NAMESPACE
您必须使用 JUCE::ResamplingAudioSource 或任何其他果汁类。
大多数 JUCE 类已经在其他库或系统库中定义。这应该可以帮助您解决大部分错误。
【讨论】:
【参考方案2】:准确地说:通过过采样,我的意思是增加样本数量 在相同的时间内。如果原始文件是 44100 khz, 例如,我希望采样率增加到 88200khz。 这对于衰减可能出现的任何数字伪影很有用 在信号中。
不,不是。
这是基本的信号理论:Nyquist 成立。你对此无能为力。您的信号已经以 44.1kS/s 的速度数字化了一次,并且无法找回在该过程中丢失的信息(提示:没有丢失的信息;人类无法物理感知频率高于 22.05kHz 的事物)。
现在,完全有理由假设产生该信号的声卡在整个 0Hz - 22.05kHz 频谱上不是完全线性的。你可以通过均衡来解释这一点,但这是一个完全不同的故事。通常,在此过程中,您会在子带上使用特制的数字滤波器,这些子带本身的带宽低于原始信号,而不是更高。然而,均衡信号是一个难题,您需要首先估计数字化系统的特性——我想,当您无法将已知的参考信号输入其中时,这几乎是不可能的。
编辑:顺便说一下,您的错误看起来像是您不小心尝试重新输入定义 std::string
(例如,您执行了类似 typedef mytype std::string
而不是 typedef std::string mytype
的操作)。
【讨论】:
以上是关于Juce 实现 ResamplingAudioSource的主要内容,如果未能解决你的问题,请参考以下文章