User Manual

VG Harmonizer — Complete Guide

Real-time MIDI harmonizer designed for VG Wind Ensemble. Generates scale-aware harmony voices from your wind controller in live performance.

Standard v2.3
★ Pro v3.0

Standard vs Pro

Both versions are standalone Python applications with dark-themed GUI. Choose based on how many sections and scale types you need.

How VG Harmonizer Works

VG Harmonizer sits between your wind controller and VG Wind Ensemble, adding harmony voices in real time.

🎺 Wind Controller
EWI · Aerophone · TEControl
MIDI Ch 1 (melody)
⚡ VG Harmonizer
Generates 2–3 harmony voices
Scale-aware voicing tables
🔀 loopMIDI / IAC
Virtual MIDI port
All voices bundled
🎹 VG Wind Ensemble
HISE virtual instrument
Plays melody + harmony
🎵
Melody Input
Your wind controller sends notes on MIDI Channel 1. VG Harmonizer reads each note and detects pitch in real time — there is no latency buffer added.
🧮
Harmony Engine
Each section independently calculates 2–3 harmony voices using pre-computed scale interval tables based on your chosen Root, Chord, and Voicing settings.
🔁
CC Forwarding
Breath (CC2), Volume (CC7), and Expression (CC11) are forwarded from melody to all active harmony channels, scaled by each section's Harmony Volume slider.

Setup & Requirements

Two ways to run: from Python source, or as a pre-built .exe. The .exe requires no Python install on the target machine.

🐍 Run from Python Source

1

Install Python 3.x

Download from python.org. During installation, check "Add Python to PATH".

2

Install loopMIDI (Windows)

Download from tobias-erichsen.de. Create a virtual port named loopMIDI Port 1. macOS users use the built-in IAC Driver.

3

Run the batch file

Double-click RUN_VG_Harmonizer.bat (Standard) or RUN_VG_Harmonizer_Pro.bat (Pro). Dependencies are installed automatically on first run.

📦 Build & Run .exe

1

Build the executable

Run BUILD_EXE.bat or BUILD_EXE_Pro.bat. PyInstaller bundles everything into a single .exe in the dist/ folder.

2

Copy & run the .exe

Move the .exe anywhere — no Python needed. Run directly. The GUI, assets, and all dependencies are embedded.

3

Still need loopMIDI

loopMIDI (or macOS IAC) must still be running for virtual MIDI routing. The app will detect it and guide you if it's not found.

⚠️

Windows: loopMIDI Required

On Windows, VG Harmonizer routes MIDI through loopMIDI's virtual port loopMIDI Port 1. If loopMIDI is not running, the app detects this and shows a setup guide. On macOS, use the built-in IAC Driver — click the Virtual Out button in the app to create it.

Python Dependencies

python-rtmidi
MIDI input/output. Reads from controller, writes to virtual port.
customtkinter
Dark-themed GUI framework. Provides all widgets and styling.
Pillow
Loads and displays the app icon/logo in header and About dialog.

Interface Walkthrough

The UI is organized top-to-bottom. Controls at the top apply globally; the sections area contains per-section settings.

↓ Header
VG Harmonizer  — Designed for VG Wind Ensemble · VGtrumpet.com
About
Refresh
PANIC
↓ MIDI Ports
Input Port ▾
Output Port ▾
Virtual Out
● Connected
↓ Global Controls
Melody Ch ▾
Note: C4   Vel: 90
Master Transpose: − 0 +
↓ CC Switch
CC Switch: CC 2 ▾
H1 · 0–42
H2 · 43–84
H3 · 85–127
Pro only ↓
CC Instrument: CC 7 ▾
Ch 2 · 0–42
Ch 3 · 43–84
Ch 4 · 85–127
+ Melody
Sections: 3 ▾
Legato Chords ☑
↓ Sections Area
H1 ● ON C · Maj7 · Close 4 · Harmony · Vol 100% · Trans 0 · Ch 2
H2 ● ON F · m7 · Triad · Harmony · Vol 100% · Trans 0 · Ch 3
H3 ● ON G · 7 · Open 4 · Voice 2 · Vol 80% · Trans -12 · Ch 4
↓ Presets
Save Preset
Load Preset
My Jazz Voicings
🔴
PANIC Button
Sends "all notes off" (MIDI CC 123) to every active channel. Use if any stuck notes occur — common when switching patches quickly during live performance.
🔄
Refresh Button
Re-scans MIDI devices and updates the Input/Output port dropdowns. Use after plugging in a controller or after loopMIDI starts up.
🎯
Note Display
Shows the current melody note name and velocity in real time (e.g. "C4 · vel 90"). Displays "—" when silent. Useful for verifying your MIDI input is working.

Sections & Controls

Each section is an independent harmonizer that runs simultaneously. Standard has 3 fixed sections; Pro has 2–5 selectable.

H1 — Section 1 Standard Pro
Blue accent. Default: Root C, Chord Maj7, Harmony Ch 2.
H2 — Section 2
Amber accent. Default: Root C, Chord Maj7, Harmony Ch 3.
H3 — Section 3
Green accent. Default: Root C, Chord Maj7, Harmony Ch 4.
H4 — Section 4 Pro only
Purple accent. Harmony Ch 5.
H5 — Section 5 Pro only
Pink accent. Harmony Ch 6.
Control Range / Options Description
ON / OFF toggle On · Off Enables or disables this section's harmony output. When off, no notes are sent and no CC forwarding happens.
Root C · C# · D · Eb · E · F · F# · G · Ab · A · Bb · B Sets the key center (tonic) for all harmony calculations in this section.
Chord 9 types (Standard) · 17 types (Pro) Selects the chord/scale type. Determines which scale intervals are used to harmonize below the melody. See Chord Reference table.
Voicing Triad · Close 4 · Open 4 (+ Off in Pro) Controls how many harmony voices are generated and their spacing. See Voicing Types section.
Voice Filter Harmony · Voice 2 · Voice 3 · Voice 4 · V 2+3 · V 3+4 · V 2+4 Selects which of the generated harmony voices are actually sent to MIDI output. "Harmony" = all voices. Does not affect the melody voice.
Harmony Volume 0–200% Scales the CC2/7/11 forwarding to this section's channel. 100% = full expression. 0% = mute. 200% = doubled expression value (capped at 127).
Transpose Unlimited (− / + buttons) Transposes all harmony notes in this section by semitones. Useful for octave adjustments — e.g. set to −12 for octave-down doubling.
Harmony Ch 1–16 MIDI channel used for this section's harmony output. Default: Ch 2 (H1), Ch 3 (H2), Ch 4 (H3), Ch 5 (H4), Ch 6 (H5). Must be unique per section.

All Chord Types

Standard includes chord types 0–8. Pro adds types 9–16 with diatonic and parallel interval options.

# Name Scale / Mode Description Voicing Applies
0Maj7Ionian (Major) Major 7th chord tones harmonized below melody. Bright, classic major sound. ✓ Yes
17Mixolydian Dominant 7th chord tones. Jazz blues feel. Works great for swing lines. ✓ Yes
2m7Dorian Minor 7th chord tones. Smooth minor sound with a major 6th flavor. ✓ Yes
3mNatural Minor Pure minor chord tones. Darker, classical minor — no added 7th. ✓ Yes
4Maj7#11Lydian Lydian mode chord tones. Bright, floating quality with the raised 4th. ✓ Yes
5m7b9Phrygian Phrygian mode chord tones. Exotic, Spanish/flamenco character. ✓ Yes
6m7b5Locrian Half-diminished chord tones. Tense, unstable — good for passing harmonies. ✓ Yes
7sus4Suspended Parallel 4ths and 5ths — uniform, open sound. Consistent intervals regardless of melody note. ✓ Yes
8Maj7b5 Major with flat 5. Uniform intervals — consistent across all melody notes. ✓ Yes
9 Dia Maj Pro Diatonic Major Strict diatonic harmonization in major scale. No chromatic notes — intervals follow C major scale degrees and shift diatonically. ✓ Yes
10 Dia min Pro Diatonic Minor Strict diatonic harmonization in natural minor scale. Clean modal minor sound with no accidentals. ✓ Yes
11 Par 4th Pro Parallel Single voice exactly −5 semitones below melody. Perfect fourth — consistent for all notes. — Single interval
12 Par 8ve Pro Parallel Single voice exactly −12 semitones below melody. Octave doubling — great for adding depth. — Single interval
13 3rd Maj Pro Diatonic Major Diatonic third below in major scale. Alternates between minor 3rd (−3) and major 3rd (−4) depending on scale degree. — Single interval
14 3rd min Pro Diatonic Minor Diatonic third below in natural minor scale. Follows minor scale degree structure. — Single interval
15 6th Maj Pro Diatonic Major Diatonic sixth below in major scale. Full rich intervals — alternates between major (−8) and minor (−9) sixth. — Single interval
16 6th min Pro Diatonic Minor Diatonic sixth below in natural minor scale. Deep harmonic content below melody. — Single interval
💡

Choosing a Chord Type

The Root selector sets the key center. The Chord determines which scale is used to pick harmony notes below the melody. For example, Root = F, Chord = m7 gives you F Dorian harmonization — ideal for funk or soul lines. For pop harmony, Dia Maj (Pro) gives perfectly diatonic voice leading in any key.

Voicing Types

Voicings control the number of harmony voices generated and how they are spaced relative to the melody.

Off Pro
Melody
— no harmony —
Disables harmony output for this section entirely. Melody still passes through. Useful for solos or when you want a section on standby.
Triad
Melody
Voice 2 (3rd below)
Voice 3 (5th below)
2 harmony voices. Third and fifth below melody. Classic three-part harmony — compact, transparent sound.
Close 4
Melody
Voice 2 (7th below)
Voice 3 (5th below)
Voice 4 (3rd below)
3 harmony voices in close position. Full 4-part harmony within one octave of the melody. Rich, tight sound.
Open 4
Melody
Voice 2 (5th below)
Voice 3 (3rd below)
Voice 4 (7th below + oct.)
3 harmony voices in open position. Derived from Close 4 by dropping the top voice an octave. Wider, more spacious — great for full ensemble textures.
📌

Parallel and Interval Chords

For Pro chord types Par 4th, Par 8ve, 3rd Maj/min, and 6th Maj/min — only a single harmony voice is generated regardless of the Voicing setting. The Voicing selector has no effect on these types.

Voice Filter

Controls which of the generated harmony voices are actually sent to MIDI output. Does not affect the melody voice — melody always passes through separately.

Filter OptionVoices SentUse Case
HarmonyAll generated voices (V2 + V3 + V4)Full harmony — default option.
Voice 2Highest harmony voice only (closest to melody)Single-voice harmony line above the bass.
Voice 3Middle harmony voice onlyInner voice — blends smoothly with melody.
Voice 4Lowest harmony voice only (furthest from melody)Bass voice only — deep harmonic foundation.
V 2+3Top two harmony voicesTight upper harmony without low voice.
V 3+4Bottom two harmony voicesLower harmony pad — useful with Triad/Open 4.
V 2+4Outer harmony voices (skip middle)Open, spread sound — melody + outer frame.
🎚️

Tip: Combining Sections for Layered Harmony

Use multiple sections with different Voice Filters to build complex arrangements. For example: H1 = Voice 2 (high harmony), H2 = Voice 4 (low bass), H3 = Harmony (full chord pad on a separate MIDI channel). Each section can play a different instrument in VG Wind Ensemble.

CC Switch — Section Switching

Map any MIDI CC to switch between harmonizer sections in real time — using a foot pedal, expression pedal, or breath controller.

How It Works

The CC value range 0–127 is divided equally among all active sections. Only one section is "active" at any time — the active section's settings are used for harmony generation.

Select a CC number

Choose any CC 1–127, or "Off" to disable section switching. CC 2 (Breath) or CC 11 (Expression) are common choices for wind controllers.

Zone labels update

The UI shows the CC value range for each section automatically. Active zone is highlighted.

Hysteresis prevents flickering

A 3-unit buffer at each zone boundary prevents rapid toggling when the CC value sits right at a boundary.

Zone Examples

2 Sections (Pro):

H1
0–63
H2
64–127

3 Sections (Standard & Pro):

H1
0–42
H2
43–84
H3
85–127

4 Sections (Pro):

H1
0–31
H2
32–63
H3
64–95
H4
96–127

Pro v3.0 — Exclusive Features

VG Harmonizer Pro adds three major capabilities beyond Standard: CC Instrument switching, variable section count, and Legato Chords mode.

🔢

Variable Section Count

Choose 2 to 5 simultaneous harmonizer sections. The window resizes automatically to fit.

SectionsWindow WidthHarmony Channels
2660 pxCh 2, Ch 3
3820 pxCh 2, Ch 3, Ch 4
41000 pxCh 2, Ch 3, Ch 4, Ch 5
51100 pxCh 2, Ch 3, Ch 4, Ch 5, Ch 6
🎛️

CC Instrument — Real-Time Instrument Switching

A second CC Switch that changes the MIDI channel for all harmony voices simultaneously — effectively switching the instrument sound playing the harmony in VG Wind Ensemble.

Instrument 1
Ch 2 · 0–42
Instrument 2
Ch 3 · 43–84
Instrument 3
Ch 4 · 85–127

When switching, all current harmony notes are killed on the old channel and retriggered on the new channel. The 3 instrument zones are fixed at equal thirds of the CC range.

"+ Melody" Checkbox

When enabled, the melody channel follows the CC Instrument switch to the same channel as harmony — melody and harmony play through the same VG Wind Ensemble instrument. When disabled, melody stays on its original channel.

🎵

Legato Chords — Smooth Section Transitions

When Legato Chords is enabled, switching sections via CC Switch uses intelligent note diffing instead of retrigger-all behavior.

Without Legato Chords

All current harmony notes receive note-off, then all new harmony notes receive note-on. Creates an audible retrigger/attack on every section switch — good for rhythmic effects.

With Legato Chords

Notes common between old and new section (same pitch + same channel) are sustained — no note-off/note-on. Only changed notes are retriggered. Result: seamless chord transitions with no re-attack on shared notes.

Saving & Loading Presets

Presets save your complete Harmonizer state to a JSON file. Load them instantly for different songs or setups.

💾 Saving a Preset

1

Click "Save Preset"

A dialog opens asking for a preset name.

2

Enter a name

The preset is saved as name.json in the presets folder.

📂 Loading a Preset

1

Click "Load Preset"

A window opens listing all saved presets.

2

Click a preset

All settings are restored instantly — sections, channels, transpose, CC Switch, and more.

📁

Preset Storage Location

Windows: %APPDATA%\VGHarmonizer\presets\
macOS / Linux: ~/.vgharmonizer/presets/
Each preset is a plain JSON file you can back up, share, or edit manually.

What a Preset Stores

Global Settings
Melody channel, Master Transpose, CC Switch selection.
Pro Settings
CC Instrument, section count, Legato Chords, + Melody flag.
Per-Section
Root, chord, voicing, voice filter, volume, transpose, harmony channel, enabled state.

MIDI Routing & Channels

Understanding channel assignments is important for setting up VG Wind Ensemble to respond to the correct MIDI channels.

SignalDefault ChannelNotes
Melody (input)Ch 1Fixed. Your wind controller must send on Ch 1.
Melody (output)Ch 1Configurable via Melody Ch selector (1–16). Default Ch 1.
Harmony H1Ch 2Configurable in section's Harmony Ch dropdown.
Harmony H2Ch 3Configurable in section's Harmony Ch dropdown.
Harmony H3Ch 4Configurable in section's Harmony Ch dropdown.
Harmony H4 (Pro)Ch 5Pro only. Configurable.
Harmony H5 (Pro)Ch 6Pro only. Configurable.
CC2 / CC7 / CC11All active harmony channelsForwarded from melody input, scaled by each section's Harmony Volume.
⚙️

VG Wind Ensemble Setup

In VG Wind Ensemble, set each instrument to respond to the MIDI channel matching the harmonizer section. For example: Trumpet 1 → Ch 1 (melody), Trumpet 2 → Ch 2 (H1), Saxophone → Ch 3 (H2), Trombone → Ch 4 (H3). All signals travel through the loopMIDI virtual port.

Virtual Instruments · VST/AU/Standalone · Wind Controller Software