mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-02-16 05:44:53 +00:00
Replace EntryHeader with AudioHeader
This commit is contained in:
@@ -132,25 +132,29 @@ namespace BurnOutSharp.Builders
|
||||
// Create a new audio file to fill
|
||||
var audioFile = new AudioFile();
|
||||
|
||||
#region Entry Header
|
||||
#region Audio Header
|
||||
|
||||
// Try to parse the entry header
|
||||
var entryHeader = ParseEntryHeader(data);
|
||||
if (entryHeader == null)
|
||||
// Try to parse the audio header
|
||||
var audioHeader = ParseAudioHeader(data);
|
||||
if (audioHeader == null)
|
||||
return null;
|
||||
|
||||
// Set the entry header
|
||||
audioFile.Header = entryHeader;
|
||||
// Set the audio header
|
||||
audioFile.Header = audioHeader;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unknown Block 1
|
||||
|
||||
uint unknownOffset1 = (audioHeader.Version == 0x00000000)
|
||||
? (audioHeader as AudioHeaderV1).UnknownOffset1
|
||||
: (audioHeader as AudioHeaderV2).UnknownOffset1 + 0x54;
|
||||
|
||||
// If we have an unknown block 1 offset
|
||||
if (entryHeader.UnknownOffset1 > 0)
|
||||
if (unknownOffset1 > 0)
|
||||
{
|
||||
// Get the unknown block 1 offset
|
||||
long offset = entryHeader.UnknownOffset1 + adjust;
|
||||
long offset = unknownOffset1 + adjust;
|
||||
if (offset < 0 || offset >= data.Length)
|
||||
return null;
|
||||
|
||||
@@ -171,15 +175,18 @@ namespace BurnOutSharp.Builders
|
||||
#region V1 Only
|
||||
|
||||
// If we have a V1 file
|
||||
if (entryHeader.Version == 0x00000000)
|
||||
if (audioHeader.Version == 0x00000000)
|
||||
{
|
||||
#region Unknown Value 2
|
||||
|
||||
// Get the V1 unknown offset 2
|
||||
uint? unknownOffset2 = (audioHeader as AudioHeaderV1)?.UnknownOffset2;
|
||||
|
||||
// If we have an unknown value 2 offset
|
||||
if (entryHeader.UnknownOffset2 > 0)
|
||||
if (unknownOffset2 != null && unknownOffset2 > 0)
|
||||
{
|
||||
// Get the unknown value 2 offset
|
||||
long offset = entryHeader.UnknownOffset2 + adjust;
|
||||
long offset = unknownOffset2.Value + adjust;
|
||||
if (offset < 0 || offset >= data.Length)
|
||||
return null;
|
||||
|
||||
@@ -194,11 +201,14 @@ namespace BurnOutSharp.Builders
|
||||
|
||||
#region Unknown Block 3
|
||||
|
||||
// Get the V1 unknown offset 3
|
||||
uint? unknownOffset3 = (audioHeader as AudioHeaderV1)?.UnknownOffset3;
|
||||
|
||||
// If we have an unknown block 3 offset
|
||||
if (entryHeader.UnknownOffset2 > 0)
|
||||
if (unknownOffset3 != null && unknownOffset3 > 0)
|
||||
{
|
||||
// Get the unknown block 3 offset
|
||||
long offset = entryHeader.UnknownOffset3 + adjust;
|
||||
long offset = unknownOffset3.Value + adjust;
|
||||
if (offset < 0 || offset >= data.Length)
|
||||
return null;
|
||||
|
||||
@@ -222,7 +232,7 @@ namespace BurnOutSharp.Builders
|
||||
#region V2 Only
|
||||
|
||||
// If we have a V2 file
|
||||
if (entryHeader.Version == 0x0000000A)
|
||||
if (audioHeader.Version == 0x0000000A)
|
||||
{
|
||||
#region Data Files Count
|
||||
|
||||
@@ -271,92 +281,6 @@ namespace BurnOutSharp.Builders
|
||||
return playlistHeader;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse a Stream into an entry header
|
||||
/// </summary>
|
||||
/// <param name="data">Stream to parse</param>
|
||||
/// <returns>Filled entry header on success, null on error</returns>
|
||||
private static EntryHeader ParseEntryHeader(Stream data)
|
||||
{
|
||||
// Cache the current offset
|
||||
long initialOffset = data.Position;
|
||||
|
||||
// TODO: Use marshalling here instead of building
|
||||
EntryHeader entryHeader = new EntryHeader();
|
||||
|
||||
entryHeader.Signature = data.ReadUInt32();
|
||||
if (entryHeader.Signature != SignatureUInt32)
|
||||
return null;
|
||||
|
||||
// Only V1 is fully supported
|
||||
entryHeader.Version = data.ReadUInt32();
|
||||
if (entryHeader.Version == 0x00000000)
|
||||
{
|
||||
entryHeader.TrackID = data.ReadUInt32();
|
||||
entryHeader.UnknownOffset1 = data.ReadUInt32();
|
||||
entryHeader.UnknownOffset2 = data.ReadUInt32();
|
||||
entryHeader.UnknownOffset3 = data.ReadUInt32();
|
||||
entryHeader.Unknown1 = data.ReadUInt32();
|
||||
entryHeader.Unknown2 = data.ReadUInt32();
|
||||
entryHeader.Year = data.ReadUInt32();
|
||||
entryHeader.TrackNumber = data.ReadByteValue();
|
||||
entryHeader.Subgenre = (Subgenre)data.ReadByteValue();
|
||||
entryHeader.Duration = data.ReadUInt32();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Discard the following pieces until we can figure out what they are
|
||||
_ = data.ReadBytes(0x4C);
|
||||
|
||||
entryHeader.TrackID = data.ReadUInt32();
|
||||
entryHeader.Year = data.ReadUInt32(); // Unconfirmed
|
||||
entryHeader.TrackNumber = data.ReadUInt32();
|
||||
|
||||
// Discard the following pieces until we can figure out what they are
|
||||
_ = data.ReadBytes(0x04);
|
||||
}
|
||||
|
||||
entryHeader.TrackLength = data.ReadUInt16();
|
||||
byte[] track = data.ReadBytes(entryHeader.TrackLength);
|
||||
if (track != null)
|
||||
entryHeader.Track = Encoding.ASCII.GetString(track);
|
||||
|
||||
entryHeader.ArtistLength = data.ReadUInt16();
|
||||
byte[] artist = data.ReadBytes(entryHeader.ArtistLength);
|
||||
if (artist != null)
|
||||
entryHeader.Artist = Encoding.ASCII.GetString(artist);
|
||||
|
||||
entryHeader.AlbumLength = data.ReadUInt16();
|
||||
byte[] album = data.ReadBytes(entryHeader.AlbumLength);
|
||||
if (album != null)
|
||||
entryHeader.Album = Encoding.ASCII.GetString(album);
|
||||
|
||||
entryHeader.WriterLength = data.ReadUInt16();
|
||||
byte[] writer = data.ReadBytes(entryHeader.WriterLength);
|
||||
if (writer != null)
|
||||
entryHeader.Writer = Encoding.ASCII.GetString(writer);
|
||||
|
||||
entryHeader.PublisherLength = data.ReadUInt16();
|
||||
byte[] publisher = data.ReadBytes(entryHeader.PublisherLength);
|
||||
if (publisher != null)
|
||||
entryHeader.Publisher = Encoding.ASCII.GetString(publisher);
|
||||
|
||||
entryHeader.LabelLength = data.ReadUInt16();
|
||||
byte[] label = data.ReadBytes(entryHeader.LabelLength);
|
||||
if (label != null)
|
||||
entryHeader.Label = Encoding.ASCII.GetString(label);
|
||||
|
||||
if (data.Position - initialOffset < entryHeader.UnknownOffset1)
|
||||
{
|
||||
entryHeader.CommentsLength = data.ReadUInt16();
|
||||
byte[] comments = data.ReadBytes(entryHeader.CommentsLength);
|
||||
if (comments != null)
|
||||
entryHeader.Comments = Encoding.ASCII.GetString(comments);
|
||||
}
|
||||
|
||||
return entryHeader;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse a Stream into an audio header
|
||||
/// </summary>
|
||||
@@ -422,10 +346,15 @@ namespace BurnOutSharp.Builders
|
||||
v2.Unknown10 = data.ReadUInt32();
|
||||
v2.Unknown11 = data.ReadUInt32();
|
||||
v2.Unknown12 = data.ReadUInt32();
|
||||
v2.Unknown13 = data.ReadUInt32();
|
||||
v2.Unknown14 = data.ReadUInt32();
|
||||
v2.Unknown15 = data.ReadUInt32();
|
||||
v2.Unknown16 = data.ReadUInt32();
|
||||
v2.Unknown17 = data.ReadUInt32();
|
||||
v2.TrackID = data.ReadUInt32();
|
||||
v2.Year = data.ReadUInt32();
|
||||
v2.TrackNumber = data.ReadUInt32();
|
||||
v2.Unknown13 = data.ReadUInt32();
|
||||
v2.Unknown18 = data.ReadUInt32();
|
||||
|
||||
audioHeader = v2;
|
||||
unknownOffset1 = v2.UnknownOffset1 + 0x54;
|
||||
@@ -436,10 +365,6 @@ namespace BurnOutSharp.Builders
|
||||
return null;
|
||||
}
|
||||
|
||||
audioHeader.Signature = data.ReadUInt32();
|
||||
if (audioHeader.Signature != SignatureUInt32)
|
||||
return null;
|
||||
|
||||
audioHeader.TrackLength = data.ReadUInt16();
|
||||
byte[] track = data.ReadBytes(audioHeader.TrackLength);
|
||||
if (track != null)
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace BurnOutSharp.Models.PlayJ
|
||||
/// <summary>
|
||||
/// Header
|
||||
/// </summary>
|
||||
public EntryHeader Header { get; set; }
|
||||
public AudioHeader Header { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Unknown block 1
|
||||
@@ -18,7 +18,7 @@ namespace BurnOutSharp.Models.PlayJ
|
||||
#region V1 Only
|
||||
|
||||
/// <summary>
|
||||
/// Value referred to by <see cref="EntryHeader.UnknownOffset2"/>
|
||||
/// Value referred to by <see cref="AudioHeaderV1.UnknownOffset2"/>
|
||||
/// </summary>
|
||||
/// <remarks>Typically 0x00000000</remarks>
|
||||
public uint UnknownValue2 { get; set; }
|
||||
|
||||
@@ -67,15 +67,40 @@ namespace BurnOutSharp.Models.PlayJ
|
||||
public uint Unknown10;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown (Always 0x00000000)
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
public uint Unknown11;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown (Always 0x00000007)
|
||||
/// Unknown (Always 0x0000005)
|
||||
/// </summary>
|
||||
public uint Unknown12;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown (Always 0x0000009)
|
||||
/// </summary>
|
||||
public uint Unknown13;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
public uint Unknown14;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
public uint Unknown15;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown (Always 0x0000000)
|
||||
/// </summary>
|
||||
public uint Unknown16;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown (Always 0x00000007)
|
||||
/// </summary>
|
||||
public uint Unknown17;
|
||||
|
||||
/// <summary>
|
||||
/// Download track ID
|
||||
/// </summary>
|
||||
@@ -96,6 +121,6 @@ namespace BurnOutSharp.Models.PlayJ
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
public uint Unknown13;
|
||||
public uint Unknown18;
|
||||
}
|
||||
}
|
||||
@@ -1,146 +0,0 @@
|
||||
namespace BurnOutSharp.Models.PlayJ
|
||||
{
|
||||
/// <summary>
|
||||
/// PlayJ audio header / CDS entry header
|
||||
/// </summary>
|
||||
/// <remarks>This is only valid for V1 right now</remarks>
|
||||
public sealed class EntryHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// Signature (0x4B539DFF)
|
||||
/// </summary>
|
||||
public uint Signature;
|
||||
|
||||
/// <summary>
|
||||
/// Version
|
||||
/// </summary>
|
||||
public uint Version;
|
||||
|
||||
/// <summary>
|
||||
/// Download track ID
|
||||
/// </summary>
|
||||
/// <remarks>0xFFFFFFFF if unset</remarks>
|
||||
public uint TrackID;
|
||||
|
||||
/// <summary>
|
||||
/// Offset to unknown data block 1
|
||||
/// </summary>
|
||||
public uint UnknownOffset1;
|
||||
|
||||
/// <summary>
|
||||
/// Offset to unknown data block 2
|
||||
/// </summary>
|
||||
public uint UnknownOffset2;
|
||||
|
||||
/// <summary>
|
||||
/// Offset to unknown data block 3
|
||||
/// </summary>
|
||||
public uint UnknownOffset3;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
/// <remarks>Always 0x00000001</remarks>
|
||||
public uint Unknown1;
|
||||
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
/// <remarks>Typically 0x00000001 in download titles</remarks>
|
||||
public uint Unknown2;
|
||||
|
||||
/// <summary>
|
||||
/// Track year
|
||||
/// </summary>
|
||||
/// <remarks>0xFFFFFFFF if unset</remarks>
|
||||
public uint Year;
|
||||
|
||||
/// <summary>
|
||||
/// Track number
|
||||
/// </summary>
|
||||
/// <remarks>Byte in V1, UInt32 in V2</remarks>
|
||||
public uint TrackNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Subgenre
|
||||
/// </summary>
|
||||
public Subgenre Subgenre;
|
||||
|
||||
/// <summary>
|
||||
/// Track duration in seconds
|
||||
/// </summary>
|
||||
public uint Duration;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the track name
|
||||
/// </summary>
|
||||
public ushort TrackLength;
|
||||
|
||||
/// <summary>
|
||||
/// Track name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Track;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the artist name
|
||||
/// </summary>
|
||||
public ushort ArtistLength;
|
||||
|
||||
/// <summary>
|
||||
/// Artist name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Artist;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the album name
|
||||
/// </summary>
|
||||
public ushort AlbumLength;
|
||||
|
||||
/// <summary>
|
||||
/// Album name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Album;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the writer name
|
||||
/// </summary>
|
||||
public ushort WriterLength;
|
||||
|
||||
/// <summary>
|
||||
/// Writer name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Writer;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the publisher name
|
||||
/// </summary>
|
||||
public ushort PublisherLength;
|
||||
|
||||
/// <summary>
|
||||
/// Publisher name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Publisher;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the label name
|
||||
/// </summary>
|
||||
public ushort LabelLength;
|
||||
|
||||
/// <summary>
|
||||
/// Label name (not null-terminated)
|
||||
/// </summary>
|
||||
public string Label;
|
||||
|
||||
/// <summary>
|
||||
/// Length of the comments
|
||||
/// </summary>
|
||||
/// <remarks>Optional field only in some samples</remarks>
|
||||
public ushort CommentsLength;
|
||||
|
||||
/// <summary>
|
||||
/// Comments (not null-terminated)
|
||||
/// </summary>
|
||||
/// <remarks>Optional field only in some samples</remarks>
|
||||
public string Comments;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
namespace BurnOutSharp.Models.PlayJ
|
||||
{
|
||||
/// <summary>
|
||||
/// Data referred to by <see cref="EntryHeader.UnknownOffset1"/>
|
||||
/// Data referred to by <see cref="AudioHeaderV1.UnknownOffset1"/> or <see cref="AudioHeaderV2.UnknownOffset1"/>
|
||||
/// </summary>
|
||||
public sealed class UnknownBlock1
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
namespace BurnOutSharp.Models.PlayJ
|
||||
{
|
||||
/// <summary>
|
||||
/// Data referred to by <see cref="EntryHeader.UnknownOffset3"/>
|
||||
/// Data referred to by <see cref="AudioHeaderV1.UnknownOffset3"/>
|
||||
/// </summary>
|
||||
public sealed class UnknownBlock3
|
||||
{
|
||||
|
||||
@@ -8,84 +8,161 @@ namespace BurnOutSharp.Wrappers
|
||||
{
|
||||
#region Pass-Through Properties
|
||||
|
||||
#region Entry Header
|
||||
#region Audio Header
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Signature"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Signature"/>
|
||||
public uint Signature => _audioFile.Header.Signature;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Version"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Version"/>
|
||||
public uint Version => _audioFile.Header.Version;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.TrackID"/>
|
||||
public uint TrackID => _audioFile.Header.TrackID;
|
||||
#region V1 Only
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.UnknownOffset1"/>
|
||||
public uint UnknownOffset1 => _audioFile.Header.UnknownOffset1;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.TrackID"/>
|
||||
public uint? V1_TrackID => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.TrackID;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.UnknownOffset2"/>
|
||||
public uint UnknownOffset2 => _audioFile.Header.UnknownOffset2;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset1"/>
|
||||
public uint? V1_UnknownOffset1 => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.UnknownOffset1;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.UnknownOffset3"/>
|
||||
public uint UnknownOffset3 => _audioFile.Header.UnknownOffset3;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset2"/>
|
||||
public uint? V1_UnknownOffset2 => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.UnknownOffset2;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Unknown1"/>
|
||||
public uint Unknown1 => _audioFile.Header.Unknown1;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset3"/>
|
||||
public uint? V1_UnknownOffset3 => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.UnknownOffset3;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Unknown2"/>
|
||||
public uint Unknown2 => _audioFile.Header.Unknown2;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Unknown1"/>
|
||||
public uint? V1_Unknown1 => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.Unknown1;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Year"/>
|
||||
public uint Year => _audioFile.Header.Year;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Unknown2"/>
|
||||
public uint? V1_Unknown2 => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.Unknown2;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.TrackNumber"/>
|
||||
public uint TrackNumber => _audioFile.Header.TrackNumber;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Year"/>
|
||||
public uint? V1_Year => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.Year;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Subgenre"/>
|
||||
public Models.PlayJ.Subgenre Subgenre => _audioFile.Header.Subgenre;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.TrackNumber"/>
|
||||
public uint? V1_TrackNumber => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.TrackNumber;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Duration"/>
|
||||
public uint Duration => _audioFile.Header.Duration;
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Subgenre"/>
|
||||
public Models.PlayJ.Subgenre? V1_Subgenre => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.Subgenre;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.TrackLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Duration"/>
|
||||
public uint? V1_Duration => (_audioFile.Header as Models.PlayJ.AudioHeaderV1)?.Duration;
|
||||
|
||||
#endregion
|
||||
|
||||
#region V2 Only
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown1"/>
|
||||
public uint? V2_Unknown1 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown1;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown2"/>
|
||||
public uint? V2_Unknown2 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown2;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown3"/>
|
||||
public uint? V2_Unknown3 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown3;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown4"/>
|
||||
public uint? V2_Unknown4 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown4;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown5"/>
|
||||
public uint? V2_Unknown5 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown5;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown6"/>
|
||||
public uint? V2_Unknown6 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown6;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.UnknownOffset1"/>
|
||||
public uint? V2_UnknownOffset1 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.UnknownOffset1;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown7"/>
|
||||
public uint? V2_Unknown7 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown7;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown8"/>
|
||||
public uint? V2_Unknown8 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown8;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown9"/>
|
||||
public uint? V2_Unknown9 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown9;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.UnknownOffset2"/>
|
||||
public uint? V2_UnknownOffset2 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.UnknownOffset2;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown10"/>
|
||||
public uint? V2_Unknown10 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown10;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown11"/>
|
||||
public uint? V2_Unknown11 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown11;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown12"/>
|
||||
public uint? V2_Unknown12 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown12;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown13"/>
|
||||
public uint? V2_Unknown13 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown13;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown14"/>
|
||||
public uint? V2_Unknown14 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown14;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown15"/>
|
||||
public uint? V2_Unknown15 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown15;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown16"/>
|
||||
public uint? V2_Unknown16 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown16;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown17"/>
|
||||
public uint? V2_Unknown17 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown17;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.TrackID"/>
|
||||
public uint? V2_TrackID => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.TrackID;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Year"/>
|
||||
public uint? V2_Year => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Year;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.TrackNumber"/>
|
||||
public uint? V2_TrackNumber => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.TrackNumber;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown18"/>
|
||||
public uint? V2_Unknown18 => (_audioFile.Header as Models.PlayJ.AudioHeaderV2)?.Unknown18;
|
||||
|
||||
#endregion
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.TrackLength"/>
|
||||
public ushort TrackLength => _audioFile.Header.TrackLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Track"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Track"/>
|
||||
public string Track => _audioFile.Header.Track;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.ArtistLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.ArtistLength"/>
|
||||
public ushort ArtistLength => _audioFile.Header.ArtistLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Artist"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Artist"/>
|
||||
public string Artist => _audioFile.Header.Artist;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.AlbumLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.AlbumLength"/>
|
||||
public ushort AlbumLength => _audioFile.Header.AlbumLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Album"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Album"/>
|
||||
public string Album => _audioFile.Header.Album;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.WriterLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.WriterLength"/>
|
||||
public ushort WriterLength => _audioFile.Header.WriterLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Writer"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Writer"/>
|
||||
public string Writer => _audioFile.Header.Writer;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.PublisherLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.PublisherLength"/>
|
||||
public ushort PublisherLength => _audioFile.Header.PublisherLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Publisher"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Publisher"/>
|
||||
public string Publisher => _audioFile.Header.Publisher;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.LabelLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.LabelLength"/>
|
||||
public ushort LabelLength => _audioFile.Header.LabelLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Label"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Label"/>
|
||||
public string Label => _audioFile.Header.Label;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.CommentsLength"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.CommentsLength"/>
|
||||
public ushort CommentsLength => _audioFile.Header.CommentsLength;
|
||||
|
||||
/// <inheritdoc cref="Models.PlayJ.EntryHeader.Comments"/>
|
||||
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Comments"/>
|
||||
public string Comments => _audioFile.Header.Comments;
|
||||
|
||||
#endregion
|
||||
@@ -212,7 +289,7 @@ namespace BurnOutSharp.Wrappers
|
||||
builder.AppendLine("-------------------------");
|
||||
builder.AppendLine();
|
||||
|
||||
PrintEntryHeader(builder);
|
||||
PrintAudioHeader(builder);
|
||||
PrintUnknownBlock1(builder);
|
||||
|
||||
if (Version == 0x00000000)
|
||||
@@ -229,25 +306,58 @@ namespace BurnOutSharp.Wrappers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print entry header information
|
||||
/// Print audio header information
|
||||
/// </summary>
|
||||
/// <param name="builder">StringBuilder to append information to</param>
|
||||
private void PrintEntryHeader(StringBuilder builder)
|
||||
private void PrintAudioHeader(StringBuilder builder)
|
||||
{
|
||||
builder.AppendLine(" Entry Header Information:");
|
||||
builder.AppendLine(" Audio Header Information:");
|
||||
builder.AppendLine(" -------------------------");
|
||||
builder.AppendLine($" Signature: {Signature} (0x{Signature:X})");
|
||||
builder.AppendLine($" Version: {Version} (0x{Version:X})");
|
||||
builder.AppendLine($" Track ID: {TrackID} (0x{TrackID:X})");
|
||||
builder.AppendLine($" Unknown offset 1: {UnknownOffset1} (0x{UnknownOffset1:X})");
|
||||
builder.AppendLine($" Unknown offset 2: {UnknownOffset2} (0x{UnknownOffset2:X})");
|
||||
builder.AppendLine($" Unknown offset 3: {UnknownOffset3} (0x{UnknownOffset3:X})");
|
||||
builder.AppendLine($" Unknown 1: {Unknown1} (0x{Unknown1:X})");
|
||||
builder.AppendLine($" Unknown 2: {Unknown2} (0x{Unknown2:X})");
|
||||
builder.AppendLine($" Year: {Year} (0x{Year:X})");
|
||||
builder.AppendLine($" Track number: {TrackNumber} (0x{TrackNumber:X})");
|
||||
builder.AppendLine($" Subgenre: {Subgenre} (0x{Subgenre:X})");
|
||||
builder.AppendLine($" Duration in seconds: {Duration} (0x{Duration: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})");
|
||||
|
||||
Reference in New Issue
Block a user