From 0ca4a04ff7b9858f2752a490005bc3050af0ca13 Mon Sep 17 00:00:00 2001 From: morkt Date: Sat, 28 Jan 2017 11:17:01 +0400 Subject: [PATCH] (MP3): seek for frame sync in first 256 bytes. --- ArcFormats/AudioMP3.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ArcFormats/AudioMP3.cs b/ArcFormats/AudioMP3.cs index 0c208e95..ae293b1a 100644 --- a/ArcFormats/AudioMP3.cs +++ b/ArcFormats/AudioMP3.cs @@ -98,13 +98,22 @@ namespace GameRes.Formats { var header = file.ReadHeader (10).ToArray(); long start_offset = SkipId3Tag (header); + int sync_pos = 0; if (0 != start_offset) { file.Position = start_offset; if (4 != file.Read (header, 0, 4)) return null; } - if (0xff != header[0] || 0xe2 != (header[1] & 0xe6) || 0xf0 == (header[2] & 0xf0)) + else if (0xFF != header[0]) + { + file.Position = 1; + header = file.ReadBytes (0x100); + sync_pos = System.Array.IndexOf (header, 0xFF, 1, 0xFC); + if (-1 == sync_pos) + return null; + } + if (0xFF != header[sync_pos] || 0xE2 != (header[sync_pos+1] & 0xE6) || 0xF0 == (header[sync_pos+2] & 0xF0)) return null; file.Position = 0; return new Mp3Input (file.AsStream);