1Changelog 2========= 3 43.5.1 5----- 6 7Released 2023-09-25. 8 9**Compatibility**: 10 11 * Ensures compatibility with Rust 1.40.0 through 1.72.1. This bumps the minimum 12 supported Rust version from 1.16 to 1.40. 13 14Changes: 15 16 * Soundness: Wrap writes to uninitialized memory in `mem::MaybeUninit`. The 17 unsoundness was present in all versions since 0.2.0. There is no evidence 18 that rustc took advantage of the unsoundness to compile programs in a 19 problematic way. 20 21Thanks to Cam Lloyd for originally contributing these changes, and thanks to 22Maxwell McKinnon for rebasing them on top of 3.5.0. 23 243.5.0 25----- 26 27Released 2022-09-09. 28 29This is a maintenance release that includes most of the bugfixes and features 30that have been contributed since 3.4.0, which could be cherry-picked on top of 313.4.0. Some other contributions with more far-reaching changes remain unreleased 32as of yet. 33 34**Compatibility**: 35 36 * Ensures compatibility with Rust 1.16 through 1.63 stable. Previously the 37 minimum supported Rust version was 1.4. Cargo from 1.4 is no longer 38 compatible with the current crates.io registry, and Rustup fails signature 39 verification for these binaries, so it is infeasible to continue to support 40 it. 41 42New features: 43 44 * Add support for `S24_LE` files, which store 24 bits in 4 bytes ([#40][40], 45 [#41][41]) 46 * Add `WavWriter::new_with_spec_ex` ([#42][42]) 47 * Add `WavSpec::into_header_for_infinite_file` ([#33][33], [#36][36]) 48 49Bugfixes and compatibility improvements: 50 51 * Handle files that have the `wValidBitsPerSample` field set to zero 52 ([#50][50], [#51][51]) 53 * Avoid overflow in the channel mask when writing file with more than 32 54 channels ([#59][59], [#60][60]) 55 56[33]: https://github.com/ruuda/hound/pull/33 57[36]: https://github.com/ruuda/hound/pull/36 58[40]: https://github.com/ruuda/hound/pull/40 59[41]: https://github.com/ruuda/hound/pull/41 60[42]: https://github.com/ruuda/hound/pull/42 61[50]: https://github.com/ruuda/hound/pull/50 62[51]: https://github.com/ruuda/hound/pull/51 63[59]: https://github.com/ruuda/hound/pull/59 64[60]: https://github.com/ruuda/hound/pull/60 65 66Many thanks to Diffuse, Fletcher Woodruff, Matt Wilkinson, Vitaly Vi Shukela, 67and Tuckerrrrrrrrrr for contributing to this release. 68 693.4.0 70----- 71 72Released 2018-04-07. 73 74**Breaking changes**: 75 76- None. 77 78Release highlights: 79 80- Exposes `read_wave_header()`, to quickly determine whether a file could be 81 a wav file. 82- Adds support for appending to an existing file. See `WavWriter::append()` for 83 constructing a writer that appends to a file, and `WavWriter::new_append()` 84 for the generic case. 85- Adds `WavWriter::flush()` to flush the underlying writer and update the 86 header. This can be used to minimize data loss when writing a large file. 87- Adds `WavWriter::duration()`, `WavWriter::len()`, and `WavWriter::spec()` to 88 obtain the duration and number of samples written so far, and the spec of the 89 file being written. The latter is useful when appending. 90- Hound now fails earlier when requesting to write an unsupported spec: 91 `WavWriter::new()` will already return `Error::Unsupported`. Previously this 92 error was returned when writing a sample. 93- Hound now verifies that the data chunk has no trailing bytes. 94- `WavWriter::finalize()` now performs a flush as its last operation, to be able 95 to observe errors when using a buffered writer. 96- Ensures compatibility with Rust 1.4 through 1.25 stable. 97 983.3.1 99----- 100 101Released 2018-02-18. 102 103**Breaking changes**: 104 105- None. 106 107Release highlights: 108 109- Hound now reads certain WAVEFORMATEX files that were previously 110 rejected incorrectly. 111- Ensures compatibility with Rust 1.4 through 1.24 stable. 112 1133.3.0 114----- 115 116Released 2017-12-02. 117 118**Breaking changes**: 119 120- None. 121 122Release highlights: 123 124- Hound now supports seeking to a particular time in the file. 125 See `WavReader::seek()`. 126- Ensures compatibility with Rust 1.4 through 1.22 stable. 127 128Many thanks to Mitchell Nordine for contributing to this release. 129 1303.2.0 131----- 132 133Released 2017-10-14. 134 135**Breaking changes**: 136 137- None. 138 139Release highlights: 140 141- Hound will now write the older PCMWAVEFORMAT format whenever possible, rather 142 than the newer WAVEFORMATEXTENSIBLE, to improve compatibility. 143- Certain nonstandard files (produced among others by “Pro Tools”) can now 144 be read. 145- Ensures compatibility with Rust 1.4 through 1.21 stable. 146 147Many thanks to Denis Kolodin for contributing to this release. 148 1493.1.0 150----- 151 152Released 2017-04-09. 153 154**Breaking changes**: 155 156- None. 157 158Release highlights: 159 160- Support for writing IEEE float was added. 161- The cpal example was updated, and it now compiles on OS X. 162- An OS X target was added to the CI configuration. 163- Ensures compatibility with Rust 1.4 through 1.16 stable. 164 165Many thanks to Alex Zywicki for contributing to this release. 166 1673.0.1 168----- 169 170Released 2017-04-01. 171 172This release fixes a few bugs discovered through fuzzing. 173 174**Breaking changes**: 175 176- None. 177 178Release highlights: 179 180- Fixes high memory usage issue that could occur when reading unknown blocks. 181- Resolve various division by zero and arithmetic overflow errors. 182- Ensures compatibility with Rust 1.4 through 1.16 stable. 183 1843.0.0 185----- 186 187Released 2016-11-27. 188 189This release focuses on improving write performance. 190 191**Breaking changes**: 192 193- When a `WavWriter` is constructed, the header is now written immediately, 194 therefore the constructor now returns a `Result`. 195 196Other changes: 197 198- `WavWriter` no longer maintains a buffer internally. 199 `WavWriter::create()` does still wrap the file it opens in a buffered writer. 200- Adds `SampleWriter16` for fast writing of 16-bit samples. Dedicated 201 writers for other bit depths might be added in future releases. 202 203Upgrading requires dealing with the `Result` in `WavWriter::new()` 204and `WavWriter::create()`. In many cases this should be as simple as 205wrapping the call in a `try!()`, or appending a `?` on recent versions 206of Rust. 207 2082.0.0 209----- 210 211Released 2016-07-31. 212 213**Breaking changes**: 214 215- Support for Rust 1.0 through 1.3 has been dropped. 216- The `WavSpec` struct gained a new `sample_format` member. To upgrade, 217 add `sample_format: hound::SampleFormat::Int` to places where a `WavSpec` 218 is constructed. 219 220Release highlights: 221 222- Ensures compatibility with Rust 1.4 through 1.10. 223- Adds support for reading files with 32-bit IEEE float samples. 224 225Many thanks to Mitchell Nordine for his contributions to this release. 226 2271.1.0 228----- 229 230Released 2015-09-14. 231 232Release highlights: 233 234- New `WavReader::into_inner` method for consistency with the standard library. 235- New `WavReader::into_samples` method for ergonomics and consistency. 236- Ensures compatibility with Rust 1.4. 237 238Many thanks to Pierre Krieger for his contributions to this release. 239 2401.0.0 241----- 242 243Released 2015-07-21. 244 245This is the first stable release of Hound. Only small changes have been made 246with respect to v0.4.0. Release highlights: 247 248- `WavWriter::create` now wraps the writer in a `BufWriter`. 249- `WavSamples` now implements `ExactSizeIterator`. 250- `WavReader::spec` now returns the spec by value. 251- Internal cleanups 252 2530.4.0 254----- 255 256Released 2015-05-16. 257 258Release highlights: 259 260- Works with Rust 1.0.0. 261- Hound can now read and write files with 8, 16, 24, or 32 bits per sample. 262- Better error reporting 263- Improved documentation 264- An improved test suite 265 2660.3.0 267----- 268 269Released 2015-05-05. 270 271Release highlights: 272 273- Hound can now read WAVEFORMATEXTENSIBLE, so it can read the files it writes. 274- Hound can now read files with PCMWAVEFORMAT and WAVEFORMATEX header. 275- Hound now uses a custom error type. 276- New convenient filename-based constructors for `WavReader` and `WavWriter`. 277- More examples 278- An improved test suite 279 2800.2.0 281----- 282 283Released 2015-04-09. 284 285This version adds support for decoding wav files in addition to writing them. 286 2870.1.0 288----- 289 290Released 2015-04-01. 291 292Initial release with only write support. 293