Files
AronaSlate/Source/AronaCore/Midi/Time/TimePos.cpp
2024-01-25 11:21:15 +08:00

46 lines
885 B
C++

#include "TimePos.h"
#include "Singleton/PortAudioAPI.h"
#include "Singleton/MidiSequencer.h"
AudioFrame::AudioFrame(const MidiTick& InMidiTicks): Pos(InMidiTicks.Frames())
{
}
void AudioFrame::SetTick(MidiTick InMidiTicks)
{
Pos = InMidiTicks * FMidiSequencer::FramesPerTick();
}
MidiTick AudioFrame::Ticks() const
{
MidiTick Out;
Out.Ticks = Pos / FMidiSequencer::FramesPerTick();
return Out;
}
double AudioFrame::Milliseconds() const
{
return FrameToMilliseconds(Pos);
}
AudioFrame AudioFrame::FromFrames(double InFrames, float InFramesPerTick)
{
AudioFrame Out;
Out.Pos = InFrames / InFramesPerTick;
return Out;
}
double AudioFrame::FrameToMilliseconds(double InSample)
{
return InSample / FPortAudioAPI::Get().SampleRate * 1000.0;
}
AudioFrame MidiTick::Frames() const
{
AudioFrame Out;
Out.Pos = Ticks * FMidiSequencer::FramesPerTick();
return Out;
}