From a85287a7850deca52c587bde8a1d2bd5c63c91c8 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 2 Jun 2020 16:20:49 +0100 Subject: [PATCH] Refactor file loading to try and improve speed by removing syncs --- .../Classes/FluidCorpusBuilders.sc | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/release-packaging/Classes/FluidCorpusBuilders.sc b/release-packaging/Classes/FluidCorpusBuilders.sc index dea1c3e..304037a 100644 --- a/release-packaging/Classes/FluidCorpusBuilders.sc +++ b/release-packaging/Classes/FluidCorpusBuilders.sc @@ -9,39 +9,42 @@ FluidLoadFolder { } play { |server, action| - var sizes,channels,maxChan, startEnd; + var sizes,channels,maxChan, startEnd,counter; server ?? server = Server.default; files = SoundFile.collect(path +/+ '*'); sizes = files.collect{|f|f.numFrames()}; channels = files.collect{|f| f.numChannels()}; startEnd = sizes.inject([0],{|a,b| a ++ (b + a[a.size - 1])}).slide(2).clump(2); maxChan = channels[channels.maxIndex]; - + counter = 0; index = IdentityDictionary(); - fork{ + files.postln; + server.bind{ buffer = Buffer.alloc(server,sizes.reduce('+'),maxChan); - buffer.updateInfo; server.sync; + buffer.updateInfo; buffer.query; + server.sync; this.files.do{|f,i| var channelMap,label,entry; + OSCFunc({ + if(labelFunc.notNil) + { label = labelFunc.value(path,i) } + { label = (f.path.basename).asSymbol }; + entry = IdentityDictionary(); + entry.add(\points->startEnd[i]); + entry.add(\channels->f.numChannels); + entry.add(\sampleRate->f.sampleRate); + index.add(label->entry); + counter = counter + 1; + if(counter == (files.size)) {action !? action.value(index)}; + },"/done",server.addr,argTemplate:["/b_readChannel"]).oneShot; if(channelFunc.notNil) { channelMap = channelFunc.value(channels[i],maxChan,i) } { channelMap = Array.series(channels[i]).wrapExtend(maxChan) }; buffer.readChannel(f.path,bufStartFrame:sizes[0..i].sum(), channels:channelMap); - server.sync; - - if(labelFunc.notNil) - { label = labelFunc.value(path,i) } - { label = (f.path.basename).asSymbol }; - entry = IdentityDictionary(); - entry.add(\points->startEnd[i]); - entry.add(\channels->f.numChannels); - entry.add(\sampleRate->f.sampleRate); - index.add(label->entry); - if(i == (files.size - 1)) {action !? action.value(index)}; } - } + }; } }