convolver.py 文件源码

python
阅读 16 收藏 0 点赞 0 评论 0

项目:pyBinSim 作者: pyBinSim 项目源码 文件源码
def process(self, block):
        """
        Main function

        :param block:
        :return: (outputLeft, outputRight)
        """
        # print("Convolver: process")

        # First: Fill buffer and FDLs with current block
        if not self.processStereo:
            # print('Convolver Mono Processing')
            self.fill_buffer_mono(block)
        else:
            # print('Convolver Stereo Processing')
            self.fill_buffer_stereo(block)

        # Second: Multiplikation with IR block und accumulation with previous data
        for irBlockCount in xrange(0, self.IR_blocks):
            # Always convolute current filter
            self.multiply_and_add(irBlockCount)

            # Also convolute old filter if interpolation needed
            if self.interpolate:
                self.multiply_and_add_previous(irBlockCount)

        # Third: Transformation back to time domain
        if self.interpolate:
            # fade over full block size
            # print('do block interpolation')
            self.outputLeft = np.multiply(self.resultLeftPreviousIFFTPlan(self.resultLeftFreqPrevious).real[
                                          self.block_size:self.block_size * 2], self.crossFadeOut) + \
                              np.multiply(self.resultLeftIFFTPlan(self.resultLeftFreq).real[
                                          self.block_size:self.block_size * 2], self.crossFadeIn)

            self.outputRight = np.multiply(self.resultRightPreviousIFFTPlan(self.resultRightFreqPrevious).real[
                                           self.block_size:self.block_size * 2], self.crossFadeOut) + \
                               np.multiply(self.resultRightIFFTPlan(self.resultRightFreq).real[
                                           self.block_size:self.block_size * 2], self.crossFadeIn)

        else:
            self.outputLeft = self.resultLeftIFFTPlan(self.resultLeftFreq).real[self.block_size:self.block_size * 2]
            self.outputRight = self.resultRightIFFTPlan(self.resultRightFreq).real[self.block_size:self.block_size * 2]

        self.processCounter += 1
        self.interpolate = False

        return self.outputLeft, self.outputRight
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号