nandi/jolt-nativepublic Fork 0
fa4ecdfed6a830e6099d5fab9be24ef72ea1923b
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

CHANGELOG.md · 1213 lines · 36.2 KBmarkdown Blame HistoryRaw
Lift freeq's AV media plane out of sleek 90f8b89 nandi 19d ago1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8## [Unreleased]
9
10### Added
11
12- `DeviceBusy` error variant to `SupportedStreamConfigsError`, `DefaultStreamConfigError`, and
13 `BuildStreamError` for retryable device access errors (EBUSY, EAGAIN).
14- `StreamConfig` now implements `Copy`.
15- `StreamTrait::buffer_size()` to query the stream's current buffer size in frames per callback.
16- `device_by_id` is now dispatched to each backend's implementation, allowing to override it.
17- **ALSA**: `device_by_id` now accepts PCM shorthand names such as `hw:0,0` and `plughw:foo`.
18- **PipeWire**: New host for Linux and some BSDs using the PipeWire API.
19- **PulseAudio**: New host for Linux and some BSDs using the PulseAudio API.
20
21### Changed
22
23- Public error enums are now marked `#[non_exhaustive]` to allow adding variants without
24 SemVer-breaking changes.
25- `DeviceTrait::build_*_stream` now takes `StreamConfig` by value instead of `&StreamConfig`
26- **AAudio**: Device names now include the device type suffix (e.g. "Speaker (Builtin Speaker)")
27 for easier identification when enumerating devices.
28- **AAudio**: `supported_input_configs` and `supported_output_configs` now return an error for
29 direction-mismatched devices (e.g. querying input configs on an output-only device) instead of
30 silently returning an empty list.
31- **AAudio**: Bump MSRV to 1.85.
32- **AAudio**: Buffers with default sizes are now dynamically tuned.
33- **ALSA**: Device disconnection now stops the stream with `StreamError::DeviceNotAvailable` instead of looping.
34- **ALSA**: Polling errors trigger underrun recovery instead of looping.
35- **ALSA**: Try to resume from hardware after a system suspend.
36- **ALSA**: Loop partial reads and writes to completion.
37- **ALSA**: Prevent reentrancy issues with non-reentrant plugins and devices.
38- **ASIO**: `Device::driver`, `asio_streams`, and `current_callback_flag` are no longer `pub`.
39- **ASIO**: Timestamps now include driver-reported hardware latency.
40- **ASIO**: Hardware latency is now re-queried when the driver reports `kAsioLatenciesChanged`.
41- **ASIO**: Stream error callback now receives `StreamError::BufferUnderrun` on `kAsioResyncRequest`.
42- **ASIO**: Stream error callback now receives `StreamError::StreamInvalidated` when the driver reports a sample rate change (`sampleRateDidChange`) of 1 Hz or more from the configured rate.
43- **CoreAudio**: Timestamps now include device latency and safety offset.
44- **JACK**: Timestamps now use the precise hardware deadline.
45- **Linux/BSD**: Default host in order from first to last available now is: PipeWire, PulseAudio, ALSA.
46- **WASAPI**: Timestamps now include hardware pipeline latency.
47- **WebAudio**: Bump MSRV to 1.85.
48- **WebAudio**: Timestamps now include base and output latency.
49- **WebAudio**: Initial buffer scheduling offset now scales with buffer duration.
50
51### Fixed
52
53- Reintroduce `audio_thread_priority` feature.
54- Fix numeric overflows in calls to create `StreamInstant` in ASIO, CoreAudio and JACK.
55- **AAudio**: Fix thread lock when a stream is dropped before it fully starts.
56- **AAudio**: Fix invalid capture and playback timestamps.
57- **ALSA**: Fix capture stream hanging or spinning on overruns.
58- **ALSA**: Fix non-monotonic `StreamInstant` during stream startup.
59- **ALSA**: Fix spurious timestamp errors during stream startup.
60- **ALSA**: Fix spurious timeout errors during polling.
61- **ALSA**: Fix rare panics when dropping the stream is interrupted.
62- **ALSA**: Fix timestamp overflows on 32-bit platforms.
63- **ASIO**: Fix enumeration returning only the first device when using `collect`.
64- **ASIO**: Fix device enumeration and stream creation failing when called from spawned threads.
65- **ASIO**: Fix buffer size not resizing when the driver reports `kAsioBufferSizeChange`.
66- **ASIO**: Fix latency not updating when the driver reports `kAsioLatenciesChanged`.
67- **ASIO**: Fix distortion when buggy drivers fire the buffer callback multiple times per cycle.
68- **CoreAudio**: Fix undefined behaviour and silent failure in loopback device creation.
69- **Emscripten**: Fix build failure introduced by newer `wasm-bindgen` versions.
70- **JACK**: Fix input capture timestamp using callback execution time instead of cycle start.
71
72## [0.17.3] - 2026-02-18
73
74### Changed
75
76- Reverted SemVer-breaking `DeviceBusy` error variant addition.
77
78### Fixed
79
80- **ASIO**: Fix linker errors.
81
82## [0.17.2] - 2026-02-08 [YANKED]
83
84### Added
85
86- `DeviceBusy` error variant for retriable device access errors (EBUSY, EAGAIN).
87- **ALSA**: `Debug` implementations for `Host`, `Device`, `Stream`, and internal types.
88- **ALSA**: Example demonstrating ALSA error suppression during enumeration.
89- **ALSA**: Support for native DSD playback.
90- **WASAPI**: Enable as-necessary resampling in the WASAPI server process.
91
92### Changed
93
94- Bump overall MSRV to 1.78.
95- **ALSA**: Update `alsa` dependency to 0.11.
96- **ALSA**: Bump MSRV to 1.82.
97- **CoreAudio**: Update `core-audio-rs` dependency to 0.14.
98
99### Fixed
100
101- **ALSA**: Enumerating input and output devices no longer interferes with each other.
102- **ALSA**: Device handles are no longer exclusively held between operations.
103- **ALSA**: Reduce Valgrind memory leak reports from ALSA global configuration cache.
104- **ALSA**: Fix possible race condition on drop.
105- **ALSA**: Fix audio callback stalling when start threshold is not met.
106
107## [0.17.1] - 2026-01-04
108
109### Added
110
111- **ALSA**: `Default` implementation for `Device` (returns the ALSA "default" device).
112- **CI**: Checks default/no-default/all feature sets with platform-dependent MSRV for JACK.
113
114### Changed
115
116- **ALSA**: Devices now report direction from hint metadata and physical hardware probing.
117
118### Fixed
119
120- **ALSA**: Device enumeration now includes both hints and physical cards.
121- **JACK**: No longer builds on iOS.
122- **WASM**: WasmBindgen no longer crashes (regression from 0.17.0).
123
124## [0.17.0] - 2025-12-20
125
126### Added
127
128- `DeviceTrait::id` method that returns a stable audio device ID.
129- `HostTrait::device_by_id` to select a device by its stable ID.
130- `Display` and `FromStr` implementations for `HostId`.
131- Support for custom `Host`s, `Device`s, and `Stream`s.
132- `Sample::bits_per_sample` method.
133- `Copy` implementation to `InputCallbackInfo` and `OutputCallbackInfo`.
134- `StreamError::StreamInvalidated` variant for when stream must be rebuilt.
135- `StreamError::BufferUnderrun` variant for buffer underrun/overrun notifications.
136- `Hash` implementation to `Device` for all backends.
137- **AAudio**: `Send` and `Sync` implementations to `Stream`.
138- **AAudio**: Support for 12 and 24 kHz sample rates.
139- **ALSA**: `I24` and `U24` sample format support (24-bit samples stored in 4 bytes).
140- **ALSA**: Support for 12, 24, 352.8, 384, 705.6, and 768 kHz sample rates.
141- **ALSA**: `Eq` and `PartialEq` implementations to `Device`.
142- **CI**: Native ARM64 Linux support in GitHub Actions.
143- **CoreAudio**: `i8`, `i32` and `I24` sample format support (24-bit samples stored in 4 bytes).
144- **CoreAudio**: Support for loopback recording (recording system audio output) on macOS > 14.6.
145- **CoreAudio**: `Send` implementation to `Stream`.
146- **Emscripten**: `BufferSize::Fixed` validation against supported range.
147- **iOS**: Complete AVAudioSession integration for device enumeration and buffer size control.
148- **JACK**: Support for macOS and Windows platforms.
149- **JACK**: `BufferSize::Fixed` validation to reject requests that don't match server buffer size.
150- **WASAPI**: Expose `IMMDevice` from WASAPI host Device.
151- **WASAPI**: `I24` and `U24` sample format support (24-bit samples stored in 4 bytes).
152- **WASAPI**: `Send` and `Sync` implementations to `Stream`.
153- **WebAudio**: `Send` and `Sync` implementations to `Stream`.
154- **WebAudio**: `BufferSize::Fixed` validation against supported range.
155
156### Changed
157
158- MSRV depends on the platform and at minimum 1.77.
159- Set examples to Rust 2021.
160- `SampleRate` from struct to `u32` type alias.
161- Update `audio_thread_priority` to 0.34.
162- Migrate CHANGELOG to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
163- **AAudio**: Configure buffer to ensure consistent callback buffer sizes.
164- **AAudio**: Buffer size range detection to query the AudioService property correctly.
165- **ALSA**: Improve `BufferSize::Fixed` precision and audio callback performance.
166- **ALSA**: `BufferSize::Default` to use the device defaults.
167- **ALSA**: Card enumeration to work like `aplay -L` does.
168- **ALSA**: Update `alsa` to 0.10.
169- **ALSA**: Pass `silent=true` to `PCM.try_recover`, so it doesn't write to stderr.
170- **ALSA**: Report buffer underruns/overruns via `StreamError::BufferUnderrun`.
171- **ASIO**: Share `sys::Asio` instance across all `Host` instances.
172- **CI**: Fix cargo publish to trigger on GitHub releases instead of every master commit.
173- **CI**: Replace cargo install commands with cached tool installation for faster builds.
174- **CI**: Update actions to latest versions (checkout@v5, rust-cache@v2).
175- **CI**: Verify compatibility with windows crates since v0.59.
176- **CI**: Test platforms on appropriate MSRV per backend.
177- **CI**: Fix `cargo update` syntax for compatibility with Cargo 1.70 (use `-p` flag instead of positional argument).
178- **CoreAudio**: `Device::supported_configs` to return a single element containing the available sample rate range when all elements have the same `mMinimum` and `mMaximum` values.
179- **CoreAudio**: Default audio device detection to be lazy when building a stream, instead of during device enumeration.
180- **CoreAudio**: Configure device buffer to ensure predictable callback buffer sizes.
181- **CoreAudio**: Remove `Clone` implementation from `Stream`.
182- **JACK**: Use `StreamError::StreamInvalidated` for JACK server sample rate changes.
183- **JACK**: Report buffer underruns/overruns via `StreamError::BufferUnderrun`.
184- **WASAPI**: Update `windows` to >= 0.59, <= 0.62.
185
186### Fixed
187
188- **ALSA**: Format selection to probe hardware endianness instead of assuming native byte order.
189- **ALSA**: Data race in stream shutdown.
190- **ASIO**: Handling for `kAsioResetRequest` message to prevent driver UI becoming unresponsive.
191- **ASIO**: Buffer silencing logic to work with non-conformant drivers (e.g., FL Studio ASIO).
192- **CoreAudio**: Timestamp accuracy.
193- **CoreAudio**: Segfaults when enumerating devices.
194- **CoreAudio**: Undefined behavior related to null pointers and aligned reads.
195- **CoreAudio**: Unnecessary microphone permission requests when using output devices only.
196- **iOS**: Example by properly activating audio session.
197
198### Removed
199
200- **WebAudio**: Optional `wee-alloc` feature for security reasons.
201
202## [0.16.0] - 2025-06-07
203
204### Added
205
206- Optional `supports_input`/`output` methods to `DeviceTrait`.
207- 384000Hz to `COMMON_SAMPLE_RATES`.
208- Constructors for `InputCallbackInfo`, `OutputCallbackInfo` and `StreamInstant`.
209- `Default` impl for `Host`.
210- `PartialOrd`, `Ord` and `Hash` implementations for `SampleFormat`.
211- `Clone`, `PartialEq`, `Eq` and `Hash` implementations for all error enums.
212- **ASIO**: Support for int24.
213
214### Changed
215
216- **AAudio**: Migrate from `oboe` to `ndk::audio`. **NOTE:** This raises the minimum Android API version to 26 (Android 8/Oreo).
217- **AAudio**: Improve device names.
218- **ALSA**: Set realtime priority for stream threads.
219- **ALSA**: Improved card enumeration.
220- **CoreAudio**: Update `coreaudio-rs` dependency to 0.13.
221- **JACK**: Update `jack` dependency to 0.13.
222- **WASAPI**: Set realtime priority for stream threads.
223
224### Fixed
225
226- **ALSA**: Don't panic when handling invalid stream timestamps.
227- **ALSA**: Fix infinite loop on broken pipes.
228- **ASIO**: Fix build failure on Windows.
229- **CoreAudio**: Fix callback being called after dropping the stream.
230- **CoreAudio**: Fix non-default audio output.
231- **CoreAudio**: Fix handling of integer input formats.
232- **WASAPI**: Fixed memory leak.
233- **WASAPI**: Remove usage of `eval`.
234
235## [0.15.3] - 2024-03-04
236
237### Added
238
239- `try_with_sample_rate`, a non-panicking variant of `with_sample_rate`.
240- `#[must_use]` attribute to struct `platform::Stream`.
241- `Copy` implementation to enum `SupportedBufferSize` and struct `SupportedStreamConfigRange`.
242- `Clone` implementation to `platform::Device`.
243
244### Changed
245
246- **AAudio**: Update `jni` dependency to 0.21.
247- **AAudio**: Update `oboe` dependency to 0.6.
248- **AAudio**: Update `ndk` dependency to 0.8 and disable `default-features`.
249- **ALSA**: Update `alsa` dependency to 0.9.
250- **CI**: Update actions, use Android 30 API level in CI, remove `asmjs-unknown-emscripten` target.
251- **Examples**: Migrate wasm example to `trunk`, improve syth-thones example.
252- **WASAPI**: Update `windows` dependency to v0.54.
253- **WebAudio**: Update `wasm-bindgen` to 0.2.89.
254
255### Fixed
256
257- **WebAudio**: Crash on web/wasm when `atomics` flag is enabled.
258
259### Removed
260
261- `parking_lot` dependency in favor of the std library.
262
263## [0.15.2] - 2023-03-30
264
265### Added
266
267- **WebAudio**: Support for multichannel output streams.
268
269### Changed
270
271- **WASAPI**: Update `windows` dependency.
272
273### Fixed
274
275- **WASAPI**: Fix some thread panics.
276
277## [0.15.1] - 2023-03-14
278
279### Added
280
281- **AAudio**: Feature `oboe-shared-stdcxx` to enable `shared-stdcxx` on `oboe` for Android support.
282
283### Changed
284
285- **CoreAudio**: Switch `mach` dependency to `mach2`.
286
287### Removed
288
289- `thiserror` dependency.
290
291## [0.15.0] - 2023-01-29
292
293### Added
294
295- **CoreAudio**: Disconnection detection on Mac OS.
296
297### Changed
298
299- Switch to the `dasp_sample` crate for the sample trait.
300- Adopt edition 2021.
301- **AAudio**: Update `oboe` dependency.
302- **AAudio**: Update `alsa` dependency.
303- **CoreAudio**: Update `coreaudio-sys` dependency.
304- **Emscripten**: Switch to `web-sys` on the emscripten target.
305- **JACK**: Update `jack` dependency.
306- **WASAPI**: Update `windows-rs` dependency.
307
308## [0.14.2] - 2022-12-02
309
310### Removed
311
312- `nix` dependency.
313
314## [0.14.1] - 2022-10-23
315
316### Added
317
318- **ALSA**: Support for the 0.6.1 release of `alsa-rs`.
319- **NetBSD**: Platform support.
320
321### Changed
322
323- **CI**: Various improvements.
324
325### Fixed
326
327- **ASIO**: Feature broken in 0.14.0.
328
329## [0.14.0] - 2022-08-22
330
331### Changed
332
333- Update `parking_lot` and `once_cell` dependencies.
334- **AAudio**: Turn `ndk-glue` into a dev-dependency and use `ndk-context` instead.
335- **AAudio**: Update `ndk` and `ndk-glue` dependencies.
336- **JACK**: Update `jack` dependency.
337- **WASAPI**: Switch to `windows-rs` crate.
338
339## [0.13.5] - 2022-01-28
340
341### Changed
342
343- Faster sample format conversion.
344- **AAudio**: Update `ndk`, `oboe`, and `ndk-glue` dependencies.
345- **ALSA**: Update `alsa` and `nix` dependencies.
346- **JACK**: Update `jack` dependency.
347
348## [0.13.4] - 2021-08-08
349
350### Changed
351
352- **AAudio**: Update `jni` dependency.
353- **ALSA**: Improve stream setup parameters.
354- **CoreAudio**: Update `core-foundation-sys` dependency.
355- **JACK**: Update `rust-jack` dependency.
356- **WASAPI**: Allow both threading models and switch the default to STA.
357
358## [0.13.3] - 2021-03-29
359
360### Added
361
362- Give each thread a unique name.
363
364### Fixed
365
366- **ALSA**: Fix distortion regression on some configs.
367
368## [0.13.2] - 2021-03-16
369
370### Changed
371
372- **AAudio**: Update `ndk`, `nix`, `oboe`, and `jni` dependencies.
373
374## [0.13.1] - 2020-11-08
375
376### Changed
377
378- Update `parking_lot` dependency.
379
380### Fixed
381
382- **WASAPI**: Don't panic when device is plugged out on Windows.
383
384## [0.13.0] - 2020-10-28
385
386### Added
387
388- **AAudio**: Android support via `oboe-rs`.
389- **CI**: Android APK build and CI job.
390
391## [0.12.1] - 2020-07-23
392
393### Fixed
394
395- **ASIO**: Bugfix release to get the asio feature working again.
396
397## [0.12.0] - 2020-07-09
398
399### Added
400
401- `build_input/output_stream_raw` methods allowing for dynamically handling sample format type.
402- `InputCallbackInfo` and `OutputCallbackInfo` types and update expected user data callback function signature to provide these.
403- **DragonFly BSD**: Platform support.
404
405### Changed
406
407- Large refactor removing the blocking EventLoop API.
408- Rename many `Format` types to `StreamConfig`:
409 - `Format` type's `data_type` field renamed to `sample_format`.
410 - `Shape` -> `StreamConfig` - The configuration input required to build a stream.
411 - `Format` -> `SupportedStreamConfig` - Describes a single supported stream configuration.
412 - `SupportedFormat` -> `SupportedStreamConfigRange` - Describes a range of supported configurations.
413 - `Device::default_input/output_format` -> `Device::default_input/output_config`.
414 - `Device::supported_input/output_formats` -> `Device::supported_input/output_configs`.
415 - `Device::SupportedInput/OutputFormats` -> `Device::SupportedInput/OutputConfigs`.
416 - `SupportedFormatsError` -> `SupportedStreamConfigsError`.
417 - `DefaultFormatError` -> `DefaultStreamConfigError`.
418 - `BuildStreamError::FormatNotSupported` -> `BuildStreamError::StreamConfigNotSupported`.
419- **WASAPI**: Address deprecated use of `mem::uninitialized`.
420
421### Removed
422
423- `UnknownTypeBuffer` in favour of specifying sample type.
424
425## [0.11.0] - 2019-12-11
426
427### Added
428
429- Name to `HostId`.
430- **WASAPI**: `winbase` winapi feature to solve windows compile error issues.
431
432### Changed
433
434- Remove many uses of `std::mem::uninitialized`.
435- Panic on stream ID overflow rather than returning an error.
436- Move errors into a separate module.
437- Switch from `failure` to `thiserror` for error handling.
438- **ALSA**: Use `snd_pcm_hw_params_set_buffer_time_near` rather than `set_buffer_time_max`.
439- **CI**: Lots of improvements.
440- **Examples**: Use `ringbuffer` crate in feedback example.
441
442### Fixed
443
444- **ALSA**: Fix some underruns that could occur.
445- **WASAPI**: Fix capture logic.
446
447## [0.10.0] - 2019-07-05
448
449### Added
450
451- New Host API, adding support for alternative audio APIs.
452- `StreamEvent` type to allow users to handle stream callback errors.
453- **ASIO**: ASIO host, available under Windows.
454
455### Changed
456
457- Remove sleep loop on macOS in favour of using a `Condvar`.
458- Overhaul error handling throughout the crate.
459- Remove `panic!` from OutputBuffer Deref impl as it is no longer necessary.
460- **ALSA**: Remove unnecessary Mutex in favour of channels.
461- **CoreAudio**: Update `core-foundation-sys` and `coreaudio-rs` dependencies.
462- **WASAPI**: Remove unnecessary Mutex in favour of channels.
463
464## [0.9.0] - 2019-06-06
465
466### Added
467
468- **ALSA**: Error handling for unknown device errors.
469- **Emscripten**: `default_output_format` implementation.
470
471### Changed
472
473- Better buffer handling.
474
475### Fixed
476
477- Logic error in frame/sample size.
478- **WASAPI**: Fix resuming a paused stream.
479
480## [0.8.2] - 2018-07-03
481
482### Added
483
484- `Display` and `Error` implementations for `DefaultFormatError`.
485
486### Changed
487
488- Upgrade `lazy_static` dependency.
489
490## [0.8.1] - 2018-04-01
491
492### Fixed
493
494- **CoreAudio**: Handling of non-default sample rates for input streams.
495
496## [0.8.0] - 2018-02-15
497
498### Added
499
500- `Device::supported_{input/output}_formats` methods.
501- `Device::default_{input/output}_format` methods.
502- `default_{input/output}_device` functions.
503- `StreamData` type for handling either input or output streams in `EventLoop::run` callback.
504- **ALSA**: Input stream support.
505- **CoreAudio**: Input stream support.
506- **Examples**: `record_wav.rs` example that records 3 seconds to `$CARGO_MANIFEST_DIR/recorded.wav` using default input device.
507- **WASAPI**: Input stream support.
508
509### Changed
510
511- Replace usage of `Voice` with `Stream` throughout the crate.
512- **Examples**: Update `enumerate.rs` example to display default input/output devices and formats.
513
514### Removed
515
516- `Endpoint` in favour of `Device` for supporting both input and output streams.
517
518## [0.7.0] - 2018-02-04
519
520### Added
521
522- **CoreAudio**: `Endpoint` and `Format` enumeration for macOS.
523- **CoreAudio**: Format handling for `build_voice` method.
524
525### Changed
526
527- Rename `ChannelsCount` to `ChannelCount`.
528- Rename `SamplesRate` to `SampleRate`.
529- Rename the `min_samples_rate` field of `SupportedFormat` to `min_sample_rate`.
530- Rename the `with_max_samples_rate()` method of `SupportedFormat` to `with_max_sample_rate()`.
531- Rename the `samples_rate` field of `Format` to `sample_rate`.
532- Changed the type of the `channels` field of the `SupportedFormat` struct from `Vec<ChannelPosition>` to `ChannelCount` (an alias to `u16`).
533
534### Removed
535
536- Unused ChannelPosition API.
537
538## [0.6.0] - 2017-12-11
539
540### Added
541
542- Improvements to the crate documentation.
543- **ALSA**: `pause` and `play` support.
544
545### Changed
546
547- **CoreAudio**: Reduced the number of allocations.
548- **Emscripten**: Backend to consume less CPU.
549
550### Fixed
551
552- **CoreAudio**: Fixes for macOS build (#186, #189).
553
554## [0.5.1] - 2017-10-21
555
556### Added
557
558- `Sample::to_i16()`, `Sample::to_u16()` and `Sample::from` methods.
559
560## [0.5.0] - 2017-10-21
561
562### Added
563
564- `EventLoop::build_voice`, `EventLoop::destroy_voice`, `EventLoop::play`, and `EventLoop::pause` methods.
565- `VoiceId` struct that is now used to identify a voice owned by an `EventLoop`.
566
567### Changed
568
569- `EventLoop::run()` to take a callback that is called whenever a voice requires sound data.
570- `supported_formats()` to produce a list of `SupportedFormat` instead of `Format`. A `SupportedFormat` must then be turned into a `Format` in order to build a voice.
571
572### Removed
573
574- Dependency on the `futures` library.
575- `Voice` and `SamplesStream` types.
576
577## [0.4.6] - 2017-10-11
578
579### Added
580
581- **iOS**: Minimal support.
582
583### Changed
584
585- Run rustfmt on the code.
586
587### Fixed
588
589- **BSD**: Fixes for *BSDs.
590
591### Removed
592
593- `get_` prefix of methods.
594
595## [0.4.5] - 2017-04-29
596
597### Changed
598
599- Simplify the Cargo.toml.
600- **ALSA**: Bump alsa-sys version number.
601- **ALSA**: Mark alsa-sys as linking to alsa.
602
603### Fixed
604
605- **CoreAudio**: SampleStream also holds on to the AudioUnit so it is not dropped.
606- **CoreAudio**: Fix for loop in EventLoop::run being optimised out in a release build on macOS.
607
608### Removed
609
610- Stop publishing on gh-pages.
611
612## [0.4.4] - 2017-02-04
613
614### Fixed
615
616- **ALSA**: Pass period instead of buffer to snd_pcm_sw_params_set_avail_min.
617
618## [0.4.3] - 2017-02-01
619
620### Fixed
621
622- **ALSA**: Set sw_params_set_avail_min based on get_params buffer size.
623
624## [0.4.2] - 2017-01-19
625
626### Added
627
628- **CoreAudio**: coreaudio-rs dependency for i686-apple-darwin.
629
630### Deprecated
631
632- Mark deprecated functions as deprecated.
633
634## [0.4.1] - 2016-11-16
635
636### Added
637
638- **ALSA**: Implement play and pause.
639- **CoreAudio**: Implement play/pause.
640
641### Fixed
642
643- **WASAPI**: Fix compilation on windows.
644
645## [0.4.0] - 2016-10-01
646
647### Changed
648
649- **ALSA**: Update to futures 0.1.1.
650- **WASAPI**: Update to futures 0.1.1.
651
652### Fixed
653
654- **CoreAudio**: Do not lock inner twice. Fixes bug in osx futures 0.1.1 update.
655- **CoreAudio**: Try fix the OSX code with futures.
656
657## [0.3.1] - 2016-08-20
658
659### Added
660
661- **WASAPI**: Some documentation to the winapi implementation.
662
663### Changed
664
665- **ALSA**: Bump alsa-sys to 0.1.
666
667### Fixed
668
669- Fix #126.
670- Fix most warnings.
671
672## [0.3.0] - 2016-08-12
673
674### Added
675
676- **CoreAudio**: Update backend to new futures-rs oriented design.
677
678### Changed
679
680- Update documentation.
681- Use a max buffer size in order to avoid problems.
682- Update deps.
683- **ALSA**: Make it work on Linux.
684- **Null**: Update the null implementation.
685
686## [0.2.12] - 2016-07-10
687
688### Added
689
690- **CoreAudio**: Add get_period to Voice.
691
692### Changed
693
694- **CoreAudio**: Update to coreaudio-rs 0.5.0.
695
696### Fixed
697
698- **CoreAudio**: Correct implementation of get_pending_samples.
699- **CoreAudio**: Return correct Voice period.
700
701## [0.2.11] - 2016-04-25
702
703### Fixed
704
705- Be more relaxed with c_void.
706
707## [0.2.10] - 2016-04-22
708
709### Added
710
711- **ALSA**: Add pollfd.
712
713### Fixed
714
715- **ALSA**: Fix underflow detection.
716- **Android**: Fix the android build.
717- **Android**: Add ARM target.
718
719## [0.2.9] - 2016-01-28
720
721### Added
722
723- **CoreAudio**: Add support for U16/I16 PCM formats.
724- **CoreAudio**: Implement some missing functions.
725
726### Changed
727
728- Handle channels positionning.
729- Update Cargo.toml after the previous changes.
730- Allow for building for mipsel targets.
731- **ALSA**: Use correct ALSA channels.
732- **CoreAudio**: Implementation cleanup.
733- **CoreAudio**: Make Voice Send/Sync.
734- **CoreAudio**: Set sample rate to 44100.
735- **Examples**: Update the beep example.
736
737### Fixed
738
739- **ALSA**: Fix underflow bug on linux.
740- **CI**: Fix for travis build.
741- **CoreAudio**: Fix compilation on OSX with the new API for coreaudio-rs.
742- **CoreAudio**: Return correct length of buffer, stub unimpl funcs.
743- **CoreAudio**: Restore CoreAudio support after API overhaul.
744- **Examples**: Add some sane error messages.
745- **Examples**: Improve error reporting in beep example.
746
747### Removed
748
749- Do not use a wildcard version number.
750- **CoreAudio**: Revert "Add support for U16/I16 PCM formats" (was causing issues).
751
752## [0.2.8] - 2015-11-10
753
754### Changed
755
756- Libc 0.2.
757- **WASAPI**: Update winapi.
758
759### Fixed
760
761- **WASAPI**: Catch another 'device not found' error code.
762
763## [0.2.7] - 2015-09-27
764
765### Added
766
767- `Voice::get_period()` method.
768
769## [0.2.6] - 2015-09-22
770
771### Fixed
772
773- **ALSA**: Make sure that all writes succeed.
774- **ALSA**: Make the implementation more robust by recovering from underruns.
775
776## [0.2.5] - 2015-09-22
777
778### Added
779
780- `Voice::get_pending_samples` method.
781
782## [0.2.4] - 2015-09-22
783
784### Added
785
786- `endpoint::get_name()` method.
787- **Examples**: An enumerate example.
788- **WASAPI**: Device name support.
789
790### Changed
791
792- **ALSA**: Correctly enumerate supported formats.
793
794### Fixed
795
796- **ALSA**: Various fixes.
797- **ALSA**: Use the correct format.
798- **ALSA**: Use the correct device name when enumerating formats.
799- **WASAPI**: Fix bug and filter out devices that are not "Output".
800
801## [0.2.3] - 2015-09-22
802
803### Added
804
805- `#[inline]` attributes.
806- `underflow()` method to Voice.
807
808### Changed
809
810- Store the format in the public `Voice` struct.
811- **WASAPI**: General cleanup.
812- **WASAPI**: Update winapi dependency.
813
814### Fixed
815
816- **WASAPI**: Fix the hack in the implementation.
817
818### Removed
819
820- Unused extern crate libc.
821
822## [0.2.2] - 2015-09-11
823
824### Added
825
826- `UnknownBufferType::len()` method.
827
828### Fixed
829
830- **Null**: Restore the null implementation and compile it every time.
831
832## [0.2.1] - 2015-09-10
833
834### Changed
835
836- Handle channels positionning.
837- Update Cargo.toml after the previous changes.
838- **Examples**: Update the beep example.
839
840### Fixed
841
842- **ALSA**: Fix compilation.
843
844## [0.2.0] - 2015-09-01
845
846### Added
847
848- Proper error handling.
849- Supported formats enumeration.
850- `endpoint::get_name()` method.
851
852### Changed
853
854- **ALSA**: Make it compile again.
855- **WASAPI**: Enable 32bits samples.
856- **WASAPI**: Better error handling in format detection.
857- **WASAPI**: Now decoding the format from the WAVEFORMAT returned by the winapi.
858- **WASAPI**: Handle F32 formats in Voice::new.
859- **WASAPI**: Use the format passed as parameter in Voice::new.
860- **WASAPI**: Correctly enumerate audio devices (core + wasapi).
861
862### Fixed
863
864- Fix doctests.
865- Add more detailed message to panic.
866
867### Removed
868
869- Conversion system.
870- Use of box syntax.
871
872## [0.1.2] - 2015-07-22
873
874### Fixed
875
876- **ALSA**: Correct reported sample format.
877- **WASAPI**: Fix samples signs on win32.
878
879## [0.1.1] - 2015-07-20
880
881### Fixed
882
883- Fix the version in the README.
884- **WASAPI**: Fix the win32 build.
885
886## [0.1.0] - 2015-07-11
887
888### Added
889
890- Bump to 0.1.0.
891
892## [0.0.23] - 2015-07-04
893
894### Fixed
895
896- **WASAPI**: Fix platform-specific dependencies with MSVC.
897
898## [0.0.22] - 2015-06-24
899
900### Fixed
901
902- **ALSA**: Calls to a single ALSA channel are not thread safe.
903
904## [0.0.21] - 2015-06-05
905
906### Changed
907
908- **Examples**: Simplify beep example.
909- **WASAPI**: Use shiny new COM.
910
911## [0.0.20] - 2015-04-20
912
913### Changed
914
915- Rustup and version bumps.
916- **ALSA**: Remove integer suffixes in alsa-sys.
917
918## [0.0.19] - 2015-04-04
919
920### Changed
921
922- Update for Rustc 1.0.0 beta.
923
924## [0.0.18] - 2015-03-30
925
926### Changed
927
928- Update for change in rustc and winapi.
929
930## [0.0.17] - 2015-03-26
931
932### Changed
933
934- Rustup.
935- **ALSA**: Publish alsa-sys before cpal.
936
937## [0.0.16] - 2015-03-25
938
939### Added
940
941- **CoreAudio**: OSX support via the Apple Core Audio, Audio Unit C API. Only supports f32 so far.
942- **CoreAudio**: Coreaudio bindings.
943
944### Changed
945
946- Rustup.
947
948### Fixed
949
950- **CI**: Fix travis build.
951- **CoreAudio**: Fixed callback to send proper buffersize, removed code in lib where sampleformat affected buffersize.
952- **CoreAudio**: Properly shutdown the AudioUnit on drop.
953
954### Removed
955
956- **CoreAudio**: Removed core_audio-sys local bindings in favour of new coreaudio-rs crate.
957
958## [0.0.15] - 2015-02-22
959
960### Changed
961
962- Bump version.
963- Update for rustc.
964
965## [0.0.14] - 2015-02-19
966
967### Changed
968
969- Update for rustc.
970- **ALSA**: Bump alsa-sys version.
971- **ALSA**: Clean up alsa-sys.
972- **CI**: Automatically publish on crates.io on successful builds.
973- **CI**: Publish alsa-sys too.
974
975## [0.0.13] - 2015-02-12
976
977### Changed
978
979- Update with libc version.
980
981## [0.0.12] - 2015-01-29
982
983### Changed
984
985- Bump version number.
986
987## [0.0.11] - 2015-01-29
988
989### Changed
990
991- Update for rustc.
992
993## [0.0.10] - 2015-01-20
994
995### Added
996
997- **Null**: "null" implementation for platforms that aren't supported.
998
999### Changed
1000
1001- Changed integer suffix from 'u' to 'us'.
1002- Bump version number (multiple times).
1003- Update for rust-1.0 alpha.
1004- **WASAPI**: Update for winapi.
1005
1006## [0.0.8] - 2015-01-08
1007
1008### Changed
1009
1010- Bump version number.
1011- Update for Rustc.
1012
1013## [0.0.7] - 2015-01-05
1014
1015### Changed
1016
1017- Update for rustc.
1018
1019## [0.0.6] - 2014-12-30
1020
1021### Added
1022
1023- `#[must_use]` marker for Buffer.
1024
1025### Changed
1026
1027- Bump version number.
1028- Update for changes in rustc.
1029
1030## [0.0.5] - 2014-12-23
1031
1032### Added
1033
1034- `play()` and `pause()` functions.
1035- Implement f32 to i16 and f32 to u16 conversions.
1036- Tests for convert_samples_rate.
1037- Tests for convert_channels.
1038
1039### Changed
1040
1041- Cleanup convert_samples_rate.
1042- Cleanup convert_channels.
1043
1044### Fixed
1045
1046- **CI**: Fix the appveyor build.
1047
1048## [0.0.4] - 2014-12-20
1049
1050### Changed
1051
1052- Update for rustc.
1053
1054## [0.0.3] - 2014-12-17
1055
1056### Added
1057
1058- Link to documentation.
1059- Some documentation.
1060- Fixes and tests for samples conversions.
1061- All samples formats.
1062- Samples formats conversions.
1063- **CI**: Automatic gh-pages deployment in travis.
1064
1065### Changed
1066
1067- Bump version number.
1068- Improve documentation.
1069- Use Cow for formats conversions to avoid an allocation and copy.
1070
1071### Fixed
1072
1073- Minor README update.
1074- **CI**: Remove old section from travis.yml.
1075- **CI**: Fix travis.yml.
1076
1077### Removed
1078
1079- Rename `Channel` to `Voice`.
1080
1081## [0.0.2] - 2014-12-17
1082
1083### Added
1084
1085- Basic API.
1086- Some documentation.
1087- Keywords.
1088- Some formats-related functions.
1089- Some basic data conversion.
1090- Some samples rate conversions.
1091- Variable input format system.
1092- Samples iterator.
1093- **ALSA**: Basic implementation.
1094- **ALSA**: alsa-sys library.
1095- **CI**: Appveyor file.
1096- **CI**: Config for rust-ci in travis.
1097- **Examples**: Draft for example music playing.
1098- **Examples**: Semi-working WASAPI example.
1099- **WASAPI**: Destructor for wasapi::Channel.
1100
1101### Changed
1102
1103- Bump version number.
1104- Buffer now always has the u8 format.
1105- Modify API to use a "samples" iterator.
1106- Change player architecture to avoid data losses.
1107- Minor nitpicking.
1108- Update for rustc.
1109- **ALSA**: Use the official winapi crate.
1110- **ALSA**: More tweaks for alsa-sys.
1111- **ALSA**: Minor tweaks in Cargo.toml files.
1112- **Examples**: Replace example by a smaller one.
1113- **Examples**: Replace example by a sinusoid generator.
1114- **Examples**: Rename example to "beep".
1115
1116### Fixed
1117
1118- Fix warnings.
1119- Fix PCM formats conversions not working.
1120- Fix issue when calling `buffer.samples()` multiple times with the same buffer.
1121- Sound output now works correctly.
1122- Minor fixes.
1123- **WASAPI**: Revert "Switch to retep998/winapi".
1124
1125### Removed
1126
1127- Switch back to using buffers.
1128- Remove old code.
1129
1130## [0.0.1] - 2014-12-11
1131
1132### Added
1133
1134- Initial commit.
1135
1136[Unreleased]: https://github.com/RustAudio/cpal/compare/v0.17.3...HEAD
1137[0.17.3]: https://github.com/RustAudio/cpal/compare/v0.17.2...v0.17.3
1138[0.17.2]: https://github.com/RustAudio/cpal/compare/v0.17.1...v0.17.2
1139[0.17.1]: https://github.com/RustAudio/cpal/compare/v0.17.0...v0.17.1
1140[0.17.0]: https://github.com/RustAudio/cpal/compare/v0.16.0...v0.17.0
1141[0.16.0]: https://github.com/RustAudio/cpal/compare/v0.15.3...v0.16.0
1142[0.15.3]: https://github.com/RustAudio/cpal/compare/v0.15.2...v0.15.3
1143[0.15.2]: https://github.com/RustAudio/cpal/compare/v0.15.1...v0.15.2
1144[0.15.1]: https://github.com/RustAudio/cpal/compare/v0.15.0...v0.15.1
1145[0.15.0]: https://github.com/RustAudio/cpal/compare/v0.14.2...v0.15.0
1146[0.14.2]: https://github.com/RustAudio/cpal/compare/v0.14.1...v0.14.2
1147[0.14.1]: https://github.com/RustAudio/cpal/compare/v0.14.0...v0.14.1
1148[0.14.0]: https://github.com/RustAudio/cpal/compare/v0.13.5...v0.14.0
1149[0.13.5]: https://github.com/RustAudio/cpal/compare/v0.13.4...v0.13.5
1150[0.13.4]: https://github.com/RustAudio/cpal/compare/v0.13.3...v0.13.4
1151[0.13.3]: https://github.com/RustAudio/cpal/compare/v0.13.2...v0.13.3
1152[0.13.2]: https://github.com/RustAudio/cpal/compare/v0.13.1...v0.13.2
1153[0.13.1]: https://github.com/RustAudio/cpal/compare/v0.13.0...v0.13.1
1154[0.13.0]: https://github.com/RustAudio/cpal/compare/v0.12.1...v0.13.0
1155[0.12.1]: https://github.com/RustAudio/cpal/compare/v0.12.0...v0.12.1
1156[0.12.0]: https://github.com/RustAudio/cpal/compare/v0.11.0...v0.12.0
1157[0.11.0]: https://github.com/RustAudio/cpal/compare/v0.10.0...v0.11.0
1158[0.10.0]: https://github.com/RustAudio/cpal/compare/v0.9.0...v0.10.0
1159[0.9.0]: https://github.com/RustAudio/cpal/compare/v0.8.2...v0.9.0
1160[0.8.2]: https://github.com/RustAudio/cpal/compare/v0.8.1...v0.8.2
1161[0.8.1]: https://github.com/RustAudio/cpal/compare/v0.8.0...v0.8.1
1162[0.8.0]: https://github.com/RustAudio/cpal/compare/v0.7.0...v0.8.0
1163[0.7.0]: https://github.com/RustAudio/cpal/compare/v0.6.0...v0.7.0
1164[0.6.0]: https://github.com/RustAudio/cpal/compare/v0.5.1...v0.6.0
1165[0.5.1]: https://github.com/RustAudio/cpal/compare/v0.5.0...v0.5.1
1166[0.5.0]: https://github.com/RustAudio/cpal/compare/v0.4.6...v0.5.0
1167[0.4.6]: https://github.com/RustAudio/cpal/compare/v0.4.5...v0.4.6
1168[0.4.5]: https://github.com/RustAudio/cpal/compare/v0.4.4...v0.4.5
1169[0.4.4]: https://github.com/RustAudio/cpal/compare/v0.4.3...v0.4.4
1170[0.4.3]: https://github.com/RustAudio/cpal/compare/v0.4.2...v0.4.3
1171[0.4.2]: https://github.com/RustAudio/cpal/compare/v0.4.1...v0.4.2
1172[0.4.1]: https://github.com/RustAudio/cpal/compare/v0.4.0...v0.4.1
1173[0.4.0]: https://github.com/RustAudio/cpal/compare/v0.3.1...v0.4.0
1174[0.3.1]: https://github.com/RustAudio/cpal/compare/v0.3.0...v0.3.1
1175[0.3.0]: https://github.com/RustAudio/cpal/compare/v0.2.12...v0.3.0
1176[0.2.12]: https://github.com/RustAudio/cpal/compare/v0.2.11...v0.2.12
1177[0.2.11]: https://github.com/RustAudio/cpal/compare/v0.2.10...v0.2.11
1178[0.2.10]: https://github.com/RustAudio/cpal/compare/v0.2.9...v0.2.10
1179[0.2.9]: https://github.com/RustAudio/cpal/compare/v0.2.8...v0.2.9
1180[0.2.8]: https://github.com/RustAudio/cpal/compare/v0.2.7...v0.2.8
1181[0.2.7]: https://github.com/RustAudio/cpal/compare/v0.2.6...v0.2.7
1182[0.2.6]: https://github.com/RustAudio/cpal/compare/v0.2.5...v0.2.6
1183[0.2.5]: https://github.com/RustAudio/cpal/compare/v0.2.4...v0.2.5
1184[0.2.4]: https://github.com/RustAudio/cpal/compare/v0.2.3...v0.2.4
1185[0.2.3]: https://github.com/RustAudio/cpal/compare/v0.2.2...v0.2.3
1186[0.2.2]: https://github.com/RustAudio/cpal/compare/v0.2.1...v0.2.2
1187[0.2.1]: https://github.com/RustAudio/cpal/compare/v0.2.0...v0.2.1
1188[0.2.0]: https://github.com/RustAudio/cpal/compare/v0.1.2...v0.2.0
1189[0.1.2]: https://github.com/RustAudio/cpal/compare/v0.1.1...v0.1.2
1190[0.1.1]: https://github.com/RustAudio/cpal/compare/v0.1.0...v0.1.1
1191[0.1.0]: https://github.com/RustAudio/cpal/compare/v0.0.23...v0.1.0
1192[0.0.23]: https://github.com/RustAudio/cpal/compare/v0.0.22...v0.0.23
1193[0.0.22]: https://github.com/RustAudio/cpal/compare/v0.0.21...v0.0.22
1194[0.0.21]: https://github.com/RustAudio/cpal/compare/v0.0.20...v0.0.21
1195[0.0.20]: https://github.com/RustAudio/cpal/compare/v0.0.19...v0.0.20
1196[0.0.19]: https://github.com/RustAudio/cpal/compare/v0.0.18...v0.0.19
1197[0.0.18]: https://github.com/RustAudio/cpal/compare/v0.0.17...v0.0.18
1198[0.0.17]: https://github.com/RustAudio/cpal/compare/v0.0.16...v0.0.17
1199[0.0.16]: https://github.com/RustAudio/cpal/compare/v0.0.15...v0.0.16
1200[0.0.15]: https://github.com/RustAudio/cpal/compare/v0.0.14...v0.0.15
1201[0.0.14]: https://github.com/RustAudio/cpal/compare/v0.0.13...v0.0.14
1202[0.0.13]: https://github.com/RustAudio/cpal/compare/v0.0.12...v0.0.13
1203[0.0.12]: https://github.com/RustAudio/cpal/compare/v0.0.11...v0.0.12
1204[0.0.11]: https://github.com/RustAudio/cpal/compare/v0.0.10...v0.0.11
1205[0.0.10]: https://github.com/RustAudio/cpal/compare/v0.0.8...v0.0.10
1206[0.0.8]: https://github.com/RustAudio/cpal/compare/v0.0.7...v0.0.8
1207[0.0.7]: https://github.com/RustAudio/cpal/compare/v0.0.6...v0.0.7
1208[0.0.6]: https://github.com/RustAudio/cpal/compare/v0.0.5...v0.0.6
1209[0.0.5]: https://github.com/RustAudio/cpal/compare/v0.0.4...v0.0.5
1210[0.0.4]: https://github.com/RustAudio/cpal/compare/v0.0.3...v0.0.4
1211[0.0.3]: https://github.com/RustAudio/cpal/compare/v0.0.2...v0.0.3
1212[0.0.2]: https://github.com/RustAudio/cpal/compare/v0.0.1...v0.0.2
1213[0.0.1]: https://github.com/RustAudio/cpal/releases/tag/v0.0.1