30 lines
967 B
C++
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);
|
|
}
|