AronaCore/core/misc/tick.cpp
2024-07-14 00:06:56 +08:00

30 lines
967 B
C++

#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 = g_midi_sequencer.get_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;
}
audio_frame midi_tick::to_audio_frame() const {
return audio_frame(*this);
}
audio_frame::audio_frame(const midi_tick& in_tick) {
auto bpm = g_midi_sequencer.get_bpm();
auto tpq = g_midi_sequencer.get_tpq();
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() const {
return midi_tick(*this);
}