KFilter6 is a standalone Qt6 Widgets port of the original KFilter loudspeaker design tool.
The current development direction is intentionally modest and practical: KFilter6 is not meant to be a full room, baffle, and radiation-pattern simulator. It is a physical orientation tool for loudspeaker crossover and enclosure work. Its purpose is to make the consequences of changes to driver parameters, enclosure tuning, crossover networks, and summation behaviour visible while designing and listening.
The program is especially useful for answering questions such as:
- What happens when a capacitor, inductor, or resistor in the crossover is changed?
- How do the individual driver SPL curves combine?
- How do vector and energetic summation differ at driver transitions?
- What happens to impedance when the crossover network is changed?
- How do enclosure parameters such as
VbandFbaffect the design? - What approximate bass-reflex tube length follows from a selected tube diameter?
KFilter6 currently remains compatible with the legacy KFilter project-file model. The internal naming still contains some historical terms where changing them would risk compatibility; the visible UI has been modernized where appropriate.
This repository contains the current Qt6 Widgets port.
The application is a plain Qt6 application, not a KDE Frameworks or KDE Plasma application. It should integrate well into KDE Plasma, but it does not intentionally depend on KDE libraries.
Current executable target:
kfilter_qt6Current build system:
CMake + Qt6 + C++17Current major functionality includes:
- Four-driver loudspeaker model.
- Driver Thiele/Small parameter editing.
- Enclosure and gain parameter editing.
- Crossover/network parameter editing.
- SPL and impedance plotting.
- Vector SPL sum.
- Energetic SPL sum.
- Total impedance curve.
- Interactive graphical network preview.
- Network preview modes:
- All Drivers
- Driver 1
- Driver 2
- Driver 3
- Driver 4
- Configurable network-preview background color.
- Automatic light/dark contrast handling in the network preview.
- Bass-reflex tube helper using
Vb,Fb, and tube diameter. - Legacy
.kfpproject loading and saving.
The vector SPL sum is phase-sensitive. It includes constructive and destructive interaction between driver outputs.
Use it when checking the concrete acoustic summation of drivers around crossover regions.
The energetic SPL sum is the visible UI name for the historical scalar SPL summation. It sums SPL contributions energetically and ignores phase cancellation and phase addition.
This is useful as an approximation of the energy balance between drivers. It is not a full polar-integrated power response calculation, but it is a practical design guide when shaping driver transitions and avoiding energetically uneven crossover behaviour.
The network preview is a schematic visualization of the current crossover topology. It is intended as a consistency and orientation aid while editing numeric network values.
The section R/C/L groups in the preview can be clicked for targeted network-section editing. The driver/enclosure sketch on the right-hand side can be clicked to open the driver parameter dialog on the matching driver tab. The small lamp next to each driver title shows whether at least one curve/total flag is enabled for that driver.
The default view is All Drivers. It shows all four driver slots regardless of the current plot visibility flags. The small lamp remains a plot-status indicator and can be clicked to toggle plot visibility for the corresponding driver.
Explicit single-driver views remain available through:
View -> Network Preview -> Driver View
The Enclosure and gain section contains a tube helper:
Tube diameter -> Tube length
The tube length is calculated from:
VbFb- selected tube diameter
The tube diameter is stored as a user setting per driver tab. It is not currently stored in the .kfp project file.
Required:
- CMake 3.21 or newer
- C++17-capable compiler
- Qt6 Core
- Qt6 Widgets
Optional for development:
- Ninja
- CTest
On many Linux systems the required Qt functionality is provided by the Qt6 base development package. Exact package names differ by distribution.
From the repository root:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j"$(nproc)"Run the application:
./build/kfilter_qt6Run the smoke tests:
ctest --test-dir build --output-on-failureThe default build enables the Qt6 application and the smoke tests.
Available options include:
-DKFILTER_BUILD_QT6_APP=ON
-DKFILTER_BUILD_DRIVER_SMOKETEST=ON
-DKFILTER_BUILD_PROJECTIO_SMOKETEST=ON
-DKFILTER_BUILD_DOCUMENT_SMOKETEST=ON
-DKFILTER_BUILD_DEFAULTS_SMOKETEST=ON
-DKFILTER_ENABLE_WIZARD=OFFExample development build with Ninja:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build
ctest --test-dir build --output-on-failureStart KFilter6 and either create a new project or open an existing .kfp file.
The application works with four driver slots. Not every slot has to be used.
Open:
Edit -> Driver Parameters...
For each driver, edit the relevant Thiele/Small parameters, enclosure values, gain, and curve options.
Important fields include:
Driver nameRdcLspFsQtsQesQmsVasDiameterVbFbEnclosure typeGain
The button:
Calculate Qts from Qes and Qms
updates Qts from the entered Qes and Qms values.
In the driver-parameter dialog, use Curves and totals to decide what should be plotted and summed:
Show SPL curveShow impedance curveInclude in vector SPL sumInclude in energetic SPL sumInclude in total impedanceInvert polarityUse full crossover simulation
Use vector and energetic sums together. The vector sum shows phase-sensitive interaction, while the energetic sum is useful for checking the broader energy balance between drivers.
Open:
Edit -> Network / Filter Parameters...
Each driver has eight network sections. Each section contains:
- series R
- series C
- series L
- shunt R
- shunt C
- shunt L
Capacitors and inductors are edited in user-friendly units, while the internal model keeps the historical storage units.
The Standard Filter Preset area can insert simple Butterworth low-pass and
high-pass start values. The Impedance correction filter type inserts a
standard Zobel RC correction into Section 8 shunt values of the selected driver:
R = Rdc
C = Lsp / Rdc^2
L = 0
If Section 8 already contains shunt values, KFilter asks before replacing them.
The network preview shows the current network topology graphically. Click a section R/C/L group to edit that section, or click the driver/enclosure sketch on the right to open the matching driver parameter tab. The small lamp next to each driver title is lit when at least one curve/total flag is enabled for that driver; clicking it toggles plot visibility for that driver.
The default mode is:
All Drivers
You can switch to a single driver through:
View -> Network Preview -> Driver View
The preview background can be changed through:
View -> Network Preview -> Background Color...
Reset it through:
View -> Network Preview -> Reset Background Color
Use:
File -> Save
File -> Save As...
Projects use the legacy KFilter .kfp file format.
Some UI settings are stored through QSettings and are intentionally not part of the .kfp project file.
Examples:
- Network-preview background color.
- Plot-window background, grid, threshold and curve colors.
- Last used bass-reflex tube diameter per driver tab.
- Window and toolbar layout settings.
Typical source files:
CMakeLists.txt
mainqt6.cpp
kfilterqt6app.cpp / .h
kfilterdoc.cpp / .h
kfilterprojectio.cpp / .h
driver.cpp / .h
kfilterview.cpp / .h
circuitout.cpp / .h
driverparametersdialog.cpp / .h
networkparametersdialog.cpp / .h
tools/
The old KDE3/Qt3 files may exist in historical branches or handover packages as reference material, but the active application path is the Qt6 path beginning at:
mainqt6.cpp
kfilterqt6app.cpp
KFilter6 is being ported and improved incrementally. The preferred change style is small, reviewable patches that keep the application buildable after each step.
Important compatibility rule:
- Do not change the
.kfpproject-file format unless the migration and compatibility implications are explicitly handled.
Terminology note:
- The UI term
Energetic SPL sumcorresponds to the historical internal scalar SPL summary calculation. - Internal names such as
ScalarSummary,ScalarSummaryisActive, andPressureScalarSummary()may remain for compatibility and to reduce unnecessary churn.
KFilter6 is licensed under the GNU General Public License version 3 or later.
SPDX-License-Identifier: GPL-3.0-or-later
See the LICENSE file for the full GNU GPL version 3 license text.