[package] name = "second-music-system" version = "0.1.0" authors = ["Noah Obert ", "Solra Bizna "] edition = "2021" description = "Portable, open source video game music middleware" readme = "../README.md" repository = "https://github.com/SolraBizna/second-music-system" license = "MIT OR Apache-2.0" keywords = ["gamedev", "middleware", "music"] categories = ["game-development", "multimedia::audio"] [dependencies] # We use `Arcow` to reduce the memory overhead of having multiple "copies" of a # Soundtrack around, without harming ergonomics. arcow = "1.1.1" # Saves us a lot of memory and heap churn, in the exceptionally common case # where flow/node/sequence/sound names are short. compact_str = "0.7.1" # We love their locks and channels. crossbeam = "0.8" # We use `#[derivative(Debug)]` to aid in deriving `Debug` for some types. derivative = "2.2" # We use futures to schedule loading, even if we're doing foreground loading. # (We have our own thin built-in runtime for the foreground case.) futures = "0.3.29" # We use this library to resample sounds if needed. libsoxr = "0.2.9" # If the "switchyard" feature is enabled, we use this crate to decide how many # threads we should spawn for background loading (if the caller didn't request # a specific number). num_cpus = {optional=true, version="1.16.0"} # We use `once_cell::sync::Lazy` in a few places in our timebase parsing. once_cell = "1.19.0" # "Shellish" is the fundamental syntax of the Second Music System Soundtrack # Language. shellish_parse = "2.2.0" # If the "switchyard" feature is enabled, we use this crate to spawn and # schedule threads for background loading and (some day) decoding. switchyard = {optional=true, version="0.3.0"} # If the "tokio" feature is enabled, we provide an implementation of our # `Runtime` trait that interfaces with Tokio runtimes. (There should be nothing # stopping you from making such an implementation yourself. This is just more # convenient.) tokio = {optional=true, version = "1.35.1", features = ["rt"]} # We use `VecMap`s where we know there will be few keys and that the overhead # of a hash table would be unnecessary. vecmap-rs = "0.1.13" [features] default = ["switchyard"] # Exposes an implementation of TaskRuntime for Switchyard, and the convenient # Engine::new() function that uses Switchyard behind the scenes. Use this # unless you KNOW you don't want it. switchyard = ["dep:switchyard", "dep:num_cpus"] # Exposes an implementation of TaskRuntime for Tokio. Use this if you have a # Tokio runtime in your game already, and you want SMS to make use of it. tokio = ["dep:tokio"] # Exposes the EngineCommandIssuer trait. You should only use/need this if you # are creating an FFI binding. ffi-expose-issuer = []