Changes - Raise original error in `utils.timestamp_to_millis`. - Slight improvement to `DefaultPlayer.play` documentation to clarify the difference between it and `BasePlayer.play_track`.
4.0.6
Fixes - Fixed `DefaultPlayer.play` not throwing if the provided track does not have a `track` str, and it is not an instance of `DeferredAudioTrack`.
Additions - Add return type to `utfm_codec.read_utfm`. - Add return type to `utils.encode_track`. - Improved typedefs of `Stats` object. - Improved typedefs of `Penalty` object. - Improved typedefs of `Node`. - Improved typedefs of `NodeManager`. - Improved typedefs of `PlayerManager`. - Improved typedefs of `QueueEndEvent`. - Improved typedefs of `PlayerUpdateEvent`. - Improved typedefs of `WebSocketClosedEvent`. - Improved typedefs of track events. - Improved typedefs of node events.
4.0.5
- Added `ping` field to `PlayerUpdateEvent` after it somehow got removed. - Added `Node` type def to `BasePlayer.node`, `BasePlayer.change_node`, and `DefaultPlayer.__init__`. - Changed `Equalizer.update` to also accept `float` for the `gain` value.
4.0.4
Fixes - Use asyncio.gather over asyncio.wait
Additions - Add rudimentary track encoding support
Changes - Don't default to -1 if frame stats missing.
4.0.3
Fixes - Fix `DefaultPlayer._last_update` being incorrectly reset in `play()` leading to brief periods where `position` would read incorrectly between tracks.