【问题标题】:STK callback oscillator issue with virtual function虚函数的 STK 回调振荡器问题
【发布时间】:2012-09-17 01:23:25
【问题描述】:

我正在开发一个使用正弦振荡器回调的 STK 程序。由于生成器类中的虚函数导致我的 ToneGen 类抽象,我在从生成器类继承的 ToneGen 类创建对象时遇到问题。我已经尝试过指针,但似乎导致将数据获取到适当的方法时出现问题。如果我使用指针,我的代码会在 ToneGen.h 文件中中断

void setRate( StkFloat rate ) { rate_ = rate; };

否则没有指针我会得到这个错误

src\crtToneGen.cpp(36): error C2259: 'stk::ToneGen' : cannot instantiate abstract class
          due to following members:
          'stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int)' : is abstract
          C:\VS10 Projects\StkNewInst\crtToneGen\include\Generator.h(43) : see declaration of 'stk::Generator::tick'

这是生成器类中的虚函数

virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 )=0;

有没有办法避免这种情况,我在其他帖子上尝试了其他几种技术,但还没有运气。

我正在修改的代码可以在here找到

我在 VisualStudio 2010 windows 7 32 位上执行此操作

【问题讨论】:

  • STK 代表 Synthesis Toolkit by the Way

标签: c++ visual-c++ audio abstract sound-synthesis


【解决方案1】:
stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int)

是抽象的,需要在你的派生类中实现

class ToneGen: public stk::Generator
{
  stk::stkFrames& tick(stk::StkFrames& frames,unsigned int something)
  {
     return stk::stkFrames(); // Don't do this, return something useful.
  }
}

您必须在派生类中实现此功能,因为基类不提供此方法的功能。 stk 标头中的声明是:

stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int) = 0;

【讨论】:

  • 所以我把第一个块放在 Tone Gen 头中:static StkFrames table_; StkFloat phaseOffset_;无符号整数 iIndex_; StkFloat alpha_; }; stk::StkFrames& tick(stk::StkFrames& frames,unsigned int channel) { return frames;内联 StkFloat ToneGen :: tick( void ) 但是当我将第二个声明放在 stk 标头中时,我收到一个错误,即限定符必须是基类 stk::StkFrames 的一部分。我在 stk Header 的 StkFrames 类中实现了它,不确定它会去哪里。谢谢
  • 把它放在一个 pastebin 并链接到这里
  • pastebin.com/0FhecUn8 .(在 Stk.h StkFrames 类中)我尝试将其更改为 Generator::tick_(etc...) 但这也不起作用,我应该在我的 crtToneGen 中做些什么上课,那是我在 ToneGen 音调上遇到问题的地方;目的。我对此一无所知。 ccrma.stanford.edu/software/stk/SineWave_8h_source.html 这个链接是我基于我的tonegen.h 类和stk 教程页面的基础,我基于crtTonegen.cpp 和ccrma.stanford.edu/software/stk/crealtime.html 是我基于我的crtToneGen.cpp 文件的
  • 我正在使用的其他类是 Generator.h(原样)和 SineWave.cpp(除了类名未更改)
  • 也非常感谢任何关于将其集成到 Windows 应用程序而不是命令行 .exe 的建议,再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多