From 279038c566a4bff40a2607cf28f767a47f2a54fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20Bu=CC=88hrig?= Date: Fri, 11 Jul 2025 14:44:29 +0200 Subject: [PATCH] Update to version 1.1.0 with comprehensive changelog and README updates --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ README.md | 29 ++++++++++++++++++++++++++++- main.go | 2 +- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3c80a0..fa8e5d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [v1.1.0] - 2024-12-19 +### Added +- **IR Visualization**: New `--plot-ir` flag to generate frequency response and waveform plots +- **Professional Plotting**: Frequency response (dB vs Hz) and time-aligned waveform visualization +- **Valhallir Branding**: Logo and filename information in generated plots +- **Modular Architecture**: Separated plotting logic into dedicated `pkg/plot` package +- **Enhanced File Management**: Plots are saved in the same directory as IR files with matching names +- **Improved Documentation**: Updated README with plotting features and usage examples +- **Linear Fade-Out**: New `--fade-ms` option to apply linear fade-out to IRs (default 5ms) +- **High/Low-Cut Filtering**: New `--highcut` and `--lowcut` options for frequency filtering +- **Configurable Filter Slopes**: New `--cut-slope` option for filter steepness (12, 24, 36, 48 dB/oct) +- **Audio Resampling**: Automatic resampling between different sample rates (44.1, 48, 88.2, 96 kHz) +- **Enhanced Audio Processing**: Cascade filtering for steeper slopes and better frequency response +- **Assets Integration**: Added Valhallir logo for professional plot branding + +### Changed +- **Package Structure**: Refactored codebase with separate packages for audio processing and visualization +- **Plot File Naming**: Plots now use the same base name as IR files (e.g., `ir.png` instead of `ir_plot.png`) +- **Repository Organization**: Updated `.gitignore` to exclude generated files while preserving essential test files +- **Enhanced Error Handling**: Improved validation and error messages for all new features +- **Better Logging**: More detailed progress information during processing + +### Technical Improvements +- **Clean Architecture**: Separated concerns between audio processing (`pkg/convolve`) and visualization (`pkg/plot`) +- **Better Maintainability**: Modular design makes it easier to extend and modify features +- **Enhanced Audio Quality**: Improved filtering algorithms with cascade implementation +- **Professional Output**: Better IR quality with fade-out and advanced filtering options + ## [v1.0.0] - 2024-06-09 ### Added - Initial public release: Valhallir Deconvolver diff --git a/README.md b/README.md index bc59d6b..af83cc0 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,12 @@ A CLI tool for processing WAV files to generate impulse responses (IR) from swee - **Optional output IR length:** Specify output IR length in milliseconds with --length-ms - **Optional low-cut and high-cut filtering:** Apply Butterworth filters to the recorded sweep before IR extraction (--lowcut, --highcut, --cut-slope) - **Automatic fade-out:** Linear fade-out at the end of the IR to avoid clicks (default 5 ms, configurable with --fade-ms) +- **IR Visualization:** Generate frequency response and waveform plots with `--plot-ir` - **96kHz 24-bit WAV file support** for high-quality audio processing - **Multiple output formats** with configurable sample rates and bit depths - **Minimum Phase Transform (MPT)** option for reduced latency IRs - **Automatic silence trimming** and normalization -- **Modular design** with separate packages for WAV I/O and convolution +- **Modular design** with separate packages for WAV I/O, convolution, and visualization - **Robust error handling** and validation ## Installation @@ -87,6 +88,24 @@ You can control the filter steepness (slope) with `--cut-slope` (in dB/octave, d This applies a 40 Hz low-cut and 18 kHz high-cut, both with a 24 dB/octave slope (steeper than the default 12). +### IR Visualization + +Generate frequency response and waveform plots of your IRs: + +```sh +./valhallir-deconvolver --sweep sweep.wav --recorded recorded.wav --output ir.wav --plot-ir +``` + +This creates: +- `ir.wav` - The impulse response file +- `ir.png` - A professional plot showing frequency response and waveform + +The plot includes: +- **Frequency Response:** dB vs Hz with log frequency scale (20Hz-20kHz) +- **Waveform:** Time-domain view of the first 10ms of the IR +- **Valhallir Branding:** Logo and filename information +- **Professional Layout:** Clean, publication-ready visualization + ### Different Output Formats Generate IRs in different sample rates and bit depths: @@ -150,6 +169,7 @@ Generate IRs in different sample rates and bit depths: | `--lowcut` | Low-cut filter (high-pass) cutoff frequency in Hz (recorded sweep) | - | No | | `--highcut` | High-cut filter (low-pass) cutoff frequency in Hz (recorded sweep) | - | No | | `--cut-slope` | Filter slope in dB/octave (12, 24, 36, ...; default 12) | 12 | No | +| `--plot-ir` | Generate frequency response and waveform plot | false | No | ## File Requirements @@ -198,6 +218,13 @@ Generate IRs in different sample rates and bit depths: - **Maintains frequency response** while optimizing phase characteristics - **Suitable for real-time applications** like guitar amp modeling +### IR Visualization +- **Frequency Response Plot:** Shows magnitude response in dB vs Hz with log frequency scale +- **Waveform Plot:** Displays the first 10ms of the IR in the time domain +- **Professional Layout:** Clean, publication-ready plots with Valhallir branding +- **Automatic File Naming:** Plots are saved with the same base name as the IR file +- **High-Quality Output:** PNG format suitable for documentation and sharing + ### Output Format Options - **Sample Rates:** 44.1kHz (CD), 48kHz (studio), 88.2kHz, 96kHz (high-res) - **Bit Depths:** 16-bit (CD), 24-bit (studio), 32-bit (high-res) diff --git a/main.go b/main.go index ea609b2..5f4f521 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ func main() { app := &cli.App{ Name: "valhallir-deconvolver", Usage: "Deconvolve sweep and recorded WAV files to create impulse responses", - Version: "v1.0.0", + Version: "v1.1.0", Flags: []cli.Flag{ &cli.StringFlag{ Name: "sweep",