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的主要内容,如果未能解决你的问题,请参考以下文章

JUCE 界面库显示中文乱码问题

phonegap 的 Juce 库插件

关于如何使用 JUCE 托管 VST 插件的教程? [关闭]

从 JUCE 音频 VST 插件控制主机播放

JS 错误导致 JUCE 应用程序崩溃

linux下JUCE源码编译依赖库