1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-08 08:01:19 +02:00

NoteTrack: Implement Silence and InsertSilence

Additionally, fix the UI portions of these, and fix Trim for note tracks
(the code already existed, but due to flags would not work).  As PRL
requested, this is gated only behind USE_MIDI.
This commit is contained in:
Pokechu22 2017-04-11 12:02:16 -07:00 committed by Paul Licameli
parent e707f6a263
commit 298bb3fde8
3 changed files with 31 additions and 11 deletions

View File

@ -470,12 +470,12 @@ void AudacityProject::CreateMenusAndCommands()
/* i18n-hint: (verb)*/
c->AddItem(wxT("Silence"), _("Silence Audi&o"), FN(OnSilence), wxT("Ctrl+L"),
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag,
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag);
AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag,
AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag);
/* i18n-hint: (verb)*/
c->AddItem(wxT("Trim"), _("Tri&m Audio"), FN(OnTrim), wxT("Ctrl+T"),
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag,
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag);
AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag,
AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag);
c->EndSubMenu();
c->AddSeparator();
@ -1986,6 +1986,7 @@ CommandFlag AudacityProject::GetUpdateFlags(bool checkActive)
}
else {
flags |= WaveTracksSelectedFlag;
flags |= AudioTracksSelectedFlag;
}
}
if( t->GetEndTime() > t->GetStartTime() )
@ -2003,6 +2004,7 @@ CommandFlag AudacityProject::GetUpdateFlags(bool checkActive)
if (nt->GetSelected()) {
flags |= TracksSelectedFlag;
flags |= NoteTracksSelectedFlag;
flags |= AudioTracksSelectedFlag; // even if not EXPERIMENTAL_MIDI_OUT
}
}
#endif
@ -2225,9 +2227,12 @@ void AudacityProject::UpdateMenus(bool checkActive)
{
mCommandManager.Enable(wxT("ExportSel"), false);
mCommandManager.Enable(wxT("SplitNew"), false);
mCommandManager.Enable(wxT("Trim"), false);
mCommandManager.Enable(wxT("SplitDelete"), false);
}
if (!(flags & TimeSelectedFlag) | !(flags & AudioTracksSelectedFlag))
{
mCommandManager.Enable(wxT("Trim"), false);
}
}
#if 0
@ -5057,10 +5062,11 @@ void AudacityProject::OnJoin()
void AudacityProject::OnSilence()
{
SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks());
TrackListIterator iter(GetTracks());
for (Track *n = iter.First(); n; n = iter.Next())
n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1());
if (n->GetSelected() && (nullptr != dynamic_cast<AudioTrack *>(n)))
n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1());
PushState(wxString::
Format(_("Silenced selected tracks for %.2f seconds at %.2f"),

View File

@ -516,14 +516,27 @@ void NoteTrack::Paste(double t, const Track *src)
mSeq->paste(t - GetOffset(), other->mSeq.get());
}
void NoteTrack::Silence(double, double)
void NoteTrack::Silence(double t0, double t1)
{
// to do
if (t1 < t0)
THROW_INCONSISTENCY_EXCEPTION;
auto len = t1 - t0;
mSeq->convert_to_seconds();
// XXX: do we want to set the all param?
// If it's set, then it seems like notes are silenced if they start or end in the range,
// otherwise only if they start in the range. --Poke
mSeq->silence(t0 - GetOffset(), len, false);
}
void NoteTrack::InsertSilence(double, double)
void NoteTrack::InsertSilence(double t, double len)
{
// to do
if (len <= 0)
THROW_INCONSISTENCY_EXCEPTION;
mSeq->convert_to_seconds();
mSeq->insert_silence(t - GetOffset(), len);
}
// Call this function to manipulate the underlying sequence data. This is

View File

@ -55,6 +55,7 @@ enum CommandFlag : unsigned long long
NotPausedFlag = 0x400000000ULL, // jkc
HasWaveDataFlag = 0x800000000ULL, // jkc
PlayableTracksExistFlag = 0x1000000000ULL,
AudioTracksSelectedFlag = 0x2000000000ULL,
NoFlagsSpecifed = ~0ULL
};