Correct summariser rate by using a blockstream rate helper
1 files changed, 10 insertions(+), 5 deletions(-)

M summarising-fn.sml
M summarising-fn.sml +10 -5
@@ 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
         }