micforge 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. micforge-1.3.0/LICENSE +22 -0
  2. micforge-1.3.0/PKG-INFO +334 -0
  3. micforge-1.3.0/README.md +290 -0
  4. micforge-1.3.0/pyproject.toml +73 -0
  5. micforge-1.3.0/setup.cfg +4 -0
  6. micforge-1.3.0/src/micforge/__init__.py +3 -0
  7. micforge-1.3.0/src/micforge/__main__.py +4 -0
  8. micforge-1.3.0/src/micforge/analysis/__init__.py +0 -0
  9. micforge-1.3.0/src/micforge/analysis/stats.py +133 -0
  10. micforge-1.3.0/src/micforge/audio/__init__.py +0 -0
  11. micforge-1.3.0/src/micforge/audio/backend.py +32 -0
  12. micforge-1.3.0/src/micforge/audio/cues.py +110 -0
  13. micforge-1.3.0/src/micforge/audio/device_watch.py +237 -0
  14. micforge-1.3.0/src/micforge/audio/devices.py +160 -0
  15. micforge-1.3.0/src/micforge/audio/engine.py +746 -0
  16. micforge-1.3.0/src/micforge/audio/fileio.py +45 -0
  17. micforge-1.3.0/src/micforge/audio/latency.py +169 -0
  18. micforge-1.3.0/src/micforge/audio/loopback.py +113 -0
  19. micforge-1.3.0/src/micforge/audio/metrics.py +134 -0
  20. micforge-1.3.0/src/micforge/audio/noise_profile.py +250 -0
  21. micforge-1.3.0/src/micforge/audio/recorder.py +100 -0
  22. micforge-1.3.0/src/micforge/audio/ring.py +89 -0
  23. micforge-1.3.0/src/micforge/cli.py +293 -0
  24. micforge-1.3.0/src/micforge/commands/__init__.py +0 -0
  25. micforge-1.3.0/src/micforge/commands/calibrate.py +47 -0
  26. micforge-1.3.0/src/micforge/commands/common.py +69 -0
  27. micforge-1.3.0/src/micforge/commands/devices_cmd.py +86 -0
  28. micforge-1.3.0/src/micforge/commands/diagnostics_cmd.py +68 -0
  29. micforge-1.3.0/src/micforge/commands/doctor.py +127 -0
  30. micforge-1.3.0/src/micforge/commands/files.py +48 -0
  31. micforge-1.3.0/src/micforge/commands/help_cmd.py +449 -0
  32. micforge-1.3.0/src/micforge/commands/latency_test.py +65 -0
  33. micforge-1.3.0/src/micforge/commands/live.py +321 -0
  34. micforge-1.3.0/src/micforge/commands/preset_cmd.py +142 -0
  35. micforge-1.3.0/src/micforge/commands/test_mic.py +98 -0
  36. micforge-1.3.0/src/micforge/commands/wizard.py +70 -0
  37. micforge-1.3.0/src/micforge/config.py +279 -0
  38. micforge-1.3.0/src/micforge/diagnostics.py +308 -0
  39. micforge-1.3.0/src/micforge/dsp/__init__.py +0 -0
  40. micforge-1.3.0/src/micforge/dsp/aec.py +388 -0
  41. micforge-1.3.0/src/micforge/dsp/base.py +30 -0
  42. micforge-1.3.0/src/micforge/dsp/biquad.py +144 -0
  43. micforge-1.3.0/src/micforge/dsp/chain.py +153 -0
  44. micforge-1.3.0/src/micforge/dsp/cofilite.py +427 -0
  45. micforge-1.3.0/src/micforge/dsp/compressor.py +109 -0
  46. micforge-1.3.0/src/micforge/dsp/deesser.py +64 -0
  47. micforge-1.3.0/src/micforge/dsp/denoise.py +181 -0
  48. micforge-1.3.0/src/micforge/dsp/deverb.py +227 -0
  49. micforge-1.3.0/src/micforge/dsp/export_cofilite.py +111 -0
  50. micforge-1.3.0/src/micforge/dsp/gate.py +76 -0
  51. micforge-1.3.0/src/micforge/dsp/leveler.py +74 -0
  52. micforge-1.3.0/src/micforge/dsp/proximity.py +164 -0
  53. micforge-1.3.0/src/micforge/dsp/util.py +80 -0
  54. micforge-1.3.0/src/micforge/errors.py +25 -0
  55. micforge-1.3.0/src/micforge/logging_setup.py +25 -0
  56. micforge-1.3.0/src/micforge/models/cofilite.onnx +0 -0
  57. micforge-1.3.0/src/micforge/presets.py +284 -0
  58. micforge-1.3.0/src/micforge/profile_store.py +41 -0
  59. micforge-1.3.0/src/micforge/ui/__init__.py +0 -0
  60. micforge-1.3.0/src/micforge/ui/dashboard.py +573 -0
  61. micforge-1.3.0/src/micforge/ui/hotkeys.py +169 -0
  62. micforge-1.3.0/src/micforge/ui/keys.py +64 -0
  63. micforge-1.3.0/src/micforge/ui/report.py +88 -0
  64. micforge-1.3.0/src/micforge/ui/settings_gui.py +899 -0
  65. micforge-1.3.0/src/micforge/ui/theme.py +42 -0
  66. micforge-1.3.0/src/micforge/ui/tray.py +276 -0
  67. micforge-1.3.0/src/micforge/ui/tuning.py +138 -0
  68. micforge-1.3.0/src/micforge/ui/widgets.py +109 -0
  69. micforge-1.3.0/src/micforge/util/autostart.py +56 -0
  70. micforge-1.3.0/src/micforge.egg-info/PKG-INFO +334 -0
  71. micforge-1.3.0/src/micforge.egg-info/SOURCES.txt +85 -0
  72. micforge-1.3.0/src/micforge.egg-info/dependency_links.txt +1 -0
  73. micforge-1.3.0/src/micforge.egg-info/entry_points.txt +2 -0
  74. micforge-1.3.0/src/micforge.egg-info/requires.txt +14 -0
  75. micforge-1.3.0/src/micforge.egg-info/top_level.txt +1 -0
  76. micforge-1.3.0/tests/test_aec.py +92 -0
  77. micforge-1.3.0/tests/test_click_fixes.py +215 -0
  78. micforge-1.3.0/tests/test_cofilite.py +76 -0
  79. micforge-1.3.0/tests/test_cues.py +45 -0
  80. micforge-1.3.0/tests/test_deverb.py +72 -0
  81. micforge-1.3.0/tests/test_dsp.py +149 -0
  82. micforge-1.3.0/tests/test_engine.py +63 -0
  83. micforge-1.3.0/tests/test_hotkeys.py +37 -0
  84. micforge-1.3.0/tests/test_misc.py +120 -0
  85. micforge-1.3.0/tests/test_presets.py +159 -0
  86. micforge-1.3.0/tests/test_proximity.py +81 -0
  87. micforge-1.3.0/tests/test_v130_features.py +404 -0
micforge-1.3.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Parth Sadaria
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,334 @@
1
+ Metadata-Version: 2.4
2
+ Name: micforge
3
+ Version: 1.3.0
4
+ Summary: Real-time microphone clean-up for Discord and voice chat: de-muffle, denoise, level, route.
5
+ Author: Parth Sadaria
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Parthsadaria/MicForge
8
+ Project-URL: Documentation, https://github.com/Parthsadaria/MicForge#readme
9
+ Project-URL: Repository, https://github.com/Parthsadaria/MicForge.git
10
+ Project-URL: Issues, https://github.com/Parthsadaria/MicForge/issues
11
+ Project-URL: Changelog, https://github.com/Parthsadaria/MicForge/tree/main/verison%20notes
12
+ Keywords: audio,microphone,dsp,noise-suppression,speech-enhancement,discord,cofilite,streaming
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: Microsoft :: Windows
18
+ Classifier: Operating System :: POSIX :: Linux
19
+ Classifier: Operating System :: MacOS
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Capture/Recording
26
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
27
+ Requires-Python: >=3.10
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Requires-Dist: numpy>=1.24
31
+ Requires-Dist: scipy>=1.10
32
+ Requires-Dist: sounddevice>=0.4.6
33
+ Requires-Dist: rich>=13.0
34
+ Requires-Dist: onnxruntime>=1.16
35
+ Requires-Dist: pystray>=0.19
36
+ Requires-Dist: pillow>=9.0
37
+ Requires-Dist: pynput>=1.7
38
+ Provides-Extra: dev
39
+ Requires-Dist: pytest>=7; extra == "dev"
40
+ Requires-Dist: onnx>=1.14; extra == "dev"
41
+ Requires-Dist: build; extra == "dev"
42
+ Requires-Dist: twine; extra == "dev"
43
+ Dynamic: license-file
44
+
45
+ # Micforge
46
+
47
+ [![Version](https://img.shields.io/badge/version-1.3.0-0284c7.svg)](verison%20notes/v1.3.0.md)
48
+ [![License: MIT](https://img.shields.io/badge/license-MIT-slate.svg)](LICENSE)
49
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-emerald.svg)](https://www.python.org/)
50
+ [![Tests](https://img.shields.io/badge/tests-128%2F128%20passing-teal.svg)](tests/)
51
+ [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-neutral.svg)]()
52
+
53
+ > **Real-time, local-first microphone clean-up for Discord, gaming, and streaming.**
54
+ > Built and maintained by **[Parth Sadaria](https://github.com/Parthsadaria)**.
55
+
56
+ ---
57
+
58
+ ## What is Micforge?
59
+
60
+ Most budget desk mics and gaming headsets sound thin, pick up room reflections (that hollow "talking in an empty bathroom" ring), bleed keyboard clatter, and capture speaker audio.
61
+
62
+ **Micforge** is an open-source, local real-time DSP engine designed to run silently on your machine and make your microphone sound clean, warm, and broadcast-ready before it reaches Discord, OBS, Zoom, or your game.
63
+
64
+ It pairs an **11-stage modular audio processing rack** with an ultra-lightweight neural speech model based on **[CoFi-Lite](https://arxiv.org/abs/2607.10142)** (~83k parameters).
65
+
66
+ ### What makes it different?
67
+ - **Ultra-lean footprint:** Consumes only **~70–85 MB of RAM** and **<5–8% CPU** on a single core during gaming. Zero cloud calls, zero telemetry, 100% offline.
68
+ - **Continuous Adaptive Noise Profiling (v1.3.0):** Voice-aware background noise learner that adapts to spinning fans and AC drift without ever learning on speech. Includes environment profiles (`quiet_room`, `fan_on`, `mechanical_keyboard`).
69
+ - **Hot-Plug & Auto-Recovery (v1.3.0):** Seamless reconnects with exponential backoff on USB disconnects, with safe bypass fallback so you are never left silently muted.
70
+ - **End-to-End Latency Benchmark (v1.3.0):** Measures actual loopback roundtrip latency and itemizes hardware vs. DSP delays with actionable guidance (`micforge latency`).
71
+ - **Simple vs. Advanced Tuning UX (v1.3.0):** 4 intuitive macro knobs (Clarity, Warmth, Noise Removal, Room Cleanup) for casual streamers, plus deep parametric controls for engineers.
72
+ - **Redacted Diagnostics (.zip):** One-click diagnostic bundle export with zero telemetry and automatic secret/path redaction (`micforge doctor --export`).
73
+ - **Zero audio-thread heap allocations:** Critical DSP loops operate with pre-allocated scratch buffers to ensure zero clicks, pops, or garbage collection spikes.
74
+ - **Acoustic Echo Cancellation (AEC):** Ingests game/speaker audio directly via native Windows WASAPI loopback without needing third-party cables, eliminating Discord voice echo.
75
+ - **Room Dereverberation:** Strips out late room flutter and untreated wall reflections.
76
+ - **Voice Proximity Effect:** Adds warm chest resonance (80–180 Hz) and even-order harmonics, giving cheap mics the presence of a broadcast dynamic mic.
77
+ - **Esports Gamer HUD (`Tab`):** A minimalist terminal overlay designed for second monitors, featuring a Voice Activity Detector badge, mini-presence wave, and bold mute alert banner.
78
+
79
+ ```
80
+ ┌────────────────────── 11-Stage Modular DSP Rack ─────────────────────┐
81
+ │ │
82
+ Microphone Input ─┼─▶ High-Pass Filter (Rumble removal, 90 Hz default) │
83
+ │ └─▶ Acoustic Echo Cancellation (WASAPI speaker loopback reference) │
84
+ │ └─▶ CoFi-Lite AI Denoiser (or classical Spectral Wiener) │
85
+ │ └─▶ Room Dereverberation (Late reflection tail decay) │
86
+ │ └─▶ Soft Noise Gate / Downward Expander │
87
+ │ └─▶ Voice Proximity (Chest resonance & warmth) │
88
+ │ └─▶ Parametric EQ (De-mud / Presence / Air) │
89
+ │ └─▶ Split-Band De-Esser (Sibilance tame) │
90
+ │ └─▶ Slow RMS Auto-Leveler │
91
+ │ └─▶ Fast Feed-Forward Compressor │
92
+ │ └─▶ Peak Limiter (-1.5 dBFS) │
93
+ └───────────────────────────────────┬──────────────────────────────────┘
94
+ │
95
+ ├──▶ Virtual Cable Output ──▶ Discord / OBS / Games
96
+ └──▶ Headphone Monitor (with isolated audio cues)
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Realistic Expectations
102
+
103
+ Let's be engineer-honest:
104
+ - **Micforge cleans up noise, room flutter, and tone balance.** It can remove fan drone, quiet loud keystrokes, cancel speaker bleed, and add chest warmth.
105
+ - **It cannot fix bad physics.** If your microphone is 3 feet away near a mechanical keyboard, software can only do so much before your voice sounds watery. Keeping your mic 4–6 inches from your mouth will always do more than any plugin on earth.
106
+
107
+ ---
108
+
109
+ ## Quick Start
110
+
111
+ ### 1. Prerequisites
112
+ - **Python 3.10** or higher
113
+ - A virtual audio cable to route processed sound into Discord/games:
114
+ - **Windows:** [VB-CABLE Driver](https://vb-audio.com/Cable/) *(free, recommended)*
115
+ - **macOS:** [BlackHole 2ch](https://github.com/ExistentialAudio/BlackHole) (`brew install blackhole-2ch`)
116
+ - **Linux:** PulseAudio/PipeWire null sink (`pactl load-module module-null-sink sink_name=micforge`)
117
+
118
+ ### 2. Installation
119
+ ```bash
120
+ git clone https://github.com/Parthsadaria/MicForge.git
121
+ cd MicForge
122
+ pip install -e .
123
+ ```
124
+ *(Debian/Ubuntu: `sudo apt install libportaudio2` · macOS: `brew install portaudio`)*
125
+
126
+ ### 3. Setup & First Run
127
+ ```bash
128
+ micforge doctor # check audio drivers and environment
129
+ micforge setup # pick your real mic, virtual cable, and headphones
130
+ micforge calibrate # sample room silence for 3s to set gate threshold
131
+ micforge run # start the live interactive dashboard
132
+ ```
133
+
134
+ > **Windows Tip:** In `micforge setup`, always select the **WASAPI** entries for your mic and `CABLE Input`. The legacy MME entries add 40+ ms of driver latency and drift.
135
+
136
+ ### 4. Application Configuration
137
+ In Discord, OBS Studio, Steam, or Zoom:
138
+ 1. Set **Input Device** to `CABLE Output (VB-Audio Virtual Cable)`.
139
+ 2. Disable downstream **Noise Suppression** (e.g. Discord Krisp) and **Automatic Gain Control** to avoid double-processing artifacts.
140
+ 3. Keep Discord's **Echo Cancellation** disabled if you use headphones; leave it enabled if you play on open speakers.
141
+
142
+ To run Micforge silently in the background:
143
+ ```bash
144
+ micforge --tray
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Live Monitoring & Gamer HUD
150
+
151
+ Micforge includes two live view modes in the terminal (`micforge run`):
152
+
153
+ ### 1. Studio Inspector Mode (Full View)
154
+ A comprehensive broadcast monitor displaying live input/output levels, sweet-spot meter, real-time reduction telemetry, dual FFT spectrum, and hardware diagnostics:
155
+
156
+ ```
157
+ ┌────────────────────────────── micforge v1.3.0 ──────────────────────────────┐
158
+ │ MIC ENHANCER ● PROCESSED preset [gaming] │
159
+ │ mic Microphone (Realtek Audio) → CABLE Input (VB-Audio) │
160
+ │ Rack: HPF● AEC● AI● VERB● GATE· BODY● EQ● DEESS● LVL● COMP● LIM● │
161
+ │ │
162
+ │ IN ██████████████████████████················ -24.2 dB │
163
+ │ OUT ████████████████████████████████·········· -16.1 dB [SWEET SPOT] │
164
+ │ REF ·········································· silent (Clean/Headphones) │
165
+ │ │
166
+ │ ┌─ processing & dsp reductions ───────────────────────────────────────────┐ │
167
+ │ │ noise █████████████████████████ -24.5 dB │ │
168
+ │ │ de-verb █████ -3.2 dB │ │
169
+ │ │ body ████ +2.5 dB │ │
170
+ │ │ gate OPEN 0.0 dB │ │
171
+ │ └─────────────────────────────────────────────────────────────────────────┘ │
172
+ │ │
173
+ │ latency ~ 68 ms noise floor -64.2 dBFS uptime 01h 14m │
174
+ │ dsp load ███····· 18% input gain +0.0 dB memory 85.4 MB │
175
+ │ glitches 0 (SYNCED) clock fixes 0 profile Active │
176
+ │ │
177
+ │ Tab HUD │ 1-6 Preset │ x Mute │ b Bypass │ s GUI │ ? Help │ q │
178
+ └─────────────────────────────────────────────────────────────────────────────┘
179
+ ```
180
+
181
+ ### 2. Esports Gamer HUD (`Tab` Key)
182
+ Press `Tab` to switch to an ultra-compact overlay designed for minimal distraction on a second monitor:
183
+ - **Voice Activity Badge:** Instant state feedback (`[🎙️ VOICED SPEECH]`, `[👂 LISTENING]`, `[💤 IDLE NAP]`).
184
+ - **Mini Vocal Waveform:** Live ASCII vocal presence and body resonance monitor.
185
+ - **Double-Border Muted Warning:** A bold red alert panel appears when muted so you never accidentally talk on mute during matches.
186
+
187
+ ### In-Console Live Hotkeys
188
+ | Key | Action | Key | Action |
189
+ |:---:|:---|:---:|:---|
190
+ | `Tab` | Toggle Studio Inspector ⟷ Gamer HUD | `1`–`6` | Direct preset jump (`discord`, `gaming`, `broadcast`, `studio`, `noisy_room`, `de_muffle`) |
191
+ | `b` | A/B Bypass (hear raw mic vs processed) | `e` | Toggle Acoustic Echo Cancellation (AEC) |
192
+ | `x` | Mute / unmute microphone | `w` | Cycle Voice Proximity warmth (Off → 35% → 55% → 75%) |
193
+ | `s` | Open Native Multi-Tab Control Center GUI | `v` | Cycle Room De-Verb (Off → 30% → 50% → 70%) |
194
+ | `+` / `-` | Denoise strength (±10%) | `c` | Recalibrate room noise (3s silence) |
195
+ | `[` / `]` | Input gain (±1 dB) | `?` / `h` | Toggle hotkey cheatsheet overlay |
196
+ | `q` | Clean quit | | |
197
+
198
+ ---
199
+
200
+ ## Native Multi-Tab Control Center (`micforge settings` or `s` key)
201
+
202
+ For visual tuning without editing configuration files, Micforge features a sleek, dark native Control Center (`560x680`):
203
+
204
+ 1. **Tab 1: 🎛️ Presets & DSP Rack**
205
+ - Built-in vs Custom preset management (`[➕ New]`, `[💾 Save]`, `[🗑 Delete]`, `[📤 Export]`, `[📥 Import]`).
206
+ - Grouped into 3 clean logical cards:
207
+ - **Voice Character & Room:** Proximity intensity, warmth saturation, chest fundamental pitch (F0), anti-mud notch, and room decay (RT60).
208
+ - **Noise & Echo:** CoFi-Lite AI strength and AEC power.
209
+ - **Dynamics:** Gate threshold/range and Compressor ratio/makeup gain.
210
+ 2. **Tab 2: ⚡ Global Hotkeys & Audio Cues**
211
+ - Bind OS-wide hotkeys (Mute, Push-to-Talk, Push-to-Mute, Bypass) with one-click key recording.
212
+ - Adjust volume and test headphone feedback chimes.
213
+ 3. **Tab 3: 🎙️ Audio Hardware & Windows System**
214
+ - Select physical mic, virtual cable, and monitor headphones from dropdowns.
215
+ - Toggle Windows Boot Autostart and Minimize to System Tray.
216
+
217
+ ---
218
+
219
+ ## Custom Preset Engine (`micforge preset ...`)
220
+
221
+ Save, duplicate, share, and backup custom vocal chains from the command line:
222
+
223
+ ```bash
224
+ micforge preset list # view built-in & custom presets
225
+ micforge preset save my_stream --from gaming # clone and customize
226
+ micforge preset export my_stream preset.json # export to share with friends
227
+ micforge preset import preset.json # import community preset
228
+ micforge preset show my_stream # inspect all 11 stages
229
+ micforge preset delete my_stream # delete custom preset (built-ins protected)
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Under the Hood: Engineering Highlights
235
+
236
+ ### 1. ~50% RAM Optimization (v1.2.1)
237
+ Standard Python scientific audio tools easily pull in 150–200 MB of RAM because `scipy` imports massive compiled BLAS/LAPACK runtimes and optimization suites.
238
+
239
+ In v1.2.1:
240
+ - Replaced `scipy.signal.sosfilt` with a vectorized pure NumPy Direct Form II Transposed biquad engine ($< 10^{-8}$ difference, 0 memory allocations).
241
+ - Replaced SciPy FIR decimation/interpolation with NumPy sinc windowing and valid-mode convolution.
242
+ - Disabled ONNX Runtime CPU memory arena (`enable_cpu_mem_arena = False`), preventing ONNX from hoarding 30–50 MB of idle heap caches.
243
+ - **Result:** Live streaming process RAM dropped from **165.4 MB down to ~85 MB** with zero degradation in audio quality.
244
+
245
+ ### 2. Clock Drift Phase Centering & Anti-Glitch Architecture
246
+ When Windows initializes two independent audio devices (USB microphone and virtual cable), they start asynchronously with an initial ~15–30 ms phase difference.
247
+
248
+ Earlier drift detectors misidentified this harmless startup offset as physical crystal clock drift, firing hundreds of false 1-sample corrections and pulling the ring buffer into starvation.
249
+ - **Dynamic Phase Centering:** After the stream establishes a 60-block (~600 ms) steady state, Micforge calibrates its center point to the real hardware offset. Clock fixes stay at **0** during normal sessions.
250
+ - **Guaranteed Cushion Re-Arming:** If a heavy background game causes an underrun, the buffer instantly re-arms with 30 ms of cushion and a 500 ms quiet window, completely preventing cascading frame drops (`glitches: 0 (SYNCED)`).
251
+
252
+ ### 3. Isolated Procedural Cues
253
+ When you mute or unmute, Micforge synthesizes a clean, logarithmic sine sweep with half-Hann envelopes (*blip* on mute, *chirp* on unmute). The audio cue is mixed exclusively into your headphone monitor—it is never sent down the virtual cable to Discord or your stream.
254
+
255
+ ### 4. Smart Idle Nap Mode
256
+ During silent pauses or when the mic is muted, CoFi-Lite's neural inference engine automatically enters a low-power nap mode, dropping inference CPU usage to 0% and instantly waking up on the very first speech syllable.
257
+
258
+ ---
259
+
260
+ ## Repository Structure
261
+
262
+ ```
263
+ micforge/
264
+ ├── src/micforge/
265
+ │ ├── audio/
266
+ │ │ ├── engine.py # Stream lifecycle, phase centering, cushion re-arming
267
+ │ │ ├── loopback.py # WASAPI loopback speaker capture for AEC
268
+ │ │ ├── cues.py # Procedural sine-sweep feedback chimes
269
+ │ │ ├── devices.py # Device discovery & virtual-cable detection
270
+ │ │ ├── device_watch.py # Hot-plug watcher daemon & auto-recovery
271
+ │ │ ├── noise_profile.py # Voice-aware continuous noise learner & profiles
272
+ │ │ ├── latency.py # Loopback chirp cross-correlation & breakdown
273
+ │ │ ├── ring.py # Lock-free ring buffer
274
+ │ │ └── metrics.py # RMS, peak hold, clipping, spectrum
275
+ │ ├── commands/
276
+ │ │ ├── live.py # Live dashboard & background runner
277
+ │ │ ├── help_cmd.py # Dynamic categorized command guide & usage deep-dive
278
+ │ │ ├── latency_test.py # End-to-end latency benchmark CLI
279
+ │ │ ├── preset_cmd.py # Preset CLI suite (list, save, export, import)
280
+ │ │ ├── test_mic.py # Record, compare and A/B playback
281
+ │ │ ├── doctor.py # Audio driver diagnostics & zip export
282
+ │ │ └── files.py # Offline WAV processing
283
+ │ ├── dsp/
284
+ │ │ ├── aec.py # Acoustic Echo Cancellation (PBFDAF + DTD)
285
+ │ │ ├── deverb.py # Room Dereverberation (Spectral decay envelope)
286
+ │ │ ├── proximity.py # Voice Proximity (F0 chest resonance & warmth)
287
+ │ │ ├── cofilite.py # CoFi-Lite neural speech enhancement
288
+ │ │ ├── denoise.py # Classical Spectral Wiener fallback
289
+ │ │ ├── biquad.py # Pure NumPy Second-Order Sections (SOS) engine
290
+ │ │ ├── gate.py # Soft downward expander / noise gate
291
+ │ │ ├── compressor.py # Fast feed-forward compressor & peak limiter
292
+ │ │ ├── deesser.py # Split-band de-esser
293
+ │ │ └── leveler.py # Slow RMS speech leveler
294
+ │ ├── ui/
295
+ │ │ ├── dashboard.py # Live Studio Inspector & Gamer HUD
296
+ │ │ ├── settings_gui.py # Multi-tab native Control Center (Simple/Advanced)
297
+ │ │ ├── tuning.py # 4-knob macro schema & deterministic mappings
298
+ │ │ ├── hotkeys.py # OS-level keyboard hook manager
299
+ │ │ └── tray.py # Windows system tray daemon & dynamic icon
300
+ │ ├── diagnostics.py # Telemetry collection, secret redaction & zip bundler
301
+ │ ├── presets.py # Preset CRUD, validation & built-in definitions
302
+ │ └── cli.py # Command-line entry point
303
+ ├── docs/
304
+ │ └── TROUBLESHOOTING.md # Centralized diagnostic & OS troubleshooting guide
305
+ ├── scripts/
306
+ │ ├── compare_two.py # Dual-file comparison, metrics & A/B listening
307
+ │ └── compare_audio.py # Automated WAV processing evaluation
308
+ ├── tests/ # 125 automated tests (mocked PortAudio backend)
309
+ ├── verison notes/
310
+ │ ├── v1.1.0.md
311
+ │ ├── v1.1.1.md
312
+ │ ├── v1.2.0.md # AEC, De-Verb, Proximity, Gamer HUD
313
+ │ ├── v1.2.1.md # RAM reduction (~85 MB) & clock drift fixes
314
+ │ └── v1.3.0.md # Adaptive profiles, hot-plug recovery, diagnostics & latency
315
+ ├── pyproject.toml
316
+ └── README.md
317
+ ```
318
+
319
+ ---
320
+
321
+ ## Testing
322
+
323
+ The test suite runs with a mocked PortAudio backend, requiring no physical audio hardware:
324
+
325
+ ```bash
326
+ pip install -e .[dev]
327
+ pytest -v
328
+ ```
329
+
330
+ ---
331
+
332
+ ## License
333
+
334
+ Micforge is released under the **MIT License**; see `LICENSE`. Third-party components are governed by their own licenses, including the bundled `cofilite.onnx` model (derived from the official CoFi-Lite checkpoint), VB-CABLE, and BlackHole.
@@ -0,0 +1,290 @@
1
+ # Micforge
2
+
3
+ [![Version](https://img.shields.io/badge/version-1.3.0-0284c7.svg)](verison%20notes/v1.3.0.md)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-slate.svg)](LICENSE)
5
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-emerald.svg)](https://www.python.org/)
6
+ [![Tests](https://img.shields.io/badge/tests-128%2F128%20passing-teal.svg)](tests/)
7
+ [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-neutral.svg)]()
8
+
9
+ > **Real-time, local-first microphone clean-up for Discord, gaming, and streaming.**
10
+ > Built and maintained by **[Parth Sadaria](https://github.com/Parthsadaria)**.
11
+
12
+ ---
13
+
14
+ ## What is Micforge?
15
+
16
+ Most budget desk mics and gaming headsets sound thin, pick up room reflections (that hollow "talking in an empty bathroom" ring), bleed keyboard clatter, and capture speaker audio.
17
+
18
+ **Micforge** is an open-source, local real-time DSP engine designed to run silently on your machine and make your microphone sound clean, warm, and broadcast-ready before it reaches Discord, OBS, Zoom, or your game.
19
+
20
+ It pairs an **11-stage modular audio processing rack** with an ultra-lightweight neural speech model based on **[CoFi-Lite](https://arxiv.org/abs/2607.10142)** (~83k parameters).
21
+
22
+ ### What makes it different?
23
+ - **Ultra-lean footprint:** Consumes only **~70–85 MB of RAM** and **<5–8% CPU** on a single core during gaming. Zero cloud calls, zero telemetry, 100% offline.
24
+ - **Continuous Adaptive Noise Profiling (v1.3.0):** Voice-aware background noise learner that adapts to spinning fans and AC drift without ever learning on speech. Includes environment profiles (`quiet_room`, `fan_on`, `mechanical_keyboard`).
25
+ - **Hot-Plug & Auto-Recovery (v1.3.0):** Seamless reconnects with exponential backoff on USB disconnects, with safe bypass fallback so you are never left silently muted.
26
+ - **End-to-End Latency Benchmark (v1.3.0):** Measures actual loopback roundtrip latency and itemizes hardware vs. DSP delays with actionable guidance (`micforge latency`).
27
+ - **Simple vs. Advanced Tuning UX (v1.3.0):** 4 intuitive macro knobs (Clarity, Warmth, Noise Removal, Room Cleanup) for casual streamers, plus deep parametric controls for engineers.
28
+ - **Redacted Diagnostics (.zip):** One-click diagnostic bundle export with zero telemetry and automatic secret/path redaction (`micforge doctor --export`).
29
+ - **Zero audio-thread heap allocations:** Critical DSP loops operate with pre-allocated scratch buffers to ensure zero clicks, pops, or garbage collection spikes.
30
+ - **Acoustic Echo Cancellation (AEC):** Ingests game/speaker audio directly via native Windows WASAPI loopback without needing third-party cables, eliminating Discord voice echo.
31
+ - **Room Dereverberation:** Strips out late room flutter and untreated wall reflections.
32
+ - **Voice Proximity Effect:** Adds warm chest resonance (80–180 Hz) and even-order harmonics, giving cheap mics the presence of a broadcast dynamic mic.
33
+ - **Esports Gamer HUD (`Tab`):** A minimalist terminal overlay designed for second monitors, featuring a Voice Activity Detector badge, mini-presence wave, and bold mute alert banner.
34
+
35
+ ```
36
+ ┌────────────────────── 11-Stage Modular DSP Rack ─────────────────────┐
37
+ │ │
38
+ Microphone Input ─┼─▶ High-Pass Filter (Rumble removal, 90 Hz default) │
39
+ │ └─▶ Acoustic Echo Cancellation (WASAPI speaker loopback reference) │
40
+ │ └─▶ CoFi-Lite AI Denoiser (or classical Spectral Wiener) │
41
+ │ └─▶ Room Dereverberation (Late reflection tail decay) │
42
+ │ └─▶ Soft Noise Gate / Downward Expander │
43
+ │ └─▶ Voice Proximity (Chest resonance & warmth) │
44
+ │ └─▶ Parametric EQ (De-mud / Presence / Air) │
45
+ │ └─▶ Split-Band De-Esser (Sibilance tame) │
46
+ │ └─▶ Slow RMS Auto-Leveler │
47
+ │ └─▶ Fast Feed-Forward Compressor │
48
+ │ └─▶ Peak Limiter (-1.5 dBFS) │
49
+ └───────────────────────────────────┬──────────────────────────────────┘
50
+ │
51
+ ├──▶ Virtual Cable Output ──▶ Discord / OBS / Games
52
+ └──▶ Headphone Monitor (with isolated audio cues)
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Realistic Expectations
58
+
59
+ Let's be engineer-honest:
60
+ - **Micforge cleans up noise, room flutter, and tone balance.** It can remove fan drone, quiet loud keystrokes, cancel speaker bleed, and add chest warmth.
61
+ - **It cannot fix bad physics.** If your microphone is 3 feet away near a mechanical keyboard, software can only do so much before your voice sounds watery. Keeping your mic 4–6 inches from your mouth will always do more than any plugin on earth.
62
+
63
+ ---
64
+
65
+ ## Quick Start
66
+
67
+ ### 1. Prerequisites
68
+ - **Python 3.10** or higher
69
+ - A virtual audio cable to route processed sound into Discord/games:
70
+ - **Windows:** [VB-CABLE Driver](https://vb-audio.com/Cable/) *(free, recommended)*
71
+ - **macOS:** [BlackHole 2ch](https://github.com/ExistentialAudio/BlackHole) (`brew install blackhole-2ch`)
72
+ - **Linux:** PulseAudio/PipeWire null sink (`pactl load-module module-null-sink sink_name=micforge`)
73
+
74
+ ### 2. Installation
75
+ ```bash
76
+ git clone https://github.com/Parthsadaria/MicForge.git
77
+ cd MicForge
78
+ pip install -e .
79
+ ```
80
+ *(Debian/Ubuntu: `sudo apt install libportaudio2` · macOS: `brew install portaudio`)*
81
+
82
+ ### 3. Setup & First Run
83
+ ```bash
84
+ micforge doctor # check audio drivers and environment
85
+ micforge setup # pick your real mic, virtual cable, and headphones
86
+ micforge calibrate # sample room silence for 3s to set gate threshold
87
+ micforge run # start the live interactive dashboard
88
+ ```
89
+
90
+ > **Windows Tip:** In `micforge setup`, always select the **WASAPI** entries for your mic and `CABLE Input`. The legacy MME entries add 40+ ms of driver latency and drift.
91
+
92
+ ### 4. Application Configuration
93
+ In Discord, OBS Studio, Steam, or Zoom:
94
+ 1. Set **Input Device** to `CABLE Output (VB-Audio Virtual Cable)`.
95
+ 2. Disable downstream **Noise Suppression** (e.g. Discord Krisp) and **Automatic Gain Control** to avoid double-processing artifacts.
96
+ 3. Keep Discord's **Echo Cancellation** disabled if you use headphones; leave it enabled if you play on open speakers.
97
+
98
+ To run Micforge silently in the background:
99
+ ```bash
100
+ micforge --tray
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Live Monitoring & Gamer HUD
106
+
107
+ Micforge includes two live view modes in the terminal (`micforge run`):
108
+
109
+ ### 1. Studio Inspector Mode (Full View)
110
+ A comprehensive broadcast monitor displaying live input/output levels, sweet-spot meter, real-time reduction telemetry, dual FFT spectrum, and hardware diagnostics:
111
+
112
+ ```
113
+ ┌────────────────────────────── micforge v1.3.0 ──────────────────────────────┐
114
+ │ MIC ENHANCER ● PROCESSED preset [gaming] │
115
+ │ mic Microphone (Realtek Audio) → CABLE Input (VB-Audio) │
116
+ │ Rack: HPF● AEC● AI● VERB● GATE· BODY● EQ● DEESS● LVL● COMP● LIM● │
117
+ │ │
118
+ │ IN ██████████████████████████················ -24.2 dB │
119
+ │ OUT ████████████████████████████████·········· -16.1 dB [SWEET SPOT] │
120
+ │ REF ·········································· silent (Clean/Headphones) │
121
+ │ │
122
+ │ ┌─ processing & dsp reductions ───────────────────────────────────────────┐ │
123
+ │ │ noise █████████████████████████ -24.5 dB │ │
124
+ │ │ de-verb █████ -3.2 dB │ │
125
+ │ │ body ████ +2.5 dB │ │
126
+ │ │ gate OPEN 0.0 dB │ │
127
+ │ └─────────────────────────────────────────────────────────────────────────┘ │
128
+ │ │
129
+ │ latency ~ 68 ms noise floor -64.2 dBFS uptime 01h 14m │
130
+ │ dsp load ███····· 18% input gain +0.0 dB memory 85.4 MB │
131
+ │ glitches 0 (SYNCED) clock fixes 0 profile Active │
132
+ │ │
133
+ │ Tab HUD │ 1-6 Preset │ x Mute │ b Bypass │ s GUI │ ? Help │ q │
134
+ └─────────────────────────────────────────────────────────────────────────────┘
135
+ ```
136
+
137
+ ### 2. Esports Gamer HUD (`Tab` Key)
138
+ Press `Tab` to switch to an ultra-compact overlay designed for minimal distraction on a second monitor:
139
+ - **Voice Activity Badge:** Instant state feedback (`[🎙️ VOICED SPEECH]`, `[👂 LISTENING]`, `[💤 IDLE NAP]`).
140
+ - **Mini Vocal Waveform:** Live ASCII vocal presence and body resonance monitor.
141
+ - **Double-Border Muted Warning:** A bold red alert panel appears when muted so you never accidentally talk on mute during matches.
142
+
143
+ ### In-Console Live Hotkeys
144
+ | Key | Action | Key | Action |
145
+ |:---:|:---|:---:|:---|
146
+ | `Tab` | Toggle Studio Inspector ⟷ Gamer HUD | `1`–`6` | Direct preset jump (`discord`, `gaming`, `broadcast`, `studio`, `noisy_room`, `de_muffle`) |
147
+ | `b` | A/B Bypass (hear raw mic vs processed) | `e` | Toggle Acoustic Echo Cancellation (AEC) |
148
+ | `x` | Mute / unmute microphone | `w` | Cycle Voice Proximity warmth (Off → 35% → 55% → 75%) |
149
+ | `s` | Open Native Multi-Tab Control Center GUI | `v` | Cycle Room De-Verb (Off → 30% → 50% → 70%) |
150
+ | `+` / `-` | Denoise strength (±10%) | `c` | Recalibrate room noise (3s silence) |
151
+ | `[` / `]` | Input gain (±1 dB) | `?` / `h` | Toggle hotkey cheatsheet overlay |
152
+ | `q` | Clean quit | | |
153
+
154
+ ---
155
+
156
+ ## Native Multi-Tab Control Center (`micforge settings` or `s` key)
157
+
158
+ For visual tuning without editing configuration files, Micforge features a sleek, dark native Control Center (`560x680`):
159
+
160
+ 1. **Tab 1: 🎛️ Presets & DSP Rack**
161
+ - Built-in vs Custom preset management (`[➕ New]`, `[💾 Save]`, `[🗑 Delete]`, `[📤 Export]`, `[📥 Import]`).
162
+ - Grouped into 3 clean logical cards:
163
+ - **Voice Character & Room:** Proximity intensity, warmth saturation, chest fundamental pitch (F0), anti-mud notch, and room decay (RT60).
164
+ - **Noise & Echo:** CoFi-Lite AI strength and AEC power.
165
+ - **Dynamics:** Gate threshold/range and Compressor ratio/makeup gain.
166
+ 2. **Tab 2: ⚡ Global Hotkeys & Audio Cues**
167
+ - Bind OS-wide hotkeys (Mute, Push-to-Talk, Push-to-Mute, Bypass) with one-click key recording.
168
+ - Adjust volume and test headphone feedback chimes.
169
+ 3. **Tab 3: 🎙️ Audio Hardware & Windows System**
170
+ - Select physical mic, virtual cable, and monitor headphones from dropdowns.
171
+ - Toggle Windows Boot Autostart and Minimize to System Tray.
172
+
173
+ ---
174
+
175
+ ## Custom Preset Engine (`micforge preset ...`)
176
+
177
+ Save, duplicate, share, and backup custom vocal chains from the command line:
178
+
179
+ ```bash
180
+ micforge preset list # view built-in & custom presets
181
+ micforge preset save my_stream --from gaming # clone and customize
182
+ micforge preset export my_stream preset.json # export to share with friends
183
+ micforge preset import preset.json # import community preset
184
+ micforge preset show my_stream # inspect all 11 stages
185
+ micforge preset delete my_stream # delete custom preset (built-ins protected)
186
+ ```
187
+
188
+ ---
189
+
190
+ ## Under the Hood: Engineering Highlights
191
+
192
+ ### 1. ~50% RAM Optimization (v1.2.1)
193
+ Standard Python scientific audio tools easily pull in 150–200 MB of RAM because `scipy` imports massive compiled BLAS/LAPACK runtimes and optimization suites.
194
+
195
+ In v1.2.1:
196
+ - Replaced `scipy.signal.sosfilt` with a vectorized pure NumPy Direct Form II Transposed biquad engine ($< 10^{-8}$ difference, 0 memory allocations).
197
+ - Replaced SciPy FIR decimation/interpolation with NumPy sinc windowing and valid-mode convolution.
198
+ - Disabled ONNX Runtime CPU memory arena (`enable_cpu_mem_arena = False`), preventing ONNX from hoarding 30–50 MB of idle heap caches.
199
+ - **Result:** Live streaming process RAM dropped from **165.4 MB down to ~85 MB** with zero degradation in audio quality.
200
+
201
+ ### 2. Clock Drift Phase Centering & Anti-Glitch Architecture
202
+ When Windows initializes two independent audio devices (USB microphone and virtual cable), they start asynchronously with an initial ~15–30 ms phase difference.
203
+
204
+ Earlier drift detectors misidentified this harmless startup offset as physical crystal clock drift, firing hundreds of false 1-sample corrections and pulling the ring buffer into starvation.
205
+ - **Dynamic Phase Centering:** After the stream establishes a 60-block (~600 ms) steady state, Micforge calibrates its center point to the real hardware offset. Clock fixes stay at **0** during normal sessions.
206
+ - **Guaranteed Cushion Re-Arming:** If a heavy background game causes an underrun, the buffer instantly re-arms with 30 ms of cushion and a 500 ms quiet window, completely preventing cascading frame drops (`glitches: 0 (SYNCED)`).
207
+
208
+ ### 3. Isolated Procedural Cues
209
+ When you mute or unmute, Micforge synthesizes a clean, logarithmic sine sweep with half-Hann envelopes (*blip* on mute, *chirp* on unmute). The audio cue is mixed exclusively into your headphone monitor—it is never sent down the virtual cable to Discord or your stream.
210
+
211
+ ### 4. Smart Idle Nap Mode
212
+ During silent pauses or when the mic is muted, CoFi-Lite's neural inference engine automatically enters a low-power nap mode, dropping inference CPU usage to 0% and instantly waking up on the very first speech syllable.
213
+
214
+ ---
215
+
216
+ ## Repository Structure
217
+
218
+ ```
219
+ micforge/
220
+ ├── src/micforge/
221
+ │ ├── audio/
222
+ │ │ ├── engine.py # Stream lifecycle, phase centering, cushion re-arming
223
+ │ │ ├── loopback.py # WASAPI loopback speaker capture for AEC
224
+ │ │ ├── cues.py # Procedural sine-sweep feedback chimes
225
+ │ │ ├── devices.py # Device discovery & virtual-cable detection
226
+ │ │ ├── device_watch.py # Hot-plug watcher daemon & auto-recovery
227
+ │ │ ├── noise_profile.py # Voice-aware continuous noise learner & profiles
228
+ │ │ ├── latency.py # Loopback chirp cross-correlation & breakdown
229
+ │ │ ├── ring.py # Lock-free ring buffer
230
+ │ │ └── metrics.py # RMS, peak hold, clipping, spectrum
231
+ │ ├── commands/
232
+ │ │ ├── live.py # Live dashboard & background runner
233
+ │ │ ├── help_cmd.py # Dynamic categorized command guide & usage deep-dive
234
+ │ │ ├── latency_test.py # End-to-end latency benchmark CLI
235
+ │ │ ├── preset_cmd.py # Preset CLI suite (list, save, export, import)
236
+ │ │ ├── test_mic.py # Record, compare and A/B playback
237
+ │ │ ├── doctor.py # Audio driver diagnostics & zip export
238
+ │ │ └── files.py # Offline WAV processing
239
+ │ ├── dsp/
240
+ │ │ ├── aec.py # Acoustic Echo Cancellation (PBFDAF + DTD)
241
+ │ │ ├── deverb.py # Room Dereverberation (Spectral decay envelope)
242
+ │ │ ├── proximity.py # Voice Proximity (F0 chest resonance & warmth)
243
+ │ │ ├── cofilite.py # CoFi-Lite neural speech enhancement
244
+ │ │ ├── denoise.py # Classical Spectral Wiener fallback
245
+ │ │ ├── biquad.py # Pure NumPy Second-Order Sections (SOS) engine
246
+ │ │ ├── gate.py # Soft downward expander / noise gate
247
+ │ │ ├── compressor.py # Fast feed-forward compressor & peak limiter
248
+ │ │ ├── deesser.py # Split-band de-esser
249
+ │ │ └── leveler.py # Slow RMS speech leveler
250
+ │ ├── ui/
251
+ │ │ ├── dashboard.py # Live Studio Inspector & Gamer HUD
252
+ │ │ ├── settings_gui.py # Multi-tab native Control Center (Simple/Advanced)
253
+ │ │ ├── tuning.py # 4-knob macro schema & deterministic mappings
254
+ │ │ ├── hotkeys.py # OS-level keyboard hook manager
255
+ │ │ └── tray.py # Windows system tray daemon & dynamic icon
256
+ │ ├── diagnostics.py # Telemetry collection, secret redaction & zip bundler
257
+ │ ├── presets.py # Preset CRUD, validation & built-in definitions
258
+ │ └── cli.py # Command-line entry point
259
+ ├── docs/
260
+ │ └── TROUBLESHOOTING.md # Centralized diagnostic & OS troubleshooting guide
261
+ ├── scripts/
262
+ │ ├── compare_two.py # Dual-file comparison, metrics & A/B listening
263
+ │ └── compare_audio.py # Automated WAV processing evaluation
264
+ ├── tests/ # 125 automated tests (mocked PortAudio backend)
265
+ ├── verison notes/
266
+ │ ├── v1.1.0.md
267
+ │ ├── v1.1.1.md
268
+ │ ├── v1.2.0.md # AEC, De-Verb, Proximity, Gamer HUD
269
+ │ ├── v1.2.1.md # RAM reduction (~85 MB) & clock drift fixes
270
+ │ └── v1.3.0.md # Adaptive profiles, hot-plug recovery, diagnostics & latency
271
+ ├── pyproject.toml
272
+ └── README.md
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Testing
278
+
279
+ The test suite runs with a mocked PortAudio backend, requiring no physical audio hardware:
280
+
281
+ ```bash
282
+ pip install -e .[dev]
283
+ pytest -v
284
+ ```
285
+
286
+ ---
287
+
288
+ ## License
289
+
290
+ Micforge is released under the **MIT License**; see `LICENSE`. Third-party components are governed by their own licenses, including the bundled `cofilite.onnx` model (derived from the official CoFi-Lite checkpoint), VB-CABLE, and BlackHole.