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