From 740bf6f26df1dab6097512b6658ce1997d139249 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Thu, 13 Aug 2026 17:48:28 +0200 Subject: [PATCH 1/2] Include hash when emitting 'unnamed' samples --- FModBankParser/FModBankParser.cs | 5 ++++- FModBankParser/Metadata/SoundTable.cs | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/FModBankParser/FModBankParser.cs b/FModBankParser/FModBankParser.cs index c061c70..61a2129 100644 --- a/FModBankParser/FModBankParser.cs +++ b/FModBankParser/FModBankParser.cs @@ -122,7 +122,10 @@ public static AudioExportResult ExportAudio(FModReader reader, DirectoryInfo out var sample = bank.Samples[i]; string sampleName = string.IsNullOrWhiteSpace(sample.Name) - ? $"Sample_{i}" + ? (reader.SoundTable == null + ? $"Sample_{i}" + : $"Sample_{i}_hash_{reader.SoundTable.GetKeyByIndex((uint)i)}" + ) : sample.Name; if (!sample.RebuildAsStandardFileFormat(out var dataBytes, out var fileExtension) || dataBytes is not { Length: > 0 }) diff --git a/FModBankParser/Metadata/SoundTable.cs b/FModBankParser/Metadata/SoundTable.cs index 7189e6b..730404a 100644 --- a/FModBankParser/Metadata/SoundTable.cs +++ b/FModBankParser/Metadata/SoundTable.cs @@ -58,6 +58,19 @@ public int Find(ulong key) return -1; } + public ulong GetKeyByIndex(uint index) + { + // Tried a binary search, didn't work. + for (int i = 0; i != Indices.Length; ++i) + { + if (Indices[i].Value == index) + { + return Keys[i]; + } + } + return 0; + } + #region Readers private static ulong[] ReadSimpleArrayImp(BinaryReader Ar) { From 5fadb1a535746496555ec660ca780b36fb7d3a1b Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Fri, 14 Aug 2026 19:47:23 +0200 Subject: [PATCH 2/2] Try get key --- FModBankParser/FModBankParser.cs | 19 +++++++------------ FModBankParser/Metadata/SoundTable.cs | 23 ++++++++++------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/FModBankParser/FModBankParser.cs b/FModBankParser/FModBankParser.cs index 61a2129..29cbfb2 100644 --- a/FModBankParser/FModBankParser.cs +++ b/FModBankParser/FModBankParser.cs @@ -1,13 +1,7 @@ using Fmod5Sharp.FmodTypes; -using FModBankParser; using FModBankParser.Extensions; using FModBankParser.Objects; -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace FModBankParser; @@ -121,12 +115,13 @@ public static AudioExportResult ExportAudio(FModReader reader, DirectoryInfo out { var sample = bank.Samples[i]; - string sampleName = string.IsNullOrWhiteSpace(sample.Name) - ? (reader.SoundTable == null - ? $"Sample_{i}" - : $"Sample_{i}_hash_{reader.SoundTable.GetKeyByIndex((uint)i)}" - ) - : sample.Name; + var sampleName = sample.Name; + if (string.IsNullOrWhiteSpace(sampleName)) + { + sampleName = reader.SoundTable?.TryGetKeyByIndex(i, out var key) == true + ? $"Sample_{i}_hash_{key:X16}" + : $"Sample_{i}"; + } if (!sample.RebuildAsStandardFileFormat(out var dataBytes, out var fileExtension) || dataBytes is not { Length: > 0 }) { diff --git a/FModBankParser/Metadata/SoundTable.cs b/FModBankParser/Metadata/SoundTable.cs index 730404a..18c0252 100644 --- a/FModBankParser/Metadata/SoundTable.cs +++ b/FModBankParser/Metadata/SoundTable.cs @@ -1,9 +1,4 @@ using FModBankParser.Objects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace FModBankParser.Metadata; @@ -58,17 +53,19 @@ public int Find(ulong key) return -1; } - public ulong GetKeyByIndex(uint index) + public bool TryGetKeyByIndex(int index, out ulong key) { - // Tried a binary search, didn't work. - for (int i = 0; i != Indices.Length; ++i) + for (var i = 0; i < Indices.Length; i++) { - if (Indices[i].Value == index) - { - return Keys[i]; - } + if (Indices[i].Value != index) + continue; + + key = Keys[i]; + return true; } - return 0; + + key = default; + return false; } #region Readers