1extern crate time_calc;
6
7use time_calc::{
8 Bars,
9 Beats,
10 Bpm,
11 Division,
12 DivType,
13 Measure,
14 Ms,
15 Ppqn,
16 SampleHz,
17 Samples,
18 Ticks,
19 TimeSig,
20};
21
22const SAMPLE_HZ: SampleHz = 44_100.0;
24const PPQN: Ppqn = 19_200;
26
27fn main() {
28 println!("time_calc demonstration!");
29
30 assert!(Bars(1).measure() == Measure(1, Division::Bar, DivType::Whole));
32 assert!(Beats(1).measure() == Measure(1, Division::Beat, DivType::Whole));
34
35 println!("Parts per quarter note: {}", PPQN);
37 println!("Duration of a beat in ticks: {}", Beats(1).ticks(PPQN));
38 println!("Duration of 38_400 ticks in beats: {}", Ticks(38_400).beats(PPQN));
39
40 let bpm: Bpm = 120.0;
42 println!("Duration of a beat at 120 beats per minute: {} milliseconds.", Beats(1).ms(bpm));
43
44 println!("Samples per second: {}", SAMPLE_HZ);
46 println!("Duration of a beat at 120bpm in samples: {}", Beats(1).samples(bpm, SAMPLE_HZ));
47
48 let beats_per_bar = TimeSig { top: 4, bottom: 4 }.beats_per_bar();
51 println!("Duration of a bar in `Beats` with a 4/4 Time Signature: {}", beats_per_bar);
52 let beats_per_bar = TimeSig { top: 3, bottom: 4 }.beats_per_bar();
53 println!("Duration of a bar in `Beats` with a 3/4 Time Signature: {}", beats_per_bar);
54 let beats_per_bar = TimeSig { top: 7, bottom: 8 }.beats_per_bar();
55 println!("Duration of a bar in `Beats` with a 7/8 Time Signature: {}", beats_per_bar);
56 let time_sig = TimeSig { top: 4, bottom: 4 };
57 println!("Duration of a bar at 120bpm, 44_100 sample_hz and 4/4 Time Sig in samples: {}",
58 Bars(1).samples(bpm, time_sig, SAMPLE_HZ));
59
60 println!("1 minute as a duration in beats: {}", Ms(60_000.0).beats(bpm));
62
63 println!("176_400 samples as a duration in bars: {}",
65 Samples(176_400).bars(bpm, time_sig, SAMPLE_HZ));
66
67 println!("Great Success!");
68}