|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 7.0.0 |
| 4 | + |
| 5 | +#### Added |
| 6 | + |
| 7 | +* macOS universal binaries |
| 8 | +* New module: `audio` |
| 9 | +* New Wave, AIFF, FLAC, and Mp3 (via `minimp3`) encoders/decoders |
| 10 | +* Apple ALAC support |
| 11 | +* Apple CAF container support |
| 12 | +* RF64/BW64 container support |
| 13 | +* RISC-V support |
| 14 | +* RISC-V prebuilt binaries |
| 15 | +* New ARM and ARM64 toolchain implementation |
| 16 | +* New RISC-V 64 toolchain for `riscv64-linux-gnu` |
| 17 | +* `macos-merge-binaries.cmake` merges two directories into one with universal binaries |
| 18 | +* Custom port to fix the `macosforge/alac` bug |
| 19 | +* New `elliptic` function to design elliptic filters with ripple parameters (follows SciPy semantics) |
| 20 | +* Version information added for each module (`library_version_dsp`, `library_version_audio`, etc.) |
| 21 | +* `samples_store` and `samples_load` convert audio channels to/from stored formats (integer and floating-point, optional dithering) |
| 22 | +* `strided_channel` class for reading/writing strided data in KFR expressions |
| 23 | +* `audio_data` class providing a unified interface for interleaved/planar audio data |
| 24 | +* Zero-copy construction from user-supplied pointers for `audio_data` |
| 25 | +* Computing statistics for `audio_data`: Peak and RMS |
| 26 | +* Per-channel processing for `audio_data` |
| 27 | +* Basic dithering support: Rectangular and Triangular |
| 28 | +* `audio_encoder` and `audio_decoder` base classes for encoding/decoding audio |
| 29 | +* Reading RIFF chunks in `audio_decoder` |
| 30 | +* Audio format detection from the first 16 bytes |
| 31 | +* Audio format selection from file extension |
| 32 | +* Raw decoder/encoder |
| 33 | +* Audio decoder based on Media Foundation for Windows |
| 34 | +* Automatic switch from standard Wave to RF64 if audio exceeds 4 GB (can be disabled with `switch_to_rf64_if_over_4gb`) |
| 35 | +* `encode_audio_file` and `decode_audio_file` functions for simplified file handling |
| 36 | +* `arange` function added (similar to NumPy’s) |
| 37 | +* Added `has_expression_traits`, `input_expression`, `output_expression`, and `input_output_expression` concepts |
| 38 | +* `expr_element` concept defines valid expression element types |
| 39 | +* Added `f_class`, `i_class`, and `u_class` concepts (`is_f_class`, `is_i_class`, `is_u_class`) |
| 40 | +* Added `not_f_class`, `not_i_class`, and `not_u_class` concepts |
| 41 | +* `has_data_size` concept checks for `std::data` and `std::size` definitions |
| 42 | +* Added `filtfilt` for forward-backward IIR filtering |
| 43 | +* Added `arrangement_speakers` and `arrangement_for_channels` functions |
| 44 | +* Added `fopen_path` for cross-platform UTF-8 file access; replaces `fopen_portable` |
| 45 | +* `memory_reader` and `memory_writer` adapters for user memory buffers |
| 46 | +* Added more tests for vector concatenation and slicing |
| 47 | +* Minimal usage examples added under `tests/usage-config` and `tests/usage-manual` |
| 48 | +* New RISC-V vector types: `f32rvv`, `i32rvv`, `u32rvv`, etc. |
| 49 | +* Added `simd_compat` concept to verify SIMD element compatibility |
| 50 | +* Added `scoped_flush_denormals` RAII class to enable flush-to-zero semantics on x86 and ARM |
| 51 | +* `test_matrix` function introduced (replaces `testo::matrix` for Catch2 compatibility) |
| 52 | + |
| 53 | +#### Changed |
| 54 | + |
| 55 | +* Prebuilt binaries are tested after build |
| 56 | +* Prebuilt binaries use Clang 21 |
| 57 | +* `KFR_ENABLE_MULTIARCH` is forcibly turned off for non-x86 |
| 58 | +* `KFR_USE_BOOST_MATH` option enables the use of standalone Boost.Math for elliptic filters (on by default) |
| 59 | +* `KFR_USE_BOOST` option switches to using Boost.Math from a full Boost installation. Enable if you already use Boost |
| 60 | +* C++20 standard is now handled via the `cxx_std_20` CMake feature and inherited by dependent targets |
| 61 | +* Refactored CMake config with separate targets and dependency handling |
| 62 | +* `add_kfr_library` refactored to distinguish between private and public dependencies and definitions |
| 63 | +* In multiarch builds, the base architecture is now named exactly as the module itself (was: `kfr_dsp_sse2`, `kfr_dsp_avx2`; now: `kfr_dsp`, `kfr_dsp_avx2`) |
| 64 | +* Examples and tools migrated to the new audio I/O code |
| 65 | +* All third-party libraries moved to `src/thirdparty` or `include/kfr/thirdparty` |
| 66 | +* Old audio I/O handled by `audio_reader` and `audio_writer` is now deprecated |
| 67 | +* `reverse` expression is now writable |
| 68 | +* `audio_sample_type` now represents bit depth; negative if floating-point |
| 69 | +* `convert_endianness` now accepts references to data types |
| 70 | +* `samplerate_converter` is now default-, move-constructible, and move-assignable |
| 71 | +* `IO_SEEK_64` and `IO_TELL_64` macros renamed to `KFR_IO_SEEK_64` and `KFR_IO_TELL_64` |
| 72 | +* `get_nth_type` optimized for Clang and GCC |
| 73 | +* All `constexpr` variables now marked `inline` |
| 74 | +* `is_poweroftwo`, `next_poweroftwo`, `ilog2`, etc., now use C++20 `<bit>` header |
| 75 | +* Sample Rate Converter tool refactored for chunked resampling |
| 76 | +* [Breaking change] CMake 3.16 required |
| 77 | +* [Breaking change] `cometa` namespace merged into `kfr`; Cometa is no longer distributed separately. Replace `cometa` with `kfr` in your sources |
| 78 | +* [Breaking change] All macros renamed from `CMT_` to `KFR_`; replace all occurrences of `CMT_` with `KFR_` |
| 79 | +* [Breaking change] All macros renamed from `TESTO_` to `KFR_`; replace all occurrences of `TESTO_` with `KFR_` |
| 80 | +* [Breaking change] `cometa.hpp` renamed to `meta.hpp`; `kfr/cometa/*.hpp` renamed to `kfr/meta/*.hpp`. Update your includes accordingly |
| 81 | +* [Breaking change] `kfr/testo/*.hpp` renamed to `kfr/test/*.hpp` |
| 82 | +* [Breaking change] Some classes and functions no longer accept a template parameter and now default to `double` for maximum precision. Related changes: |
| 83 | + * `zpk<float_type>` replaced with `zpk` |
| 84 | + * `bessel<float_type>` and `butterworth<float_type>` replaced with `bessel` and `butterworth` |
| 85 | + * `bilinear<float_type>`, `lp2lp_zpk<float_type>`, `lp2bs_zpk<float_type>`, `lp2bp_zpk<float_type>`, `lp2hp_zpk<float_type>`, and `warp_freq<float_type>` replaced with non-template equivalents |
| 86 | + * `iir_lowpass<float_type>`, `iir_highpass<float_type>`, `iir_bandpass<float_type>`, `iir_bandstop<float_type>` replaced with non-template equivalents |
| 87 | + * `iir_params<float_type>` still accepts a template parameter to control precision |
| 88 | + * `to_sos` now accepts `float_type` (default `double`) to return `iir_params<float_type>` |
| 89 | + * New `elliptic` function follows the same rule and always produces double-precision `zpk` |
| 90 | +* `intrinsics` namespace renamed to `intr` |
| 91 | +* Many functions from `iir_design.hpp` moved to `src/iir_design.cpp` |
| 92 | +* Documentation updates: applying FIR/IIR filters, computing loudness, performing sample conversion |
| 93 | +* [Breaking change] `KFR_ACCEPT_EXPRESSIONS` removed; replaced with `expression_argument` and `expression_arguments` concepts |
| 94 | +* [Breaking change] `identity` removed; replaced with C++ `std::type_identity_t` |
| 95 | +* [Breaking change] `output_expression` concept replaces `enable_if_output_expression` trait |
| 96 | +* [Breaking change] 8-bit sample support removed |
| 97 | +* [Breaking change] Fixed typo: `convert_endianess` → `convert_endianness` |
| 98 | +* [Breaking change] `CMT_NOEXCEPT` removed; use `noexcept` |
| 99 | +* [Breaking change] C API: `kfr_size_t` and `kfr_int32_t` removed; use `size_t` and `int32_t` |
| 100 | +* [Breaking change] `Speaker` → `speaker_type`, `SpeakerArrangement` → `speaker_arrangement` |
| 101 | +* [Breaking change] `from_lambda` parameter required to construct `vec` from a lambda generator |
| 102 | +* `ebu_r128` now accepts `std::span` instead of `std::vector` |
| 103 | +* `arraysize` and `carraysize` removed; use `std::size` from C++17 |
| 104 | +* Removed C++17 compatibility definitions for non-compliant compilers |
| 105 | +* More functions marked `noexcept` and `constexpr` |
| 106 | +* `CMT_ENABLE_IF` mostly replaced with concepts and `requires`; `KFR_ENABLE_IF` still available |
| 107 | +* `CMT_CLANG_EXT` renamed to `KFR_VEC_EXT` and now usable with GCC |
| 108 | +* C API can now be built without exceptions |
| 109 | +* `numeric` concept replaces `is_numeric<T1>` predicate |
| 110 | +* `aligned_size`, `aligned_force_free`, `aligned_release`, and `aligned_reallocate` only defined if `KFR_MANAGED_ALLOCATION` is on (default off) |
| 111 | + |
| 112 | +#### Fixed |
| 113 | + |
| 114 | +* Custom port to fix the `macosforge/alac` bug |
| 115 | +* Fixed generic fallback for `bittestany` |
| 116 | +* Fixed u8/i8 shifts on x86 and related tests |
| 117 | +* Various smaller fixes |
| 118 | + |
3 | 119 | ## 6.3.1 |
4 | 120 |
|
5 | 121 | #### Fixed |
|
0 commit comments