Nodes/ComfyUI Signal Processing/(SP) PadSynth Choir
ComfyUI Node

(SP) PadSynth Choir

A whole choir from one node

By c0ffymachyne·Created 2 years ago·Updated about a year ago· 22
(SP) PadSynth Choir
    • audios
    • sample_rate
    samplerate44100
    base_freq131
    step_size4
    num_notes7
    bandwidth_cents60
    number_harmonics64

    (SP) PadSynth Choir is the same PADSynth engine as (SP) PadSynth, but pointed at a very specific job: generating a stack of notes that sound like voices singing together. Instead of one static tone, it generates several notes at once - each with a formant-shaped harmonic profile that mimics the vocal tract - and hands them to you as a list you can mix.

    The "choir" magic is in the formants. Human voices have resonance peaks (formants) around 600 Hz, 900 Hz, 2200 Hz, and 2600 Hz, and the code literally shapes each note's harmonic amplitudes with Gaussian bumps at those frequencies. The result is that a chord of these notes reads as vocal - vaguely "ahhh" - rather than as a generic synth pad. It's a neat trick that's exactly as uncanny as you'd expect, which is the fun part.

    The inputs

    • samplerate - 8000–96000, default 44100.
    • base_freq - the lowest note in Hz, default 130.81 (low C-ish). Every other note is built upward from here.
    • step_size - semitones between each generated note, 1–24, default 4 (a major third apart - a nice airy spread).
    • num_notes - how many notes to generate, 1–24, default 7. A 7-note stack across major thirds is a big, bright chord; fewer notes = thinner, more controlled.
    • bandwidth_cents - 10–100, default 60, the width of each harmonic bell. Wider = softer, more "choir in a hall."
    • number_harmonics - 1–128, default 64. Richness, and render time.

    The outputs (this is the part to get right)

    You get two outputs, which trips people up:

    • audios - an AUDIO_LIST, one generated note per entry. This is not a single playable clip; it's a list.
    • sample_rate - the INT rate, so you can keep track.

    To hear anything, run the audios list into (SP) Mix Down, which sums the list into one AUDIO with per-note volume control. That two-node combo (Choir → Mix Down) is the intended pipeline, straight from the README. From there: Stereo Width, Filter, Convolution Reverb - the usual finishing chain.

    Two honest caveats. First, all the notes start simultaneously and hold forever - there's no envelope, so it's a sustained chord, not a sung phrase. Second, each note gets fresh random phases, so every run sounds slightly different; don't expect a deterministic take unless you lock your seed... which a node like this won't do for you. If you want one clean note instead of a stack, use plain PadSynth.

    Installing it

    ComfyUI Manager → "Install Custom Nodes" → search ComfyUI Signal Processing, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/c0ffymachyne/ComfyUI_SignalProcessing
    

    then restart ComfyUI. Dependencies from requirements.txt (scipy, pyfar, torchaudio, pyloudnorm, cupy-cuda11x, ...) - Manager installs them for you. The repo is a work in progress; if the pack won't load, the pinned cupy-cuda11x (imported by the Limiter at startup) is the usual culprit.

    CategorySignal Processing

    Inputs (6)

    NameTypeDefaultDescription
    samplerateINT441008000–96000
    base_freqFLOAT13120–2000
    step_sizeINT41–24
    num_notesINT71–24
    bandwidth_centsFLOAT6010–100
    number_harmonicsINT641–128

    Outputs (2)

    NameTypeDescription
    audiosAUDIO_LIST
    sample_rateINT