rs_audio/lib.rs
1/*!
2# RS-AUDIO
3rs-audio is a Rust library for making retro music programmatically.<br>
4 Currently, it has support for:
5 * Sine waves,
6 * Squares,
7 * Sawtooths,
8 * and Triangles.<br>
9
10This library is MIT licensed. <br>Learn more in our repository: <https://github.com/xshotss/rs-audio/blob/main/LICENSE><br><br>
11## Usage:<br>
12
13To create a default song (to make sure everything is working):
14```
15use rs_audio::*;
16
17let mut audio_manager = AudioManager::new(); // This creates an audio thread which handles audio.
18
19audio_manager.play(Song::default()); // Plays a default song.
20```
21<br>To create custom notes:
22```
23use rs_audio::*;
24
25let mut audio_manager = AudioManager::new();
26
27let mut song = Song::new(vec![
28Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
29Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Square },
30Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
31Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Triangle },
32], BPMChoice::Default);
33
34let _ = audio_manager.play(song);
35/* The play function returns a track ID.
36If you want to control the track later, store its ID by changing the _ to the variable name that you want. */
37```
38
39# NOTE
40This priject has recently moved to a new version. Due to drastic changes, I have started rewriting all documentation.<br>
41So some documentation may not be precise enough or just bad. Please report bad documentation to the GitHub repository.
42*/
43
44pub mod misc;
45pub mod note;
46pub mod player;
47pub mod wav;
48pub mod waveform;
49
50pub use note::Note;
51pub use player::{AudioManager, Song};
52pub use rodio::cpal;
53pub use waveform::WaveForm;
54pub use BPMChoice::*;
55
56/**
57The BPMChoice is an enum for picking the <b>beats per minute</b> for making songs.<br>
58Usage:
59```
60use rs_audio::*;
61
62let song = Song::new(vec![
63Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
64Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Square },
65Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
66Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Triangle },
67], BPMChoice::Default);
68```
69*/
70#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, Copy)]
71pub enum BPMChoice {
72 Default,
73 Custom(u32),
74}