pub struct TimeSig {
pub top: Top,
pub bottom: Bottom,
}
Expand description
Represents a musical time signature.
Fields§
§top: Top
§bottom: Bottom
Implementations§
Source§impl TimeSig
impl TimeSig
Sourcepub fn beats_per_bar(&self) -> f64
pub fn beats_per_bar(&self) -> f64
Return how many beats there are in a bar under this time signature.
Examples found in repository?
examples/test.rs (line 50)
27fn main() {
28 println!("time_calc demonstration!");
29
30 // Out `Bars` type is a simplified version of a Measure.
31 assert!(Bars(1).measure() == Measure(1, Division::Bar, DivType::Whole));
32 // The same goes for out `Beats` type.
33 assert!(Beats(1).measure() == Measure(1, Division::Beat, DivType::Whole));
34
35 // We can use "parts per quarter note" to convert to ticks.
36 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 // We can use "beats per minute" to convert from musical time to milliseconds.
41 let bpm: Bpm = 120.0;
42 println!("Duration of a beat at 120 beats per minute: {} milliseconds.", Beats(1).ms(bpm));
43
44 // And we can use "samples per second" to convert our duration to samples.
45 println!("Samples per second: {}", SAMPLE_HZ);
46 println!("Duration of a beat at 120bpm in samples: {}", Beats(1).samples(bpm, SAMPLE_HZ));
47
48 // We also need to know the "time signature" if we are to convert from "Bars".
49 // This is because different time signatures can have a different duration in "Beats".
50 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 // We can also convert back the other way! Here's an example from Ms -> Beats.
61 println!("1 minute as a duration in beats: {}", Ms(60_000.0).beats(bpm));
62
63 // Here's an example from Samples -> Bars.
64 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}
Sourcepub fn ticks_per_bar(&self, ppqn: Ppqn) -> Ticks
pub fn ticks_per_bar(&self, ppqn: Ppqn) -> Ticks
The number of Ticks
in a single Bar
with this TimeSig
.
Trait Implementations§
impl Copy for TimeSig
impl Eq for TimeSig
impl StructuralPartialEq for TimeSig
Auto Trait Implementations§
impl Freeze for TimeSig
impl RefUnwindSafe for TimeSig
impl Send for TimeSig
impl Sync for TimeSig
impl Unpin for TimeSig
impl UnwindSafe for TimeSig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more