diff --git a/BinaryObjectScanner.Printing/PlayJAudioFile.cs b/BinaryObjectScanner.Printing/PlayJAudioFile.cs
new file mode 100644
index 00000000..682fd3a1
--- /dev/null
+++ b/BinaryObjectScanner.Printing/PlayJAudioFile.cs
@@ -0,0 +1,200 @@
+using System.Text;
+using SabreTools.Models.PlayJ;
+
+namespace BinaryObjectScanner.Printing
+{
+ public static class PlayJAudioFile
+ {
+ public static void Print(StringBuilder builder, AudioFile audio)
+ {
+ builder.AppendLine("PlayJ Audio File Information:");
+ builder.AppendLine("-------------------------");
+ builder.AppendLine();
+
+ Print(builder, audio.Header);
+ Print(builder, audio.UnknownBlock1);
+
+ if (audio.Header?.Version == 0x00000000)
+ {
+ Print(builder, audio.UnknownValue2);
+ Print(builder, audio.UnknownBlock3);
+ }
+ else if (audio.Header?.Version == 0x0000000A)
+ {
+ Print(builder, audio.DataFilesCount, audio.DataFiles);
+ }
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, AudioHeader header)
+#else
+ private static void Print(StringBuilder builder, AudioHeader? header)
+#endif
+ {
+ builder.AppendLine(" Audio Header Information:");
+ builder.AppendLine(" -------------------------");
+ if (header == null)
+ {
+ builder.AppendLine(" No audio header");
+ builder.AppendLine();
+ return;
+ }
+
+ builder.AppendLine(header.Signature, " Signature");
+ builder.AppendLine(header.Version, " Version");
+ if (header.Version == 0x00000000 && header is AudioHeaderV1 headerV1)
+ {
+ builder.AppendLine(headerV1.TrackID, " Track ID");
+ builder.AppendLine(headerV1.UnknownOffset1, " Unknown offset 1");
+ builder.AppendLine(headerV1.UnknownOffset2, " Unknown offset 2");
+ builder.AppendLine(headerV1.UnknownOffset3, " Unknown offset 3");
+ builder.AppendLine(headerV1.Unknown1, " Unknown 1");
+ builder.AppendLine(headerV1.Unknown2, " Unknown 2");
+ builder.AppendLine(headerV1.Year, " Year");
+ builder.AppendLine(headerV1.TrackNumber, " Track number");
+ builder.AppendLine($" Subgenre: {headerV1.Subgenre} (0x{headerV1.Subgenre:X})");
+ builder.AppendLine(headerV1.Duration, " Duration in seconds");
+ }
+ else if (header.Version == 0x0000000A && header is AudioHeaderV2 headerV2)
+ {
+ builder.AppendLine(headerV2.Unknown1, " Unknown 1");
+ builder.AppendLine(headerV2.Unknown2, " Unknown 2");
+ builder.AppendLine(headerV2.Unknown3, " Unknown 3");
+ builder.AppendLine(headerV2.Unknown4, " Unknown 4");
+ builder.AppendLine(headerV2.Unknown5, " Unknown 5");
+ builder.AppendLine(headerV2.Unknown6, " Unknown 6");
+ builder.AppendLine(headerV2.UnknownOffset1, " Unknown Offset 1");
+ builder.AppendLine(headerV2.Unknown7, " Unknown 7");
+ builder.AppendLine(headerV2.Unknown8, " Unknown 8");
+ builder.AppendLine(headerV2.Unknown9, " Unknown 9");
+ builder.AppendLine(headerV2.UnknownOffset2, " Unknown Offset 2");
+ builder.AppendLine(headerV2.Unknown10, " Unknown 10");
+ builder.AppendLine(headerV2.Unknown11, " Unknown 11");
+ builder.AppendLine(headerV2.Unknown12, " Unknown 12");
+ builder.AppendLine(headerV2.Unknown13, " Unknown 13");
+ builder.AppendLine(headerV2.Unknown14, " Unknown 14");
+ builder.AppendLine(headerV2.Unknown15, " Unknown 15");
+ builder.AppendLine(headerV2.Unknown16, " Unknown 16");
+ builder.AppendLine(headerV2.Unknown17, " Unknown 17");
+ builder.AppendLine(headerV2.TrackID, " Track ID");
+ builder.AppendLine(headerV2.Year, " Year");
+ builder.AppendLine(headerV2.TrackNumber, " Track number");
+ builder.AppendLine(headerV2.Unknown18, " Unknown 18");
+ }
+ else
+ {
+ builder.AppendLine(" Unrecognized version, not parsed...");
+ }
+
+ builder.AppendLine(header.TrackLength, " Track length");
+ builder.AppendLine(header.Track, " Track");
+ builder.AppendLine(header.ArtistLength, " Artist length");
+ builder.AppendLine(header.Artist, " Artist");
+ builder.AppendLine(header.AlbumLength, " Album length");
+ builder.AppendLine(header.Album, " Album");
+ builder.AppendLine(header.WriterLength, " Writer length");
+ builder.AppendLine(header.Writer, " Writer");
+ builder.AppendLine(header.PublisherLength, " Publisher length");
+ builder.AppendLine(header.Publisher, " Publisher");
+ builder.AppendLine(header.LabelLength, " Label length");
+ builder.AppendLine(header.Label, " Label");
+ builder.AppendLine(header.CommentsLength, " Comments length");
+ builder.AppendLine(header.Comments, " Comments");
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, UnknownBlock1 block)
+#else
+ private static void Print(StringBuilder builder, UnknownBlock1? block)
+#endif
+ {
+ builder.AppendLine(" Unknown Block 1 Information:");
+ builder.AppendLine(" -------------------------");
+ if (block == null)
+ {
+ builder.AppendLine(" No unknown block 1r");
+ builder.AppendLine();
+ return;
+ }
+
+ builder.AppendLine(block.Length, " Length");
+ builder.AppendLine(block.Data, " Data");
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, uint value)
+#else
+ private static void Print(StringBuilder builder, uint? value)
+#endif
+ {
+ builder.AppendLine(" Unknown Value 2 Information:");
+ builder.AppendLine(" -------------------------");
+#if NET6_0_OR_GREATER
+ if (value == null)
+ {
+ builder.AppendLine(" No unknown block 1r");
+ builder.AppendLine();
+ return;
+ }
+#endif
+
+ builder.AppendLine(value, " Value");
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, UnknownBlock3 block)
+#else
+ private static void Print(StringBuilder builder, UnknownBlock3? block)
+#endif
+ {
+ builder.AppendLine(" Unknown Block 3 Information:");
+ builder.AppendLine(" -------------------------");
+ if (block == null)
+ {
+ builder.AppendLine(" No unknown block 1r");
+ builder.AppendLine();
+ return;
+ }
+
+ builder.AppendLine(block.Data, " Data");
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, uint count, DataFile[] entries)
+#else
+ private static void Print(StringBuilder builder, uint count, DataFile?[]? entries)
+#endif
+ {
+ builder.AppendLine(" Data Files Information:");
+ builder.AppendLine(" -------------------------");
+ builder.AppendLine(count, " Data files count");
+ if (count == 0 || entries == null || entries.Length == 0)
+ {
+ builder.AppendLine(" No data files");
+ builder.AppendLine();
+ return;
+ }
+
+ for (int i = 0; i < entries.Length; i++)
+ {
+ var entry = entries[i];
+ builder.AppendLine($" Data File {i}:");
+ if (entry == null)
+ {
+ builder.AppendLine(" [NULL]");
+ continue;
+ }
+
+ builder.AppendLine(entry.FileNameLength, " File name length");
+ builder.AppendLine(entry.FileName, " File name");
+ builder.AppendLine(entry.DataLength, " Data length");
+ builder.AppendLine(entry.Data, " Data");
+ }
+ builder.AppendLine();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinaryObjectScanner.Wrappers/PlayJAudioFile.cs b/BinaryObjectScanner.Wrappers/PlayJAudioFile.cs
index 028a5bcc..272253b2 100644
--- a/BinaryObjectScanner.Wrappers/PlayJAudioFile.cs
+++ b/BinaryObjectScanner.Wrappers/PlayJAudioFile.cs
@@ -1,4 +1,3 @@
-using System;
using System.IO;
using System.Text;
@@ -388,164 +387,10 @@ namespace BinaryObjectScanner.Wrappers
public override StringBuilder PrettyPrint()
{
StringBuilder builder = new StringBuilder();
-
- builder.AppendLine("PlayJ Audio File Information:");
- builder.AppendLine("-------------------------");
- builder.AppendLine();
-
- PrintAudioHeader(builder);
- PrintUnknownBlock1(builder);
-
- if (Version == 0x00000000)
- {
- PrintUnknownValue2(builder);
- PrintUnknownBlock3(builder);
- }
- else if (Version == 0x0000000A)
- {
- PrintDataFiles(builder);
- }
-
+ Printing.PlayJAudioFile.Print(builder, _model);
return builder;
}
- ///
- /// Print audio header information
- ///
- /// StringBuilder to append information to
- private void PrintAudioHeader(StringBuilder builder)
- {
- builder.AppendLine(" Audio Header Information:");
- builder.AppendLine(" -------------------------");
- builder.AppendLine($" Signature: {Signature} (0x{Signature:X})");
- builder.AppendLine($" Version: {Version} (0x{Version:X})");
- if (Version == 0x00000000)
- {
- builder.AppendLine($" Track ID: {V1_TrackID} (0x{V1_TrackID:X})");
- builder.AppendLine($" Unknown offset 1: {V1_UnknownOffset1} (0x{V1_UnknownOffset1:X})");
- builder.AppendLine($" Unknown offset 2: {V1_UnknownOffset2} (0x{V1_UnknownOffset2:X})");
- builder.AppendLine($" Unknown offset 3: {V1_UnknownOffset3} (0x{V1_UnknownOffset3:X})");
- builder.AppendLine($" Unknown 1: {V1_Unknown1} (0x{V1_Unknown1:X})");
- builder.AppendLine($" Unknown 2: {V1_Unknown2} (0x{V1_Unknown2:X})");
- builder.AppendLine($" Year: {V1_Year} (0x{V1_Year:X})");
- builder.AppendLine($" Track number: {V1_TrackNumber} (0x{V1_TrackNumber:X})");
- builder.AppendLine($" Subgenre: {V1_Subgenre} (0x{V1_Subgenre:X})");
- builder.AppendLine($" Duration in seconds: {V1_Duration} (0x{V1_Duration:X})");
- }
- else if (Version == 0x0000000A)
- {
- builder.AppendLine($" Unknown 1: {V2_Unknown1} (0x{V2_Unknown1:X})");
- builder.AppendLine($" Unknown 2: {V2_Unknown2} (0x{V2_Unknown2:X})");
- builder.AppendLine($" Unknown 3: {V2_Unknown3} (0x{V2_Unknown3:X})");
- builder.AppendLine($" Unknown 4: {V2_Unknown4} (0x{V2_Unknown4:X})");
- builder.AppendLine($" Unknown 5: {V2_Unknown5} (0x{V2_Unknown5:X})");
- builder.AppendLine($" Unknown 6: {V2_Unknown6} (0x{V2_Unknown6:X})");
- builder.AppendLine($" Unknown Offset 1: {V2_UnknownOffset1} (0x{V2_UnknownOffset1:X})");
- builder.AppendLine($" Unknown 7: {V2_Unknown7} (0x{V2_Unknown7:X})");
- builder.AppendLine($" Unknown 8: {V2_Unknown8} (0x{V2_Unknown8:X})");
- builder.AppendLine($" Unknown 9: {V2_Unknown9} (0x{V2_Unknown9:X})");
- builder.AppendLine($" Unknown Offset 2: {V2_UnknownOffset2} (0x{V2_UnknownOffset2:X})");
- builder.AppendLine($" Unknown 10: {V2_Unknown10} (0x{V2_Unknown10:X})");
- builder.AppendLine($" Unknown 11: {V2_Unknown11} (0x{V2_Unknown11:X})");
- builder.AppendLine($" Unknown 12: {V2_Unknown12} (0x{V2_Unknown12:X})");
- builder.AppendLine($" Unknown 13: {V2_Unknown13} (0x{V2_Unknown13:X})");
- builder.AppendLine($" Unknown 14: {V2_Unknown14} (0x{V2_Unknown14:X})");
- builder.AppendLine($" Unknown 15: {V2_Unknown15} (0x{V2_Unknown15:X})");
- builder.AppendLine($" Unknown 16: {V2_Unknown16} (0x{V2_Unknown16:X})");
- builder.AppendLine($" Unknown 17: {V2_Unknown17} (0x{V2_Unknown17:X})");
- builder.AppendLine($" Track ID: {V2_TrackID} (0x{V2_TrackID:X})");
- builder.AppendLine($" Year: {V2_Year} (0x{V2_Year:X})");
- builder.AppendLine($" Track number: {V2_TrackNumber} (0x{V2_TrackNumber:X})");
- builder.AppendLine($" Unknown 18: {V2_Unknown18} (0x{V2_Unknown18:X})");
- }
- else
- {
- builder.AppendLine($" Unrecognized version, not parsed...");
- }
- builder.AppendLine($" Track length: {TrackLength} (0x{TrackLength:X})");
- builder.AppendLine($" Track: {Track ?? "[NULL]"}");
- builder.AppendLine($" Artist length: {ArtistLength} (0x{ArtistLength:X})");
- builder.AppendLine($" Artist: {Artist ?? "[NULL]"}");
- builder.AppendLine($" Album length: {AlbumLength} (0x{AlbumLength:X})");
- builder.AppendLine($" Album: {Album ?? "[NULL]"}");
- builder.AppendLine($" Writer length: {WriterLength} (0x{WriterLength:X})");
- builder.AppendLine($" Writer: {Writer ?? "[NULL]"}");
- builder.AppendLine($" Publisher length: {PublisherLength} (0x{PublisherLength:X})");
- builder.AppendLine($" Publisher: {Publisher ?? "[NULL]"}");
- builder.AppendLine($" Label length: {LabelLength} (0x{LabelLength:X})");
- builder.AppendLine($" Label: {Label ?? "[NULL]"}");
- builder.AppendLine($" Comments length: {CommentsLength} (0x{CommentsLength:X})");
- builder.AppendLine($" Comments: {Comments ?? "[NULL]"}");
- builder.AppendLine();
- }
-
- ///
- /// Print unknown block 1 information
- ///
- /// StringBuilder to append information to
- private void PrintUnknownBlock1(StringBuilder builder)
- {
- builder.AppendLine(" Unknown Block 1 Information:");
- builder.AppendLine(" -------------------------");
- builder.AppendLine($" Length: {UB1_Length} (0x{UB1_Length:X})");
- builder.AppendLine($" Data: {(UB1_Data == null ? "[NULL]" : BitConverter.ToString(UB1_Data).Replace('-', ' '))}");
- builder.AppendLine();
- }
-
- ///
- /// Print unknown value 2 information (V1 only)
- ///
- /// StringBuilder to append information to
- private void PrintUnknownValue2(StringBuilder builder)
- {
- builder.AppendLine(" Unknown Value 2 Information:");
- builder.AppendLine(" -------------------------");
- builder.AppendLine($" Value: {UnknownValue2} (0x{UnknownValue2:X})");
- builder.AppendLine();
- }
-
- ///
- /// Print unknown block 3 information (V1 only)
- ///
- /// StringBuilder to append information to
- private void PrintUnknownBlock3(StringBuilder builder)
- {
- builder.AppendLine(" Unknown Block 3 Information:");
- builder.AppendLine(" -------------------------");
- builder.AppendLine($" Data: {(UB3_Data == null ? "[NULL]" : BitConverter.ToString(UB3_Data).Replace('-', ' '))}");
- builder.AppendLine();
- }
-
- ///
- /// Print data files information (V2 only)
- ///
- /// StringBuilder to append information to
- private void PrintDataFiles(StringBuilder builder)
- {
- builder.AppendLine(" Data Files Information:");
- builder.AppendLine(" -------------------------");
- builder.AppendLine($" Data files count: {DataFilesCount} (0x{DataFilesCount:X})");
- if (DataFilesCount != 0 && DataFiles != null && DataFiles.Length != 0)
- {
- for (int i = 0; i < DataFiles.Length; i++)
- {
- var dataFile = DataFiles[i];
- builder.AppendLine($" Data File {i}:");
- if (dataFile == null)
- {
- builder.AppendLine(" [NULL]");
- continue;
- }
-
- builder.AppendLine($" File name length: {dataFile.FileNameLength} (0x{dataFile.FileNameLength:X})");
- builder.AppendLine($" File name: {dataFile.FileName ?? "[NULL]"}");
- builder.AppendLine($" Data length: {dataFile.DataLength} (0x{dataFile.DataLength:X})");
- builder.AppendLine($" Data: {(dataFile.Data == null ? "[NULL]" : BitConverter.ToString(dataFile.Data).Replace('-', ' '))}");
- }
- }
- builder.AppendLine();
- }
-
#if NET6_0_OR_GREATER
///