音频处理模块上的DRY原理

时间:2020-10-15 02:56:53

标签: c++ audio design-patterns architecture

在我的音频处理代码(音频处理器)中,我有类似以下代码的内容。我试图避免在下面的重复代码。想知道是否有更好的方法编写此代码?

代码只是说明问题的一个示例:我有几个音频处理模块,其中一个模块的音频作为输入传递到第二个模块,依此类推,直到最终处理后的输出为止。此“块”有4个主要组成部分:初始化,处理,重置和取消初始化。

    /* some code here to initialize audio processing blocks */
    //snip

    /*
     * order of audio processing is important here.
     * Is there any way to avoid writing below code
     * for every processing block that gets added in
     * future in c++11 perhaps??
     */
    if (t1) {
        t1->process(iFrame, oFrame);
        iFrame = oFrame;
    }
    if (t2) {
        t2->reset();
        t2->process(iFrame, oFrame);
        iFrame = oFrame;
    }
    if (t3) {
        t3->process(iFrame, oFrame);
        iFrame = oFrame;
    }
    /* 
     * if in future we want this way t1 - > t3 - > t2 then code change is required, 
     * is there any way to avoid this code change
     */

本质上,我正在寻找一种通用的方式来处理此问题:

P 1-> P 2-> P 3-> P 4

  1. 在编译时,我们应该能够定义处理块的顺序。使用从配置文件读取的值初始化块。
  2. 然后为每个函数调用process函数,并产生最终输出。
  3. 在处理过程中,某些块可以具有重置功能,并且基于处理块可以进行其他回调。
  4. 处理完成后,我们需要取消初始化块。
  5. 如何将第一个块的输出传递到第二个块的输入,依此类推。

P 代表处理块。

https://ideone.com/GEvaKm

0 个答案:

没有答案
相关问题