TITLE:: FluidBufCompose summary:: Buffer Compositing Utility categories:: Libraries>FluidDecomposition, UGens>Buffer related:: Guides/FluCoMa, Guides/FluidDecomposition, Classes/Buffer DESCRIPTION:: A FluidBufCompose object provides a flexible utility for combining the contents of buffers on the server. It can be used for thing like mixing down multichannel buffers, or converting from left-right stereo to mid-side. We use it extensively in our example code. At its most simple, the object copies the content of two source buffers into a destination buffer. The flexibility comes from the various flags controlling which portions and channels of the sources to use, and by applying gains (which can be positive or negative) to the source data. It is part of the Fluid Decomposition Toolkit of the FluCoMa project. footnote:: This was made possible thanks to the FluCoMa project ( http://www.flucoma.org/ ) funded by the European Research Council ( https://erc.europa.eu/ ) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 725899).:: The algorithm takes two buffers in, and writes the composited information at the provided dstBuf. These buffer arguments can all point to the same buffer, which gives great flexibility in transforming and reshaping. CLASSMETHODS:: METHOD:: process This method triggers the compositing. ARGUMENT:: server The server on which the buffers to be processed are allocated. ARGUMENT:: srcBufNumA The bufNum of the first source buffer. ARGUMENT:: startAtA The starting point (in samples) from which to copy in the first source buffer. ARGUMENT:: nFramesA The duration (in samples) to copy from the first source buffer. ARGUMENT:: startChanA The first channel from which to copy in the first source buffer. ARGUMENT:: nChansA The number of channels from which to copy in the first source buffer. This parameter will wrap around the number of channels in the source buffer. ARGUMENT:: srcGainA The gain applied to the samples to be copied from the first source buffer. ARGUMENT:: dstStartAtA The time offset (in samples) in the destination buffer to start writing the first source at. The destination buffer will be resized if the portion to copy is overflowing. ARGUMENT:: dstStartChanA The channel offest in the destination buffer to start writing the first source at. The destination buffer will be resized if the number of channels to copy is overflowing. ARGUMENT:: srcBufNumB The bufNum of the second source buffer. ARGUMENT:: startAtB The starting point (in samples) from which to copy in the second source buffer. ARGUMENT:: nFramesB The duration (in samples) to copy from the second source buffer. ARGUMENT:: startChanB The first channel from which to copy in the second source buffer. ARGUMENT:: nChansB The number of channels from which to copy in the second source buffer. This parameter will wrap around the number of channels in the source buffer. ARGUMENT:: srcGainB The gain applied to the samples to be copied from the second source buffer. ARGUMENT:: dstStartAtB The time offset (in samples) in the destination buffer to start writing the second source at. The destination buffer will be resized if the portion to copy is overflowing. ARGUMENT:: dstStartChanB The channel offest in the destination buffer to start writing the second source at. The destination buffer will be resized if the number of channels to copy is overflowing. ARGUMENT:: dstBufNum The bufNum of the destination buffer. RETURNS:: Nothing, as the various destination buffers are declared in the function call. DISCUSSION:: It is important to understand the rules used for determining the final desintinaiton buffer dimensions to get the most out of this object. The destination buffer will be resized to the maxima of the requsted source numFrames and numChannels, independently of whether the source buffers are that big or not. Frames will be written up to the limit of actually available samples (meaning you can create zero padding);channels will be written modulo the available channels, taking into account the channel offsets, meaning you can have channels repeat or loop into the desintation buffer's channels. See the examples below. EXAMPLES:: code:: (some example code) ::