8a363863f0d6 — Chris Cannam 25 days ago
Use file backing
4 files changed, 11 insertions(+), 8 deletions(-)

M interpolating-renderer.sml
M summarising-renderer.sml
M waveform-renderer.sig
M waveform-renderer.sml
M interpolating-renderer.sml +1 -1
@@ 245,7 245,7 @@ structure InterpolatingWaveformRenderer 
             "InterpolatingWaveformRenderer.render"
             (fn () => render' renderer spec)
           
-    fun new { source : RealRandomAccess.random_access, durationHint }
+    fun new { source : RealRandomAccess.random_access, durationHint, tempDir }
         : renderer = {
         audio = source,
         oversampler = BqResample.new { channels = 1,

          
M summarising-renderer.sml +5 -5
@@ 359,15 359,15 @@ structure SummarisingWaveformRenderer : 
                  "SummarisingWaveformRenderer.render busy")
             (fn () => render' renderer spec)
             
-    fun new { source, durationHint } =
+    fun new { source, durationHint, tempDir } =
         let val towerArg = { sources = [ source ],
                              durationHint = durationHint,
                              seekDistanceHint = NONE,
                              spans = [ 32, 256, 4096, 65536 ],
-                             (* Has to be IN_MEMORY, because file
-                                backing hasn't been implemented for
-                                linear summary towers *)
-                             backing = SummaryTowerTypes.IN_MEMORY
+                             backing = SummaryTowerTypes.FILE_BACKED {
+                                 tempDir = tempDir,
+                                 inMemoryAboveSpan = SOME 4096
+                             }
                            }
         in
             { audio = source,

          
M waveform-renderer.sig +2 -1
@@ 19,7 19,8 @@ signature WAVEFORM_RENDERER = sig
                          }
                            
     val new : { source : RealRandomAccess.random_access,
-                durationHint : RealTime.t option
+                durationHint : RealTime.t option,
+                tempDir : string option
               } -> renderer
 
     val render : renderer -> render_spec -> render_result

          
M waveform-renderer.sml +3 -1
@@ 33,7 33,9 @@ structure WaveformRenderer : WAVEFORM_RE
             renderFunc spec
         end
             
-    fun new (args as { source : RealRandomAccess.random_access, durationHint })
+    fun new (args as { source : RealRandomAccess.random_access,
+                       tempDir,
+                       durationHint })
         : renderer = {
         rate = #rate source,
         summarising = SummarisingWaveformRenderer.new args,