adds LinRamp node

This commit is contained in:
Spencer Russell 2014-06-24 01:35:02 -04:00
parent a334a44a2e
commit bf2e5bfb84
2 changed files with 42 additions and 0 deletions

View file

@ -178,3 +178,33 @@ end
typealias AudioInput AudioNode{InputRenderer} typealias AudioInput AudioNode{InputRenderer}
AudioInput(channel::Int) = AudioInput(InputRenderer(channel)) AudioInput(channel::Int) = AudioInput(InputRenderer(channel))
export AudioInput export AudioInput
#### Ramp ####
type LinRampRenderer <: AudioRenderer
start::AudioSample
finish::AudioSample
dur::Float32
end
typealias LinRamp AudioNode{LinRampRenderer}
function LinRamp(start::Real, finish::Real, dur::Real)
LinRamp(LinRampRenderer(start, finish, dur))
end
export LinRamp
function render(node::LinRampRenderer, device_input::AudioBuf, info::DeviceInfo)
ramp_samples = int(node.dur * info.sample_rate)
block_samples = min(ramp_samples, info.buf_size)
out_block = Array(AudioSample, block_samples)
for i in 1:block_samples
out_block[i] = node.start + ((i-1) / ramp_samples) *
(node.finish - node.start)
end
node.dur -= block_samples / info.sample_rate
node.start += block_samples / ramp_samples * (node.finish - node.start)
return out_block
end

View file

@ -91,3 +91,15 @@ info("Testing Gain...")
gained = TestNode() * 0.75 gained = TestNode() * 0.75
render_output = render(gained, dev_input, test_info) render_output = render(gained, dev_input, test_info)
@test render_output == 0.75 * AudioSample[1:test_info.buf_size] @test render_output == 0.75 * AudioSample[1:test_info.buf_size]
info("Testing LinRamp...")
ramp = LinRamp(0.25, 0.80, 1)
expected = convert(AudioBuf, linspace(0.25, 0.80, test_info.sample_rate+1))
render_output = render(ramp, dev_input, test_info)
@test render_output == expected[1:test_info.buf_size]
# TODO: there seems to be some slight error in the 2nd block. I THINK it's just
# floating point stuff, but we should probably check to be sure
#render_output = render(ramp, dev_input, test_info)
#println("expected: $(expected[test_info.buf_size+1:test_info.buf_size+10])")
#println("output: $(render_output[1:10])")
#@test render_output == expected[(test_info.buf_size+1):(2*test_info.buf_size)]