#include "tick.h" #include "audio/device/audio_device_manager.h" #include "audio/midi_sequencer/midi_sequencer.h" midi_tick::midi_tick(const audio_frame& in_frame) { auto bpm = g_midi_sequencer.get_bpm(); auto tpq = midi_sequencer::TPQ; auto sample_rate = g_audio_device_manager.get_sample_rate(); double time_in_seconds = (double)in_frame.get_frames() / sample_rate; ticks = time_in_seconds * bpm * tpq / 60.0; } auto midi_tick::to_audio_frame(int32_t tpq) const -> audio_frame { return audio_frame(*this, tpq); } audio_frame::audio_frame(const midi_tick& in_tick, int32_t tpq) { auto bpm = g_midi_sequencer.get_bpm(); auto sample_rate = g_audio_device_manager.get_sample_rate(); double tick_duration = 60.0 / (bpm * tpq); double tick_in_seconds = in_tick.get_ticks() * tick_duration; frames = tick_in_seconds * sample_rate; } midi_tick audio_frame::to_midi_tick(int32_t tpq) const { return midi_tick(*this); }