annotate yetilab/stream/syntheticstream.yeti @ 138:f68c92bd2adb

Slightly better text placement
author Chris Cannam
date Tue, 23 Apr 2013 17:01:19 +0100
parents d0abc9afe608
children ed7e1fb91745
rev   line source
Chris@15 1
Chris@93 2 module yetilab.stream.syntheticstream;
Chris@15 3
Chris@93 4 str = load yetilab.stream.stream;
Chris@93 5 vec = load yetilab.block.fvector;
Chris@93 6 block = load yetilab.block.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