mirror of
https://github.com/crskycode/GARbro.git
synced 2025-01-11 12:39:16 +08:00
(AwfOpener): prepend WAVE header to audio files.
This commit is contained in:
parent
83ebaec6be
commit
d63477801b
@ -59,10 +59,6 @@ namespace GameRes.Formats.Silky
|
|||||||
for (int i = 0; i < count; ++i)
|
for (int i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
var name = file.View.ReadString (index_offset, 0x20);
|
var name = file.View.ReadString (index_offset, 0x20);
|
||||||
// haven't figured out this field yet.
|
|
||||||
// int compression = file.View.ReadInt32 (index_offset+0x28);
|
|
||||||
// if (-1 == compression)
|
|
||||||
// name = Path.ChangeExtension (name, "mp3");
|
|
||||||
if (is_mp3)
|
if (is_mp3)
|
||||||
name = Path.ChangeExtension (name, "mp3");
|
name = Path.ChangeExtension (name, "mp3");
|
||||||
var entry = FormatCatalog.Instance.Create<Entry> (name);
|
var entry = FormatCatalog.Instance.Create<Entry> (name);
|
||||||
@ -75,5 +71,32 @@ namespace GameRes.Formats.Silky
|
|||||||
}
|
}
|
||||||
return new ArcFile (file, this, dir);
|
return new ArcFile (file, this, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override Stream OpenEntry (ArcFile arc, Entry entry)
|
||||||
|
{
|
||||||
|
if (entry.Name.EndsWith (".mp3", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
return base.OpenEntry (arc, entry);
|
||||||
|
// prepend WAV header
|
||||||
|
var header = new byte[0x2C];
|
||||||
|
using (var mem = new MemoryStream (header))
|
||||||
|
using (var wav = new BinaryWriter (mem))
|
||||||
|
{
|
||||||
|
wav.Write ("RIFF".ToCharArray());
|
||||||
|
wav.Write ((uint)(entry.Size + 0x24u));
|
||||||
|
wav.Write ("WAVE".ToCharArray());
|
||||||
|
wav.Write ("fmt ".ToCharArray());
|
||||||
|
wav.Write (0x10);
|
||||||
|
wav.Write ((ushort)1);
|
||||||
|
wav.Write ((ushort)2);
|
||||||
|
wav.Write (22050);
|
||||||
|
wav.Write (22050*4);
|
||||||
|
wav.Write ((ushort)4);
|
||||||
|
wav.Write ((ushort)16);
|
||||||
|
wav.Write ("data".ToCharArray());
|
||||||
|
wav.Write (entry.Size);
|
||||||
|
}
|
||||||
|
var pcm = arc.File.CreateStream (entry.Offset, entry.Size);
|
||||||
|
return new PrefixStream (header, pcm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user