diff --git a/Documentation/API/Parsers/ParseBpmFromChartSection.md b/Documentation/API/Parsers/ParseTempoChangesFromChartSection.md similarity index 64% rename from Documentation/API/Parsers/ParseBpmFromChartSection.md rename to Documentation/API/Parsers/ParseTempoChangesFromChartSection.md index 2d80a36..71940d7 100644 --- a/Documentation/API/Parsers/ParseBpmFromChartSection.md +++ b/Documentation/API/Parsers/ParseTempoChangesFromChartSection.md @@ -1,4 +1,4 @@ -#### `Parsers.ParseBpmFromChartSection` +#### `Parsers.ParseTempoChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -10,9 +10,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); +var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); -Console.WriteLine(bpm.Length); // 7 +Console.WriteLine(tempoChanges.Length); // 7 ``` ##### C++ @@ -31,10 +31,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto bpm = ParseBpmFromChartSection( + auto tempoChanges = ParseTempoChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - std::cout << size(bpm) << std::endl; // 7 + std::cout << size(tempoChanges) << std::endl; // 7 return 0; } @@ -51,7 +51,7 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var bpm = rhythm_game_utilities.parse_bpm_from_chart_section(sections["SyncTrack"]) + var tempo_changes = rhythm_game_utilities.parse_tempo_changes_from_chart_section(sections["SyncTrack"]) - print(bpm) + print(tempo_changes) ``` diff --git a/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md b/Documentation/API/Parsers/ParseTimeSignaturesChangesFromChartSection.md similarity index 60% rename from Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md rename to Documentation/API/Parsers/ParseTimeSignaturesChangesFromChartSection.md index 184fa43..7d3a4ca 100644 --- a/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md +++ b/Documentation/API/Parsers/ParseTimeSignaturesChangesFromChartSection.md @@ -1,4 +1,4 @@ -#### `Parsers.ParseTimeSignaturesFromChartSection` +#### `Parsers.ParseTimeSignatureChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -10,9 +10,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); +var timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); -Console.WriteLine(timeSignatures.Length); // 4 +Console.WriteLine(timeSignatureChanges.Length); // 4 ``` ##### C++ @@ -31,10 +31,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto timeSignatures = ParseTimeSignaturesFromChartSection( + auto timeSignatureChanges = ParseTimeSignatureChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - std::cout << size(timeSignatures) << std::endl; // 4 + std::cout << size(timeSignatureChanges) << std::endl; // 4 return 0; } @@ -51,7 +51,7 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var time_signatures = rhythm_game_utilities.parse_time_signatures_from_chart_section(sections["SyncTrack"]) + var time_signature_changes = rhythm_game_utilities.parse_time_signature_changes_from_chart_section(sections["SyncTrack"]) - print(time_signatures) + print(time_signature_changes) ``` diff --git a/Documentation/API/Utilities/CalculateAccuracyRatio.md b/Documentation/API/Utilities/CalculateAccuracyRatio.md index 6abd6f8..8608f77 100644 --- a/Documentation/API/Utilities/CalculateAccuracyRatio.md +++ b/Documentation/API/Utilities/CalculateAccuracyRatio.md @@ -12,14 +12,14 @@ const int seconds = 2; const int resolution = 192; const int positionDelta = 50; -var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -41,12 +41,12 @@ int main() const int resolution = 192; const int positionDelta = 50; - std::vector bpmChanges = {{0, 120000}}; + std::vector tempoChanges = {{0, 120000}}; std::vector timeSignatureChanges = {{0, 4}}; auto note = new Note{750}; auto currentPosition = ConvertSecondsToTicks( - seconds, resolution, bpmChanges, timeSignatureChanges); + seconds, resolution, tempoChanges, timeSignatureChanges); auto value = CalculateAccuracyRatio(note->Position, currentPosition, positionDelta); @@ -67,7 +67,7 @@ func _ready() -> void: var resolution = 192 var position_delta = 50 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 120000 } ] @@ -75,7 +75,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) var value = rhythm_game_utilities.calculate_accuracy_ratio(750, current_position, position_delta) diff --git a/Documentation/API/Utilities/CalculateBeatBars.md b/Documentation/API/Utilities/CalculateBeatBars.md index c038e6a..4d1e775 100644 --- a/Documentation/API/Utilities/CalculateBeatBars.md +++ b/Documentation/API/Utilities/CalculateBeatBars.md @@ -5,7 +5,7 @@ ##### C# ```csharp -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -13,7 +13,7 @@ var bpmChanges = new Tempo[] new() { Position = 42240, BPM = 111980 } }; -var beatBars = Utilities.CalculateBeatBars(bpmChanges); +var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 ``` @@ -32,12 +32,12 @@ int main() const int resolution = 192; const int timeSignature = 4; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; auto beatBars = - CalculateBeatBars(bpmChanges, resolution, timeSignature, true); + CalculateBeatBars(tempoChanges, resolution, timeSignature, true); std::cout << size(beatBars) << std::endl; // 440 @@ -54,7 +54,7 @@ func _ready() -> void: var resolution = 192 var time_signature = 4 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 8800 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -64,7 +64,7 @@ func _ready() -> void: {"position": 42240, "bpm": 111980 } ] - var beat_bars = rhythm_game_utilities.calculate_beat_bars(bpm_changes, resolution, time_signature, true) + var beat_bars = rhythm_game_utilities.calculate_beat_bars(tempo_changes, resolution, time_signature, true) print(beat_bars) ``` diff --git a/Documentation/API/Utilities/ConvertSecondsToTicks.md b/Documentation/API/Utilities/ConvertSecondsToTicks.md index d5af1ff..c9af538 100644 --- a/Documentation/API/Utilities/ConvertSecondsToTicks.md +++ b/Documentation/API/Utilities/ConvertSecondsToTicks.md @@ -11,7 +11,7 @@ using RhythmGameUtilities; const int seconds = 5; const int resolution = 192; -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -21,7 +21,7 @@ var bpmChanges = new Tempo[] var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; -var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); +var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 ``` @@ -40,13 +40,13 @@ int main() const int seconds = 5; const int resolution = 192; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; - auto ticks = ConvertSecondsToTicks(seconds, resolution, bpmChanges, + auto ticks = ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); std::cout << ticks << std::endl; // 1408 @@ -64,7 +64,7 @@ func _ready() -> void: var seconds = 5 var resolution = 192 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 88000 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -78,7 +78,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) print(current_position) # 1408 ``` diff --git a/Documentation/Architecture.md b/Documentation/Architecture.md index 0f883c6..f12368c 100644 --- a/Documentation/Architecture.md +++ b/Documentation/Architecture.md @@ -19,11 +19,11 @@ graph LR; subgraph parsersGraph ["Parsers"] parseSectionsFromChart["ParseSectionsFromChart()"] - parseBpmFromChartSection["ParseBpmFromChartSection()"] + parseBpmFromChartSection["ParseTempoChangesFromChartSection()"] parseLyricsFromChartSection["ParseLyricsFromChartSection()"] parseMetaDataFromChartSection["ParseMetaDataFromChartSection()"] parseNotesFromChartSection["ParseNotesFromChartSection()"] - parseTimeSignaturesFromChartSection["ParseTimeSignaturesFromChartSection()"] + parseTimeSignaturesFromChartSection["ParseTimeSignatureChangesFromChartSection()"] parseSectionsFromChart-->parseBpmFromChartSection parseSectionsFromChart-->parseLyricsFromChartSection diff --git a/Documentation/README.md b/Documentation/README.md index e69338e..bb74788 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -40,12 +40,12 @@ _Prototype game built using these utilities._ 1. [InverseLerp](#commoninverselerp) 1. [Lerp](#commonlerp) 1. [Parsers](#parsers) - 1. [ParseBpmFromChartSection](#parsersparsebpmfromchartsection) + 1. [ParseTempoChangesFromChartSection](#parsersparsetempochangesfromchartsection) 1. [ParseLyricsFromChartSection](#parsersparselyricsfromchartsection) 1. [ParseMetaDataFromChartSection](#parsersparsemetadatafromchartsection) 1. [ParseNotesFromChartSection](#parsersparsenotesfromchartsection) 1. [ParseSectionsFromChart](#parsersparsesectionsfromchart) - 1. [ParseTimeSignaturesFromChartSection](#parsersparsetimesignaturesfromchartsection) + 1. [ParseTimeSignatureChangesFromChartSection](#parsersparsetimesignaturechangesfromchartsection) 1. [Utilities](#utilities) 1. [CalculateAccuracyRatio](#utilitiescalculateaccuracyratio) 1. [CalculateBeatBars](#utilitiescalculatebeatbars) diff --git a/GodotPlugin/include/rhythm_game_utilities.cpp b/GodotPlugin/include/rhythm_game_utilities.cpp index 091f38a..52280e2 100644 --- a/GodotPlugin/include/rhythm_game_utilities.cpp +++ b/GodotPlugin/include/rhythm_game_utilities.cpp @@ -22,8 +22,8 @@ void rhythm_game_utilities::_bind_methods() ClassDB::bind_static_method( "rhythm_game_utilities", - D_METHOD("parse_bpm_from_chart_section", "section"), - &rhythm_game_utilities::parse_bpm_from_chart_section); + D_METHOD("parse_tempo_changes_from_chart_section", "section"), + &rhythm_game_utilities::parse_tempo_changes_from_chart_section); ClassDB::bind_static_method( "rhythm_game_utilities", @@ -47,8 +47,9 @@ void rhythm_game_utilities::_bind_methods() ClassDB::bind_static_method( "rhythm_game_utilities", - D_METHOD("parse_time_signatures_from_chart_section", "section"), - &rhythm_game_utilities::parse_time_signatures_from_chart_section); + D_METHOD("parse_time_signature_changes_from_chart_section", "section"), + &rhythm_game_utilities:: + parse_time_signature_changes_from_chart_section); // Utilities @@ -59,7 +60,7 @@ void rhythm_game_utilities::_bind_methods() &rhythm_game_utilities::calculate_accuracy_ratio); ClassDB::bind_static_method("rhythm_game_utilities", - D_METHOD("calculate_beat_bars", "bpm_changes", + D_METHOD("calculate_beat_bars", "tempo_changes", "resolution", "ts", "include_half_notes"), &rhythm_game_utilities::calculate_beat_bars); @@ -67,7 +68,7 @@ void rhythm_game_utilities::_bind_methods() ClassDB::bind_static_method( "rhythm_game_utilities", D_METHOD("convert_seconds_to_ticks", "seconds", "resolution", - "bpm_changes", "time_signature_changes"), + "tempo_changes", "time_signature_changes"), &rhythm_game_utilities::convert_seconds_to_ticks); ClassDB::bind_static_method( @@ -105,24 +106,26 @@ float rhythm_game_utilities::lerp(float a, float b, float t) // Parsers -Array rhythm_game_utilities::parse_bpm_from_chart_section(Array section) +Array rhythm_game_utilities::parse_tempo_changes_from_chart_section( + Array section) { - auto bpm_changes_internal = RhythmGameUtilities::ParseBpmFromChartSection( - convert_section_to_section_internal(section)); + auto tempo_changes_internal = + RhythmGameUtilities::ParseTempoChangesFromChartSection( + convert_section_to_section_internal(section)); - Array bpm_changes; + Array tempo_changes; - for (auto &bpm_change_internal : bpm_changes_internal) + for (auto &tempo_change_internal : tempo_changes_internal) { - Dictionary bpm_change; + Dictionary tempo_change; - bpm_change["position"] = bpm_change_internal.Position; - bpm_change["bpm"] = bpm_change_internal.BPM; + tempo_change["position"] = tempo_change_internal.Position; + tempo_change["bpm"] = tempo_change_internal.BPM; - bpm_changes.append(bpm_change); + tempo_changes.append(tempo_change); } - return bpm_changes; + return tempo_changes; } Dictionary rhythm_game_utilities::parse_lyrics_from_chart_section(Array section) @@ -219,27 +222,30 @@ Dictionary rhythm_game_utilities::parse_sections_from_chart(String contents) return sections; } -Array rhythm_game_utilities::parse_time_signatures_from_chart_section( +Array rhythm_game_utilities::parse_time_signature_changes_from_chart_section( Array section) { - auto time_signatures_internal = - RhythmGameUtilities::ParseTimeSignaturesFromChartSection( + auto time_signature_changes_internal = + RhythmGameUtilities::ParseTimeSignatureChangesFromChartSection( convert_section_to_section_internal(section)); - Array time_signatures; + Array time_signature_changes; - for (auto &time_signature_internal : time_signatures_internal) + for (auto &time_signature_change_internal : time_signature_changes_internal) { - Dictionary time_signature; + Dictionary time_signature_change; - time_signature["position"] = time_signature_internal.Position; - time_signature["numerator"] = time_signature_internal.Numerator; - time_signature["denominator"] = time_signature_internal.Denominator; + time_signature_change["position"] = + time_signature_change_internal.Position; + time_signature_change["numerator"] = + time_signature_change_internal.Numerator; + time_signature_change["denominator"] = + time_signature_change_internal.Denominator; - time_signatures.append(time_signature); + time_signature_changes.append(time_signature_change); } - return time_signatures; + return time_signature_changes; } // Utilities @@ -252,30 +258,30 @@ float rhythm_game_utilities::calculate_accuracy_ratio(int position, current_position, delta); } -Array rhythm_game_utilities::calculate_beat_bars(Array bpm_changes, +Array rhythm_game_utilities::calculate_beat_bars(Array tempo_changes, int resolution, int ts, bool include_half_notes) { - std::vector bpm_changes_internal; - bpm_changes_internal.reserve(bpm_changes.size()); + std::vector tempo_changes_internal; + tempo_changes_internal.reserve(tempo_changes.size()); - for (auto i = 0; i < bpm_changes.size(); i += 1) + for (auto i = 0; i < tempo_changes.size(); i += 1) { - RhythmGameUtilities::Tempo bpm_change_internal; + RhythmGameUtilities::Tempo tempo_change_internal; - if (bpm_changes[i].get_type() == Variant::DICTIONARY) + if (tempo_changes[i].get_type() == Variant::DICTIONARY) { - Dictionary variant = bpm_changes[i]; + Dictionary variant = tempo_changes[i]; - bpm_change_internal.Position = variant["position"]; - bpm_change_internal.BPM = variant["bpm"]; + tempo_change_internal.Position = variant["position"]; + tempo_change_internal.BPM = variant["bpm"]; } - bpm_changes_internal.push_back(bpm_change_internal); + tempo_changes_internal.push_back(tempo_change_internal); } auto beat_bars_internal = RhythmGameUtilities::CalculateBeatBars( - bpm_changes_internal, resolution, ts, include_half_notes); + tempo_changes_internal, resolution, ts, include_half_notes); Array beat_bars_dictionary_array; @@ -293,25 +299,25 @@ Array rhythm_game_utilities::calculate_beat_bars(Array bpm_changes, } int rhythm_game_utilities::convert_seconds_to_ticks( - float seconds, int resolution, Array bpm_changes, + float seconds, int resolution, Array tempo_changes, Array time_signature_changes) { - std::vector bpm_changes_internal; - bpm_changes_internal.reserve(bpm_changes.size()); + std::vector tempo_changes_internal; + tempo_changes_internal.reserve(tempo_changes.size()); - for (auto i = 0; i < bpm_changes.size(); i += 1) + for (auto i = 0; i < tempo_changes.size(); i += 1) { - RhythmGameUtilities::Tempo bpm_change_internal; + RhythmGameUtilities::Tempo tempo_change_internal; - if (bpm_changes[i].get_type() == Variant::DICTIONARY) + if (tempo_changes[i].get_type() == Variant::DICTIONARY) { - Dictionary variant = bpm_changes[i]; + Dictionary variant = tempo_changes[i]; - bpm_change_internal.Position = variant["position"]; - bpm_change_internal.BPM = variant["bpm"]; + tempo_change_internal.Position = variant["position"]; + tempo_change_internal.BPM = variant["bpm"]; } - bpm_changes_internal.push_back(bpm_change_internal); + tempo_changes_internal.push_back(tempo_change_internal); } std::vector @@ -335,7 +341,7 @@ int rhythm_game_utilities::convert_seconds_to_ticks( } return RhythmGameUtilities::ConvertSecondsToTicks( - seconds, resolution, bpm_changes_internal, + seconds, resolution, tempo_changes_internal, time_signature_changes_internal); } diff --git a/GodotPlugin/include/rhythm_game_utilities.h b/GodotPlugin/include/rhythm_game_utilities.h index 6e554fa..04b3c63 100644 --- a/GodotPlugin/include/rhythm_game_utilities.h +++ b/GodotPlugin/include/rhythm_game_utilities.h @@ -24,7 +24,7 @@ class rhythm_game_utilities : public Object // Parsers - static Array parse_bpm_from_chart_section(Array section); + static Array parse_tempo_changes_from_chart_section(Array section); static Dictionary parse_lyrics_from_chart_section(Array section); @@ -34,18 +34,18 @@ class rhythm_game_utilities : public Object static Dictionary parse_sections_from_chart(String contents); - static Array parse_time_signatures_from_chart_section(Array section); + static Array parse_time_signature_changes_from_chart_section(Array section); // Utilities static float calculate_accuracy_ratio(int position, int current_position, int delta = 50); - static Array calculate_beat_bars(Array bpm_changes, int resolution, int ts, - bool include_half_notes); + static Array calculate_beat_bars(Array tempo_changes, int resolution, + int ts, bool include_half_notes); static int convert_seconds_to_ticks(float seconds, int resolution, - Array bpm_changes, + Array tempo_changes, Array time_signature_changes); static float convert_tick_to_position(int tick, int resolution); diff --git a/README.md b/README.md index d582438..ad57e09 100644 --- a/README.md +++ b/README.md @@ -40,12 +40,12 @@ _Prototype game built using these utilities._ 1. [InverseLerp](#commoninverselerp) 1. [Lerp](#commonlerp) 1. [Parsers](#parsers) - 1. [ParseBpmFromChartSection](#parsersparsebpmfromchartsection) + 1. [ParseTempoChangesFromChartSection](#parsersparsetempochangesfromchartsection) 1. [ParseLyricsFromChartSection](#parsersparselyricsfromchartsection) 1. [ParseMetaDataFromChartSection](#parsersparsemetadatafromchartsection) 1. [ParseNotesFromChartSection](#parsersparsenotesfromchartsection) 1. [ParseSectionsFromChart](#parsersparsesectionsfromchart) - 1. [ParseTimeSignaturesFromChartSection](#parsersparsetimesignaturesfromchartsection) + 1. [ParseTimeSignatureChangesFromChartSection](#parsersparsetimesignaturechangesfromchartsection) 1. [Utilities](#utilities) 1. [CalculateAccuracyRatio](#utilitiescalculateaccuracyratio) 1. [CalculateBeatBars](#utilitiescalculatebeatbars) @@ -275,7 +275,7 @@ func _ready() -> void: Read more about `.chart` files: -#### `Parsers.ParseBpmFromChartSection` +#### `Parsers.ParseLyricsFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -287,9 +287,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); +var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); -Console.WriteLine(bpm.Length); // 7 +Console.WriteLine(lyrics.Count); // 12 ``` ##### C++ @@ -308,10 +308,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto bpm = ParseBpmFromChartSection( - sections.at(ToString(NamedSection::SyncTrack))); + auto lyrics = ParseLyricsFromChartSection( + sections.at(ToString(NamedSection::Events))); - std::cout << size(bpm) << std::endl; // 7 + std::cout << size(lyrics) << std::endl; // 12 return 0; } @@ -328,12 +328,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var bpm = rhythm_game_utilities.parse_bpm_from_chart_section(sections["SyncTrack"]) + var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) - print(bpm) + print(lyrics) ``` -#### `Parsers.ParseLyricsFromChartSection` +#### `Parsers.ParseMetaDataFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -345,9 +345,11 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); +var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); -Console.WriteLine(lyrics.Count); // 12 +Console.WriteLine(metaData["Name"]); // Example Song +Console.WriteLine(metaData["Resolution"]); // 192 +Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg ``` ##### C++ @@ -366,10 +368,12 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto lyrics = ParseLyricsFromChartSection( - sections.at(ToString(NamedSection::Events))); + auto metaData = ParseMetaDataFromChartSection( + sections.at(ToString(NamedSection::Song))); - std::cout << size(lyrics) << std::endl; // 12 + std::cout << metaData["Name"] << std::endl; // Example Song + std::cout << metaData["Resolution"] << std::endl; // 192 + std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg return 0; } @@ -386,12 +390,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) + var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) - print(lyrics) + print(meta_data) ``` -#### `Parsers.ParseMetaDataFromChartSection` +#### `Parsers.ParseNotesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -403,11 +407,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); +var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); -Console.WriteLine(metaData["Name"]); // Example Song -Console.WriteLine(metaData["Resolution"]); // 192 -Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg +Console.WriteLine(notes.Length); // 8 ``` ##### C++ @@ -426,12 +428,18 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto metaData = ParseMetaDataFromChartSection( - sections.at(ToString(NamedSection::Song))); + auto notes = ParseNotesFromChartSection( + sections.at(ToString(Difficulty::Expert) + "Single")); - std::cout << metaData["Name"] << std::endl; // Example Song - std::cout << metaData["Resolution"] << std::endl; // 192 - std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg + for (auto ¬e : notes) + { + if (note.HandPosition > 5) + { + continue; + } + + std::cout << note.Position << " " << note.HandPosition << std::endl; + } return 0; } @@ -448,12 +456,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) + var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - print(meta_data) + print(notes) ``` -#### `Parsers.ParseNotesFromChartSection` +#### `Parsers.ParseSectionsFromChart` > Languages: `C#` `C++` `GDScript` @@ -465,9 +473,7 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); - -Console.WriteLine(notes.Length); // 8 +Console.WriteLine(sections.Count); // 4 ``` ##### C++ @@ -486,18 +492,7 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto notes = ParseNotesFromChartSection( - sections.at(ToString(Difficulty::Expert) + "Single")); - - for (auto ¬e : notes) - { - if (note.HandPosition > 5) - { - continue; - } - - std::cout << note.Position << " " << note.HandPosition << std::endl; - } + std::cout << size(sections) << std::endl; // 4 return 0; } @@ -514,12 +509,10 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - - print(notes) + print(sections) ``` -#### `Parsers.ParseSectionsFromChart` +#### `Parsers.ParseTempoChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -531,7 +524,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -Console.WriteLine(sections.Count); // 4 +var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); + +Console.WriteLine(tempoChanges.Length); // 7 ``` ##### C++ @@ -550,7 +545,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - std::cout << size(sections) << std::endl; // 4 + auto tempoChanges = ParseTempoChangesFromChartSection( + sections.at(ToString(NamedSection::SyncTrack))); + + std::cout << size(tempoChanges) << std::endl; // 7 return 0; } @@ -567,10 +565,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - print(sections) + var tempo_changes = rhythm_game_utilities.parse_tempo_changes_from_chart_section(sections["SyncTrack"]) + + print(tempo_changes) ``` -#### `Parsers.ParseTimeSignaturesFromChartSection` +#### `Parsers.ParseTimeSignatureChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -582,9 +582,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); +var timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); -Console.WriteLine(timeSignatures.Length); // 4 +Console.WriteLine(timeSignatureChanges.Length); // 4 ``` ##### C++ @@ -603,10 +603,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto timeSignatures = ParseTimeSignaturesFromChartSection( + auto timeSignatureChanges = ParseTimeSignatureChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - std::cout << size(timeSignatures) << std::endl; // 4 + std::cout << size(timeSignatureChanges) << std::endl; // 4 return 0; } @@ -623,9 +623,9 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var time_signatures = rhythm_game_utilities.parse_time_signatures_from_chart_section(sections["SyncTrack"]) + var time_signature_changes = rhythm_game_utilities.parse_time_signature_changes_from_chart_section(sections["SyncTrack"]) - print(time_signatures) + print(time_signature_changes) ``` ### Utilities @@ -644,14 +644,14 @@ const int seconds = 2; const int resolution = 192; const int positionDelta = 50; -var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -673,12 +673,12 @@ int main() const int resolution = 192; const int positionDelta = 50; - std::vector bpmChanges = {{0, 120000}}; + std::vector tempoChanges = {{0, 120000}}; std::vector timeSignatureChanges = {{0, 4}}; auto note = new Note{750}; auto currentPosition = ConvertSecondsToTicks( - seconds, resolution, bpmChanges, timeSignatureChanges); + seconds, resolution, tempoChanges, timeSignatureChanges); auto value = CalculateAccuracyRatio(note->Position, currentPosition, positionDelta); @@ -699,7 +699,7 @@ func _ready() -> void: var resolution = 192 var position_delta = 50 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 120000 } ] @@ -707,7 +707,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) var value = rhythm_game_utilities.calculate_accuracy_ratio(750, current_position, position_delta) @@ -721,7 +721,7 @@ func _ready() -> void: ##### C# ```csharp -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -729,7 +729,7 @@ var bpmChanges = new Tempo[] new() { Position = 42240, BPM = 111980 } }; -var beatBars = Utilities.CalculateBeatBars(bpmChanges); +var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 ``` @@ -748,12 +748,12 @@ int main() const int resolution = 192; const int timeSignature = 4; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; auto beatBars = - CalculateBeatBars(bpmChanges, resolution, timeSignature, true); + CalculateBeatBars(tempoChanges, resolution, timeSignature, true); std::cout << size(beatBars) << std::endl; // 440 @@ -770,7 +770,7 @@ func _ready() -> void: var resolution = 192 var time_signature = 4 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 8800 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -780,7 +780,7 @@ func _ready() -> void: {"position": 42240, "bpm": 111980 } ] - var beat_bars = rhythm_game_utilities.calculate_beat_bars(bpm_changes, resolution, time_signature, true) + var beat_bars = rhythm_game_utilities.calculate_beat_bars(tempo_changes, resolution, time_signature, true) print(beat_bars) ``` @@ -798,7 +798,7 @@ using RhythmGameUtilities; const int seconds = 5; const int resolution = 192; -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -808,7 +808,7 @@ var bpmChanges = new Tempo[] var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; -var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); +var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 ``` @@ -827,13 +827,13 @@ int main() const int seconds = 5; const int resolution = 192; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; - auto ticks = ConvertSecondsToTicks(seconds, resolution, bpmChanges, + auto ticks = ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); std::cout << ticks << std::endl; // 1408 @@ -851,7 +851,7 @@ func _ready() -> void: var seconds = 5 var resolution = 192 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 88000 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -865,7 +865,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) print(current_position) # 1408 ``` @@ -1123,11 +1123,11 @@ graph LR; subgraph parsersGraph ["Parsers"] parseSectionsFromChart["ParseSectionsFromChart()"] - parseBpmFromChartSection["ParseBpmFromChartSection()"] + parseBpmFromChartSection["ParseTempoChangesFromChartSection()"] parseLyricsFromChartSection["ParseLyricsFromChartSection()"] parseMetaDataFromChartSection["ParseMetaDataFromChartSection()"] parseNotesFromChartSection["ParseNotesFromChartSection()"] - parseTimeSignaturesFromChartSection["ParseTimeSignaturesFromChartSection()"] + parseTimeSignaturesFromChartSection["ParseTimeSignatureChangesFromChartSection()"] parseSectionsFromChart-->parseBpmFromChartSection parseSectionsFromChart-->parseLyricsFromChartSection diff --git a/RhythmGameUtilities.Tests/ParsersTest.cs b/RhythmGameUtilities.Tests/ParsersTest.cs index a508634..896e5a4 100644 --- a/RhythmGameUtilities.Tests/ParsersTest.cs +++ b/RhythmGameUtilities.Tests/ParsersTest.cs @@ -8,15 +8,15 @@ public class ParsersTest { [Test] - public void TestParseBpmFromChartSection() + public void TestParseTempoChangesFromChartSection() { var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); - var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); + var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); - Console.WriteLine(bpm.Length); // 7 + Console.WriteLine(tempoChanges.Length); // 7 - Assert.That(bpm.Length, Is.EqualTo(7)); + Assert.That(tempoChanges.Length, Is.EqualTo(7)); } [Test] @@ -77,11 +77,11 @@ public void TestParseSectionsFromChart() } [Test] - public void TestParseTimeSignaturesFromChartSection() + public void TestParseTimeSignatureChangesFromChartSection() { var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); - var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); + var timeSignatures = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); Assert.That(timeSignatures.Length, Is.EqualTo(4)); } diff --git a/RhythmGameUtilities.Tests/UtilitiesTest.cs b/RhythmGameUtilities.Tests/UtilitiesTest.cs index c907143..604813a 100644 --- a/RhythmGameUtilities.Tests/UtilitiesTest.cs +++ b/RhythmGameUtilities.Tests/UtilitiesTest.cs @@ -14,14 +14,14 @@ public void TestCalculateAccuracyRatio() const int resolution = 192; const int positionDelta = 50; - var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -41,7 +41,7 @@ public void TestCalculateAccuracyRatioContinued() [Test] public void TestCalculateBeatBars() { - var bpmChanges = new Tempo[] + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -49,7 +49,7 @@ public void TestCalculateBeatBars() new() { Position = 42240, BPM = 111980 } }; - var beatBars = Utilities.CalculateBeatBars(bpmChanges); + var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 @@ -62,7 +62,7 @@ public void TestConvertSecondsToTicks() const int seconds = 5; const int resolution = 192; - var bpmChanges = new Tempo[] + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -72,7 +72,7 @@ public void TestConvertSecondsToTicks() var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; - var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 diff --git a/RhythmGameUtilities/README.md b/RhythmGameUtilities/README.md index d582438..ad57e09 100644 --- a/RhythmGameUtilities/README.md +++ b/RhythmGameUtilities/README.md @@ -40,12 +40,12 @@ _Prototype game built using these utilities._ 1. [InverseLerp](#commoninverselerp) 1. [Lerp](#commonlerp) 1. [Parsers](#parsers) - 1. [ParseBpmFromChartSection](#parsersparsebpmfromchartsection) + 1. [ParseTempoChangesFromChartSection](#parsersparsetempochangesfromchartsection) 1. [ParseLyricsFromChartSection](#parsersparselyricsfromchartsection) 1. [ParseMetaDataFromChartSection](#parsersparsemetadatafromchartsection) 1. [ParseNotesFromChartSection](#parsersparsenotesfromchartsection) 1. [ParseSectionsFromChart](#parsersparsesectionsfromchart) - 1. [ParseTimeSignaturesFromChartSection](#parsersparsetimesignaturesfromchartsection) + 1. [ParseTimeSignatureChangesFromChartSection](#parsersparsetimesignaturechangesfromchartsection) 1. [Utilities](#utilities) 1. [CalculateAccuracyRatio](#utilitiescalculateaccuracyratio) 1. [CalculateBeatBars](#utilitiescalculatebeatbars) @@ -275,7 +275,7 @@ func _ready() -> void: Read more about `.chart` files: -#### `Parsers.ParseBpmFromChartSection` +#### `Parsers.ParseLyricsFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -287,9 +287,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); +var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); -Console.WriteLine(bpm.Length); // 7 +Console.WriteLine(lyrics.Count); // 12 ``` ##### C++ @@ -308,10 +308,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto bpm = ParseBpmFromChartSection( - sections.at(ToString(NamedSection::SyncTrack))); + auto lyrics = ParseLyricsFromChartSection( + sections.at(ToString(NamedSection::Events))); - std::cout << size(bpm) << std::endl; // 7 + std::cout << size(lyrics) << std::endl; // 12 return 0; } @@ -328,12 +328,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var bpm = rhythm_game_utilities.parse_bpm_from_chart_section(sections["SyncTrack"]) + var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) - print(bpm) + print(lyrics) ``` -#### `Parsers.ParseLyricsFromChartSection` +#### `Parsers.ParseMetaDataFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -345,9 +345,11 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); +var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); -Console.WriteLine(lyrics.Count); // 12 +Console.WriteLine(metaData["Name"]); // Example Song +Console.WriteLine(metaData["Resolution"]); // 192 +Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg ``` ##### C++ @@ -366,10 +368,12 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto lyrics = ParseLyricsFromChartSection( - sections.at(ToString(NamedSection::Events))); + auto metaData = ParseMetaDataFromChartSection( + sections.at(ToString(NamedSection::Song))); - std::cout << size(lyrics) << std::endl; // 12 + std::cout << metaData["Name"] << std::endl; // Example Song + std::cout << metaData["Resolution"] << std::endl; // 192 + std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg return 0; } @@ -386,12 +390,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) + var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) - print(lyrics) + print(meta_data) ``` -#### `Parsers.ParseMetaDataFromChartSection` +#### `Parsers.ParseNotesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -403,11 +407,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); +var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); -Console.WriteLine(metaData["Name"]); // Example Song -Console.WriteLine(metaData["Resolution"]); // 192 -Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg +Console.WriteLine(notes.Length); // 8 ``` ##### C++ @@ -426,12 +428,18 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto metaData = ParseMetaDataFromChartSection( - sections.at(ToString(NamedSection::Song))); + auto notes = ParseNotesFromChartSection( + sections.at(ToString(Difficulty::Expert) + "Single")); - std::cout << metaData["Name"] << std::endl; // Example Song - std::cout << metaData["Resolution"] << std::endl; // 192 - std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg + for (auto ¬e : notes) + { + if (note.HandPosition > 5) + { + continue; + } + + std::cout << note.Position << " " << note.HandPosition << std::endl; + } return 0; } @@ -448,12 +456,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) + var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - print(meta_data) + print(notes) ``` -#### `Parsers.ParseNotesFromChartSection` +#### `Parsers.ParseSectionsFromChart` > Languages: `C#` `C++` `GDScript` @@ -465,9 +473,7 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); - -Console.WriteLine(notes.Length); // 8 +Console.WriteLine(sections.Count); // 4 ``` ##### C++ @@ -486,18 +492,7 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto notes = ParseNotesFromChartSection( - sections.at(ToString(Difficulty::Expert) + "Single")); - - for (auto ¬e : notes) - { - if (note.HandPosition > 5) - { - continue; - } - - std::cout << note.Position << " " << note.HandPosition << std::endl; - } + std::cout << size(sections) << std::endl; // 4 return 0; } @@ -514,12 +509,10 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - - print(notes) + print(sections) ``` -#### `Parsers.ParseSectionsFromChart` +#### `Parsers.ParseTempoChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -531,7 +524,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -Console.WriteLine(sections.Count); // 4 +var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); + +Console.WriteLine(tempoChanges.Length); // 7 ``` ##### C++ @@ -550,7 +545,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - std::cout << size(sections) << std::endl; // 4 + auto tempoChanges = ParseTempoChangesFromChartSection( + sections.at(ToString(NamedSection::SyncTrack))); + + std::cout << size(tempoChanges) << std::endl; // 7 return 0; } @@ -567,10 +565,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - print(sections) + var tempo_changes = rhythm_game_utilities.parse_tempo_changes_from_chart_section(sections["SyncTrack"]) + + print(tempo_changes) ``` -#### `Parsers.ParseTimeSignaturesFromChartSection` +#### `Parsers.ParseTimeSignatureChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -582,9 +582,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); +var timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); -Console.WriteLine(timeSignatures.Length); // 4 +Console.WriteLine(timeSignatureChanges.Length); // 4 ``` ##### C++ @@ -603,10 +603,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto timeSignatures = ParseTimeSignaturesFromChartSection( + auto timeSignatureChanges = ParseTimeSignatureChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - std::cout << size(timeSignatures) << std::endl; // 4 + std::cout << size(timeSignatureChanges) << std::endl; // 4 return 0; } @@ -623,9 +623,9 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var time_signatures = rhythm_game_utilities.parse_time_signatures_from_chart_section(sections["SyncTrack"]) + var time_signature_changes = rhythm_game_utilities.parse_time_signature_changes_from_chart_section(sections["SyncTrack"]) - print(time_signatures) + print(time_signature_changes) ``` ### Utilities @@ -644,14 +644,14 @@ const int seconds = 2; const int resolution = 192; const int positionDelta = 50; -var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -673,12 +673,12 @@ int main() const int resolution = 192; const int positionDelta = 50; - std::vector bpmChanges = {{0, 120000}}; + std::vector tempoChanges = {{0, 120000}}; std::vector timeSignatureChanges = {{0, 4}}; auto note = new Note{750}; auto currentPosition = ConvertSecondsToTicks( - seconds, resolution, bpmChanges, timeSignatureChanges); + seconds, resolution, tempoChanges, timeSignatureChanges); auto value = CalculateAccuracyRatio(note->Position, currentPosition, positionDelta); @@ -699,7 +699,7 @@ func _ready() -> void: var resolution = 192 var position_delta = 50 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 120000 } ] @@ -707,7 +707,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) var value = rhythm_game_utilities.calculate_accuracy_ratio(750, current_position, position_delta) @@ -721,7 +721,7 @@ func _ready() -> void: ##### C# ```csharp -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -729,7 +729,7 @@ var bpmChanges = new Tempo[] new() { Position = 42240, BPM = 111980 } }; -var beatBars = Utilities.CalculateBeatBars(bpmChanges); +var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 ``` @@ -748,12 +748,12 @@ int main() const int resolution = 192; const int timeSignature = 4; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; auto beatBars = - CalculateBeatBars(bpmChanges, resolution, timeSignature, true); + CalculateBeatBars(tempoChanges, resolution, timeSignature, true); std::cout << size(beatBars) << std::endl; // 440 @@ -770,7 +770,7 @@ func _ready() -> void: var resolution = 192 var time_signature = 4 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 8800 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -780,7 +780,7 @@ func _ready() -> void: {"position": 42240, "bpm": 111980 } ] - var beat_bars = rhythm_game_utilities.calculate_beat_bars(bpm_changes, resolution, time_signature, true) + var beat_bars = rhythm_game_utilities.calculate_beat_bars(tempo_changes, resolution, time_signature, true) print(beat_bars) ``` @@ -798,7 +798,7 @@ using RhythmGameUtilities; const int seconds = 5; const int resolution = 192; -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -808,7 +808,7 @@ var bpmChanges = new Tempo[] var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; -var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); +var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 ``` @@ -827,13 +827,13 @@ int main() const int seconds = 5; const int resolution = 192; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; - auto ticks = ConvertSecondsToTicks(seconds, resolution, bpmChanges, + auto ticks = ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); std::cout << ticks << std::endl; // 1408 @@ -851,7 +851,7 @@ func _ready() -> void: var seconds = 5 var resolution = 192 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 88000 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -865,7 +865,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) print(current_position) # 1408 ``` @@ -1123,11 +1123,11 @@ graph LR; subgraph parsersGraph ["Parsers"] parseSectionsFromChart["ParseSectionsFromChart()"] - parseBpmFromChartSection["ParseBpmFromChartSection()"] + parseBpmFromChartSection["ParseTempoChangesFromChartSection()"] parseLyricsFromChartSection["ParseLyricsFromChartSection()"] parseMetaDataFromChartSection["ParseMetaDataFromChartSection()"] parseNotesFromChartSection["ParseNotesFromChartSection()"] - parseTimeSignaturesFromChartSection["ParseTimeSignaturesFromChartSection()"] + parseTimeSignaturesFromChartSection["ParseTimeSignatureChangesFromChartSection()"] parseSectionsFromChart-->parseBpmFromChartSection parseSectionsFromChart-->parseLyricsFromChartSection diff --git a/RhythmGameUtilities/Scripts/Parsers.cs b/RhythmGameUtilities/Scripts/Parsers.cs index 3b7c2ff..920df70 100644 --- a/RhythmGameUtilities/Scripts/Parsers.cs +++ b/RhythmGameUtilities/Scripts/Parsers.cs @@ -110,7 +110,7 @@ public static Dictionary ParseMetaDataFromChartSection( .ToDictionary(item => item.Key, x => x.Value[0]); } - public static TimeSignature[] ParseTimeSignaturesFromChartSection( + public static TimeSignature[] ParseTimeSignatureChangesFromChartSection( KeyValuePair[] section) { return section @@ -124,7 +124,7 @@ public static TimeSignature[] ParseTimeSignaturesFromChartSection( }).ToArray(); } - public static Tempo[] ParseBpmFromChartSection( + public static Tempo[] ParseTempoChangesFromChartSection( KeyValuePair[] section) { return section diff --git a/RhythmGameUtilities/Scripts/Utilities.cs b/RhythmGameUtilities/Scripts/Utilities.cs index c546f57..940f47c 100644 --- a/RhythmGameUtilities/Scripts/Utilities.cs +++ b/RhythmGameUtilities/Scripts/Utilities.cs @@ -11,8 +11,8 @@ internal static class UtilitiesInternal public static extern float ConvertTickToPosition(int tick, int resolution); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] - public static extern int ConvertSecondsToTicksInternal(float seconds, int resolution, Tempo[] bpmChanges, - int bpmChangesSize, TimeSignature[] timeSignatures, int timeSignaturesSize); + public static extern int ConvertSecondsToTicksInternal(float seconds, int resolution, Tempo[] tempoChanges, + int tempoChangesSize, TimeSignature[] timeSignatures, int timeSignaturesSize); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] public static extern bool IsOnTheBeat(int bpm, float currentTime, float delta); @@ -24,7 +24,7 @@ public static extern int ConvertSecondsToTicksInternal(float seconds, int resolu public static extern float CalculateAccuracyRatio(int position, int currentPosition, int delta); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr CalculateBeatBarsInternal(Tempo[] bpmChanges, int bpmChangesSize, int resolution, + public static extern IntPtr CalculateBeatBarsInternal(Tempo[] tempoChanges, int tempoChangesSize, int resolution, int ts, bool includeHalfNotes, out int size); @@ -50,12 +50,12 @@ public static float ConvertTickToPosition(int tick, int resolution) /// /// The seconds to generate ticks with. /// The resolution of the song. - /// All BPM changes within the song. + /// All tempo changes within the song. /// All time signature changes within the song. - public static int ConvertSecondsToTicks(float seconds, int resolution, Tempo[] bpmChanges, + public static int ConvertSecondsToTicks(float seconds, int resolution, Tempo[] tempoChanges, TimeSignature[] timeSignatureChanges) { - return UtilitiesInternal.ConvertSecondsToTicksInternal(seconds, resolution, bpmChanges, bpmChanges.Length, + return UtilitiesInternal.ConvertSecondsToTicksInternal(seconds, resolution, tempoChanges, tempoChanges.Length, timeSignatureChanges, timeSignatureChanges.Length); } @@ -80,10 +80,10 @@ public static int RoundUpToTheNearestMultiplier(int value, int multiplier) return UtilitiesInternal.RoundUpToTheNearestMultiplier(value, multiplier); } - public static BeatBar[] CalculateBeatBars(Tempo[] bpmChanges, int resolution = 192, int ts = 4, + public static BeatBar[] CalculateBeatBars(Tempo[] tempoChanges, int resolution = 192, int ts = 4, bool includeHalfNotes = true) { - var ptrArray = UtilitiesInternal.CalculateBeatBarsInternal(bpmChanges, bpmChanges.Length, resolution, ts, + var ptrArray = UtilitiesInternal.CalculateBeatBarsInternal(tempoChanges, tempoChanges.Length, resolution, ts, includeHalfNotes, out var size); diff --git a/UnityPackage/Editor/Tests/ParsersTest.cs b/UnityPackage/Editor/Tests/ParsersTest.cs index a508634..896e5a4 100644 --- a/UnityPackage/Editor/Tests/ParsersTest.cs +++ b/UnityPackage/Editor/Tests/ParsersTest.cs @@ -8,15 +8,15 @@ public class ParsersTest { [Test] - public void TestParseBpmFromChartSection() + public void TestParseTempoChangesFromChartSection() { var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); - var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); + var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); - Console.WriteLine(bpm.Length); // 7 + Console.WriteLine(tempoChanges.Length); // 7 - Assert.That(bpm.Length, Is.EqualTo(7)); + Assert.That(tempoChanges.Length, Is.EqualTo(7)); } [Test] @@ -77,11 +77,11 @@ public void TestParseSectionsFromChart() } [Test] - public void TestParseTimeSignaturesFromChartSection() + public void TestParseTimeSignatureChangesFromChartSection() { var sections = Parsers.ParseSectionsFromChart(Mocks.SONG_CHART); - var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); + var timeSignatures = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); Assert.That(timeSignatures.Length, Is.EqualTo(4)); } diff --git a/UnityPackage/Editor/Tests/UtilitiesTest.cs b/UnityPackage/Editor/Tests/UtilitiesTest.cs index c907143..604813a 100644 --- a/UnityPackage/Editor/Tests/UtilitiesTest.cs +++ b/UnityPackage/Editor/Tests/UtilitiesTest.cs @@ -14,14 +14,14 @@ public void TestCalculateAccuracyRatio() const int resolution = 192; const int positionDelta = 50; - var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -41,7 +41,7 @@ public void TestCalculateAccuracyRatioContinued() [Test] public void TestCalculateBeatBars() { - var bpmChanges = new Tempo[] + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -49,7 +49,7 @@ public void TestCalculateBeatBars() new() { Position = 42240, BPM = 111980 } }; - var beatBars = Utilities.CalculateBeatBars(bpmChanges); + var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 @@ -62,7 +62,7 @@ public void TestConvertSecondsToTicks() const int seconds = 5; const int resolution = 192; - var bpmChanges = new Tempo[] + var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -72,7 +72,7 @@ public void TestConvertSecondsToTicks() var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; - var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 diff --git a/UnityPackage/README.md b/UnityPackage/README.md index d582438..ad57e09 100644 --- a/UnityPackage/README.md +++ b/UnityPackage/README.md @@ -40,12 +40,12 @@ _Prototype game built using these utilities._ 1. [InverseLerp](#commoninverselerp) 1. [Lerp](#commonlerp) 1. [Parsers](#parsers) - 1. [ParseBpmFromChartSection](#parsersparsebpmfromchartsection) + 1. [ParseTempoChangesFromChartSection](#parsersparsetempochangesfromchartsection) 1. [ParseLyricsFromChartSection](#parsersparselyricsfromchartsection) 1. [ParseMetaDataFromChartSection](#parsersparsemetadatafromchartsection) 1. [ParseNotesFromChartSection](#parsersparsenotesfromchartsection) 1. [ParseSectionsFromChart](#parsersparsesectionsfromchart) - 1. [ParseTimeSignaturesFromChartSection](#parsersparsetimesignaturesfromchartsection) + 1. [ParseTimeSignatureChangesFromChartSection](#parsersparsetimesignaturechangesfromchartsection) 1. [Utilities](#utilities) 1. [CalculateAccuracyRatio](#utilitiescalculateaccuracyratio) 1. [CalculateBeatBars](#utilitiescalculatebeatbars) @@ -275,7 +275,7 @@ func _ready() -> void: Read more about `.chart` files: -#### `Parsers.ParseBpmFromChartSection` +#### `Parsers.ParseLyricsFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -287,9 +287,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var bpm = Parsers.ParseBpmFromChartSection(sections[NamedSection.SyncTrack]); +var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); -Console.WriteLine(bpm.Length); // 7 +Console.WriteLine(lyrics.Count); // 12 ``` ##### C++ @@ -308,10 +308,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto bpm = ParseBpmFromChartSection( - sections.at(ToString(NamedSection::SyncTrack))); + auto lyrics = ParseLyricsFromChartSection( + sections.at(ToString(NamedSection::Events))); - std::cout << size(bpm) << std::endl; // 7 + std::cout << size(lyrics) << std::endl; // 12 return 0; } @@ -328,12 +328,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var bpm = rhythm_game_utilities.parse_bpm_from_chart_section(sections["SyncTrack"]) + var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) - print(bpm) + print(lyrics) ``` -#### `Parsers.ParseLyricsFromChartSection` +#### `Parsers.ParseMetaDataFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -345,9 +345,11 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var lyrics = Parsers.ParseLyricsFromChartSection(sections[NamedSection.Events]); +var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); -Console.WriteLine(lyrics.Count); // 12 +Console.WriteLine(metaData["Name"]); // Example Song +Console.WriteLine(metaData["Resolution"]); // 192 +Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg ``` ##### C++ @@ -366,10 +368,12 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto lyrics = ParseLyricsFromChartSection( - sections.at(ToString(NamedSection::Events))); + auto metaData = ParseMetaDataFromChartSection( + sections.at(ToString(NamedSection::Song))); - std::cout << size(lyrics) << std::endl; // 12 + std::cout << metaData["Name"] << std::endl; // Example Song + std::cout << metaData["Resolution"] << std::endl; // 192 + std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg return 0; } @@ -386,12 +390,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var lyrics = rhythm_game_utilities.parse_lyrics_from_chart_section(sections["Events"]) + var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) - print(lyrics) + print(meta_data) ``` -#### `Parsers.ParseMetaDataFromChartSection` +#### `Parsers.ParseNotesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -403,11 +407,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var metaData = Parsers.ParseMetaDataFromChartSection(sections[NamedSection.Song]); +var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); -Console.WriteLine(metaData["Name"]); // Example Song -Console.WriteLine(metaData["Resolution"]); // 192 -Console.WriteLine(metaData["MusicStream"]); // Example Song.ogg +Console.WriteLine(notes.Length); // 8 ``` ##### C++ @@ -426,12 +428,18 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto metaData = ParseMetaDataFromChartSection( - sections.at(ToString(NamedSection::Song))); + auto notes = ParseNotesFromChartSection( + sections.at(ToString(Difficulty::Expert) + "Single")); - std::cout << metaData["Name"] << std::endl; // Example Song - std::cout << metaData["Resolution"] << std::endl; // 192 - std::cout << metaData["MusicStream"] << std::endl; // Example Song.ogg + for (auto ¬e : notes) + { + if (note.HandPosition > 5) + { + continue; + } + + std::cout << note.Position << " " << note.HandPosition << std::endl; + } return 0; } @@ -448,12 +456,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var meta_data = rhythm_game_utilities.parse_meta_data_from_chart_section(sections["Song"]) + var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - print(meta_data) + print(notes) ``` -#### `Parsers.ParseNotesFromChartSection` +#### `Parsers.ParseSectionsFromChart` > Languages: `C#` `C++` `GDScript` @@ -465,9 +473,7 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var notes = Parsers.ParseNotesFromChartSection(sections[$"{Difficulty.Expert}Single"]); - -Console.WriteLine(notes.Length); // 8 +Console.WriteLine(sections.Count); // 4 ``` ##### C++ @@ -486,18 +492,7 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto notes = ParseNotesFromChartSection( - sections.at(ToString(Difficulty::Expert) + "Single")); - - for (auto ¬e : notes) - { - if (note.HandPosition > 5) - { - continue; - } - - std::cout << note.Position << " " << note.HandPosition << std::endl; - } + std::cout << size(sections) << std::endl; // 4 return 0; } @@ -514,12 +509,10 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var notes = rhythm_game_utilities.parse_notes_from_chart_section(sections["ExpertSingle"]) - - print(notes) + print(sections) ``` -#### `Parsers.ParseSectionsFromChart` +#### `Parsers.ParseTempoChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -531,7 +524,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -Console.WriteLine(sections.Count); // 4 +var tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections[NamedSection.SyncTrack]); + +Console.WriteLine(tempoChanges.Length); // 7 ``` ##### C++ @@ -550,7 +545,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - std::cout << size(sections) << std::endl; // 4 + auto tempoChanges = ParseTempoChangesFromChartSection( + sections.at(ToString(NamedSection::SyncTrack))); + + std::cout << size(tempoChanges) << std::endl; // 7 return 0; } @@ -567,10 +565,12 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - print(sections) + var tempo_changes = rhythm_game_utilities.parse_tempo_changes_from_chart_section(sections["SyncTrack"]) + + print(tempo_changes) ``` -#### `Parsers.ParseTimeSignaturesFromChartSection` +#### `Parsers.ParseTimeSignatureChangesFromChartSection` > Languages: `C#` `C++` `GDScript` @@ -582,9 +582,9 @@ using RhythmGameUtilities; var sections = Parsers.ParseSectionsFromChart(contents); -var timeSignatures = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); +var timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); -Console.WriteLine(timeSignatures.Length); // 4 +Console.WriteLine(timeSignatureChanges.Length); // 4 ``` ##### C++ @@ -603,10 +603,10 @@ int main() auto sections = ParseSectionsFromChart(content.c_str()); - auto timeSignatures = ParseTimeSignaturesFromChartSection( + auto timeSignatureChanges = ParseTimeSignatureChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - std::cout << size(timeSignatures) << std::endl; // 4 + std::cout << size(timeSignatureChanges) << std::endl; // 4 return 0; } @@ -623,9 +623,9 @@ func _ready() -> void: var sections = rhythm_game_utilities.parse_sections_from_chart(content) - var time_signatures = rhythm_game_utilities.parse_time_signatures_from_chart_section(sections["SyncTrack"]) + var time_signature_changes = rhythm_game_utilities.parse_time_signature_changes_from_chart_section(sections["SyncTrack"]) - print(time_signatures) + print(time_signature_changes) ``` ### Utilities @@ -644,14 +644,14 @@ const int seconds = 2; const int resolution = 192; const int positionDelta = 50; -var bpmChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 120000 } }; var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; var note = new Note { Position = 750 }; var currentPosition = - Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); var value = Utilities.CalculateAccuracyRatio(note.Position, currentPosition, positionDelta); @@ -673,12 +673,12 @@ int main() const int resolution = 192; const int positionDelta = 50; - std::vector bpmChanges = {{0, 120000}}; + std::vector tempoChanges = {{0, 120000}}; std::vector timeSignatureChanges = {{0, 4}}; auto note = new Note{750}; auto currentPosition = ConvertSecondsToTicks( - seconds, resolution, bpmChanges, timeSignatureChanges); + seconds, resolution, tempoChanges, timeSignatureChanges); auto value = CalculateAccuracyRatio(note->Position, currentPosition, positionDelta); @@ -699,7 +699,7 @@ func _ready() -> void: var resolution = 192 var position_delta = 50 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 120000 } ] @@ -707,7 +707,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) var value = rhythm_game_utilities.calculate_accuracy_ratio(750, current_position, position_delta) @@ -721,7 +721,7 @@ func _ready() -> void: ##### C# ```csharp -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -729,7 +729,7 @@ var bpmChanges = new Tempo[] new() { Position = 42240, BPM = 111980 } }; -var beatBars = Utilities.CalculateBeatBars(bpmChanges); +var beatBars = Utilities.CalculateBeatBars(tempoChanges); Console.WriteLine(beatBars.Length); // 440 ``` @@ -748,12 +748,12 @@ int main() const int resolution = 192; const int timeSignature = 4; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; auto beatBars = - CalculateBeatBars(bpmChanges, resolution, timeSignature, true); + CalculateBeatBars(tempoChanges, resolution, timeSignature, true); std::cout << size(beatBars) << std::endl; // 440 @@ -770,7 +770,7 @@ func _ready() -> void: var resolution = 192 var time_signature = 4 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 8800 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -780,7 +780,7 @@ func _ready() -> void: {"position": 42240, "bpm": 111980 } ] - var beat_bars = rhythm_game_utilities.calculate_beat_bars(bpm_changes, resolution, time_signature, true) + var beat_bars = rhythm_game_utilities.calculate_beat_bars(tempo_changes, resolution, time_signature, true) print(beat_bars) ``` @@ -798,7 +798,7 @@ using RhythmGameUtilities; const int seconds = 5; const int resolution = 192; -var bpmChanges = new Tempo[] +var tempoChanges = new Tempo[] { new() { Position = 0, BPM = 88000 }, new() { Position = 3840, BPM = 112000 }, new() { Position = 9984, BPM = 89600 }, new() { Position = 22272, BPM = 112000 }, @@ -808,7 +808,7 @@ var bpmChanges = new Tempo[] var timeSignatureChanges = new TimeSignature[] { new() { Position = 0, Numerator = 4, Denominator = 2 } }; -var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, bpmChanges, timeSignatureChanges); +var ticks = Utilities.ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); Console.WriteLine(ticks); // 1408 ``` @@ -827,13 +827,13 @@ int main() const int seconds = 5; const int resolution = 192; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; - auto ticks = ConvertSecondsToTicks(seconds, resolution, bpmChanges, + auto ticks = ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); std::cout << ticks << std::endl; // 1408 @@ -851,7 +851,7 @@ func _ready() -> void: var seconds = 5 var resolution = 192 - var bpm_changes = [ + var tempo_changes = [ {"position": 0, "bpm": 88000 }, {"position": 3840, "bpm": 112000 }, {"position": 9984, "bpm": 89600 }, @@ -865,7 +865,7 @@ func _ready() -> void: {"position": 0, "numerator": 4, "denominator": 2 } ] - var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, bpm_changes, time_signature_changes) + var current_position = rhythm_game_utilities.convert_seconds_to_ticks(seconds, resolution, tempo_changes, time_signature_changes) print(current_position) # 1408 ``` @@ -1123,11 +1123,11 @@ graph LR; subgraph parsersGraph ["Parsers"] parseSectionsFromChart["ParseSectionsFromChart()"] - parseBpmFromChartSection["ParseBpmFromChartSection()"] + parseBpmFromChartSection["ParseTempoChangesFromChartSection()"] parseLyricsFromChartSection["ParseLyricsFromChartSection()"] parseMetaDataFromChartSection["ParseMetaDataFromChartSection()"] parseNotesFromChartSection["ParseNotesFromChartSection()"] - parseTimeSignaturesFromChartSection["ParseTimeSignaturesFromChartSection()"] + parseTimeSignaturesFromChartSection["ParseTimeSignatureChangesFromChartSection()"] parseSectionsFromChart-->parseBpmFromChartSection parseSectionsFromChart-->parseLyricsFromChartSection diff --git a/UnityPackage/Samples~/SampleSong (URP)/Scripts/RenderSong.cs b/UnityPackage/Samples~/SampleSong (URP)/Scripts/RenderSong.cs index c064b87..2fcb35e 100644 --- a/UnityPackage/Samples~/SampleSong (URP)/Scripts/RenderSong.cs +++ b/UnityPackage/Samples~/SampleSong (URP)/Scripts/RenderSong.cs @@ -53,7 +53,7 @@ public class RenderSong : MonoBehaviour public int resolution { get; set; } = 192; - public Tempo[] bpmChanges { get; set; } + public Tempo[] tempoChanges { get; set; } public TimeSignature[] timeSignatureChanges { get; set; } @@ -81,20 +81,20 @@ await LoadAudioFileFromPath( resolution = int.Parse(metadata["Resolution"]); - bpmChanges = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack) + tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack) .Value); - timeSignatureChanges = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); + timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); var lastTick = - Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, tempoChanges, timeSignatureChanges); - bpmChanges = bpmChanges.Concat(new Tempo[] + tempoChanges = tempoChanges.Concat(new Tempo[] { new() { Position = Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution), - BPM = bpmChanges.Last().BPM + BPM = tempoChanges.Last().BPM } }) .ToArray(); @@ -111,7 +111,7 @@ await LoadAudioFileFromPath( .GroupBy(note => note.HandPosition) .ToDictionary(group => group.Key, group => group.ToList()); - beatBars = Utilities.CalculateBeatBars(bpmChanges, includeHalfNotes : true); + beatBars = Utilities.CalculateBeatBars(tempoChanges, includeHalfNotes : true); _audioSource.Play(); } @@ -167,7 +167,7 @@ private void Update() } var tickOffset = - Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, tempoChanges, timeSignatureChanges); RenderHitNotes(notesGroupedByHandPosition); diff --git a/UnityPackage/Samples~/SampleSong/Scripts/RenderSong.cs b/UnityPackage/Samples~/SampleSong/Scripts/RenderSong.cs index 3041e7b..6c3a202 100644 --- a/UnityPackage/Samples~/SampleSong/Scripts/RenderSong.cs +++ b/UnityPackage/Samples~/SampleSong/Scripts/RenderSong.cs @@ -53,7 +53,7 @@ public class RenderSong : MonoBehaviour public int resolution { get; set; } = 192; - public Tempo[] bpmChanges { get; set; } + public Tempo[] tempoChanges { get; set; } public TimeSignature[] timeSignatureChanges { get; set; } @@ -81,20 +81,20 @@ await LoadAudioFileFromPath( resolution = int.Parse(metadata["Resolution"]); - bpmChanges = Parsers.ParseBpmFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack) + tempoChanges = Parsers.ParseTempoChangesFromChartSection(sections.First(section => section.Key == NamedSection.SyncTrack) .Value); - timeSignatureChanges = Parsers.ParseTimeSignaturesFromChartSection(sections[NamedSection.SyncTrack]); + timeSignatureChanges = Parsers.ParseTimeSignatureChangesFromChartSection(sections[NamedSection.SyncTrack]); var lastTick = - Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(_audioSource.clip.length, resolution, tempoChanges, timeSignatureChanges); - bpmChanges = bpmChanges.Concat(new Tempo[] + tempoChanges = tempoChanges.Concat(new Tempo[] { new() { Position = Utilities.RoundUpToTheNearestMultiplier(lastTick, resolution), - BPM = bpmChanges.Last().BPM + BPM = tempoChanges.Last().BPM } }) .ToArray(); @@ -111,7 +111,7 @@ await LoadAudioFileFromPath( .GroupBy(note => note.HandPosition) .ToDictionary(group => group.Key, group => group.ToList()); - beatBars = Utilities.CalculateBeatBars(bpmChanges, includeHalfNotes : true); + beatBars = Utilities.CalculateBeatBars(tempoChanges, includeHalfNotes : true); _audioSource.Play(); } @@ -167,7 +167,7 @@ private void Update() } var tickOffset = - Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, bpmChanges, timeSignatureChanges); + Utilities.ConvertSecondsToTicks(_audioSource.time, resolution, tempoChanges, timeSignatureChanges); RenderHitNotes(notesGroupedByHandPosition); diff --git a/UnityPackage/Scripts/Parsers.cs b/UnityPackage/Scripts/Parsers.cs index 3b7c2ff..920df70 100644 --- a/UnityPackage/Scripts/Parsers.cs +++ b/UnityPackage/Scripts/Parsers.cs @@ -110,7 +110,7 @@ public static Dictionary ParseMetaDataFromChartSection( .ToDictionary(item => item.Key, x => x.Value[0]); } - public static TimeSignature[] ParseTimeSignaturesFromChartSection( + public static TimeSignature[] ParseTimeSignatureChangesFromChartSection( KeyValuePair[] section) { return section @@ -124,7 +124,7 @@ public static TimeSignature[] ParseTimeSignaturesFromChartSection( }).ToArray(); } - public static Tempo[] ParseBpmFromChartSection( + public static Tempo[] ParseTempoChangesFromChartSection( KeyValuePair[] section) { return section diff --git a/UnityPackage/Scripts/Utilities.cs b/UnityPackage/Scripts/Utilities.cs index c546f57..940f47c 100644 --- a/UnityPackage/Scripts/Utilities.cs +++ b/UnityPackage/Scripts/Utilities.cs @@ -11,8 +11,8 @@ internal static class UtilitiesInternal public static extern float ConvertTickToPosition(int tick, int resolution); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] - public static extern int ConvertSecondsToTicksInternal(float seconds, int resolution, Tempo[] bpmChanges, - int bpmChangesSize, TimeSignature[] timeSignatures, int timeSignaturesSize); + public static extern int ConvertSecondsToTicksInternal(float seconds, int resolution, Tempo[] tempoChanges, + int tempoChangesSize, TimeSignature[] timeSignatures, int timeSignaturesSize); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] public static extern bool IsOnTheBeat(int bpm, float currentTime, float delta); @@ -24,7 +24,7 @@ public static extern int ConvertSecondsToTicksInternal(float seconds, int resolu public static extern float CalculateAccuracyRatio(int position, int currentPosition, int delta); [DllImport("libRhythmGameUtilities", CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr CalculateBeatBarsInternal(Tempo[] bpmChanges, int bpmChangesSize, int resolution, + public static extern IntPtr CalculateBeatBarsInternal(Tempo[] tempoChanges, int tempoChangesSize, int resolution, int ts, bool includeHalfNotes, out int size); @@ -50,12 +50,12 @@ public static float ConvertTickToPosition(int tick, int resolution) /// /// The seconds to generate ticks with. /// The resolution of the song. - /// All BPM changes within the song. + /// All tempo changes within the song. /// All time signature changes within the song. - public static int ConvertSecondsToTicks(float seconds, int resolution, Tempo[] bpmChanges, + public static int ConvertSecondsToTicks(float seconds, int resolution, Tempo[] tempoChanges, TimeSignature[] timeSignatureChanges) { - return UtilitiesInternal.ConvertSecondsToTicksInternal(seconds, resolution, bpmChanges, bpmChanges.Length, + return UtilitiesInternal.ConvertSecondsToTicksInternal(seconds, resolution, tempoChanges, tempoChanges.Length, timeSignatureChanges, timeSignatureChanges.Length); } @@ -80,10 +80,10 @@ public static int RoundUpToTheNearestMultiplier(int value, int multiplier) return UtilitiesInternal.RoundUpToTheNearestMultiplier(value, multiplier); } - public static BeatBar[] CalculateBeatBars(Tempo[] bpmChanges, int resolution = 192, int ts = 4, + public static BeatBar[] CalculateBeatBars(Tempo[] tempoChanges, int resolution = 192, int ts = 4, bool includeHalfNotes = true) { - var ptrArray = UtilitiesInternal.CalculateBeatBarsInternal(bpmChanges, bpmChanges.Length, resolution, ts, + var ptrArray = UtilitiesInternal.CalculateBeatBarsInternal(tempoChanges, tempoChanges.Length, resolution, ts, includeHalfNotes, out var size); diff --git a/include/RhythmGameUtilities/Parsers.hpp b/include/RhythmGameUtilities/Parsers.hpp index bafdf2f..74d0df9 100644 --- a/include/RhythmGameUtilities/Parsers.hpp +++ b/include/RhythmGameUtilities/Parsers.hpp @@ -106,7 +106,7 @@ std::map ParseMetaDataFromChartSection( return data; } -std::vector ParseTimeSignaturesFromChartSection( +std::vector ParseTimeSignatureChangesFromChartSection( std::vector>> section) { auto timeSignaturesChanges = std::vector(); @@ -127,10 +127,10 @@ std::vector ParseTimeSignaturesFromChartSection( return timeSignaturesChanges; } -std::vector ParseBpmFromChartSection( +std::vector ParseTempoChangesFromChartSection( std::vector>> section) { - auto bpmChanges = std::vector(); + auto tempoChanges = std::vector(); for (auto &line : section) { @@ -139,11 +139,11 @@ std::vector ParseBpmFromChartSection( auto position = std::stoi(line.first); auto bpm = std::stoi(line.second.at(1)); - bpmChanges.push_back({position, bpm}); + tempoChanges.push_back({position, bpm}); } } - return bpmChanges; + return tempoChanges; } std::vector ParseNotesFromChartSection( diff --git a/include/RhythmGameUtilities/Utilities.hpp b/include/RhythmGameUtilities/Utilities.hpp index 74d3d13..f88a61e 100644 --- a/include/RhythmGameUtilities/Utilities.hpp +++ b/include/RhythmGameUtilities/Utilities.hpp @@ -29,35 +29,36 @@ const float SECONDS_PER_MINUTE = 60.0f; * * @param seconds The seconds to generate ticks with. * @param resolution The resolution of the song. - * @param bpmChanges All BPM changes within the song. + * @param tempoChanges All tempo changes within the song. * @param timeSignatureChanges All time signature changes within the song. * @public */ int ConvertSecondsToTicks(float seconds, int resolution, - std::vector bpmChanges, + std::vector tempoChanges, std::vector timeSignatureChanges) { - auto bpmIterator = bpmChanges.begin(); + auto tempoChangesIterator = tempoChanges.begin(); auto timeSignatureIterator = timeSignatureChanges.begin(); auto totalTicks = 0; auto remainingSeconds = seconds; auto previousTick = 0; - auto previousBPM = bpmIterator->BPM / 1000.0; + auto previousBPM = tempoChangesIterator->BPM / 1000.0; auto previousTimeSignature = timeSignatureIterator->Numerator; while (remainingSeconds > 0) { - int nextBPMChange = - bpmIterator != bpmChanges.end() ? bpmIterator->Position : INT_MAX; + int nextTempoChange = tempoChangesIterator != tempoChanges.end() + ? tempoChangesIterator->Position + : INT_MAX; int nextTimeSignatureChange = timeSignatureIterator != timeSignatureChanges.end() ? timeSignatureIterator->Position : INT_MAX; - int nextChangeTick = std::min(nextBPMChange, nextTimeSignatureChange); + int nextChangeTick = std::min(nextTempoChange, nextTimeSignatureChange); float ticksPerSecond = resolution * previousBPM / SECONDS_PER_MINUTE; float timeForSegment = (nextChangeTick - previousTick) / ticksPerSecond; @@ -73,10 +74,10 @@ int ConvertSecondsToTicks(float seconds, int resolution, remainingSeconds -= timeForSegment; previousTick = nextChangeTick; - if (nextChangeTick == nextBPMChange) + if (nextChangeTick == nextTempoChange) { - previousBPM = bpmIterator->BPM / 1000.0; - ++bpmIterator; + previousBPM = tempoChangesIterator->BPM / 1000.0; + ++tempoChangesIterator; } if (nextChangeTick == nextTimeSignatureChange) @@ -123,20 +124,20 @@ GenerateAdjacentKeyPairs(std::map keyValuePairs) return adjacentKeyPairs; } -std::vector CalculateBeatBars(std::vector bpmChanges, +std::vector CalculateBeatBars(std::vector tempoChanges, int resolution, int ts, bool includeHalfNotes) { std::vector beatBars; - std::map bpmChangePositions; + std::map tempoChangePositions; - for (const auto &bpmChange : bpmChanges) + for (const auto &tempoChange : tempoChanges) { - bpmChangePositions[bpmChange.Position] = bpmChange.BPM; + tempoChangePositions[tempoChange.Position] = tempoChange.BPM; } - auto keyValuePairs = GenerateAdjacentKeyPairs(bpmChangePositions); + auto keyValuePairs = GenerateAdjacentKeyPairs(tempoChangePositions); for (const auto &keyValuePair : keyValuePairs) { @@ -147,7 +148,7 @@ std::vector CalculateBeatBars(std::vector bpmChanges, { auto position = tick; - auto bpm = bpmChangePositions[startTick]; + auto bpm = tempoChangePositions[startTick]; beatBars.push_back({tick, bpm}); diff --git a/include/RhythmGameUtilities/UtilitiesInternal.hpp b/include/RhythmGameUtilities/UtilitiesInternal.hpp index 037b6c5..e45bba4 100644 --- a/include/RhythmGameUtilities/UtilitiesInternal.hpp +++ b/include/RhythmGameUtilities/UtilitiesInternal.hpp @@ -19,15 +19,17 @@ namespace RhythmGameUtilities extern "C" { - PACKAGE_API int ConvertSecondsToTicksInternal( - float seconds, int resolution, Tempo *bpmChanges, int bpmChangesSize, - TimeSignature *timeSignaturesChanges, int timeSignaturesChangesSize) + PACKAGE_API int + ConvertSecondsToTicksInternal(float seconds, int resolution, + Tempo *tempoChanges, int tempoChangesSize, + TimeSignature *timeSignaturesChanges, + int timeSignaturesChangesSize) { - std::vector bpmChangesVector; + std::vector tempoChangesVector; - for (auto i = 0; i < bpmChangesSize; i += 1) + for (auto i = 0; i < tempoChangesSize; i += 1) { - bpmChangesVector.push_back(bpmChanges[i]); + tempoChangesVector.push_back(tempoChanges[i]); } std::vector timeSignatureChangesVector; @@ -37,25 +39,25 @@ extern "C" timeSignatureChangesVector.push_back(timeSignaturesChanges[i]); } - return ConvertSecondsToTicks(seconds, resolution, bpmChangesVector, + return ConvertSecondsToTicks(seconds, resolution, tempoChangesVector, timeSignatureChangesVector); } - PACKAGE_API BeatBar *CalculateBeatBarsInternal(Tempo *bpmChanges, - int bpmChangesSize, + PACKAGE_API BeatBar *CalculateBeatBarsInternal(Tempo *tempoChanges, + int tempoChangesSize, int resolution, int ts, bool includeHalfNotes, int *outSize) { - std::vector bpmChangesVector; + std::vector tempoChangesVector; - for (auto i = 0; i < bpmChangesSize; i += 1) + for (auto i = 0; i < tempoChangesSize; i += 1) { - bpmChangesVector.push_back(bpmChanges[i]); + tempoChangesVector.push_back(tempoChanges[i]); } - auto internalBeatBars = CalculateBeatBars(bpmChangesVector, resolution, - ts, includeHalfNotes); + auto internalBeatBars = CalculateBeatBars( + tempoChangesVector, resolution, ts, includeHalfNotes); *outSize = internalBeatBars.size(); diff --git a/tests/RhythmGameUtilities/Parsers.cpp b/tests/RhythmGameUtilities/Parsers.cpp index 33e5103..42360d2 100644 --- a/tests/RhythmGameUtilities/Parsers.cpp +++ b/tests/RhythmGameUtilities/Parsers.cpp @@ -69,14 +69,14 @@ auto contents = R"([Song] 1248 = E soloend })"; -void testParseBpmFromChartSection() +void testParseTempoChangesFromChartSection() { auto sections = ParseSectionsFromChart(contents); - auto bpm = ParseBpmFromChartSection( + auto tempoChanges = ParseTempoChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - assert(bpm.size() == 7); + assert(tempoChanges.size() == 7); std::cout << "."; } @@ -135,14 +135,14 @@ void testParseSectionsFromChart() std::cout << "."; } -void testParseTimeSignaturesFromChartSection() +void testParseTimeSignatureChangesFromChartSection() { auto sections = ParseSectionsFromChart(contents); - auto timeSignatures = ParseTimeSignaturesFromChartSection( + auto timeSignatureChanges = ParseTimeSignatureChangesFromChartSection( sections.at(ToString(NamedSection::SyncTrack))); - assert(timeSignatures.size() == 4); + assert(timeSignatureChanges.size() == 4); std::cout << "."; } @@ -171,12 +171,12 @@ void testParseValuesFromChartSection() int main() { - testParseBpmFromChartSection(); + testParseTempoChangesFromChartSection(); testParseLyricsFromChartSection(); testParseMetaDataFromChartSection(); testParseNotesFromChartSection(); testParseSectionsFromChart(); - testParseTimeSignaturesFromChartSection(); + testParseTimeSignatureChangesFromChartSection(); testParseValuesFromChartSection(); diff --git a/tests/RhythmGameUtilities/Utilities.cpp b/tests/RhythmGameUtilities/Utilities.cpp index 0e32145..23ff507 100644 --- a/tests/RhythmGameUtilities/Utilities.cpp +++ b/tests/RhythmGameUtilities/Utilities.cpp @@ -16,12 +16,12 @@ void testCalculateAccuracyRatio() const int resolution = 192; const int positionDelta = 50; - std::vector bpmChanges = {{0, 120000}}; + std::vector tempoChanges = {{0, 120000}}; std::vector timeSignatureChanges = {{0, 4}}; auto note = new Note{750}; auto currentPosition = ConvertSecondsToTicks( - seconds, resolution, bpmChanges, timeSignatureChanges); + seconds, resolution, tempoChanges, timeSignatureChanges); auto value = CalculateAccuracyRatio(note->Position, currentPosition, positionDelta); @@ -36,12 +36,12 @@ void testCalculateBeatBars() const int resolution = 192; const int timeSignature = 4; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; auto beatBars = - CalculateBeatBars(bpmChanges, resolution, timeSignature, true); + CalculateBeatBars(tempoChanges, resolution, timeSignature, true); assert(beatBars.size() == 440); @@ -53,13 +53,13 @@ void testConvertSecondsToTicks() const int seconds = 5; const int resolution = 192; - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; - auto ticks = ConvertSecondsToTicks(seconds, resolution, bpmChanges, + auto ticks = ConvertSecondsToTicks(seconds, resolution, tempoChanges, timeSignatureChanges); assert(1408 == ticks); @@ -122,11 +122,11 @@ void testRoundUpToTheNearestMultiplier() void testGenerateAdjacentKeyPairs() { - std::map bpmChanges = { + std::map tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; - auto adjacentKeyPairs = GenerateAdjacentKeyPairs(bpmChanges); + auto adjacentKeyPairs = GenerateAdjacentKeyPairs(tempoChanges); assert(adjacentKeyPairs.size() == 6); assert(adjacentKeyPairs[0] == std::make_tuple(0, 3840)); diff --git a/tests/RhythmGameUtilities/UtilitiesInternal.cpp b/tests/RhythmGameUtilities/UtilitiesInternal.cpp index a9d6cf5..14bd9d3 100644 --- a/tests/RhythmGameUtilities/UtilitiesInternal.cpp +++ b/tests/RhythmGameUtilities/UtilitiesInternal.cpp @@ -12,14 +12,14 @@ using namespace RhythmGameUtilities; void testConvertSecondsToTicksInternal() { - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; std::vector timeSignatureChanges = {{0, 4, 2}}; assert(1408 == ConvertSecondsToTicksInternal( - 5, 192, &bpmChanges[0], bpmChanges.size(), + 5, 192, &tempoChanges[0], tempoChanges.size(), &timeSignatureChanges[0], timeSignatureChanges.size())); std::cout << "."; @@ -27,14 +27,14 @@ void testConvertSecondsToTicksInternal() void testCalculateBeatBarsInternal() { - std::vector bpmChanges = { + std::vector tempoChanges = { {0, 88000}, {3840, 112000}, {9984, 89600}, {22272, 112000}, {33792, 111500}, {34560, 112000}, {42240, 111980}}; int *outSize; - auto beatBars = CalculateBeatBarsInternal(&bpmChanges[0], bpmChanges.size(), - 192, 4, true, outSize); + auto beatBars = CalculateBeatBarsInternal( + &tempoChanges[0], tempoChanges.size(), 192, 4, true, outSize); assert(*outSize == 440);