首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Juce实现ResamplingAudioSource

Juce实现ResamplingAudioSource
EN

Stack Overflow用户
提问于 2014-11-01 09:42:54
回答 2查看 1.3K关注 0票数 0

我希望对运行在visual上的JUCE缓冲区中的一个信号进行过采样。http://www.juce.com/about-juce

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

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

类PluginOversampler : public ResamplingAudioSource { public: PluginOversampler();

代码语言:javascript
复制
void    setResamplingRatio (double samplesInPerOutputSample)

}

有了这样的想法,我可以在这里调用PluginOversampler::setResamplingRatio(specified比率来改变重采样率。

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

代码语言:javascript
复制
std::string string22 = "";

当产生的错误是:

代码语言:javascript
复制
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

的声明时,项目编译良好

代码语言:javascript
复制
  PluginOversampler : public ResamplingAudioSource

其他错误消息表明Juce头文件没有正确定义类型,但我认为这些错误来自我自己的编程,而不是Juce文件,因为在我实现这一点之前,程序运行得很好( vst文件在DAW中工作得很好)。

我已经实例化了另一个类:

代码语言:javascript
复制
class PluginAudioProcessor  : public PluginProcessor
{
public:
    //==============================================================================
    PluginWidthCtrlAudioProcessor();
    ~PluginWidthCtrlAudioProcessor();

...
...

}

我是否需要让类'PluginAudioProcessor‘继承'ResamplingAudioSource’中的函数?我很迷茫。

EN

回答 2

Stack Overflow用户

发布于 2015-02-06 11:24:26

您可以使用#define DONT_SET_USING_JUCE_NAMESPACE

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-02-06 11:32:04

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

不,不是的。

这是基本的信号理论:尼奎斯特持有。你什么也做不了。你的信号已经数字化了一次,44.1kS/s,没有办法收回在这个过程中丢失的信息(protip:没有丢失的信息;人类无法实际感知频率高于22.05kHz的东西)。

现在,假设产生信号的声卡在整个0HZ-22.05kHz的频谱上并不是完全线性的,这是完全合理的。你可以通过均衡来解释这一点,但这完全是另一回事。通常,在这个过程中,您使用巧尽心思构建的数字滤波器的子带,其本身的带宽低于您的原始信号,而不是更高。然而,均衡信号是一个困难的问题,你需要首先估计数字化系统的特性--我猜,当你没有可能得到已知的参考信号时,这几乎是不可能的。

编辑:顺便说一句,您的错误看起来像是意外地尝试了re std::string (例如,您做了类似于typedef mytype std::string而不是typedef std::string mytype的事情)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26687963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档