-
Notifications
You must be signed in to change notification settings - Fork 0
/
spyro_sfx_musics.bt
135 lines (119 loc) · 2.93 KB
/
spyro_sfx_musics.bt
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//------------------------------------------------
//--- 010 Editor v11.0.1 Binary Template
//
// File: SphinxMusics.bt
// Authors: jmarti856
// Version: 1.0
// Purpose: Parse SFX Music files.
// Category: Audio
// File Mask: *.sfx
// ID Bytes:
// History:
//------------------------------------------------
//*===============================================================================================
//* Typedefs for the sfx file
//*===============================================================================================
typedef char ID[4];
typedef char Padding[2];
local int sfxIsBigEndian;
//*===============================================================================================
//* DEFINE STRUCTS USED IN THE SFX FILE
//*===============================================================================================
//The first parameters of the header ara always little endian
LittleEndian();
sfxIsBigEndian = 0;
typedef struct
{
ID Magic;
uint Hashcode<format=hex>;
uint ConstantOffset<format=hex>;
uint FileSize;
ID Platform;
uint TimeSpan;
uint unk;
uint structPadding;
/*For GC*/
if (ReadUInt() == 0x0800)
{
LittleEndian();
}
else
{
sfxIsBigEndian = 1;
BigEndian();
}
} CommonHeader;
typedef struct
{
uint FileStart1<format=hex>;
uint FileStart1Length;
uint FileStart2<format=hex>;
uint FileStart2Length;
uint FileStart3<format=hex>;
uint FileStart3Length;
} MusicBanksHeader;
typedef struct
{
uint StartMarkerCount;
uint MarkerCount;
uint StartMarkerOffset;
uint MarkerOffset;
uint BaseVolume;
}musicDetails;
typedef struct
{
int Name;
uint Position;
uint MarkerType;
uint LoopStart;
uint LoopMarkerCount;
} Marker;
typedef struct
{
uint Name;
uint Position;
uint MarkerType;
uint LoopStart;
uint LoopMarkerCount;
uint MarkerPosition;
}StartMarker;
//*===============================================================================================
//* READ FILE
//*===============================================================================================
// Define the headers
SetBackColor(cLtPurple);
CommonHeader header;
// Check for valid header
if(header.Magic != "MUSX")
{
Warning( "File is not a valid SFX file. Template stopped." );
return -1;
}
// Read Streambanks Header
SetBackColor(cGreen);
MusicBanksHeader SBHeader;
//Go to FileStart1 pos
if (FSeek(SBHeader.FileStart1) < 0)
{
Warning( "Error searching the SFX file start 1 position");
return -1;
}
local uint markersCount = 0;
SetBackColor(cBlue);
musicDetails details;
//Markers
for (markersCount = 0; markersCount < details.StartMarkerCount; markersCount++)
{
SetBackColor(cAqua);
StartMarker sMarkers;
}
//Start Markers
for (markersCount = 0; markersCount < details.MarkerCount; markersCount++)
{
SetBackColor(cLtGreen);
Marker markers;
}
//Read Audio Data
FSeek(SBHeader.FileStart2);
SetBackColor(cDkRed);
struct {byte audioData[SBHeader.FileStart2Length]; } a;