In a digital circuit, the accumulation of data waiting to be output, or waiting to be passed on to the next stage of a circuit. Buffering occurs when something that is generating data is doing so faster than the destination for the data can take it as input. Buffering in music software, particular in soft synth and DAW software, is problematic because the buffer effectively constitutes a delay line. For example, if data output from a soft synth is buffered before being fed to the computer's D/A converter, then this introduces undesirable latency between the performer's input and the soft synth's output. However, variations in computing algorithms and in CPU time allocations to different tasks (e.g., several soft synths are running at once) often means that the flow of data is not perfectly rate-consistent, and if there is no buffering, "data starvation" occurs and causes stutters or gaps in the audio output, because there is no data ready for the D/A converter.
Additionally, a paradox of the computing environment is that data transfer is often more CPU efficient if the data is moved in larger blocks, but doing so requires buffering to accumulate enough data to make a block to be moved. Doing data transfers in smaller blocks reduces buffering, but also takes more CPU time, which can take CPU time away from the applications that are generating the data, which in itself may cause data starvation. The software designer must balance the two opposing forces.