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
34audio_manager.play(song);
35```
36
37# NOTE
38This priject has recently moved to a new version. Due to drastic changes, I have started rewriting all documentation.<br>
39So some documentation may not be precise enough or just bad. Please report bad documentation to the GitHub repository.
40*/
41
42pub mod misc;
43pub mod note;
44pub mod player;
45pub mod wav;
46pub mod waveform;
47
48pub use note::Note;
49pub use player::{AudioManager, Song};
50pub use waveform::WaveForm;
51pub use BPMChoice::*;
52
53/**
54The BPMChoice is an enum for picking the <b>beats per minute</b> for making songs.<br>
55Usage:
56```
57use rs_audio::*;
58
59let song = Song::new(vec![
60Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
61Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Square },
62Note { freq: 880.0, dur: 1.0, vol: 0.20, wave: WaveForm::Sine },
63Note { freq: 220.0, dur: 1.0, vol: 0.20, wave: WaveForm::Triangle },
64], BPMChoice::Default);
65```
66*/
67#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, Copy)]
68pub enum BPMChoice {
69 Default,
70 Custom(u32),
71}