Mercurial > hg > may
view yetilab/stream/syntheticstream.yeti @ 173:2cb4c78d42db
Another test
author | Chris Cannam |
---|---|
date | Thu, 02 May 2013 17:38:23 +0100 |
parents | 5a1db7299a08 |
children | 7cfcc3a07177 |
line wrap: on
line source
module yetilab.stream.syntheticstream; ch = load yetilab.stream.channels; vec = load yetilab.block.fvector; block = load yetilab.block.block; load yetilab.stream.streamtype; generated sampleRate generator = (// generator takes time in seconds as arg, returns number in -1,+1 range var position = 0; { get position () = position, get channels () = 1, get sampleRate () = sampleRate, get available () = Infinite (), get finished? () = false, read count = ch.deinterleaved 1 (result = vec.zeros count; for [0..count-1] do i: result[i] := generator ((position + i) / sampleRate) done; position := position + count; block.block result), close = \(), }); sinusoid rate freq = generated rate (sin . (* (2 * pi * freq))); whiteNoise rate = generated rate \((Math#random() * 2.0) - 1.0); silent rate = generated rate \0; precalculated rate data = (n = block.length data; var position = 0; { get position () = position, get channels () = 1, get sampleRate () = rate, get available () = Known (n - position), get finished? () = not (n > position), read count = ch.deinterleaved 1 (rc = min count (n - position); result = block.rangeOf data position rc; position := position + rc; result), close = \(), }); { generated, precalculated, sinusoid, whiteNoise, silent, } as { generated is number -> (number -> number) -> stream, precalculated is number -> 'a -> stream, //!!! 'a is block sinusoid is number -> number -> stream, whiteNoise is number -> stream, silent is number -> stream, }