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
|
/* 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_XM_YES)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "MediaInfo/Audio/File_ExtendedModule.h"
//---------------------------------------------------------------------------
namespace MediaInfoLib
{
//***************************************************************************
// Static stuff
//***************************************************************************
//---------------------------------------------------------------------------
bool File_ExtendedModule::FileHeader_Begin()
{
//Element_Size
if (Buffer_Size<38)
return false; //Must wait for more data
if (CC8(Buffer)!=0x457874656E646564LL || CC8(Buffer+8)!=0x204D6F64756C653ALL //"Extended Module: "
|| CC1(Buffer+16)!=0x20 || CC1(Buffer+37)!=0x1A)
{
Reject("Extended Module");
return false;
}
//All should be OK...
return true;
}
//***************************************************************************
// Buffer - Global
//***************************************************************************
//---------------------------------------------------------------------------
void File_ExtendedModule::Read_Buffer_Continue()
{
//Parsing
Ztring ModuleName, TrackerName;
int32u HeaderSize;
int16u Length, Channels, Patterns, Instruments, Flags, Tempo, BPM;
int8u VersionMinor, VersionMajor;
Skip_String(17, "Signature");
Get_Local(20, ModuleName, "Module name");
Skip_L1( "0x1A");
Get_Local(20, TrackerName, "Tracker name");
Get_L1 (VersionMinor, "Version (minor)");
Get_L1 (VersionMajor, "Version (major)");
Get_L4 (HeaderSize, "Header size");
Get_L2 (Length, "Song Length");
Skip_L2( "Restart position");
Get_L2 (Channels, "Number of channels");
Get_L2 (Patterns, "Number of patterns");
Get_L2 (Instruments, "Number of instruments");
Get_L2 (Flags, "Flags");
Get_L2 (Tempo, "Tempo");
Get_L2 (BPM, "BPM");
Skip_XX(256, "Pattern order table");
FILLING_BEGIN();
Accept("Extended Module");
Fill(Stream_General, 0, General_Format, "Extended Module");
Fill(Stream_General, 0, General_Format_Version, Ztring::ToZtring(VersionMajor)+__T(".")+Ztring::ToZtring(VersionMinor/10)+Ztring::ToZtring(VersionMinor%10));
Fill(Stream_General, 0, General_Track, ModuleName.Trim(__T(' ')));
Fill(Stream_General, 0, General_Encoded_Application, TrackerName.Trim(__T(' ')));
Fill(Stream_General, 0, "Tempo", Tempo);
Fill(Stream_General, 0, "BPM", BPM);
Stream_Prepare(Stream_Audio);
Fill(Stream_Audio, 0, "Sampler, Channels", Channels);
Fill(Stream_Audio, 0, "Sampler, Patterns", Patterns);
Fill(Stream_Audio, 0, "Sampler, Instruments", Instruments);
//No more need data
Finish("Extended Module");
FILLING_END();
}
//***************************************************************************
// C++
//***************************************************************************
} //NameSpace
#endif //MEDIAINFO_XM_YES
|