UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MusicalTime.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7
8namespace MusicalTime
9{
10 static constexpr int32 TicksPerQuarterNote = 960;
11}
12
14{
16 : Bar(0)
17 , TickInBar(0)
18 , TicksPerBar(0)
19 , TicksPerBeat(0)
20 {}
21
22 FMusicalTime(int32 InBar, int32 InTickInBar = 0, int32 InTicksPerBar = MusicalTime::TicksPerQuarterNote * 4, int32 InTicksPerBeat = MusicalTime::TicksPerQuarterNote)
23 : Bar(InBar)
27 {}
28
35
39 bool IsValid() const
40 {
41 return TicksPerBar > 0 && TicksPerBeat > 0;
42 }
43
44 double FractionalBeatInBar() const
45 {
46 if (!IsValid())
47 {
48 return 0.0;
49 }
50 return static_cast<double>(TickInBar) / static_cast<double>(TicksPerBeat);
51 }
52
53 double FractionalBar() const
54 {
55 if (!IsValid())
56 {
57 return 0.0;
58 }
59 return static_cast<double>(Bar) + (static_cast<double>(TickInBar) / static_cast<double>(TicksPerBar));
60 }
61
65 bool Serialize(FArchive& Ar);
66
71 {
72 return FractionalBar() - Other.FractionalBar();
73 }
74
81
89
90public:
91
93 {
94 MusicalTime.Serialize(Ar);
95 return Ar;
96 }
97
99 {
100 return A.Bar == B.Bar && A.TickInBar == B.TickInBar;
101 }
102
103
105 {
106 return A.Bar != B.Bar || A.TickInBar != B.TickInBar;
107 }
108
109
111 {
112 return A.Bar > B.Bar || ( A.Bar == B.Bar && A.TickInBar > B.TickInBar );
113 }
114
115
117 {
118 return A.Bar > B.Bar || ( A.Bar == B.Bar && A.TickInBar >= B.TickInBar );
119 }
120
121
123 {
124 return A.Bar < B.Bar || ( A.Bar == B.Bar && A.TickInBar < B.TickInBar );
125 }
126
127
129 {
130 return A.Bar < B.Bar || ( A.Bar == B.Bar && A.TickInBar <= B.TickInBar );
131 }
132};
133
135{
136 Ar << Bar;
137 Ar << TickInBar;
138 Ar << TicksPerBar;
139 Ar << TicksPerBeat;
140 return true;
141}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Archive.h:1208
Definition MusicalTime.h:9
Definition MusicalTime.h:14
double operator-(const FMusicalTime &Other)
Definition MusicalTime.h:70
static FMusicalTime FloorBar(const FMusicalTime &InMusicalTime)
Definition MusicalTime.h:75
bool IsValid() const
Definition MusicalTime.h:39
friend UE_FORCEINLINE_HINT bool operator==(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:98
double FractionalBar() const
Definition MusicalTime.h:53
FMusicalTime()
Definition MusicalTime.h:15
friend UE_FORCEINLINE_HINT bool operator<=(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:128
double FractionalBeatInBar() const
Definition MusicalTime.h:44
int32 TicksPerBeat
Definition MusicalTime.h:34
friend UE_FORCEINLINE_HINT bool operator>=(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:116
int32 TicksPerBar
Definition MusicalTime.h:33
int32 TickInBar
Definition MusicalTime.h:32
bool Serialize(FArchive &Ar)
Definition MusicalTime.h:134
friend UE_FORCEINLINE_HINT bool operator!=(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:104
static FMusicalTime FloorBeat(const FMusicalTime &InMusicalTime)
Definition MusicalTime.h:82
friend FArchive & operator<<(FArchive &Ar, FMusicalTime &MusicalTime)
Definition MusicalTime.h:92
int32 Bar
Definition MusicalTime.h:31
friend UE_FORCEINLINE_HINT bool operator<(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:122
FMusicalTime(int32 InBar, int32 InTickInBar=0, int32 InTicksPerBar=MusicalTime::TicksPerQuarterNote *4, int32 InTicksPerBeat=MusicalTime::TicksPerQuarterNote)
Definition MusicalTime.h:22
friend UE_FORCEINLINE_HINT bool operator>(const FMusicalTime &A, const FMusicalTime &B)
Definition MusicalTime.h:110