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
|