{"id":45204133,"url":"https://github.com/lonewolf-jp/convopeq","last_synced_at":"2026-04-05T15:01:15.650Z","repository":{"id":338571435,"uuid":"1158295799","full_name":"lonewolf-jp/ConvoPeq","owner":"lonewolf-jp","description":"20band Parametric equalizer and convolver for Windows 11 x64 (standalone application) Real-time audio processing application based on JUCE Framework 8.0.12.This project is programmed by vibe-coding.","archived":false,"fork":false,"pushed_at":"2026-04-02T15:41:08.000Z","size":32877,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T04:21:17.233Z","etag":null,"topics":["chatgpt-codex","claude-ai","convolver","gemini-ai","github-copilot","grok-ai","juce-framework","parametric-equalizer","room-correction","standalone","vibe-coding","windows11"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lonewolf-jp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T05:37:06.000Z","updated_at":"2026-04-02T15:41:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lonewolf-jp/ConvoPeq","commit_stats":null,"previous_names":["lonewolf-jp/convopeq"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/lonewolf-jp/ConvoPeq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonewolf-jp%2FConvoPeq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonewolf-jp%2FConvoPeq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonewolf-jp%2FConvoPeq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonewolf-jp%2FConvoPeq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lonewolf-jp","download_url":"https://codeload.github.com/lonewolf-jp/ConvoPeq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonewolf-jp%2FConvoPeq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31439442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T13:13:19.330Z","status":"ssl_error","status_checked_at":"2026-04-05T13:13:17.778Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt-codex","claude-ai","convolver","gemini-ai","github-copilot","grok-ai","juce-framework","parametric-equalizer","room-correction","standalone","vibe-coding","windows11"],"created_at":"2026-02-20T15:01:34.938Z","updated_at":"2026-04-05T15:01:15.645Z","avatar_url":"https://github.com/lonewolf-jp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# ConvoPeq\n\n---\n\n## New in v0.5.9\n\n### Main Changes from v0.5.8 to v0.5.9\n\nThis section summarizes the main changes between commit 794631b and 37fee3b, focusing on major enhancements and refactoring in Convolver/AudioEngine/EQ/MKL, as well as large-scale EQ/UI improvements.\n\n---\n\n## 1. Major Updates in Convolver/AudioEngine/MKL\n\n- **Significant expansion of ConvolverProcessor (convolution engine):**\n  - Integrated Intel oneMKL-based Non-Uniform Partitioned Convolution (NUC) engine for fast, high-precision convolution with large IRs and heavy processing loads.\n  - Asynchronous IR (impulse response) loading on the Message Thread, with atomic RCU handoff for seamless, glitch-free operation during background loads.\n  - Thread-safe atomic control of numerous parameters: PhaseMode (AsIs/Mixed/Minimum), Dry/Wet Mix, Smoothing, IR length, tail rolloff, and more.\n  - Added APIs for parameter change notification (Listener/ChangeBroadcaster), state save/restore, and waveform/spectrum retrieval.\n  - Enhanced integration with AudioEngine/EQProcessor (processing order switching, parameter sync).\n\n- **AudioEngine enhancements:**\n  - New APIs for managing multiple ConvolverProcessor/EQProcessor instances, bypass/parameter sync, and preset loading.\n  - Thorough thread-safe state management using atomics and LockFreeRingBuffer.\n\n- **MKL/AlignedAllocation improvements:**\n  - Enforced 64-byte alignment for MKL allocators, strict memory leak prevention, and explicit resource release.\n\n---\n\n## 2. Large-Scale EQ Refactor \u0026 UI Enhancements\n\n- **EQProcessor refactor and feature expansion:**\n  - 20-band parametric EQ implemented with lock-free (RCU) pattern. All band parameters (frequency, gain, Q, enable/disable) are managed atomically for instant UI-thread updates.\n  - Adopted TPT SVF (Topology-Preserving Transform State Variable Filter) for high-quality, low-noise coefficient modulation.\n  - Added AGC (auto-gain control), total gain, bypass, state save/restore, and response curve calculation APIs.\n  - Band/global change notification via Listener/ChangeBroadcaster.\n\n- **EQControlPanel UI expansion:**\n  - Dynamic generation of UI controls (gain, frequency, Q, enable/disable) for all 20 bands, with full two-way sync to AudioEngine/EQProcessor.\n  - Enhanced event handling for all labels, sliders, and buttons.\n\n---\n\n## 3. Other\n\n- **Similar UI/DSP control enhancements for ConvolverControlPanel, MKLNonUniformConvolver, etc.**\n- **Strict adherence to JUCE 8.0.12 API and design guidelines**\n- **Coding standards, documentation updates**\n- **Major additions to manuals (Japanese/English)**\n\n---\n\n### Summary\n\n- **Major expansion and refactor for real-time safety, high performance, flexible parameter control, and robust UI integration**\n- **Significant acceleration for large IR/high-load processing via Intel MKL**\n- **Strict separation of UI/logic, thread safety, and extensibility**\n- **Substantial improvements to documentation and manuals**\n\nThese changes represent a major evolution in DSP core, UI, and overall design quality during this period.\n\nConvoPeq is a high-fidelity standalone audio processor for Windows 11 x64, combining IR convolution and a 20-band parametric EQ with a real-time analyzer.\n\n## Overview\n\nConvoPeq is built with JUCE 8.0.12 and is designed for low-latency, real-time-safe operation on Windows.\n\n- Platform: **Windows-only**\n- Framework: **JUCE 8.0.12**\n- Precision: **64-bit double** on the main DSP path\n- Performance focus: **AVX2 + Intel oneMKL**\n\n---\n\n## Documentation\n\n- [README.md](README.md): User-facing overview, features, audio processing summary, and build entry points\n- [ARCHITECTURE.md](ARCHITECTURE.md): Developer-facing architecture, threading, state flow, and subsystem design details\n- [SOUND_PROCESSING.md](SOUND_PROCESSING.md): **In-depth, code-referenced technical documentation of the entire audio signal processing flow.**\n  - Covers all DSP stages (input, conditioning, oversampling, main DSP chain, output, dither, etc.)\n  - Includes mathematical formulas, buffer/parameter management, SIMD/real-time safety, and code path examples\n  - Intended for international contributors and advanced users seeking a rigorous technical reference\n- [BUILD_GUIDE_WINDOWS.md](BUILD_GUIDE_WINDOWS.md): Windows build instructions and troubleshooting\n- [HOW_TO_USE.md](HOW_TO_USE.md): Practical usage guide — room correction via IR convolution with REW, and headphone EQ correction via AutoEq\n\n### Manuals ([manual/](manual/))\n\n**English Manuals:**\n\n- [manual/MAIN_WINDOW_EN.md](manual/MAIN_WINDOW_EN.md): Main window usage (English)\n- [manual/AUDIO_SETTINGS_WINDOW_EN.md](manual/AUDIO_SETTINGS_WINDOW_EN.md): Audio settings window (English)\n- [manual/IR_ADVANCED_WINDOW_EN.md](manual/IR_ADVANCED_WINDOW_EN.md): IR advanced window (English)\n- [manual/ADAPTIVE_NOISE_SHAPER_LEARNING_WINDOW_EN.md](manual/ADAPTIVE_NOISE_SHAPER_LEARNING_WINDOW_EN.md): Adaptive Noise Shaper Learning (English)\n\n**Japanese Manuals (in Japanese):**\n\n- [manual/MAIN_WINDOW_JP.md](manual/MAIN_WINDOW_JP.md): Main window usage (Japanese)\n- [manual/AUDIO_SETTINGS_WINDOW_JP.md](manual/AUDIO_SETTINGS_WINDOW_JP.md): Audio settings window (Japanese)\n- [manual/IR_ADVANCED_WINDOW_JP.md](manual/IR_ADVANCED_WINDOW_JP.md): IR advanced window (Japanese)\n- [manual/ADAPTIVE_NOISE_SHAPER_LEARNING_WINDOW_JP.md](manual/ADAPTIVE_NOISE_SHAPER_LEARNING_WINDOW_JP.md): Adaptive Noise Shaper Learning (Japanese)\n\n---\n\n## Key Features\n\n- 20-band parametric EQ (`EQProcessor`)\n- IR convolution with MKL-backed non-uniform partitioning (`ConvolverProcessor`, `MKLNonUniformConvolver`)\n- Runtime-selectable processing order (**EQ -\u003e Convolver** or **Convolver -\u003e EQ**)\n- Convolver phase modes: **As-Is / Mixed / Minimum** with persisted Mixed tuning (`f1`, `f2`, `tau`)\n- IR workflow with **Auto/Manual IR Length** state persistence in manual preset XML\n- Input oversampling and output conditioning (`CustomInputOversampler`, `OutputFilter`)\n- Optional soft clipping and final dither stage\n- Real-time spectrum analyzer with EQ overlay (`SpectrumAnalyzerComponent`)\n- ASIO/WASAPI-oriented standalone runtime with device settings persistence\n\n---\n\n## Audio Processing Method\n\nThis section is a user-facing summary of the current block processing strategy. For subsystem-level details, see `ARCHITECTURE.md`.\n\n### 1) Quality-Oriented Design Principles\n\nConvoPeq is designed to preserve fidelity under real-time conditions.\n\n- **64-bit double-precision DSP** is used on the main processing path to reduce cumulative rounding error.\n- **Heavy preparation is moved off the audio thread** so high-quality processing can be used without callback-time stalls.\n- **SIMD + Intel oneMKL acceleration** are used where throughput matters, allowing more expensive processing strategies while keeping the app responsive.\n- **Transition-safe state changes** are used to avoid clicks, zipper noise, and abrupt latency jumps.\n\n### 2) Block Entry and State Snapshot\n\nFor each callback block, the engine snapshots current runtime flags (bypass/order/analyzer source/quality options) from atomics and processes the block without blocking operations.\n\n### 3) Main DSP Chain\n\nTypical logical flow:\n\n`Input -\u003e input conditioning -\u003e oversampling (optional) -\u003e [EQ \u003c-\u003e Convolver] -\u003e output filter -\u003e soft clipping (optional) -\u003e dither -\u003e Output`\n\nNotes:\n\n- **Order is runtime-selectable** between EQ and convolver.\n- Oversampling factor depends on runtime configuration.\n- Main processing uses double precision.\n\n### 4) Convolution Strategy\n\n`ConvolverProcessor` uses asynchronous IR preparation and a safe handoff model:\n\n- IR load/rebuild is handled off the audio thread.\n- Rebuild requests are debounced to reduce burst load.\n- Old/new states are transitioned with crossfade-aware paths.\n- Latency retargeting is hysteresis-controlled to avoid frequent retriggers.\n\nUser-facing controls for expensive convolver updates are also debounced to avoid unnecessary rebuild pressure while dragging.\n\nConvolution quality notes:\n\n- The convolution backend uses a **non-uniform partitioned convolution** strategy, which is a practical way to keep long IR processing efficient while maintaining low real-time cost.\n- IR preparation can include **resampling** and **phase-mode dependent preprocessing**, allowing the runtime path to use already-prepared data.\n- Transition management is designed to keep IR changes smooth rather than abruptly swapping processing state.\n\nConvolver control notes:\n\n- Phase mode supports **As-Is / Mixed / Minimum**.\n- Mixed mode exposes tunable transition controls (`f1`, `f2`, `tau`).\n- IR length supports both Auto and Manual operation; manual preset XML now stores both the target length and Auto/Manual intent.\n\n### 5) EQ Strategy\n\n`EQProcessor` applies per-band parametric filtering in real time. EQ response visualization is computed on the UI side and does not run as heavy work inside the callback path.\n\nEQ quality notes:\n\n- The EQ is implemented as a **20-band parametric stage**, intended for precise tonal shaping.\n- Display computation is separated from audio computation so the audible path remains focused on deterministic DSP work.\n- Processing order with the convolver is selectable, which makes the EQ usable either as a corrective stage before convolution or as a tonal finishing stage after convolution.\n\n### 6) Oversampling, Output Conditioning, and Finalization\n\nAdditional quality-oriented stages are applied around the core EQ/convolution chain:\n\n- **Input oversampling** can be used to improve the behavior of nonlinear or high-frequency-sensitive stages.\n- **Output filtering** provides controlled final conditioning.\n- **Optional soft clipping** is used as a controlled output-stage protection/tone-shaping step.\n- **Final dither/noise shaping** is available to make the final output stage more robust when reducing effective resolution.\n\nThese stages are part of the overall sound-quality strategy, not just utility add-ons.\n\nGain-staging notes:\n\n- Input headroom and output makeup are mode-aware and clamped by processing topology.\n- Convolver input trim is applied only when processing order is **EQ -\u003e Convolver** and both processors are active.\n- Output makeup is applied before optional soft clipping.\n\n### 7) Analyzer Path\n\nAnalyzer data is decoupled from output audio:\n\n- Audio thread pushes analyzer source data to FIFO.\n- UI timer reads FIFO and runs FFT visualization.\n- Analyzer update rate is adaptive by state (active/disabled/hidden) to limit UI-thread load.\n\nThis separation ensures that visualization quality does not compromise audio-thread safety.\n\n### 8) Latency Reporting\n\nLatency display is sourced from a unified breakdown model:\n\n- Oversampling latency (base-rate estimated)\n- Convolver algorithm latency\n- Convolver IR peak latency\n\nThe main window renders both `ms` and `samples` from the same `totalLatencyBaseRateSamples` source to keep display values numerically consistent.\n\n### 9) State Persistence (Auto Save vs Manual Preset)\n\nConvoPeq currently uses two persistence paths:\n\n- **Auto-save (`device_settings.xml`)**\n  - Device state plus a compact set of runtime settings (`ditherBitDepth`, oversampling factor/type, input headroom, output makeup).\n- **Manual preset XML (Save/Load Preset in main window)**\n  - Full `AudioEngine` state plus `EQ` and `Convolver` child states.\n  - Includes convolver phase/mixed parameters and Auto/Manual IR-length state.\n\n### 10) Real-Time Safety Rules\n\nThe callback path avoids:\n\n- file I/O,\n- blocking locks/waits,\n- heavy runtime allocations,\n- UI thread interactions.\n\nBuffers and heavy state are prepared outside the callback whenever possible.\n\nIn practice, this means ConvoPeq aims for both:\n\n- **high sound quality**, through double-precision DSP, long-form convolution support, oversampling, and careful output conditioning, and\n- **stable real-time behavior**, through asynchronous preparation, debounce, staged activation, and callback-safe processing boundaries.\n\n---\n\n## Project Scope\n\n- Standalone desktop application\n- Windows-only runtime target\n- Real-time audio processing with separate UI/analyzer pipeline\n\n## Build Requirements\n\n1. **Visual Studio 2022** with Desktop C++ workload\n2. **CMake 3.22+**\n3. **Ninja**\n4. **Intel oneAPI Base Toolkit** (MKL)\n5. Local `JUCE/` directory (JUCE 8.0.12 expected)\n\n---\n\n## Quick Build\n\nFrom the project root, run the following commands to build:\n\n```cmd\ncall \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\ncall \"C:\\Program Files (x86)\\Intel\\oneAPI\\setvars.bat\" intel64\ncmake -S . -B build -G \"Ninja Multi-Config\" -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl\ncmake --build build --config Debug\n```\n\n**Output binaries:**\n\n- Debug: `build\\ConvoPeq_artefacts\\Debug\\ConvoPeq.exe`\n- Release: `build\\ConvoPeq_artefacts\\Release\\ConvoPeq.exe`\n\n**PowerShell (to ensure environment variables are passed in the same process, use `cmd.exe /d /c` to run all commands together):**\n\n```powershell\ncmd.exe /d /c \"call `\"%ProgramFiles%\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat`\" x64 \u0026\u0026 call `\"%ProgramFiles(x86)%\\Intel\\oneAPI\\setvars.bat`\" intel64 \u0026\u0026 cmake -S . -B build -G `\"Ninja Multi-Config`\" -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl \u0026\u0026 cmake --build build --config Debug\"\n```\n\nFor more details, see `BUILD_GUIDE_WINDOWS.md`.\n\n## Notes\n\n- Standalone app target (not a plugin target)\n- Do not modify external dependency trees directly:\n  - `JUCE/`\n  - `r8brain-free-src/`\n\n## License\n\n- **ConvoPeq**: Copyright (c) lonewolf-jp (CC BY-NC 4.0)\n- **JUCE**: GPLv3 / Commercial\n- **r8brain-free-src**: MIT\n- **Intel oneMKL**: Intel Simplified Software License\n\n![ConvoPeq screenshot](./image260315_214309.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flonewolf-jp%2Fconvopeq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flonewolf-jp%2Fconvopeq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flonewolf-jp%2Fconvopeq/lists"}