annotate syntheticstream.yeti @ 57:08b2b9fce25c

Remove the complex constants; they're not very useful and pollute the namespace
author Chris Cannam
date Wed, 09 Jan 2013 21:35:37 +0000
parents 0d03455c105b
children
rev   line source
Chris@15 1
Chris@15 2 module syntheticstream;
Chris@15 3
Chris@19 4 str = load stream;
Chris@15 5 vec = load fvector;
Chris@20 6 block = load block;
Chris@15 7
Chris@19 8 generated rate generator seconds =
Chris@19 9 str.monoStream {
Chris@15 10 var position = 0,
Chris@19 11 len = int(seconds * rate + 0.5),
Chris@19 12 rate,
Chris@19 13 read count =
Chris@19 14 (rc = min count (len - position);
Chris@15 15 result = vec.zeros rc;
Chris@15 16 for [0..rc-1] do i:
Chris@15 17 result[i] := generator ((position + i) / rate)
Chris@15 18 done;
Chris@15 19 position := position + rc;
Chris@20 20 block.block result),
Chris@20 21 close = \(),
Chris@19 22 };
Chris@16 23
Chris@20 24 sinusoid rate freq seconds =
Chris@20 25 generated rate (sin . (* (freq / (2*pi * rate)))) seconds;
Chris@16 26
Chris@20 27 whiteNoise rate seconds =
Chris@20 28 generated rate \((Math#random() * 2.0) - 1.0) seconds;
Chris@16 29
Chris@16 30 precalculated rate data is number -> ~double[] -> 'a =
Chris@20 31 (n = vec.length data;
Chris@19 32 str.monoStream {
Chris@16 33 var position = 0,
Chris@19 34 len = n,
Chris@19 35 rate,
Chris@19 36 read count =
Chris@19 37 (rc = min count (len - position);
Chris@26 38 result = vec.rangeOf data position rc;
Chris@16 39 position := position + rc;
Chris@20 40 block.block result),
Chris@20 41 close = \(),
Chris@19 42 });
Chris@15 43
Chris@15 44 {
Chris@19 45 generated, precalculated, sinusoid, whiteNoise,
Chris@15 46 }
Chris@15 47