Juce正在实施重新采样AudioSource

Juce implementing ResamplingAudioSource

本文关键字:采样 AudioSource 施重新 Juce      更新时间:2023-10-16

我想对JUCE中的缓冲区内的信号进行过采样,在visual basic上运行。http://www.juce.com/about-juce

准确地说:过采样是指在相同的时间内增加样本数量。例如,如果原始文件的频率为44100khz,我希望采样率增加到88200khz。这对于衰减信号中可能存在的任何数字伪影是有用的。

据我所知,Juce有一个这样的课程:ResamplingAudioSourcehttp://www.juce.com/api/classResamplingAudioSource.html#details我的问题是我不知道如何实现这个类。我尝试创建一个类的新实例,如下所示:

class PluginOversampler:公共重新采样AudioSource{公共:PluginOversampler();~ PluginOversampler();

void    setResamplingRatio (double samplesInPerOutputSample)

}

其想法是,我可以调用PluginOversampler::setResamplingRatio(此处指定的比率)来更改重新采样率。

但该项目不会在visualbasic中编译。错误很多,多达一百个。其中一些与全局变量string22有关,我在不同的.cpp和.h文件中使用该变量

std::string string22 = "";

当产生的错误是:

extern std::string string22;
1>c:usersfriendly2downloadsfinalctrlsourceplugineditor.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"中的函数吗?我很失落。

您可以使用#define DONT_SET_USING_JUCE_NAMESPACE

你必须JUCE::ResamplingAudioSource或任何其他果汁类。

大多数JUCE类已经在其他库或系统库中定义。这将帮助您解决大多数错误。

准确地说:过采样是指增加样本数量在相同的时间内。如果原始文件处于44100khz,例如,我希望采样率增加到88200khz。这对于衰减可能出现的任何数字伪影是有用的在信号中。

不,不是。

这是基本的信号理论:奈奎斯特成立。你对此无能为力。你的信号已经以44.1kS/s的速度被数字化了一次,在这个过程中丢失的信息无法恢复(protip:没有丢失的信息;人类无法物理感知频率高于22.05kHz的东西)

现在,可以完全合理地假设产生该信号的声卡在整个0Hz-22.05kHz频谱上不是完全线性的。你可以通过均衡来解释这一点,但那完全是另一回事。通常,在这个过程中,你会在子带上使用特制的数字滤波器,子带本身的带宽比原始信号低,而不是高。然而,均衡信号是一个难题,你需要首先估计数字化系统的特性——我想,当你不可能将已知的参考信号输入其中时,这几乎是不可能的

编辑:顺便说一句,您的错误看起来像是意外地试图重新键入定义std::string(例如,您做了类似typedef mytype std::string而不是typedef std::string mytype的操作)。