Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Signal Types Cheatsheet

Quick reference for Quiver’s signal conventions.

Signal Ranges

TypeRangeZero PointUse
Audio±5V0VSound waveforms
CV Unipolar0-10V0VCutoff, rate, depth
CV Bipolar±5V0VPan, FM, bend
V/Oct±10V0V = C4Pitch
Gate0V or 5V0VSustained on/off
Trigger0V or 5V0VBrief pulse
Clock0V or 5V0VTiming pulses

SignalKind Enum

pub enum SignalKind {
    Audio,           // ±5V AC-coupled
    CvBipolar,       // ±5V control
    CvUnipolar,      // 0-10V control
    VoltPerOctave,   // 1V/Oct pitch
    Gate,            // 0V/+5V sustained
    Trigger,         // 0V/+5V pulse
    Clock,           // Timing pulses
}

PortDef Factory Methods

MethodSignal KindDefaultAttenuverter
::audio()Audio0.0No
::cv_unipolar()CvUnipolar0.0Yes
::cv_bipolar()CvBipolar0.0Yes
::voct()VoltPerOctave0.0No
::gate()Gate0.0No
::trigger()Trigger0.0No
::clock()Clock0.0No

Compatibility Quick Reference

Audio ←→ CV:      ⚠ Works but check intent
CV ←→ V/Oct:      ⚠ Usually wrong
Gate ←→ Trigger:  ✓ Compatible
Clock ←→ Trigger: ✓ Compatible
V/Oct ←→ Audio:   ✗ Usually wrong

Common Voltage Conversions

MIDI Note to V/Oct

fn midi_to_voct(note: u8) -> f64 {
    (note as f64 - 60.0) / 12.0
}

V/Oct to Frequency

fn voct_to_hz(v: f64) -> f64 {
    261.63 * 2.0_f64.powf(v)
}

MIDI CC to CV

// 0-127 → 0-10V
fn cc_to_cv(cc: u8) -> f64 {
    cc as f64 / 127.0 * 10.0
}

// 0-127 → ±5V
fn cc_to_cv_bipolar(cc: u8) -> f64 {
    (cc as f64 / 127.0 - 0.5) * 10.0
}

MIDI Velocity to CV

fn velocity_to_cv(vel: u8) -> f64 {
    vel as f64 / 127.0 * 10.0  // 0-10V
}

Pitch Bend to V/Oct

// Standard ±2 semitones
fn bend_to_voct(bend: i16) -> f64 {
    (bend as f64 / 8192.0) * (2.0 / 12.0)
}

Attenuverter Reference

ValueEffect
-2.0Invert and double
-1.0Invert
-0.5Invert and halve
0.0Silence
0.5Half level
1.0Unity (unchanged)
2.0Double

Cable Attenuation

Cable::new()
    .with_attenuation(0.5)   // Scale signal
    .with_offset(2.0)        // Add DC offset

Input Summing

Multiple cables to one input are added:

LFO1 (+2V) ─┐
            ├── Input receives +5V
LFO2 (+3V) ─┘

Normalled Connections

When input is unpatched, uses normalled source:

PortDef::audio().with_normalled_to("other_port")