Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
atomic_position_helpers.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "dsp/atomic_position.h"
7#include "dsp/tempo_map.h"
8
9#include <gtest/gtest.h>
10
11namespace zrythm::dsp
12{
13static inline auto
14basic_conversion_providers ()
15{
16 // Use custom conversion providers that support negative positions
17 // 120 BPM = 960 ticks per beat, 0.5 seconds per beat
18 return std::make_unique<
19 AtomicPosition::
20 TimeConversionFunctions> (AtomicPosition::TimeConversionFunctions{
21 .tick_to_seconds =
22 [] (units::precise_tick_t ticks) {
23 return (ticks / units::ticks (960.0)) * units::seconds (0.5);
24 },
25 .seconds_to_tick =
26 [] (units::precise_second_t seconds) {
27 return seconds / units::seconds (0.5) * units::ticks (960.0);
28 },
29 .tick_to_samples =
30 [] (units::precise_tick_t ticks) {
31 return (ticks / units::ticks (960.0)) * units::seconds (0.5)
32 * units::sample_rate (44100.0);
33 },
34 .samples_to_tick =
35 [] (units::precise_sample_t samples) {
36 return samples / units::sample_rate (44100.0) / units::seconds (0.5)
37 * units::ticks (960.0);
38 },
39 });
40}
41}