MCPcopy Create free account
hub / github.com/audacity/audacity / ClearAndAddCutLine

Method ClearAndAddCutLine

libraries/lib-wave-track/WaveClip.cpp:1415–1477  ·  view source on GitHub ↗

! @excsafety{Weak} -- This WaveClip remains destructible in case of AudacityException. But some cutlines may be deleted */

Source from the content-addressed store, hash-verified

1413-- This WaveClip remains destructible in case of AudacityException.
1414But some cutlines may be deleted */
1415void WaveClip::ClearAndAddCutLine(double t0, double t1)
1416{
1417 StrongInvariantScope scope{ *this };
1418 if (t0 > GetPlayEndTime() || t1 < GetPlayStartTime() || CountSamples(t0, t1) == 0)
1419 return; // no samples to remove
1420
1421 Transaction transaction{ *this };
1422
1423 const double clip_t0 = std::max( t0, GetPlayStartTime() );
1424 const double clip_t1 = std::min( t1, GetPlayEndTime() );
1425
1426 auto newClip = std::make_shared<WaveClip>(
1427 *this, GetFactory(), true, clip_t0, clip_t1);
1428 if(t1 < GetPlayEndTime())
1429 {
1430 newClip->ClearSequence(t1, newClip->GetSequenceEndTime())
1431 .Commit();
1432 newClip->SetTrimRight(.0);
1433 }
1434 if(t0 > GetPlayStartTime())
1435 {
1436 newClip->ClearSequence(newClip->GetSequenceStartTime(), t0)
1437 .Commit();
1438 newClip->SetTrimLeft(.0);
1439 }
1440
1441 newClip->SetSequenceStartTime( clip_t0 - GetSequenceStartTime() );
1442
1443 // Remove cutlines from this clip that were in the selection, shift
1444 // left those that were after the selection
1445 // May DELETE as we iterate, so don't use range-for
1446 for (auto it = mCutLines.begin(); it != mCutLines.end();)
1447 {
1448 WaveClip* clip = it->get();
1449 double cutlinePosition = GetSequenceStartTime() + clip->GetSequenceStartTime();
1450 if (cutlinePosition >= t0 && cutlinePosition <= t1)
1451 it = mCutLines.erase(it);
1452 else
1453 {
1454 if (cutlinePosition >= t1)
1455 {
1456 clip->ShiftBy(clip_t0 - clip_t1);
1457 }
1458 ++it;
1459 }
1460 }
1461
1462 // Clear actual audio data
1463 auto s0 = TimeToSequenceSamples(t0);
1464 auto s1 = TimeToSequenceSamples(t1);
1465
1466 // use Weak-guarantee
1467 for (auto &pSequence : mSequences)
1468 pSequence->Delete(s0, s1-s0);
1469
1470 // Collapse envelope
1471 auto sampleTime = 1.0 / GetRate();
1472 GetEnvelope().CollapseRegion( t0, t1, sampleTime );

Callers 2

OnCutLabelsFunction · 0.45
EditMenus.cppFile · 0.45

Calls 15

maxFunction · 0.85
moveFunction · 0.85
ClearSequenceMethod · 0.80
GetSequenceEndTimeMethod · 0.80
SetTrimRightMethod · 0.80
GetSequenceStartTimeMethod · 0.80
SetTrimLeftMethod · 0.80
SetSequenceStartTimeMethod · 0.80
CollapseRegionMethod · 0.80
GetRateFunction · 0.70
minFunction · 0.50
GetEnvelopeFunction · 0.50

Tested by

no test coverage detected