@@ 23,18 23,18 @@ functor SummaryFromRealBlockStreamFn (S:
type stream = {
summariser : RealVectorSlice.slice -> real,
+ rate : SignalTypes.rate,
upstream : S.stream
}
open SignalTypes
-
- fun rate (s : stream) = RATE (rateOf (S.rate (#upstream s)) /
- Real.fromInt (S.blocksize (#upstream s)))
+
+ fun rate (s : stream) = #rate s
fun channels (s : stream) = S.channels (#upstream s)
fun time (s : stream) = S.time (#upstream s)
fun seekable (s : stream) = S.seekable (#upstream s)
- fun read (s as { summariser, upstream } : stream, n)
+ fun read (s as { summariser, rate, upstream } : stream, n)
: (stream * M.matrix) option =
let val ch = S.channels upstream
val arrays = Vector.tabulate
@@ 67,6 67,7 @@ functor SummaryFromRealBlockStreamFn (S:
if obtained = 0
then NONE
else SOME ({ summariser = summariser,
+ rate = rate,
upstream = upstream'
},
M.fromRowsV
@@ 83,14 84,18 @@ functor SummaryFromRealBlockStreamFn (S:
val readOne = RealSampleStreamDefaultReadOne.make read
- fun seek ({ summariser, upstream } : stream, mode, t) =
+ fun seek ({ summariser, rate, upstream } : stream, mode, t) =
Option.map (fn upstream' => ({ summariser = summariser,
+ rate = rate,
upstream = upstream'
}))
(S.seek (upstream, mode, t))
+ structure Helper = BlockStreamRateHelperFn(S)
+
fun wrap ({ summary }, upstream) : stream =
{ summariser = Summarise.summariseVectorSlice summary,
+ rate = Helper.deduceBlockRate upstream,
upstream = upstream
}