43
44
#include "../WaveTrack.h"
44
45
#include "ImportPlugin.h"
47
#define DESC _("WAV, AIFF, and other uncompressed types")
46
49
class PCMImportPlugin : public ImportPlugin
70
73
wxString GetFileDescription();
71
74
int GetFileUncompressedBytes();
72
75
bool Import(TrackFactory *trackFactory, Track ***outTracks,
76
int *outNumTracks, Tags *tags);
154
157
bool PCMImportFileHandle::Import(TrackFactory *trackFactory,
155
158
Track ***outTracks,
160
*outNumTracks = mInfo.channels;
161
WaveTrack **channels = new WaveTrack *[*outNumTracks];
164
WaveTrack **channels = new WaveTrack *[mInfo.channels];
164
for (c = 0; c < *outNumTracks; c++) {
167
for (c = 0; c < mInfo.channels; c++) {
165
168
channels[c] = trackFactory->NewWaveTrack(mFormat, mInfo.samplerate);
167
if (*outNumTracks > 1)
170
if (mInfo.channels > 1)
170
173
channels[c]->SetChannel(Track::LeftChannel);
211
214
if (i + blockLen > fileTotalFrames)
212
215
blockLen = fileTotalFrames - i;
214
for(c=0; c<(*outNumTracks); c++)
217
for (c = 0; c < mInfo.channels; c++)
215
218
channels[c]->AppendAlias(mName, i, blockLen, c);
217
220
if( mProgressCallback )
226
229
// samples from the file and store our own local copy of the
227
230
// samples in the tracks.
229
samplePtr srcbuffer = NewSamples(maxBlockSize * (*outNumTracks),
232
samplePtr srcbuffer = NewSamples(maxBlockSize * mInfo.channels,
231
234
samplePtr buffer = NewSamples(maxBlockSize, mFormat);
242
245
block = sf_readf_float(mFile, (float *)srcbuffer, block);
245
for(c=0; c<(*outNumTracks); c++) {
248
for(c=0; c<mInfo.channels; c++) {
246
249
if (mFormat==int16Sample) {
247
250
for(int j=0; j<block; j++)
248
251
((short *)buffer)[j] =
249
((short *)srcbuffer)[(*outNumTracks)*j+c];
252
((short *)srcbuffer)[mInfo.channels*j+c];
252
255
for(int j=0; j<block; j++)
253
256
((float *)buffer)[j] =
254
((float *)srcbuffer)[(*outNumTracks)*j+c];
257
((float *)srcbuffer)[mInfo.channels*j+c];
257
260
channels[c]->Append(buffer, mFormat, block);
273
for (c = 0; c < *outNumTracks; c++)
276
for (c = 0; c < mInfo.channels; c++)
274
277
delete channels[c];
275
278
delete[] channels;
280
*outTracks = new Track *[*outNumTracks];
281
for(c = 0; c < *outNumTracks; c++) {
283
*outNumTracks = mInfo.channels;
284
*outTracks = new Track *[mInfo.channels];
285
for(c = 0; c < mInfo.channels; c++) {
282
286
channels[c]->Flush();
283
287
(*outTracks)[c] = channels[c];
285
289
delete[] channels;
293
str = sf_get_string(mFile, SF_STR_TITLE);
295
tags->SetTag(TAG_TITLE, UTF8CTOWX(str));
298
str = sf_get_string(mFile, SF_STR_ARTIST);
300
tags->SetTag(TAG_ARTIST, UTF8CTOWX(str));
303
str = sf_get_string(mFile, SF_STR_COMMENT);
305
tags->SetTag(TAG_COMMENTS, UTF8CTOWX(str));
308
str = sf_get_string(mFile, SF_STR_DATE);
310
tags->SetTag(TAG_YEAR, UTF8CTOWX(str));
313
str = sf_get_string(mFile, SF_STR_COPYRIGHT);
315
tags->SetTag(wxT("Copyright"), UTF8CTOWX(str));
318
str = sf_get_string(mFile, SF_STR_SOFTWARE);
320
tags->SetTag(wxT("Software"), UTF8CTOWX(str));
291
326
PCMImportFileHandle::~PCMImportFileHandle()