{"id":13534417,"url":"https://github.com/tesselode/kira","last_synced_at":"2026-02-18T10:04:14.656Z","repository":{"id":40329466,"uuid":"282803381","full_name":"tesselode/kira","owner":"tesselode","description":"Library for expressive game audio.","archived":false,"fork":false,"pushed_at":"2024-09-14T04:19:52.000Z","size":3461,"stargazers_count":852,"open_issues_count":24,"forks_count":43,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-09-14T16:44:27.089Z","etag":null,"topics":["audio","audio-library","game-development","gamedev"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/kira","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tesselode.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-27T05:35:03.000Z","updated_at":"2024-09-10T15:01:19.000Z","dependencies_parsed_at":"2023-02-08T17:30:49.208Z","dependency_job_id":"b7cc3e53-b63c-4f2e-8cf7-7baa136051e1","html_url":"https://github.com/tesselode/kira","commit_stats":{"total_commits":895,"total_committers":7,"mean_commits":"127.85714285714286","dds":0.01787709497206702,"last_synced_commit":"b97a7f9b1834009c4ef1f22c67d60ee14074fe77"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesselode%2Fkira","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesselode%2Fkira/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesselode%2Fkira/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesselode%2Fkira/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tesselode","download_url":"https://codeload.github.com/tesselode/kira/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222779887,"owners_count":17036542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-library","game-development","gamedev"],"created_at":"2024-08-01T07:01:32.541Z","updated_at":"2026-02-18T10:04:14.648Z","avatar_url":"https://github.com/tesselode.png","language":"Rust","readme":"# Kira\n\n#### [crates.io](https://crates.io/crates/kira) | [docs](https://docs.rs/kira/)\n\nKira is a backend-agnostic library to create expressive audio for games. It\nprovides tweens for smoothly adjusting properties of sounds, a flexible mixer\nfor applying effects to audio, a clock system for precisely timing audio events,\nand spatial audio support.\n\n## Examples\n\nPlaying a sound multiple times simultaneously:\n\n```rust\nuse kira::{\n\tAudioManager, AudioManagerSettings, DefaultBackend,\n\tsound::static_sound::StaticSoundData,\n};\n\n// Create an audio manager. This plays sounds and manages resources.\nlet mut manager = AudioManager::\u003cDefaultBackend\u003e::new(AudioManagerSettings::default())?;\nlet sound_data = StaticSoundData::from_file(\"sound.ogg\")?;\nmanager.play(sound_data.clone())?;\n// After a couple seconds...\nmanager.play(sound_data.clone())?;\n// Cloning the sound data will not use any extra memory.\n```\n\nGradually speeding up a sound over time:\n\n```rust\nuse std::time::Duration;\n\nuse kira::{\n\tAudioManager, AudioManagerSettings, DefaultBackend,\n\tsound::static_sound::StaticSoundData,\n\tTween,\n};\n\nlet mut manager = AudioManager::\u003cDefaultBackend\u003e::new(AudioManagerSettings::default())?;\nlet sound_data = StaticSoundData::from_file(\"sound.ogg\")?;\nlet mut sound = manager.play(sound_data)?;\n// Start smoothly adjusting the playback rate parameter.\nsound.set_playback_rate(\n\t2.0,\n\tTween {\n\t\tduration: Duration::from_secs(3),\n\t\t..Default::default()\n\t},\n);\n```\n\nPlaying a sound with a low-pass filter applied (this makes the audio sound\nmuffled):\n\n```rust\nuse kira::{\n\tAudioManager, AudioManagerSettings, DefaultBackend,\n\tsound::static_sound::StaticSoundData,\n\ttrack::{\n\t\tTrackBuilder,\n\t\teffect::filter::FilterBuilder,\n\t},\n};\n\nlet mut manager = AudioManager::\u003cDefaultBackend\u003e::new(AudioManagerSettings::default())?;\n// Create a mixer sub-track with a filter.\nlet track = manager.add_sub_track({\n\tlet mut builder = TrackBuilder::new();\n\tbuilder.add_effect(FilterBuilder::new().cutoff(1000.0));\n\tbuilder\n})?;\n// Play the sound on the track.\nlet sound_data = StaticSoundData::from_file(\"sound.ogg\")?.output_destination(\u0026track);\nmanager.play(sound_data)?;\n```\n\nPlaying sounds in time with a musical beat:\n\n```rust\nuse kira::{\n\tAudioManager, AudioManagerSettings, DefaultBackend,\n\tsound::static_sound::StaticSoundData,\n\tclock::ClockSpeed,\n};\n\nconst TEMPO: f64 = 120.0;\n\nlet mut manager = AudioManager::\u003cDefaultBackend\u003e::new(AudioManagerSettings::default())?;\n// Create a clock that ticks 120 times per minute. In this case,\n// each tick is one musical beat. We can use a tick to represent any\n// arbitrary amount of time.\nlet mut clock = manager.add_clock(ClockSpeed::TicksPerMinute(TEMPO))?;\n// Play a sound 2 ticks (beats) from now.\nlet sound_data_1 = StaticSoundData::from_file(\"sound1.ogg\")?\n\t.start_time(clock.time() + 2);\nmanager.play(sound_data_1)?;\n// Play a different sound 4 ticks (beats) from now.\nlet sound_data_2 = StaticSoundData::from_file(\"sound2.ogg\")?\n\t.start_time(clock.time() + 4);\nmanager.play(sound_data_2)?;\n// Start the clock.\nclock.start()?;\n```\n\n## Platform support\n\nKira is mainly meant for desktop platforms. Most testing has occurred on\nWindows, but it has been used successfully on Mac and Linux.\n\nKira can also be used in wasm environments with the following limitations:\n\n- Static sounds cannot be loaded from files\n- Streaming sounds are not supported because they make heavy use of threads\n\nIf you'd like to help improve wasm support, please reach out!\n\n## Roadmap\n\nFeatures I'd like to have:\n\n- C API\n- Spatial audio features:\n  - Doppler effect\n\n## Contributing\n\nI'd love for other people to get involved with development! Since the library is\nstill in the early stages, I'm open to all kinds of input - bug reports, feature\nrequests, design critiques, etc. Feel free to open an issue or pull request!\n\n## License\n\nThis project is licensed under either of\n\n- Apache License, Version 2.0 (LICENSE-APACHE)\n- MIT license (LICENSE-MIT)\n\nat your option.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in `kira` by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","funding_links":[],"categories":["Libraries"],"sub_categories":["Rust"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftesselode%2Fkira","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftesselode%2Fkira","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftesselode%2Fkira/lists"}