render alloc on ArrayPlayer down to 192bytes. can probably do better
This commit is contained in:
parent
66654d3aaf
commit
fab2f8ea8d
2 changed files with 10 additions and 8 deletions
16
src/nodes.jl
16
src/nodes.jl
|
@ -138,8 +138,9 @@ export Gain
|
|||
type ArrayRenderer <: AudioRenderer
|
||||
arr::AudioBuf
|
||||
arr_index::Int
|
||||
buf::AudioBuf
|
||||
|
||||
ArrayRenderer(arr::AudioBuf) = new(arr, 1)
|
||||
ArrayRenderer(arr::AudioBuf) = new(arr, 1, AudioSample[])
|
||||
end
|
||||
|
||||
typealias ArrayPlayer AudioNode{ArrayRenderer}
|
||||
|
@ -147,13 +148,14 @@ ArrayPlayer(arr::AudioBuf) = ArrayPlayer(ArrayRenderer(arr))
|
|||
export ArrayPlayer
|
||||
|
||||
function render(node::ArrayRenderer, device_input::AudioBuf, info::DeviceInfo)
|
||||
# TODO: this should remove itself from the render tree when playback is
|
||||
# complete
|
||||
i = node.arr_index
|
||||
range_end = min(i + info.buf_size-1, length(node.arr))
|
||||
output = node.arr[i:range_end]
|
||||
range_end = min(node.arr_index + info.buf_size-1, length(node.arr))
|
||||
block_size = range_end - node.arr_index + 1
|
||||
if length(node.buf) != block_size
|
||||
resize!(node.buf, block_size)
|
||||
end
|
||||
copy!(node.buf, 1, node.arr, node.arr_index, block_size)
|
||||
node.arr_index = range_end + 1
|
||||
return output
|
||||
return node.buf
|
||||
end
|
||||
|
||||
# Allow users to play a raw array by wrapping it in an ArrayPlayer
|
||||
|
|
|
@ -92,7 +92,6 @@ render_output = render(osc, dev_input, test_info)
|
|||
@test mse(render_output,
|
||||
expected[test_info.buf_size+1:2*test_info.buf_size]) < MSE_THRESH
|
||||
# give a bigger budget here because we're rendering 2 nodes
|
||||
println("alloc: ", @allocated render(osc, dev_input, test_info))
|
||||
@test 500 > (@allocated render(osc, dev_input, test_info))
|
||||
|
||||
info("Testing ArrayPlayer...")
|
||||
|
@ -102,6 +101,7 @@ render_output = render(player, dev_input, test_info)
|
|||
@test render_output == v[1:test_info.buf_size]
|
||||
render_output = render(player, dev_input, test_info)
|
||||
@test render_output == v[(test_info.buf_size + 1) : (2*test_info.buf_size)]
|
||||
@test 200 > (@allocated render(player, dev_input, test_info))
|
||||
stop(player)
|
||||
render_output = render(player, dev_input, test_info)
|
||||
@test render_output == AudioSample[]
|
||||
|
|
Loading…
Reference in a new issue