aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2015-04-20 14:58:19 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2015-04-20 14:58:19 +0200
commit1174032a180acd0a01615dc52eaf3e6e2f295e3b (patch)
tree5c42f0ad56ba9c012ea4f77bf27d3b0b69d72923
parentcb29ed5d19e37cb94c02eabf6e6110ac0649e565 (diff)
downloadapplause2-1174032a180acd0a01615dc52eaf3e6e2f295e3b.tar.gz
filters: handle input streams shorter than the frequency stream
-rw-r--r--applause.lua42
1 files changed, 24 insertions, 18 deletions
diff --git a/applause.lua b/applause.lua
index 8abdd1a..c4a27d8 100644
--- a/applause.lua
+++ b/applause.lua
@@ -739,13 +739,15 @@ function LPFStream:tick()
local cur_freq = nil
return function()
- -- calculate filter coefficients
- -- avoid recalculation for constant frequencies
+ local sample = tick()
local freq = freq_tick()
- if freq == nil then
+
+ if sample == nil or freq == nil then
-- don't filter if we run out of frequency samples
- return tick()
+ return sample
elseif freq ~= cur_freq then
+ -- calculate filter coefficients
+ -- avoid recalculation for constant frequencies
cur_freq = freq
local pfreq = cur_freq * radians_per_sample * 0.5
@@ -759,8 +761,6 @@ function LPFStream:tick()
b2 = -(1.0 - sqrt2C + C2) * a0
end
- local sample = tick()
-
local y0 = sample + b1*y1 + b2*y2
local result = a0 * (y0 + 2*y1 + y2)
@@ -796,13 +796,15 @@ function HPFStream:tick()
-- Can we factor out the similarity without sacrificing
-- too much performance?
return function()
- -- calculate filter coefficients
- -- avoid recalculation for constant frequencies
+ local sample = tick()
local freq = freq_tick()
- if freq == nil then
+
+ if sample == nil or freq == nil then
-- don't filter if we run out of frequency samples
- return tick()
+ return sample
elseif freq ~= cur_freq then
+ -- calculate filter coefficients
+ -- avoid recalculation for constant frequencies
cur_freq = freq
local pfreq = cur_freq * radians_per_sample * 0.5
@@ -854,13 +856,15 @@ function BPFStream:tick()
local cur_freq = nil
return function()
- -- calculate filter coefficients
- -- avoid recalculation for constant frequencies
+ local sample = tick()
local freq = freq_tick()
- if freq == nil then
+
+ if sample == nil or freq == nil then
-- don't filter if we run out of frequency samples
- return tick()
+ return sample
elseif freq ~= cur_freq then
+ -- calculate filter coefficients
+ -- avoid recalculation for constant frequencies
cur_freq = freq
local pfreq = cur_freq * radians_per_sample
@@ -913,13 +917,15 @@ function BRFStream:tick()
-- NOTE: Very similar to BPFStream.tick()
return function()
- -- calculate filter coefficients
- -- avoid recalculation for constant frequencies
+ local sample = tick()
local freq = freq_tick()
- if freq == nil then
+
+ if sample == nil or freq == nil then
-- don't filter if we run out of frequency samples
- return tick()
+ return sample
elseif freq ~= cur_freq then
+ -- calculate filter coefficients
+ -- avoid recalculation for constant frequencies
cur_freq = freq
local pfreq = cur_freq * radians_per_sample