* Sound is no longer in beta, and no longer muted by default
* Control sound sample rate, volume or disable entirely
* Introduce API for sound. Sound buffer is provided frame-by-frame.[1]
* Introduce PyBoyException as the base-exception for PyBoy
* Introduce exceptions when accessing features that are not enabled
* Actually release the GIL for improved multi-threading support
* Blank out first frame after enabling LCD (emulation accuracy)
* Implement consistent frame-cycles. Each tick is targeting 70224 emulated CPU cycles.[1]
* Fix bug when using CGB boot ROM with DMG game ROM
* Fix no_input to ignore SDL2 input but keep API input
* Fix a lot of small issues related to determinism and save/load state
* Added documentation for plugin-kwargs on PyBoy constructor
* Python 3.8 support removed as it's past end-of-life
* Fix stepping with debugger after v2.4.0
* Add set_time_left to Super Mario Land wrapper
* More consistent handling of cartridge names in DMG/CGB mode
[1]: When the game enables/disables the LCD, the timing will be shorter than 70224 emulated cycles. Therefore the sound buffer will also be shorter than 16.667ms (60 FPS).
NOTE: If you depend on exact timing of a frame (assume a specific start block in Tetris etc.) then expect these to have changed. These changes improve emulation correctness, and I cannot promise specific frame timings between releases.
Although I don't expect this to become a regular occurrence.