pub struct MixedRateDuration { /* private fields */ }
Expand description

Represents a duration of a collection of datasets which may have been sampled at different rates.

Examples

Consider an audio playlist which at first consists of a single audio file of 12_345_678 samples per channel recorded with at 44.1kHz sampling frequency. We then add another audio file to this playlist which is recorded at 96kHz.

use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mut mrd = MixedRateDuration::from(ConstantRateDuration::new(12_345_678, 48000));

// Note that the default string representation when there is only
// a single sampling rate is of the form `hh:mm:ss;samples`.
assert_eq!(mrd.to_string(), "00:04:17;9678");

// Now we add a 96kHz file
let crd = ConstantRateDuration::new(31_415_926, 96000);
assert_eq!(crd.to_string(), "00:05:27;23926");

mrd += crd;

// Note that the default string representation when there are
// multiple sampling rates is of the form `hh:mm:ss.s`.
assert_eq!(mrd.to_string(), "00:09:44.450854166");

Implementations

Construct an empty MixedRateDuration.

Examples
use sampled_data_duration::MixedRateDuration;

let mut mrd = MixedRateDuration::new();

assert_eq!(mrd.to_string(), "00:00:00");

Returns the number of whole seconds contained by this MixedRateDuration.

The returned value does not include the fractional part of the duration which can be obtained with subsec_secs.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 62 + 123, 48000));
assert_eq!(mrd.to_string(), "00:01:02;123");
assert_eq!(mrd.as_secs(), 62);

Returns the number of whole minutes contained by this MixedRateDuration.

The returned value does not include the fractional part of the duration, and can be a value greater than 59.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 91, 48000));
assert_eq!(mrd.to_string(), "01:31:00;0");
assert_eq!(mrd.as_mins(), 91);

Returns the number of whole hours contained by this MixedRateDuration.

The returned value does not include the fractional part of the duration, and can be a value greater than 23.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 60 * 48 + 12345, 48000));
assert_eq!(mrd.to_string(), "48:00:00;12345");
assert_eq!(mrd.as_hours(), 48);

Returns the number of whole days contained by this MixedRateDuration.

The returned value does not include the fractional part of the duration, and can be a value greater than 6.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 60 * 48 + 12345, 48000));
assert_eq!(mrd.to_string(), "48:00:00;12345");
assert_eq!(mrd.as_days(), 2);

Returns the number of whole weeks contained by this MixedRateDuration.

The returned value does not include the fractional part of the duration.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 60 * 24 * 21 + 12345, 48000));
assert_eq!(mrd.to_string(), "504:00:00;12345");
assert_eq!(mrd.as_weeks(), 3);

Return the number of different sampling rates used in this MixedRateDuration.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mut mrd = MixedRateDuration::from(ConstantRateDuration::new(1, 44100));
assert_eq!(mrd.num_rates(), 1);

mrd += ConstantRateDuration::new(1, 48000);
assert_eq!(mrd.num_rates(), 2);

mrd += ConstantRateDuration::new(1, 96000);
assert_eq!(mrd.num_rates(), 3);

mrd += ConstantRateDuration::new(2, 44100);
assert_eq!(mrd.num_rates(), 3);

Returns the whole number of nanoseconds in the fractional part of this MixedRateDuration.

The returned value will always be less than one second i.e. > 1_000_000_000 nanoseconds.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 + 24000, 48000));
assert_eq!(mrd.to_string(), "00:00:01;24000");
assert_eq!(mrd.subsec_nanos(), 500_000_000);

Returns the whole number of seconds in the fractional part of this MixedRateDuration.

The returned value will always be less than one second i.e. 0.0 <= subsec_secs < 1.0.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 + 24000, 48000));
assert_eq!(mrd.to_string(), "00:00:01;24000");
assert_eq!(mrd.subsec_secs(), 0.5);

Returns the whole number of seconds left over when this duration is measured in minutes.

The returned value will always be 0 <= submin_secs <= 59.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 65 + 32000, 48000));
assert_eq!(mrd.to_string(), "00:01:05;32000");
assert_eq!(mrd.submin_secs(), 5);

Returns the whole number of minutes left over when this duration is measured in hours.

The returned value will always be 0 <= subhour_mins <= 59.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 68, 48000));
assert_eq!(mrd.to_string(), "01:08:00;0");
assert_eq!(mrd.subhour_mins(), 8);

Returns the whole number of hours left over when this duration is measured in days.

The returned value will always be 0 <= subday_hours <= 23.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 60 * 25, 48000));
assert_eq!(mrd.to_string(), "25:00:00;0");
assert_eq!(mrd.subday_hours(), 1);

Returns the whole number of days left over when this duration is measured in weeks.

The returned value will always be 0 <= subweek_days <= 6.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 60 * 60 * 24 * 9, 48000));
assert_eq!(mrd.to_string(), "216:00:00;0");
assert_eq!(mrd.subweek_days(), 2);

Return this MixedRateDuration as a std::time::Duration.

Example
use sampled_data_duration::ConstantRateDuration;
use sampled_data_duration::MixedRateDuration;

let mrd = MixedRateDuration::from(ConstantRateDuration::new(48000 * 42, 48000));
assert_eq!(mrd.to_string(), "00:00:42;0");
assert_eq!(mrd.to_duration().as_secs_f64(), 42.0);

Trait Implementations

Add a ConstantRateDuration to this MixedRateDuration returning a new MixedRateDuration.

The resulting type after applying the + operator.

Add a MixedRateDuration to this MixedRateDuration returning a new MixedRateDuration.

The resulting type after applying the + operator.

Add a ConstantRateDuration to this MixedRateDuration.

Add a MixedRateDuration to this MixedRateDuration.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Display this MixedRateDuration in the form hh:mm:ss;samples if there is only one sampling rate used, otherwise display in the form hh:mm:ss.s.

Divide a MixedRateDuration by a u64 returning a new MixedRateDuration.

The resulting type after applying the / operator.

Divide-assign a MixedRateDuration by a u64.

Construct a MixedRateDuration from a ConstantRateDuration.

Multiply a MixedRateDuration by a u64 returning a new MixedRateDuration.

The resulting type after applying the * operator.

Multiply-assign a MixedRateDuration by a u64.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Perform a saturating subtraction of a ConstantRateDuration from this MixedRateDuration returning a new MixedRateDuration.

The resulting type after applying the - operator.

Perform a saturating subtraction of a MixedRateDuration from this MixedRateDuration returning a new MixedRateDuration.

The resulting type after applying the - operator.

Perform a saturating subtraction of a ConstantRateDuration from this MixedRateDuration.

Perform a saturating subtraction of a MixedRateDuration from this MixedRateDuration.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.