Skip to content

Releases: TatschanT/swv_desktop

v1.3.0 Room Data Import, Full-and Calibration Rendering etc.

Choose a tag to compare

@TatschanT TatschanT released this 19 Jun 20:01

v1.3.0 (2026-06-19)

New: Room Data Import

An Import data button has been added, sitting between the existing Export data and Settings buttons. It restores the full application state from a previously exported CSV file — room dimensions, speaker and mic positions, per-wall reflection coefficients, source count, phase correction mode, room scatter, and listening area.

All controls are updated in a single batch; no intermediate recomputes fire during the load. Room dimensions are applied first so that position values clamp correctly against the imported room geometry. If any required parameter is missing or the file is malformed, the import is cancelled entirely and an error dialog is shown — no partial state is ever applied.

New: Schroeder Frequency Display

A read-only label showing the estimated Schroeder frequency now appears below the frequency-response curve. It provides a quick reference for the simulation's valid frequency range — the Schroeder frequency marks the boundary between the modal region (where this simulation is physically meaningful) and the diffuse-field region above it.

The estimate is derived from Sabine's reverberation formula using the current room volume and per-wall absorption coefficients (α = 1 − r²). The label updates live as room dimensions or wall reflections are adjusted. It is intentionally understated — a rough guide, not a precise measurement.

Internal: Structural Cleanup

A focused refactoring pass reduced main.py by approximately 240 lines and introduced three new source files (widgets.py, csv_io.py, constants.py). No application behaviour was changed.

  • View widgets (LabeledSlider, XYZSliders, etc.) extracted to widgets.py
  • CSV parse/format logic extracted to a Qt-free csv_io.py, making it independently testable
  • Shared constants (phase-mode tokens, equipment colours, wall names) centralised in constants.py, eliminating cross-file duplication that could silently affect physics branching
  • Dead code removed: unreachable _setup_overlay in render.py and its misleading docstring
  • Helper methods _num_src() and _physics_snapshot() added to eliminate repeated parameter-gather patterns in main.py

New: Full-band Scaling Mode

Previously the 3D pressure field was normalised per-frequency, making cross-frequency level comparison impossible. This release adds an optional Full-band scaling mode with a single normalisation reference derived from the global pressure maximum across the entire frequency band.

Controls added below the frequency slider:

  • Full-band scaling checkbox — enables cross-frequency normalisation
  • Calibrate button — runs an accurate background sweep across all frequencies
  • Progress label showing live sweep status

Two operating tiers:

  • Approximate (instant) — uses the peak of the already-computed 1D response as the reference; activates immediately on toggle
  • Accurate (after Calibrate) — CalibWorker sweeps all frequencies in the background via QThread; UI remains interactive throughout

The calibration cache is invalidated by any change to the 3D field (room geometry, source positions, reflections, source count, phase mode, room scatter). Display-only parameters — Show room modes and Listening Area — do not invalidate the cache.

  • The per-frequency spatial reference was switched from a 2-sigma mean to the median of spatial-peak values across all frequencies, giving a more representative baseline
  • The colour window was changed from symmetric ±20 dB to an asymmetric [−24 dB, +15 dB] range, reflecting the measured asymmetry of real room pressure distributions (nulls at nodes reach −50 dB or below; peaks rarely exceed +15–18 dB above median)

Some clipping at the extremes is intentional — it improves mid-range contrast.

dB re. median Colour
−24 dB and below Blue
0 dB Green
+15 dB and above Red

日本語サマリー

周波数をまたいで音圧レベルを比較できるFull-band Scalingモードを追加。即時の近似モードと、バックグラウンドで全周波数をスイープするCalibrateモードの2段階構成。このモードにおいては基準値を2σ平均から中央値に変更し、カラーウィンドウを対称±20dBから非対称**[−24dB, +15dB]**に修正。部屋の音圧分布の非対称性を正しく反映した。

また、それに加えて以下の二つの機能を追加した。
CSVインポート機能 — エクスポートしたCSVから部屋の全パラメータを一括復元。UIを安全に一括更新し、再計算は1回のみ。②シュレーダー周波数表示 — サビン式から算出したシミュレーション有効域の目安を控えめなラベルで表示。あわせてコードの構造的リファクタリングを実施し、main.pyを約240行削減。

⚠️ Windows Startup Notice / Windows版の起動に関するご注意

[English]
Since this is a free, open-source application, the .exe file does not include a paid digital signature. On your first launch, Windows SmartScreen may display a blue warning ("Windows protected your PC").
To launch the app safely, click "More info" and then select "Run anyway".
(Tip: You can prevent this by right-clicking the downloaded ZIP, opening Properties, checking "Unblock", and then extracting.)

[日本語]
本アプリは無料のオープンソースソフトウェアであるため、企業用のデジタル署名を取得していません。そのため、初回起動時に「Windows によって PC が保護されました」という青い警告画面(SmartScreen)が表示される場合があります。
起動するには、「詳細情報」をクリックし、「実行」ボタンを押してください。
(※解凍前に、ダウンロードしたZIPファイルを右クリックして「プロパティ」を開き、「許可する(ブロックの解除)」にチェックを入れておくと警告が出なくなります。)

Release V1.2.0: Advanced Acoustics & Dynamic UI Tuning

Choose a tag to compare

@TatschanT TatschanT released this 11 Jun 17:16

This major update bridges the gap between pure theoretical physics and real-world auditory perception. By introducing advanced heuristic tuning and a deeply refactored architecture, the Standing Wave Viewer now provides both academic accuracy and an intuitive, dynamic user experience.

New Features

Advanced Acoustics Sliders (Vibe Tuning)

  • Room Scatter (Order Damping): Real rooms have furniture and irregular walls that naturally scatter high-frequency tangential and oblique modes. This new slider applies a rigorous $n^2$ penalty to high-order modes, allowing you to intuitively dial in the "liveliness" and physical clutter of your specific space.
  • Listening Area (Spatial Smoothing): We don't listen with a mathematically infinitely small point. Replacing the old static toggle, this continuous slider (0.0m to 0.3m) averages the sound pressure field over a localized 3D volume around the microphone. This effectively smooths out unrealistic theoretical acoustic dips, yielding a frequency response that closely matches actual human perception.

Visual Enhancements

Statistical Color Clipping (2-Sigma Rule)

  • Fixed a critical issue in 3D volume rendering where extreme high-pressure hotspots (typically found in room corners) would severely compress the global color scale, rendering the rest of the room as a giant blue cancellation zone.
  • The rendering engine now applies a robust 2-sigma statistical clipping method (mean ± 2*std) before [0.0, 1.0] normalization. This gracefully ignores 5% of the outliers, preserving rich color gradients and distinct interference patterns across the entire room.
  • Volume Rendering Opacity Tuning: Adjusted the transparency mapping (OPACITY_TF) to counter the visual density introduced by the 2-sigma clipping. Mid-band sound pressure is now fully transparent, creating a clear, "velvet glass" effect that beautifully isolates acoustic peaks and cancellations without obscuring the equipment markers.

Under the Hood & Architectural Improvements

Single Source of Truth (SSoT) for Frequencies

Completely refactored the data flow. Frequency boundaries (MIN_FREQ and MAX_FREQ) are now centralized. Updating the calculation frequency range in the Settings dialog instantly and dynamically updates the main UI slider limits and the 2D graph's X-axis—no application restart required.

Physics Engine Rigor (Modal Norms)

Refactored internal variable names and comments to ensure academic integrity. "Energy Weighting" variables (e.g., mode_weight) have been properly renamed to mode_norm to accurately reflect their mathematical definition as normalization constants for the wave equation's volume integration.

Technical Debt Cleanup

Removed obsolete variables (such as SMOOTHING_RADIUS and redundant plot limits) to keep the codebase clean, lean, and highly maintainable.

🇯🇵 日本語サマリー (Japanese Summary)

V1.2.0: 「理論物理」と「人間の感覚」を繋ぐメジャーアップデート

Advanced Acoustics(音響チューニング)スライダーの追加

  • Room Scatter(部屋の散乱度合い): 家具などによる波の散乱をシミュレートするため、モード次数の2乗($n^2$)に比例したペナルティを与えるスライダーを追加しました。部屋の「ライブ感」を直感的に調整できます。
  • Listening Area(聴取範囲): マイクを「点」ではなく「3Dの空間(人間の頭部サイズ)」として扱い、指定半径内の音圧を平均化するスライダーを追加しました。極端で非現実的なディップが滑らかになり、人間の聴覚に近い周波数特性が得られます。

3D描画の改善(2シグマルール)

部屋の隅に発生する極端な音圧ピークに全体のカラースケールが引っ張られ、部屋全体が音圧の低い領域(青)として描画されてしまう問題を解決しました。統計的な2シグマ(約95%)クリッピングを導入し、空間全体の美しい干渉縞を鮮明に可視化します。これに伴い、Volumeモードでの透過性設定を追い込み、中間の音圧域を透明化することで、ビロードのように美しく見通しの良い音圧表現を実現しました。

シームレスなUI連動とアーキテクチャの刷新

周波数の計算範囲と描画範囲の変数を統合(Single Source of Truth)しました。Settingsダイアログで設定を変更すると、アプリを再起動することなく、メイン画面のスライダー上限やグラフの表示範囲がリアルタイムに更新されます。

物理エンジンのリファクタリング

波の減衰・正規化に関する変数を、数学的に正確な modal_norm という名称に変更し、コードの学術的な正確性を向上させると共に、不要になった設定変数を完全に削除しました。

Standing Wave Viewer v1.1.2 Release Notes / リリースノート

Choose a tag to compare

@TatschanT TatschanT released this 06 Jun 18:15

Standing Wave Viewer v1.1.2 focuses on improving the physical credibility of the simulation engine and stabilizing the 3D room framing in the viewer.

Highlights

Improved physical consistency in True Complex Field
Added mode-based energy weighting.
Axial modes use 1.0, tangential modes 0.5, and oblique modes 0.25.

This significantly reduces the excessive cancellation-heavy blue regions at higher frequencies and the unrealistically strong corner peaks at lower frequencies.

Refined 3D axis presentation
Numeric tick labels were removed, leaving only the X / Y / Z axis labels.
The 4-division grid is now maintained through a robust workaround that avoids unstable CubeAxesActor behavior in VTK.
This prioritizes stable visual framing, especially for room dimensions below 2.5 m where the default behavior was unreliable.

Practical impact

Simulation output now behaves more like real small-room acoustics.
True Complex Field visualizations are easier to read and less exaggerated.
The 3D room frame is cleaner and more stable, making spatial proportions easier to grasp at a glance.

Note
The 3D grid refinement in this release is based on an implementation-level workaround for PyVista / VTK behavior. Internally, it is a fairly technical solution, but from a product perspective the chosen direction is simple: remove distracting numeric ticks and preserve a stable 4-division grid.

日本語
物理エンジンを改善し、True Complex Field の挙動をより現実的に調整しました。さらに、3Dビューでは数字ラベルを廃止して安定した4分割グリッドを優先する方針に整理しました。

⚠️ Windows Startup Notice / Windows版の起動に関するご注意

[English]
Since this is a free, open-source application, the .exe file does not include a paid digital signature. On your first launch, Windows SmartScreen may display a blue warning ("Windows protected your PC").
To launch the app safely, click "More info" and then select "Run anyway".
(Tip: You can prevent this by right-clicking the downloaded ZIP, opening Properties, checking "Unblock", and then extracting.)

[日本語]
本アプリは無料のオープンソースソフトウェアであるため、企業用のデジタル署名を取得していません。そのため、初回起動時に「Windows によって PC が保護されました」という青い警告画面(SmartScreen)が表示される場合があります。
起動するには、「詳細情報」をクリックし、「実行」ボタンを押してください。
(※解凍前に、ダウンロードしたZIPファイルを右クリックして「プロパティ」を開き、「許可する(ブロックの解除)」にチェックを入れておくと警告が出なくなります。)

Standing Wave Viewer v1.1.1 (Hotfix Update)

Choose a tag to compare

@TatschanT TatschanT released this 05 Jun 19:07

What's New in V1.1.1

This is a minor hotfix update to improve the application's startup experience and fix a display issue on Windows.

  • Added a splash screen: A logo will now appear immediately upon launch to indicate the app is loading heavy 3D libraries.
  • Fixed window size issue (Hotfix): Disabled OS-level DPI scaling. The window will now strictly render at 1600x1000 pixels, preventing it from becoming too large and getting cut off on screens with >100% display scaling.

(Please refer to the CHANGELOG.md for full details.)

Standing Wave Viewer (SWV) v1.1.0 Windows

Choose a tag to compare

@TatschanT TatschanT released this 03 Jun 18:34

Standing Wave Viewer is a 3D acoustic simulation and visualization tool. It calculates and visualizes room modes (standing waves) and low-frequency interference patterns to help optimize subwoofer/speaker placement and listening positions.

Please unzip the file and run SWV.exe. For instructions and technical details, please refer to the documentation in the Document folder.

Known issue We have found that, on laptops with smaller displays, windows may not fit entirely on the screen when display scaling is set to 125% or 150%. If this happens, please set the display scaling to 100% and restart the application. This issue is scheduled to be addressed in the next version.

[日本語]
Standing Wave Viewer は、部屋の定在波(ルームモード)と低周波の干渉パターンを計算・可視化するための3D音響シミュレーションツールです。サブウーファーやスピーカーの最適な配置、およびリスニングポジションの決定に役立つでしょう。

Zipファイルを解凍し、SWV.exeを実行してください。使用方法並びに技術詳細については、Documentフォルダにあるドキュメントを参照してください。

既知の問題 小さなディスプレイを持つノートパソコンで画面のスケーリングを125%や150%に設定している場合に、ウィンドウが画面に収まりきらない現象が確認されています。その場合は画面のスケーリングを100%にしてから、アプリを再起動してください。この問題は次回バージョンで対応予定です。

⚠️ Windows Startup Notice / Windows版の起動に関するご注意

[English]
Since this is a free, open-source application, the .exe file does not include a paid digital signature. On your first launch, Windows SmartScreen may display a blue warning ("Windows protected your PC").
To launch the app safely, click "More info" and then select "Run anyway".
(Tip: You can prevent this by right-clicking the downloaded ZIP, opening Properties, checking "Unblock", and then extracting.)

[日本語]
本アプリは無料のオープンソースソフトウェアであるため、企業用のデジタル署名を取得していません。そのため、初回起動時に「Windows によって PC が保護されました」という青い警告画面(SmartScreen)が表示される場合があります。
起動するには、「詳細情報」をクリックし、「実行」ボタンを押してください。
(※解凍前に、ダウンロードしたZIPファイルを右クリックして「プロパティ」を開き、「許可する(ブロックの解除)」にチェックを入れておくと警告が出なくなります。)