MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ChronUtils.hpp
Go to the documentation of this file.
1#pragma once
2
3namespace MayaFlux::Vruta {
4/**
5 * @brief Convert frames to seconds at a given frame rate
6 * @param frames Number of frames
7 * @param frame_rate Frame rate in Hz
8 * @return Time duration in seconds
9 */
10inline uint64_t frames_to_seconds(uint64_t frames, uint32_t frame_rate)
11{
12 return frames / frame_rate;
13}
14
15/**
16 * @brief Get duration of a single frame at given frame rate
17 * @param frame_rate Frame rate in Hz
18 * @return Duration in milliseconds
19 */
20inline std::chrono::milliseconds frame_duration_ms(uint32_t frame_rate)
21{
22 return std::chrono::milliseconds(1000 / frame_rate);
23}
24
25/**
26 * @brief Get duration of a single frame at given frame rate (high precision)
27 * @param frame_rate Frame rate in Hz
28 * @return Duration in microseconds
29 */
30inline std::chrono::microseconds frame_duration_us(uint32_t frame_rate)
31{
32 return std::chrono::microseconds(1000000 / frame_rate);
33}
34
35/**
36 * @brief Get duration for N frames at given frame rate
37 * @param num_frames Number of frames
38 * @param frame_rate Frame rate in Hz
39 * @return Duration in milliseconds
40 */
41inline std::chrono::milliseconds frames_duration_ms(uint64_t num_frames, uint32_t frame_rate)
42{
43 return std::chrono::milliseconds((num_frames * 1000) / frame_rate);
44}
45
46/**
47 * @brief Get duration for N frames at given frame rate (high precision)
48 * @param num_frames Number of frames
49 * @param frame_rate Frame rate in Hz
50 * @return Duration in microseconds
51 */
52inline std::chrono::microseconds frames_duration_us(uint64_t num_frames, uint32_t frame_rate)
53{
54 return std::chrono::microseconds((num_frames * 1000000) / frame_rate);
55}
56
57/** * @brief Convert samples to seconds at a given sample rate
58 * @param samples Number of samples
59 * @param sample_rate Sample rate in Hz
60 * @return Time duration in seconds
61 */
62inline uint64_t samples_to_seconds(uint64_t samples, uint32_t sample_rate)
63{
64 return samples / sample_rate;
65}
66
67/**
68 * @brief Convert frames to samples at a given sample rate and frame rate
69 * @param frames Number of frames
70 * @param sample_rate Sample rate in Hz
71 * @param frame_rate Frame rate in Hz
72 * @return Number of samples
73 */
74inline uint64_t frames_to_samples(uint64_t frames, uint32_t sample_rate, uint32_t frame_rate)
75{
76 return (frames * sample_rate) / frame_rate;
77}
78
79/**
80 * @brief Convert samples to frames at a given sample rate and frame rate
81 * @param samples Number of samples
82 * @param sample_rate Sample rate in Hz
83 * @param frame_rate Frame rate in Hz
84 * @return Number of frames
85 */
86inline uint64_t samples_to_frames(uint64_t samples, uint32_t sample_rate, uint32_t frame_rate)
87{
88 return (samples * frame_rate) / sample_rate;
89}
90
91/**
92 * @brief Convert seconds to samples at a given sample rate
93 * @param seconds Time duration in seconds
94 * @param sample_rate Sample rate in Hz
95 * @return Number of samples
96 */
97inline uint64_t seconds_to_samples(double seconds, uint32_t sample_rate)
98{
99 return static_cast<uint64_t>(seconds * sample_rate);
100}
101
102/**
103 * @brief Convert seconds to frames at a given frame rate
104 * @param seconds Time duration in seconds
105 * @param frame_rate Frame rate in Hz
106 * @return Number of frames
107 */
108inline uint64_t seconds_to_frames(double seconds, uint32_t frame_rate)
109{
110 return static_cast<uint64_t>(seconds * frame_rate);
111}
112
113/**
114 * @brief Convert seconds to processing units for any rate
115 * @param seconds Time duration in seconds
116 * @param rate Processing rate (samples/sec, frames/sec, etc.)
117 * @return Number of processing units
118 */
119inline uint64_t seconds_to_units(double seconds, uint32_t rate)
120{
121 return static_cast<uint64_t>(seconds * rate);
122}
123
124/**
125 * @brief Convert processing units to seconds for any rate
126 * @param units Number of processing units
127 * @param rate Processing rate (samples/sec, frames/sec, etc.)
128 * @return Time duration in seconds
129 */
130inline double units_to_seconds(uint64_t units, uint32_t rate)
131{
132 return static_cast<double>(units) / rate;
133}
134
135/**
136 * @brief Convert seconds to number of processing blocks
137 * @param seconds Time duration in seconds
138 * @param sample_rate Sample rate in Hz
139 * @param block_size Number of samples per block
140 * @return Number of blocks
141 */
142inline uint64_t seconds_to_blocks(double seconds, uint32_t sample_rate, uint32_t block_size)
143{
144 uint64_t total_samples = seconds_to_samples(seconds, sample_rate);
145 return (total_samples + block_size - 1) / block_size; // Ceiling division
146}
147
148/**
149 * @brief Convert samples to number of processing blocks
150 * @param samples Number of samples
151 * @param block_size Number of samples per block
152 * @return Number of blocks
153 */
154inline uint64_t samples_to_blocks(uint64_t samples, uint32_t block_size)
155{
156 return (samples + block_size - 1) / block_size; // Ceiling division
157}
158
159/**
160 * @brief Convert blocks to samples
161 * @param blocks Number of blocks
162 * @param block_size Number of samples per block
163 * @return Number of samples
164 */
165inline uint64_t blocks_to_samples(uint64_t blocks, uint32_t block_size)
166{
167 return blocks * block_size;
168}
169
170/**
171 * @brief Convert blocks to seconds
172 * @param blocks Number of blocks
173 * @param sample_rate Sample rate in Hz
174 * @param block_size Number of samples per block
175 * @return Time duration in seconds
176 */
177inline double blocks_to_seconds(uint64_t blocks, uint32_t sample_rate, uint32_t block_size)
178{
179 uint64_t total_samples = blocks_to_samples(blocks, block_size);
180 return units_to_seconds(total_samples, sample_rate);
181}
182
183}
uint64_t frames_to_seconds(uint64_t frames, uint32_t frame_rate)
Convert frames to seconds at a given frame rate.
std::chrono::microseconds frames_duration_us(uint64_t num_frames, uint32_t frame_rate)
Get duration for N frames at given frame rate (high precision)
uint64_t samples_to_frames(uint64_t samples, uint32_t sample_rate, uint32_t frame_rate)
Convert samples to frames at a given sample rate and frame rate.
std::chrono::milliseconds frame_duration_ms(uint32_t frame_rate)
Get duration of a single frame at given frame rate.
uint64_t seconds_to_samples(double seconds, uint32_t sample_rate)
Convert seconds to samples at a given sample rate.
uint64_t samples_to_blocks(uint64_t samples, uint32_t block_size)
Convert samples to number of processing blocks.
uint64_t seconds_to_frames(double seconds, uint32_t frame_rate)
Convert seconds to frames at a given frame rate.
double blocks_to_seconds(uint64_t blocks, uint32_t sample_rate, uint32_t block_size)
Convert blocks to seconds.
uint64_t seconds_to_units(double seconds, uint32_t rate)
Convert seconds to processing units for any rate.
uint64_t blocks_to_samples(uint64_t blocks, uint32_t block_size)
Convert blocks to samples.
uint64_t seconds_to_blocks(double seconds, uint32_t sample_rate, uint32_t block_size)
Convert seconds to number of processing blocks.
uint64_t frames_to_samples(uint64_t frames, uint32_t sample_rate, uint32_t frame_rate)
Convert frames to samples at a given sample rate and frame rate.
uint64_t samples_to_seconds(uint64_t samples, uint32_t sample_rate)
Convert samples to seconds at a given sample rate.
double units_to_seconds(uint64_t units, uint32_t rate)
Convert processing units to seconds for any rate.
std::chrono::milliseconds frames_duration_ms(uint64_t num_frames, uint32_t frame_rate)
Get duration for N frames at given frame rate.
std::chrono::microseconds frame_duration_us(uint32_t frame_rate)
Get duration of a single frame at given frame rate (high precision)