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
评论列表
文章目录