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