1个不稳定版本
0.1.0 | 2021年7月17日 |
---|
#780 in 音频
16KB
189 行
时间戳拉伸器
通过一个可能随时间变化的分数因子拉伸整数时间戳。这个库会注意避免时间漂移并保持误差最小。
贡献
有关更多信息,请参阅 CONTRIBUTING.md。
许可证
timestamp-stretcher
采用Apache许可证第2版或MIT许可证,由您选择。
对于MIT许可证的应用,文档注释中包含的示例不被视为“此软件的实质性部分”。
lib.rs
:
TimeStretcher
通过一个可能随时间变化的分数因子拉伸整数时间戳。
示例
以下示例说明了库的使用方法。
use timestamp_stretcher::TimestampStretcher;
use std::num::NonZeroU64;
// Create a new TimeStretcher with an initial factor of 2/3.
let mut stretcher = TimestampStretcher::new(2, NonZeroU64::new(3).unwrap());
// Suppose we have five events: "0", "1", "2", "3" and "4".
// Each event happens at a certain time stamp:
// +--- Time stamp of event "1" is 3
// v
// 0 . . 1 . . 2 . . . . 3 . . . . 4
// If we stretch the time stamps up to event 2 with a factor 2/3,
// and the subsequent time stamps with a factor 7/5, we get the following:
// 0 . 1 . 2 . . . . . . 3 . . . . . . 4
let input_time_stamps = vec![
(0, None), // Event at time 0, no change to conversion factor.
(3, None), // Event at time 3, no change to conversion factor.
(6, Some((7, NonZeroU64::new(5).unwrap()))), // Event at time 6, change conversion factor to 7/8.
// The new conversion factor will be applied to the time differences, not to the absolute times.
(11, None), // Event at time 11.
(16, None),
];
let mut observed_output_time_stamps = Vec::new();
for input in input_time_stamps.into_iter() {
observed_output_time_stamps.push(stretcher.stretch(input.0, input.1));
}
let expected_output_time_stamps = vec![0, 2, 4, 11, 18];
assert_eq!(expected_output_time_stamps, observed_output_time_stamps);
依赖关系
~12KB