diff --git a/src/Lumina.Tests/LuminaTests.cs b/src/Lumina.Tests/LuminaTests.cs index f05fc71c..91e52336 100644 --- a/src/Lumina.Tests/LuminaTests.cs +++ b/src/Lumina.Tests/LuminaTests.cs @@ -1,3 +1,4 @@ +using Lumina.Data.Files; using Xunit; namespace Lumina.Tests; @@ -18,4 +19,20 @@ public void FilePathsAreParsedCorrectly( string category, string repo, ulong has Assert.Equal( repo, parsed.Repository ); Assert.Equal( hash, parsed.IndexHash ); } + + [RequiresGameInstallationFact] + public void ScdFilesAreLoadedCorrectly() + { + var gameData = RequiresGameInstallationFact.CreateGameData(); + var file = gameData.GetFile( "music/ex1/bgm_ex1_alex01.scd" ); + + Assert.NotNull( file ); + Assert.NotEmpty( file.Data ); + Assert.True( file.AudioDataCount > 0 ); + Assert.NotNull( file.GetAudio( 0 ) ); + Assert.True( file.SoundDataCount > 0 ); + Assert.NotNull( file.GetSound( 0 ) ); + Assert.True( file.TrackDataCount > 0 ); + Assert.NotNull( file.GetTrack( 0 ) ); + } } \ No newline at end of file diff --git a/src/Lumina/Data/Files/ScdFile.cs b/src/Lumina/Data/Files/ScdFile.cs index ba7da948..bb435064 100644 --- a/src/Lumina/Data/Files/ScdFile.cs +++ b/src/Lumina/Data/Files/ScdFile.cs @@ -514,7 +514,7 @@ public Audio GetAudio( int index ) audio.AudioDataHeader = oggSeekTableHeader; audio.SeekTable = Reader.ReadUInt32Array( (int)( oggSeekTableHeader.SeekTableSize / 4 ) ); - Reader.Position = subInfoStartPos + audioBasicDesc.SubInfoSize; + Reader.Position = subInfoStartPos + audioBasicDesc.SubInfoSize - oggSeekTableHeader.OggHeaderSize; var oggFile = new byte[ oggSeekTableHeader.OggHeaderSize + audioBasicDesc.Size ]; Array.Copy( Reader.ReadBytes( (int)oggSeekTableHeader.OggHeaderSize ), oggFile, oggSeekTableHeader.OggHeaderSize );