From 9f8834086b5427f95bcd3f8b8acfa5ed3478596f Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Fri, 5 Jun 2015 17:32:55 -1000 Subject: [PATCH] Proper support for RAS start samples --- src/export/ExportDSPADPCM.cpp | 6 +++--- src/import/ImportDSPADPCM.cpp | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/export/ExportDSPADPCM.cpp b/src/export/ExportDSPADPCM.cpp index 958b11b70dd7..4c0af5e51dd0 100644 --- a/src/export/ExportDSPADPCM.cpp +++ b/src/export/ExportDSPADPCM.cpp @@ -2401,7 +2401,7 @@ int ExportDSPADPCM::ExportRAS(AudacityProject *project, struct ras_header header = {}; header.chanCount1 = numChannels; header.chanCount2 = numChannels; - header.numSamples = numSamples; + header.numSamples = numSamples - startSample; header.metaDataFlag = tags->HasTag(wxT("BPM")) ? 2 : 0; header.sampleRate = sampleRate; header.dataOffset = header.metaDataFlag ? 192 : 160; @@ -2413,9 +2413,9 @@ int ExportDSPADPCM::ExportRAS(AudacityProject *project, if (loops) { header.loopStartBlock = loopStartSample / 14 / 4096; - header.loopStartSample = loopStartSample - header.loopStartBlock * 4096 * 14 + startSample; + header.loopStartSample = loopStartSample - header.loopStartBlock * 4096 * 14; header.loopEndBlock = loopEndSample / 14 / 4096; - header.loopEndSample = loopEndSample - header.loopEndBlock * 4096 * 14 + startSample; + header.loopEndSample = loopEndSample - header.loopEndBlock * 4096 * 14; } SwapRASHeader(&header); fs.Write("RAS_", 4); diff --git a/src/import/ImportDSPADPCM.cpp b/src/import/ImportDSPADPCM.cpp index 9a00b6436fb0..26a55a56a73f 100644 --- a/src/import/ImportDSPADPCM.cpp +++ b/src/import/ImportDSPADPCM.cpp @@ -438,7 +438,7 @@ class DSPADPCMRASImportFileHandle : public DSPADPCMBaseImportFileHandle ~DSPADPCMRASImportFileHandle(); wxString GetFileDescription() { return _("RAS Stereo GameCube DSPADPCM"); } - int GetFileUncompressedBytes() { return mHeader.numSamples * 2 * mHeader.chanCount1; } + int GetFileUncompressedBytes() { return (mHeader.startSample + mHeader.numSamples) * 2 * mHeader.chanCount1; } int Import(TrackFactory *trackFactory, Track ***outTracks, int *outNumTracks, Tags *tags); @@ -1466,8 +1466,9 @@ int DSPADPCMRASImportFileHandle::Import(TrackFactory *trackFactory, int updateResult = eProgressSuccess; + unsigned numSamples = mHeader.startSample + mHeader.numSamples; unsigned long samplescompleted[2] = {}; - unsigned long samplesremaining[2] = {mHeader.numSamples, mHeader.numSamples}; + unsigned long samplesremaining[2] = {numSamples, numSamples}; short hist[2][2] = {{0, 0}, {0, 0}}; @@ -1509,7 +1510,7 @@ int DSPADPCMRASImportFileHandle::Import(TrackFactory *trackFactory, } } updateResult = mProgress->Update((long long unsigned)samplescompleted[0], - (long long unsigned)mHeader.numSamples); + (long long unsigned)numSamples); if (updateResult != eProgressSuccess) break; } @@ -1538,8 +1539,8 @@ int DSPADPCMRASImportFileHandle::Import(TrackFactory *trackFactory, double startPoint = mHeader.startSample / sr; lt->AddLabel(SelectedRegion(startPoint, startPoint), wxT("START")); lt->AddLabel(SelectedRegion( - (mHeader.loopStartBlock * framesPerBlock * 14 + mHeader.loopStartSample - mHeader.startSample) / sr, - (mHeader.loopEndBlock * framesPerBlock * 14 + mHeader.loopEndSample - mHeader.startSample) / sr), + (mHeader.loopStartBlock * framesPerBlock * 14 + mHeader.loopStartSample) / sr, + (mHeader.loopEndBlock * framesPerBlock * 14 + mHeader.loopEndSample) / sr), wxT("LOOP")); (*outTracks)[mHeader.chanCount1] = lt; }