ChannelMergerBlock
Merges individual mono inputs into a multi-channel output.
Overview
ChannelMergerBlock combines separate mono signals into a single multi-channel stream, typically used after splitting and processing channels independently.
Creating a Merger
#![allow(unused)] fn main() { use bbx_dsp::{blocks::ChannelMergerBlock, graph::GraphBuilder}; let mut builder = GraphBuilder::<f32>::new(44100.0, 512, 2); // Merge 6 mono inputs into 6-channel output let merger = builder.add(ChannelMergerBlock::new(6)); }
Or with direct construction:
#![allow(unused)] fn main() { use bbx_dsp::blocks::ChannelMergerBlock; let merger = ChannelMergerBlock::<f32>::new(4); }
Port Layout
| Port | Direction | Description |
|---|---|---|
| 0..N | Input | Individual mono inputs |
| 0..N | Output | Multi-channel output |
Input and output counts are equal, determined by the channels parameter (1-16).
Parameters
| Parameter | Type | Range | Description |
|---|---|---|---|
| channels | usize | 1-16 | Number of channels to merge |
Usage Examples
Merge Two Mono Signals to Stereo
#![allow(unused)] fn main() { use bbx_dsp::{blocks::{ChannelMergerBlock, OscillatorBlock}, graph::GraphBuilder, waveform::Waveform}; let mut builder = GraphBuilder::<f32>::new(44100.0, 512, 2); // Two separate oscillators let osc_left = builder.add(OscillatorBlock::new(440.0, Waveform::Sine, None)); let osc_right = builder.add(OscillatorBlock::new(442.0, Waveform::Sine, None)); // Merge to stereo let merger = builder.add(ChannelMergerBlock::new(2)); builder.connect(osc_left, 0, merger, 0); builder.connect(osc_right, 0, merger, 1); }
Reassemble Split Channels After Processing
#![allow(unused)] fn main() { use bbx_dsp::{blocks::{ChannelMergerBlock, ChannelSplitterBlock, OverdriveBlock}, graph::GraphBuilder}; let mut builder = GraphBuilder::<f32>::new(44100.0, 512, 2); // Split stereo input let splitter = builder.add(ChannelSplitterBlock::new(2)); // Process each channel (add effects here) let left_drive = builder.add(OverdriveBlock::new(2.0, 1.0, 0.5, 44100.0)); let right_drive = builder.add(OverdriveBlock::new(4.0, 1.0, 0.8, 44100.0)); builder.connect(splitter, 0, left_drive, 0); builder.connect(splitter, 1, right_drive, 0); // Merge back to stereo let merger = builder.add(ChannelMergerBlock::new(2)); builder.connect(left_drive, 0, merger, 0); builder.connect(right_drive, 0, merger, 1); }
Create Custom Surround Layout
#![allow(unused)] fn main() { use bbx_dsp::{blocks::{ChannelMergerBlock, OscillatorBlock}, graph::GraphBuilder, waveform::Waveform}; let mut builder = GraphBuilder::<f32>::new(44100.0, 512, 4); // Four separate sources let front_left = builder.add(OscillatorBlock::new(440.0, Waveform::Sine, None)); let front_right = builder.add(OscillatorBlock::new(440.0, Waveform::Sine, None)); let rear_left = builder.add(OscillatorBlock::new(220.0, Waveform::Sine, None)); let rear_right = builder.add(OscillatorBlock::new(220.0, Waveform::Sine, None)); // Merge to quad let merger = builder.add(ChannelMergerBlock::new(4)); builder.connect(front_left, 0, merger, 0); builder.connect(front_right, 0, merger, 1); builder.connect(rear_left, 0, merger, 2); builder.connect(rear_right, 0, merger, 3); }
Implementation Notes
- Zero-latency operation (direct copy)
- Uses
ChannelConfig::Explicit(handles routing internally) - Panics if
channelsis 0 or greater than 16 - Complement to
ChannelSplitterBlock