pub struct Beats(pub NumDiv);
Expand description
Represents a number of beats aka a simplified version of Measure(1, Beat, Whole)
.
Tuple Fields§
§0: NumDiv
Implementations§
Source§impl Beats
impl Beats
Sourcepub fn measure(&self) -> Measure
pub fn measure(&self) -> Measure
Convert to a Measure
.
Examples found in repository?
examples/test.rs (line 33)
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 ms(&self, bpm: Bpm) -> Ms
pub fn ms(&self, bpm: Bpm) -> Ms
Convert to the unit value of Ms
.
Examples found in repository?
examples/test.rs (line 42)
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 samples(&self, bpm: Bpm, sample_hz: SampleHz) -> Samples
pub fn samples(&self, bpm: Bpm, sample_hz: SampleHz) -> Samples
Convert to the unit value of Samples
.
Examples found in repository?
examples/test.rs (line 46)
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 to_samples(&self, bpm: Bpm, sample_hz: SampleHz) -> Samples
pub fn to_samples(&self, bpm: Bpm, sample_hz: SampleHz) -> Samples
Conver to `Samples.
Sourcepub fn ticks(&self, ppqn: Ppqn) -> Ticks
pub fn ticks(&self, ppqn: Ppqn) -> Ticks
Convert to the unit value of Ticks
.
Examples found in repository?
examples/test.rs (line 37)
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}
Trait Implementations§
Source§impl AddAssign for Beats
impl AddAssign for Beats
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the
+=
operation. Read moreSource§impl DivAssign for Beats
impl DivAssign for Beats
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Performs the
/=
operation. Read moreSource§impl FromPrimitive for Beats
impl FromPrimitive for Beats
Source§fn from_u64(n: u64) -> Option<Self>
fn from_u64(n: u64) -> Option<Self>
Converts an
u64
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_i64(n: i64) -> Option<Self>
fn from_i64(n: i64) -> Option<Self>
Converts an
i64
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_isize(n: isize) -> Option<Self>
fn from_isize(n: isize) -> Option<Self>
Converts an
isize
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_i8(n: i8) -> Option<Self>
fn from_i8(n: i8) -> Option<Self>
Converts an
i8
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_i16(n: i16) -> Option<Self>
fn from_i16(n: i16) -> Option<Self>
Converts an
i16
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_i32(n: i32) -> Option<Self>
fn from_i32(n: i32) -> Option<Self>
Converts an
i32
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_i128(n: i128) -> Option<Self>
fn from_i128(n: i128) -> Option<Self>
Converts an
i128
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned. Read moreSource§fn from_usize(n: usize) -> Option<Self>
fn from_usize(n: usize) -> Option<Self>
Converts a
usize
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_u8(n: u8) -> Option<Self>
fn from_u8(n: u8) -> Option<Self>
Converts an
u8
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_u16(n: u16) -> Option<Self>
fn from_u16(n: u16) -> Option<Self>
Converts an
u16
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_u32(n: u32) -> Option<Self>
fn from_u32(n: u32) -> Option<Self>
Converts an
u32
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned.Source§fn from_u128(n: u128) -> Option<Self>
fn from_u128(n: u128) -> Option<Self>
Converts an
u128
to return an optional value of this type. If the
value cannot be represented by this type, then None
is returned. Read moreSource§impl MulAssign for Beats
impl MulAssign for Beats
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the
*=
operation. Read moreSource§impl Ord for Beats
impl Ord for Beats
Source§impl PartialOrd for Beats
impl PartialOrd for Beats
Source§impl RemAssign for Beats
impl RemAssign for Beats
Source§fn rem_assign(&mut self, rhs: Self)
fn rem_assign(&mut self, rhs: Self)
Performs the
%=
operation. Read moreSource§impl SubAssign for Beats
impl SubAssign for Beats
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the
-=
operation. Read moreSource§impl ToPrimitive for Beats
impl ToPrimitive for Beats
Source§fn to_u64(&self) -> Option<u64>
fn to_u64(&self) -> Option<u64>
Converts the value of
self
to a u64
. If the value cannot be
represented by a u64
, then None
is returned.Source§fn to_i64(&self) -> Option<i64>
fn to_i64(&self) -> Option<i64>
Converts the value of
self
to an i64
. If the value cannot be
represented by an i64
, then None
is returned.Source§fn to_isize(&self) -> Option<isize>
fn to_isize(&self) -> Option<isize>
Converts the value of
self
to an isize
. If the value cannot be
represented by an isize
, then None
is returned.Source§fn to_i8(&self) -> Option<i8>
fn to_i8(&self) -> Option<i8>
Converts the value of
self
to an i8
. If the value cannot be
represented by an i8
, then None
is returned.Source§fn to_i16(&self) -> Option<i16>
fn to_i16(&self) -> Option<i16>
Converts the value of
self
to an i16
. If the value cannot be
represented by an i16
, then None
is returned.Source§fn to_i32(&self) -> Option<i32>
fn to_i32(&self) -> Option<i32>
Converts the value of
self
to an i32
. If the value cannot be
represented by an i32
, then None
is returned.Source§fn to_i128(&self) -> Option<i128>
fn to_i128(&self) -> Option<i128>
Converts the value of
self
to an i128
. If the value cannot be
represented by an i128
(i64
under the default implementation), then
None
is returned. Read moreSource§fn to_usize(&self) -> Option<usize>
fn to_usize(&self) -> Option<usize>
Converts the value of
self
to a usize
. If the value cannot be
represented by a usize
, then None
is returned.Source§fn to_u8(&self) -> Option<u8>
fn to_u8(&self) -> Option<u8>
Converts the value of
self
to a u8
. If the value cannot be
represented by a u8
, then None
is returned.Source§fn to_u16(&self) -> Option<u16>
fn to_u16(&self) -> Option<u16>
Converts the value of
self
to a u16
. If the value cannot be
represented by a u16
, then None
is returned.Source§fn to_u32(&self) -> Option<u32>
fn to_u32(&self) -> Option<u32>
Converts the value of
self
to a u32
. If the value cannot be
represented by a u32
, then None
is returned.Source§fn to_u128(&self) -> Option<u128>
fn to_u128(&self) -> Option<u128>
Converts the value of
self
to a u128
. If the value cannot be
represented by a u128
(u64
under the default implementation), then
None
is returned. Read moreimpl Copy for Beats
impl Eq for Beats
impl StructuralPartialEq for Beats
Auto Trait Implementations§
impl Freeze for Beats
impl RefUnwindSafe for Beats
impl Send for Beats
impl Sync for Beats
impl Unpin for Beats
impl UnwindSafe for Beats
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