展示HN:VOOG – Python编写的Moog风格复音合成器,带有tkinter GUI。
Show HN: VOOG – Moog-style polyphonic synthesizer in Python with tkinter GUI

原始链接: https://github.com/gpasquero/voog

## Voog:一款Python虚拟模拟合成器 Voog 是一款使用 Python 和 tkinter GUI 框架构建的多音色虚拟模拟合成器,其视觉设计灵感源自 Moog Subsequent 37。它具有三个可选择波形(正弦波、锯齿波、方波、三角波)的振荡器和一个噪声发生器,以及带有共振和包络调制功能的经典 Moog 阶梯滤波器。 该合成器提供用于控制音量和滤波器的双 ADSR 包络,以及一个多功能的 LFO,具有四种波形,可以调制滤波器、音高或音量。它支持滑音/音高滑移,每个音色通道具有 8 个复音,并预装了 19 个不同的预设。 Voog 接受虚拟键盘(鼠标/QWERTY)输入,并可选地支持 MIDI 控制,具有全面的 CC 映射。可以保存和加载音色补丁。它需要 Python 3.13+,以及 tkinter、numpy 和 sounddevice(以及可选的 mido/python-rtmidi 以支持 MIDI)。该项目在 GitHub 上可用,并提供详细的安装说明。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 展示 HN: VOOG – Python tkinter GUI 风格的 Moog 多音合成器 (github.com/gpasquero) 13 分,作者 gpasquero,52 分钟前 | 隐藏 | 过去 | 收藏 | 1 条评论 内容: 我用 Python 和 tkinter GUI 构建了一个多音合成器,风格模仿 Moog Subsequent 37。特性:3 个振荡器,Moog 阶梯滤波器 (24dB/oct),双 ADSR 包络,LFO,滑音,噪声发生器,4 个复音通道,19 个预设,旋钮 GUI,带有鼠标 + QWERTY 输入的虚拟键盘,以及 MIDI 支持。 没有外部 GUI 框架——只有 tkinter、numpy 和 sounddevice。 peteforde 22 分钟前 [–] 哇,这真的太酷了。感谢你构建并分享了这个。回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系方式 搜索:
相关文章

原文

Virtual Analog Synthesizer — a Moog-style polyphonic synthesizer built in Python with a tkinter GUI inspired by the Subsequent 37.

Python 3.13+

┌─────────────────────────────────────────────────────────────────┐
│  VOOG   VIRTUAL ANALOG SYNTHESIZER                              │
├─────────────────────────────────────────────────────────────────┤
│  OSC 1        OSC 2        OSC 3        NOISE                   │
│  (Oct)(Semi)  (Oct)(Semi)  (Oct)(Semi)  (Lvl)                   │
│  (Det)(Lvl)   (Det)(Lvl)   (Det)(Lvl)                           │
├─────────────────────────────────────────────────────────────────┤
│  FILTER       FILTER ENV   AMP ENV      LFO                     │
│  (Cut)(Res)   (A)(D)       (A)(D)       (Rate)(Depth)           │
│  (Env)(Key)   (S)(R)       (S)(R)                               │
├─────────────────────────────────────────────────────────────────┤
│  ┌─┬█┬─┬█┬─┬─┬█┬─┬█┬─┬█┬─┬─┬█┬─┬█┬─┬─┬█┬─┬█┬─┬█┬─┐         │    │
│  │ │█│ │█│ │ │█│ │█│ │█│ │ │█│ │█│ │ │█│ │█│ │█│ │         │    │
│  └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘         │    │
└─────────────────────────────────────────────────────────────────┘
  • 3 oscillators with sine, saw, square, and triangle waveforms
  • Moog ladder filter (24dB/oct) with resonance and envelope modulation
  • Dual ADSR envelopes for amplitude and filter
  • LFO with 4 waveforms and 3 modulation destinations (filter, pitch, amp)
  • Glide/portamento with off, always, and legato modes
  • Noise generator (white/pink)
  • 4 multitimbral channels, 8-voice polyphony each
  • 19 built-in presets from deep sub basses to screaming leads
  • Rotary knob GUI with Subsequent 37-inspired dark theme
  • Virtual keyboard — mouse click/drag + QWERTY PC keyboard input
  • MIDI input support (optional, graceful fallback)
  • Patch save/load system (~/.synth_patches/)

Requires Python 3.13+ with tkinter.

# Clone
git clone https://github.com/gpasquero/voog.git
cd voog

# Create virtual environment
python3.13 -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install numpy sounddevice

# Optional: MIDI support
pip install mido python-rtmidi

# macOS only: install tkinter if needed
brew install [email protected]
source .venv/bin/activate
python -m synth --gui
--gui          Launch graphical interface
--patch NAME   Load a preset by name (e.g. "Bass Voog")
--midi-port P  Connect to a specific MIDI port
--no-midi      Start without MIDI input
--list-midi    List available MIDI ports and exit
 W E   T Y U   O P        ← black keys (sharps)
A S D F G H J K L          ← white keys
C D E F G A B C D

Hold a key to sustain — key repeat is filtered so notes don't re-trigger.

Click and drag on the virtual keyboard. Drag across keys to glide between notes.

Connect any MIDI controller. MIDI CC messages are mapped to synth parameters (cutoff, resonance, envelopes, LFO, etc.).

All synth parameters use rotary knob controls:

  • Drag vertically on any knob to change its value (up = increase)
  • Scroll wheel for fine adjustment
  • The amber arc shows the current value position
Preset Description
Init Default starting patch
Bass Voog Fat detuned saw bass with filter envelope
Lead Saw Aggressive dual-saw lead with legato glide
Pad Strings Warm evolving pad with slow filter LFO
Sub Thunder Deep sub bass with square wave foundation
Acid Squelch High-resonance filter sweep, 303-style
Funky Pluck Snappy percussive hit, fast decay
Screaming Lead Bright resonant lead with vibrato and glide
Warm Brass Square/saw mix with medium attack
Dark Drone Detuned low saws with slow LFO sweep
Perc Hit Noise burst with ultra-short envelope
Vintage Keys Triangle/square electric piano tone
Wobble Bass LFO-driven filter modulation
Trance Lead Wide-detuned triple saw with pitch vibrato
Fat Unison Three saws spread ±25 cents
Reso Sweep Near self-oscillating filter with long decay
Fifth Stab Power fifth interval, short punch
Glass Bell Sine harmonics with long crystalline release
Noise Sweep Filtered noise with resonant LFO, sci-fi
synth/
├── dsp/            # Signal processing modules
│   ├── oscillator  # Wavetable synthesis (sine, saw, square, triangle)
│   ├── filter      # Moog ladder filter (24dB/oct, Huovilainen model)
│   ├── envelope    # ADSR envelope generator
│   ├── lfo         # Low-frequency oscillator
│   ├── glide       # Pitch portamento
│   └── noise       # White/pink noise generator
├── engine/         # Audio engine
│   ├── audio_engine  # Master engine, sounddevice output, MIDI routing
│   ├── channel       # Multitimbral channel (patch + voice allocator)
│   ├── voice         # Single voice (oscillators + filter + envelopes)
│   └── voice_allocator  # Polyphonic allocation with voice stealing
├── gui/            # Graphical interface
│   └── app         # tkinter GUI with rotary knobs and virtual keyboard
├── midi/           # MIDI support
│   ├── midi_input  # MIDI port listener (mido/rtmidi)
│   ├── midi_router # Message routing
│   └── cc_map      # CC-to-parameter mapping
├── patch/          # Patch system
│   ├── patch       # Patch data structure
│   ├── patch_manager  # Save/load to disk
│   └── default_patches  # 19 built-in presets
└── cli/            # Command-line interface
    └── repl        # Interactive REPL

MIT

联系我们 contact @ memedata.com