Audio processing fundamentals
Sample rates and control rates
Csound operates at two fundamental rates:- Sample rate (sr): Frequency at which audio samples are generated (e.g., 44100 Hz)
- Control rate (kr): Frequency at which control signals are updated
ksmps (k-rate samples):
Audio vectors
Audio signals (a-rate) are processed in blocks called vectors:include/csoundCore.h:475
ksmps samples in a tight loop for efficiency.
Audio I/O architecture
The audio I/O system is initialized byinitialise_io() from Engine/musmon.c:
Engine/musmon.c:64
Buffer management
Csound uses a triple-buffer strategy:- Software buffers: Large buffers for OS audio API (
oMaxLag) - Csound buffers: Working buffers (
inbufsamps,outbufsamps) - k-period buffers: Small buffers for processing (
ksmpssamples)
From
Engine/musmon.c:102, buffer sizes are logged: “audio buffered in N sample-frame blocks”Signal flow
Input to output path
Audio flows through Csound in this sequence:include/csoundCore.h:493
Multi-channel handling
Csound natively supports multi-channel audio:include/csoundCore.h:143
- Interleaved format: Channels stored as
[L0, R0, L1, R1, ...] - Channel routing: Opcodes specify which channels to read/write
- Upmixing/downmixing: Automatic when channel counts differ
Performance cycle
The k-rate loop
The main audio generation happens in the performance loop:kperf() (Top/csound.c:73).
Opcode execution order
Within each instrument instance:- Init phase (
nxtichain): Runs once when instance starts - Performance phase (
nxtpchain): Runs every k-period - Deinit phase (
nxtdchain): Runs once when instance ends
include/csoundCore.h:427
Sample-accurate timing
Csound 6+ provides sample-accurate timing for note starts and parameter changes:Offset mechanism
include/csoundCore.h:488
Opcodes/butter.c:60.
Signal generators
Csound includes various signal generation opcodes inOOps/:
Oscillators
FromOOps/ugens2.c, phase accumulation for oscillators:
OOps/ugens2.c:42
ugens2.c
Standard periodic signal generators, table lookup oscillators
ugens3.c
FM synthesis, sample playback, additive synthesis
ugens4.c
Broadband periodic and noise generators
oscils.c
Specialist periodic signal generators, advanced table lookup
Filters
FromOOps/README.md, ugens5.c provides standard filters and LPC.
Example Butterworth filter from Opcodes/butter.c:
Opcodes/butter.c:48
FFT and frequency domain
Csound provides extensive FFT capabilities:FFT libraries
- fftlib.c: Radix-2 FFT routines (OOps/)
- mxfft.c: Non-radix-2 FFT routines (OOps/)
- pffft.c: Alternative radix-2 implementation (OOps/)
OOps/README.md:
- pvsanal.c: Phase vocoder analysis and synthesis
- pstream.c: Streaming phase vocoder opcodes
- pvfileio.c: Phase vocoder file I/O
Phase vocoder data
Frequency domain data uses thePVSDAT structure:
include/csound.h:158
Real-time optimization
Vectorization
Many opcodes use SIMD instructions for parallel processing:- Manual loop unrolling
- Compiler auto-vectorization hints
- Platform-specific intrinsics (SSE, AVX, NEON)
Cache efficiency
Memory access patterns optimized for:- Sequential buffer traversal
- Small working sets
- Aligned allocations
- Prefetching hints
Lock-free algorithms
Real-time audio threads avoid locks using:- Atomic operations
- Ring buffers
- Wait-free message passing
Engine/README.md, parallel execution is managed in cs_par_base.c and cs_new_dispatch.c.
Audio backends
Csound supports multiple audio backends:- PortAudio: Cross-platform (default)
- JACK: Low-latency Linux/macOS
- ALSA: Linux native
- CoreAudio: macOS native
- WASAPI: Windows native
- PulseAudio: Linux desktop
InOut/ directory.
Sample rate conversion
FromEngine/README.md, srconvert.c handles sampling rate conversion when:
- Hardware SR differs from Csound SR
- Reading audio files at different rates
- Resampling for effects
INSDS:
include/csoundCore.h:477
Auxiliary memory management
Opcodes useAUXCH for dynamic buffers:
include/csoundCore.h:194
Engine/README.md, auxiliary resource management is in auxfd.c.
Opcodes request memory:
Performance monitoring
Csound tracks performance metrics:include/csoundCore.h:152
Engine/musmon.c:126:
Related topics
Architecture
Overall system architecture
Opcodes
How opcodes process audio
Instruments
Instrument instances and lifecycle
API reference
Performance API functions