ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Code/Exporters.pas
(Generate patch)

Comparing oup/current/Code/Exporters.pas (file contents):
Revision 46 by alloc, Sat Dec 23 16:26:43 2006 UTC vs.
Revision 74 by alloc, Thu Jan 11 22:45:20 2007 UTC

# Line 5 | Line 5 | interface
5   uses Classes, Dialogs, StrUtils, SysUtils, Math, Data, OniImgClass;
6  
7   procedure ExportDatFile(fileid: LongWord; filename: String);
8 + procedure ExportRawFiles(fileid: LongWord; filename: String);
9   procedure ExportRawFile(fileid: LongWord; dat_offset: LongWord; filename: String);
10 + function ExportConverted(fileid: LongWord; filename: String): Integer;
11  
12 < function ExportSNDD(fileid: LongWord; filename: String; convert: Boolean): Integer;
13 < function ExportTRAC(fileid: LongWord; filename: String; convert: Boolean): Integer;
14 < function ExportTXAN(fileid: LongWord; filename: String; convert: Boolean): Integer;
15 < function ExportTXMB(fileid: LongWord; filename: String; convert: Boolean): Integer;
16 < function ExportTXMP(fileid: LongWord; filename: String; convert: Boolean): Integer;
17 <
18 < var
19 <  ExportHandlers: array[1..1] of TExportHandlers = (
20 <    //    (Ext:'ABNA'; needed:False),
21 <    //(Ext:'AGDB'; needed:False),
22 <    (Ext: 'SNDD'; needed: True; Handler: ExportSNDD)
23 < {    (Ext:'TRAC'; needed:True; Handler:ExportTRAC),
24 <    (Ext:'TXAN'; needed:True; Handler:ExportTXAN),
25 <    (Ext:'TXMB'; needed:True; Handler:ExportTXMB),
26 <    (Ext:'TXMP'; needed:True; Handler:ExportTXMP)
25 < });
12 > function ExportSNDD(fileid: LongWord; filename: String): Integer;
13 > function ExportTRAC(fileid: LongWord; filename: String): Integer;
14 > function ExportTXAN(fileid: LongWord; filename: String): Integer;
15 > function ExportImage(fileid: LongWord; filename: String): Integer;
16 >
17 > var
18 >  ExportHandlers: array[1..3] of TExportHandlers = (
19 > //    (Ext:'ABNA'; needed:False),
20 > //    (Ext:'AGDB'; needed:False),
21 >    (Ext: 'SNDD'; needed: True; Handler: ExportSNDD),
22 > //    (Ext:'TRAC'; needed:True; Handler:ExportTRAC),
23 > //    (Ext:'TXAN'; needed:True; Handler:ExportTXAN),
24 >    (Ext:'TXMB'; needed:True; Handler:ExportImage),
25 >    (Ext:'TXMP'; needed:True; Handler:ExportImage)
26 > );
27  
28  
29  
# Line 32 | Line 33 | uses Functions, DataStructures, OniDataC
33  
34  
35  
35
36   procedure ExportDatFile(fileid: LongWord; filename: String);
37   var
38    filestream: TFileStream;
# Line 53 | Line 53 | begin
53   end;
54  
55  
56 <
56 > procedure ExportRawFiles(fileid: LongWord; filename: String);
57 > var
58 >  i: Integer;
59 >  rawlist: TRawList;
60 > begin
61 >  rawlist := OniDataConnection.GetRawList(fileid);
62 >  if Length(rawlist) > 0 then
63 >    for i := 0 to High(rawlist) do
64 >      ExportRawFile(fileid, rawlist[i].src_offset, filename);
65 > end;
66  
67   procedure ExportRawFile(fileid: LongWord; dat_offset: LongWord; filename: String);
68   var
# Line 76 | Line 85 | begin
85    filestream.Free;
86   end;
87  
88 + function ExportConverted(fileid: LongWord; filename: String): Integer;
89 + var
90 +  i: Integer;
91 +  fileinfo: TFileInfo;
92 + begin
93 +  fileinfo := OniDataConnection.GetFileInfo(fileid);
94 +  if Length(ExportHandlers) > 0 then
95 +    for i := 0 to High(ExportHandlers) do
96 +      if ExportHandlers[i].Ext = fileinfo.Extension then
97 +        ExportHandlers[i].Handler(fileid, filename);
98 + end;
99 +
100  
101  
102  
103   function ExportSNDD;
104 < {  CONST
105 <    WAVheader:Array[0..0] OF Byte=(
85 <        Ord('R'),Ord('I'),Ord('F'),Ord('F'),0,0,0,0,Ord('W'),Ord('A'),Ord('V'),Ord('E'),
86 <        Ord('f'),Ord('m'),Ord('t'),Ord(' '),24,0,0,0,
87 <      );
88 < }  type
89 <  TDatData = record
104 > type
105 >  TDatData = packed record
106      {0x00}
107 <    _fileid:   LongWord;
108 <    level:     LongWord;
109 <    Flag:      LongWord;
110 <    FormatTag: Word;
111 <    ChanNo:    Word;
107 >    _fileid:         LongWord;
108 >    level:           LongWord;
109 >    FormatSize:      LongWord;
110 >    AudioFormat:     Word;
111 >    NumChannels:     Word;
112      {0x10}
113 <    SampleRate: LongWord;
114 <    BytesPSec: LongWord;
115 <    BPSample:  LongWord;
116 <    BitsPS:    LongWord;
117 <    {0x20}
118 <    Unknown:   array[1..7] of LongWord;
119 <    Unknown2:  Word;
113 >    SampleRate:      LongWord;
114 >    ByteRate:        LongWord;
115 >    BlockAlign:      Word;
116 >    BitsPerSample:   Word;
117 >    {0x1C}
118 >    SizeExtHeader:   Word;
119 >    SamplesPerBlock: Word;
120 >    NumCoefficients: Word;
121 >    Coefficients:    array[0..6] of LongWord;
122 >    {0x3E}
123 >    Duration:        Word;
124      {0x40}
125 <    RawSize:   LongWord;
126 <    RawPos:    LongWord;
125 >    RawSize:         LongWord;
126 >    RawPos:          LongWord;
127    end;
128   var
129    filestream: TFileStream;
110
130    DatData:     TDatData;
131 <  //Wave Header Stuff
113 <  ASCII_Group: LongWord; //"RIFF"
114 <  WAV_Len:     LongWord;
115 <  ASCII_WAV:   LongWord; //"WAVE"
116 <  ASCII_FMT:   LongWord; //"fmt "
117 <  WAV_FMT_Len: LongWord;
118 <  ASCII_DATA:  LongWord; //"data"
119 <  WAV_FolLen:  LongWord;
120 <
131 >  i: Integer;
132    Data: Tdata;
133 +
134 +  //Wave Header Stuff
135 +  ASCII_RIFF:   LongWord; //"RIFF"
136 +  WAVE_Len:     LongWord;
137 +  ASCII_WAVE:   LongWord; //"WAVE"
138 +  ASCII_FMT:    LongWord; //"fmt "
139 +  WAVE_FMT_Len: LongWord;
140 +  ASCII_DATA:   LongWord; //"data"
141 +  WAVE_DataLen:  LongWord;
142   begin
143    Result := export_noerror;
144    OniDataConnection.LoadDatFilePart(fileid, 0, SizeOf(DatData), @DatData);
145    with DatData do
146    begin
147      //Initializing Header vars
148 <    ASCII_Group := 1179011410; // 'RIFF'
149 <    WAV_Len     := RAWSize + 70;
150 <    ASCII_WAV   := 1163280727;  // 'WAVE'
151 <    ASCII_FMT   := 544501094;   // 'fmt '
152 <    WAV_FMT_Len := 50;          // 50 bytes
153 <    ASCII_DATA  := 1635017060;  // 'data'
154 <    WAV_FolLen  := RAWSize;
148 >    ASCII_RIFF   := 1179011410; // 'RIFF'
149 >    WAVE_Len     := RAWSize + 70;
150 >    ASCII_WAVE   := 1163280727;  // 'WAVE'
151 >    ASCII_FMT    := 544501094;   // 'fmt '
152 >    WAVE_FMT_Len := 50;          // 50 bytes
153 >    ASCII_DATA   := 1635017060;  // 'data'
154 >    WAVE_DataLen := RAWSize;
155      SetLength(Data, RAWSize);
156      OniDataConnection.LoadRawFile(fileid, $44, Data);
157  
158 <    filestream := TFileStream.Create(filename + '.raw', fmCreate);
158 >    //Now start packing this into a neat wave...
159 >    filestream := TFileStream.Create(filename + '.wav', fmCreate);
160 >    filestream.Write(ASCII_RIFF, SizeOf(ASCII_RIFF));
161 >    filestream.Write(WAVE_Len, SizeOf(WAVE_Len));
162 >    filestream.Write(ASCII_WAVE, SizeOf(ASCII_WAVE));
163 >    filestream.Write(ASCII_FMT, SizeOf(ASCII_FMT));
164 >    filestream.Write(WAVE_FMT_Len, SizeOf(WAVE_FMT_Len));
165 >    filestream.Write(AudioFormat, SizeOf(AudioFormat));
166 >    filestream.Write(NumChannels, SizeOf(NumChannels));
167 >    filestream.Write(Samplerate, SizeOf(Samplerate));
168 >    filestream.Write(ByteRate, SizeOf(ByteRate));
169 >    filestream.Write(BlockAlign, SizeOf(BlockAlign));
170 >    filestream.Write(BitsPerSample, SizeOf(BitsPerSample));
171 >    filestream.Write(SizeExtHeader, SizeOf(SizeExtHeader));
172 >    filestream.Write(SamplesPerBlock, SizeOf(SamplesPerBlock));
173 >    filestream.Write(NumCoefficients, SizeOf(NumCoefficients));
174 >    for i := 0 to High(Coefficients) do
175 >      filestream.Write(Coefficients[i], SizeOf(Coefficients[i]));
176 >    filestream.Write(ASCII_DATA, SizeOf(ASCII_DATA));
177 >    filestream.Write(WAVE_DataLen, SizeOf(WAVE_DataLen));
178      filestream.Write(Data[0], Length(Data));
179      filestream.Free;
141
142    if convert then
143    begin
144      //Now start packing this into a neat wave...
145      filestream := TFileStream.Create(filename + '.wav', fmCreate);
146      filestream.Write(ASCII_Group, SizeOf(ASCII_Group));
147      filestream.Write(WAV_Len, SizeOf(WAV_Len));
148      filestream.Write(ASCII_WAV, SizeOf(ASCII_WAV));
149      filestream.Write(ASCII_FMT, SizeOf(ASCII_FMT));
150      filestream.Write(WAV_FMT_Len, SizeOf(WAV_FMT_Len));
151      filestream.Write(ChanNo, SizeOf(ChanNo));
152      filestream.Write(Samplerate, SizeOf(Samplerate));
153      filestream.Write(BytesPSec, SizeOf(BytesPSec));
154      filestream.Write(BPSample, SizeOf(BPSample));
155      filestream.Write(BitsPS, SizeOf(BitsPS));
156      filestream.Write(Unknown[1], SizeOf(Unknown));
157      filestream.Write(Unknown2, SizeOf(Unknown2));
158      filestream.Write(ASCII_DATA, SizeOf(ASCII_DATA));
159      filestream.Write(WAV_FolLen, SizeOf(WAV_FolLen));
160      filestream.Write(Data[0], Length(Data));
161      filestream.Free;
162    end;
180    end;
181   end;
182  
# Line 213 | Line 230 | end;
230  
231  
232  
233 < function ExportTXMB;
233 > function ExportImage;
234   var
235    filestream: TFileStream;
236 <  //    img:TImgPackage;
237 <  Data: Tdata;
221 < begin
222 <  Result := export_noerror;
223 <  if convert then
224 <  begin
225 < {      img:=LoadTXMBconnected(fileid);
226 <      data:=ImgdataToBmp(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
227 <      filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
228 <      filestream.Write(data[0],Length(data));
229 <      filestream.Free;
230 < }    end;
231 < end;
232 <
233 <
234 <
235 <
236 < function ExportTXMP;
237 < var
238 <  filestream: TFileStream;
239 <  //    img:TImgPackage;
236 >  img: TOniImage;
237 >  data: Tdata;
238   begin
239    Result := export_noerror;
242 {    img:=LoadImgData(fileid);
240  
241 <    filestream:=TFileStream.Create(filename+'.raw',fmCreate);
242 <    filestream.Write(img.imgdata[0],Length(img.imgdata));
243 <    filestream.Free;
241 >  img := TOniImage.Create;
242 >  img.Load(fileid);
243 >  data := img.GetAsBMP;
244 >  img.Free;
245  
246 <    IF convert THEN BEGIN
247 <      img.imgdata:=ImgdataToBMP(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
248 <      filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
249 <      filestream.Write(img.imgdata[0],Length(img.imgdata));
252 <      filestream.Free;
253 <    END;
254 < }  end;
246 >  filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
247 >  filestream.Write(data[0],Length(data));
248 >  filestream.Free;
249 > end;
250  
251   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)