/
UnpackSMF.1sc
62 lines (52 loc) · 1.13 KB
/
UnpackSMF.1sc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//------------------------------------------------
//--- 010 Editor v8.0.1 Script File
//
// File:
// Authors:
// Version:
// Purpose:
// Category:
// History:
//------------------------------------------------
local uint Pos, i, count, Size, offset, FileIndex;
local char Buffer[50000000];
local char HeaderBuffer[20];
local string Path, Name;
local uchar ID[4];
FileIndex = GetFileNum();
Path = FileNameGetPath(GetFileName());
FSkip(4);
count = ReadInt();
FSkip(12);
for (i = 0; i < count; ++i)
{
Size = ReadInt();
FSkip(4);
offset = ReadInt();
FSkip(4);
ReadBytes(HeaderBuffer, FTell(), 20);
HeaderBuffer[18] = 't';
HeaderBuffer[19] = 'a';
FSkip(20);
Pos = FTell();
FSeek(offset);
ReadBytes(Buffer, offset, Size);
SPrintf(Name, "%i.wav", i + 1);
FileNew("Hex");
// wav header
ID = "RIFF";
WriteBytes(ID, 0, 4);
WriteInt(4, Size + 36);
ID = "WAVEfmt ";
WriteBytes(ID, 8, 8);
WriteInt(16, 16);
WriteBytes(HeaderBuffer, 20, 20);
WriteInt(40, Size);
// wav data
WriteBytes(Buffer, 40, Size);
//
FileSave(Path + Name);
FileClose();
FileSelect(FileIndex);
FSeek(Pos);
};