TITLE:: FluidLoadFolder summary:: Load a folder of audio into a single buffer categories:: FluidCorpusManipulation related:: Classes/FluidSliceCorpus, Classes/FluidProcessSlices DESCRIPTION:: Given a path name, load every audio file in the path (using link::Classes/SoundFile#*collect::), allocate a link::Classes/Buffer::, and load the files top to tail into the buffer. Information about start stop points, channel counts and sample rates is then stored in link::Classes/FluidLoadFolder#index:: as a link::Classes/IdentityDictionary::. CLASSMETHODS:: METHOD:: new Construct a new instance ARGUMENT:: path A string pointing to a folder on disk ARGUMENT:: labelFunc A function that determines how the chunks in the index are labelled; default is file name without path. ARGUMENT:: channelFunc A funciton that controls what to do with differently wide files. Default behaviour is for loaded buffer to have as many channels as the widest file in the path, and for narrower files to repeat their channels across this buffer. The funciton is passed the channels for the current file, the maximum channel count, and the current index. INSTANCEMETHODS:: METHOD:: index A link::Classes/IdentityDictionary:: containing the metadata on the loaded files The keys of this dictionary are the labels produced by the code::labelFunc:: passed to link::Classes/FluidLoadFolder#*new:: (or the default of the filename if nil). The value for each key is a further dictionary consisting of: definitionlist:: ## bounds || A two element array giving the start and end point of this files eventual position in the overall buffer (in samples). ## sr || The sampling rate of the original file ## numchans || Number of channels in the original file :: METHOD:: files The list of files loaded METHOD:: buffer The buffer in which the files are placed, end to end. METHOD:: play Load the files. ARGUMENT:: server The server on which to run ARGUMENT:: action Function to execute on completion EXAMPLES:: code:: s.reboot; ( // We'll load all the Fluid Corpus Manipulation audio example files ~path = File.realpath(FluidLoadFolder.class.filenameSymbol).dirname +/+ "../AudioFiles"; ~loader = FluidLoadFolder(~path); ~loader.play(s,action:{ |dataDictionary| ("Done loading into" + ~loader.buffer).postln; //we get passed an IdentityDictionary of slice data, let's look at it dataDictionary.pairsDo{|label,data| //data is also a dictionary (label ++ '(').post; data.pairsDo{|k,v| (k ++ ':' + v + ' ').post }; ')'.postln; } }); ) ::