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
|
/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the License.html file in the root of the source tree.
*/
//---------------------------------------------------------------------------
// Pre-compilation
#include "MediaInfo/PreComp.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "MediaInfo/Setup.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#if defined(MEDIAINFO_S3M_YES)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "MediaInfo/Audio/File_ScreamTracker3.h"
//---------------------------------------------------------------------------
namespace MediaInfoLib
{
//***************************************************************************
// Static stuff
//***************************************************************************
//---------------------------------------------------------------------------
bool File_ScreamTracker3::FileHeader_Begin()
{
//Element_Size
if (Buffer_Size<44)
return false; //Must wait for more data
if (CC1(Buffer+28)!=0x1A || CC4(Buffer+44)!=0x5343524D) //"SCRM"
{
Reject("Scream Tracker 3");
return false;
}
//All should be OK...
return true;
}
//***************************************************************************
// Buffer - Global
//***************************************************************************
//---------------------------------------------------------------------------
void File_ScreamTracker3::Read_Buffer_Continue()
{
//Parsing
Ztring SongName;
int16u OrdNum, InsNum, PatNum, Flags, Special;
int8u SoftwareVersionMajor, SoftwareVersionMinor, IS, TS;
Get_Local(28, SongName, "Song name");
Skip_L1( "0x1A");
Skip_L1( "Type");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Get_L2 (OrdNum, "Orders count");
Get_L2 (InsNum, "Instruments count");
Get_L2 (PatNum, "Paterns count");
Get_L2 (Flags, "Flags");
Skip_Flags(Flags, 0, "st2vibrato");
Skip_Flags(Flags, 1, "st2tempo");
Skip_Flags(Flags, 2, "amigaslides");
Skip_Flags(Flags, 3, "0vol optimizations");
Skip_Flags(Flags, 4, "amiga limits");
Skip_Flags(Flags, 5, "enable filter/sfx with sb");
Skip_Flags(Flags, 6, "st3.00 volumeslides");
Skip_Flags(Flags, 7, "pecial custom data in file");
Get_L1 (SoftwareVersionMajor, "Cwt/v (Major)");
Get_L1 (SoftwareVersionMinor, "Cwt/v (Minor)");
Skip_L2( "File format information");
Skip_B4( "Signature");
Skip_L1( "global volume");
Get_L1 (IS, "Initial Speed");
Get_L1 (TS, "Initial Temp");
Skip_L1( "master volume");
Skip_L1( "ultra click removal");
Skip_L1( "Default channel pan positions are present");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Skip_L1( "Unknown");
Get_L2 (Special, "Special");
Skip_XX(32, "Channel settings");
Skip_XX(OrdNum, "Orders");
Skip_XX(InsNum*2, "Instruments");
Skip_XX(PatNum*2, "Patterns");
FILLING_BEGIN();
Accept("Scream Tracker 3");
Fill(Stream_General, 0, General_Format, "Scream Tracker 3");
Fill(Stream_General, 0, General_Track, SongName);
if ((SoftwareVersionMajor&0xF0)==0x10)
Fill(Stream_General, 0, General_Encoded_Application, Ztring(__T("Scream Tracker ")+Ztring::ToZtring(SoftwareVersionMajor)+__T(".")+Ztring::ToZtring(SoftwareVersionMinor/16)+Ztring::ToZtring(SoftwareVersionMinor%16)));
Fill(Stream_General, 0, "BPM", TS);
Stream_Prepare(Stream_Audio);
Finish("Scream Tracker 3");
FILLING_END();
}
//***************************************************************************
// C++
//***************************************************************************
} //NameSpace
#endif //MEDIAINFO_S3M_YES
|