opl3-rs ======= A small library to provide bindings for the [Nuked-OPL3 library](https://github.com/nukeykt/Nuked-OPL3). [![Crates.io version][crate-img]][crate] [![Changelog][changelog-img]](CHANGELOG.md) [![Documentation][docs-img]][docs] # Usage Nuked-OPL3 is not a turn-key implementation of the OPL3 chip - functions such as the status register, timers and interrupts are left as implementation details. You can access the Nuked-OPL3 API via the `Opl3Chip` struct, if needed, but with the caveat that directly writing registers to Nuked-OPL3 will prevent you from reading the OPL registers correctly. If you intend to utilize `opl3-rs` in an emulator, you will probably want to use the `Opl3Device` wrapper which provides a full, device-oriented OPL3 implementation including the status, address and data registers, plus the OPL3 timers. # Docs Documentation can be found on [docs.rs](https://docs.rs/opl3-rs/latest/opl3_rs/) # Examples An example of music playback is provided in the play_tune directory under /examples. This example uses the rodio library for audio playback and crossbeam channels for inter-thread communication. opl3-rs was primarily built for use with the [MartyPC PC emulator](https://github.com/dbalsom/martypc). It is used to implement an AdLib Music Card device. https://github.com/dbalsom/opl3-rs/assets/7229541/d78d4e90-71ed-4841-a963-9b09f25974c1 # Credits [Nuked-OPL3](https://github.com/nukeykt/Nuked-OPL3) is (C) 2013-2020 Nuke.YKT and licensed under LGPL 2.1 play_tune example based off code by Maarten Janssen and Peter De Wachter. [crate]: https://crates.io/crates/opl3-rs [crate-img]: https://img.shields.io/crates/v/opl3-rs.svg [changelog-img]: https://img.shields.io/badge/changelog-online-blue.svg [docs]: https://docs.rs/opl3-rs [docs-img]: https://img.shields.io/badge/docs-online-blue.svg