mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-24 16:20:05 +02:00
Fixed various casting to (WaveTrack*) without a test for GetKind()==Track::Wave. Was causing crash in (at least) the Contrast.cpp analyze function, when a label was selected but not audio. Also fixed log-of-zero problem in Contrast.cpp when sampling silence.
This commit is contained in:
parent
14bc36ee39
commit
f2bf104922
@ -3512,6 +3512,9 @@ void TrackPanel::HandleSampleEditingClick( wxMouseEvent & event )
|
||||
mDrawingTrack = NULL;
|
||||
t = FindTrack(event.m_x, event.m_y, false, false, &r);
|
||||
|
||||
if( t->GetKind() != Track::Wave )
|
||||
return;
|
||||
|
||||
if( !IsSampleEditingPossible( event, t ) )
|
||||
{
|
||||
if( HasCapture() )
|
||||
@ -5222,6 +5225,8 @@ bool TrackPanel::HitTestStretch(Track *track, wxRect &r, wxMouseEvent & event)
|
||||
/// envelope boundary.
|
||||
bool TrackPanel::HitTestEnvelope(Track *track, wxRect &r, wxMouseEvent & event)
|
||||
{
|
||||
if( track->GetKind() != Track::Wave )
|
||||
return false;
|
||||
WaveTrack *wavetrack = (WaveTrack *)track;
|
||||
Envelope *envelope = wavetrack->GetEnvelopeAtX(event.GetX());
|
||||
|
||||
@ -5285,6 +5290,9 @@ bool TrackPanel::HitTestEnvelope(Track *track, wxRect &r, wxMouseEvent & event)
|
||||
/// editable sample
|
||||
bool TrackPanel::HitTestSamples(Track *track, wxRect &r, wxMouseEvent & event)
|
||||
{
|
||||
if( track->GetKind() != Track::Wave )
|
||||
return false;
|
||||
|
||||
WaveTrack *wavetrack = (WaveTrack *)track;
|
||||
//Get rate in order to calculate the critical zoom threshold
|
||||
double rate = wavetrack->GetRate();
|
||||
@ -6516,6 +6524,8 @@ void TrackPanel::OnTrackPanRight()
|
||||
|
||||
void TrackPanel::SetTrackPan(Track * t, LWSlider * s)
|
||||
{
|
||||
if( t->GetKind() != Track::Wave )
|
||||
return;
|
||||
float newValue = s->Get();
|
||||
|
||||
WaveTrack *link = (WaveTrack *)mTracks->GetLink(t);
|
||||
@ -6568,6 +6578,8 @@ void TrackPanel::OnTrackGainDec()
|
||||
|
||||
void TrackPanel::SetTrackGain(Track * t, LWSlider * s)
|
||||
{
|
||||
if( t->GetKind() != Track::Wave )
|
||||
return ;
|
||||
float newValue = s->Get();
|
||||
|
||||
WaveTrack *link = (WaveTrack *)mTracks->GetLink(t);
|
||||
|
@ -94,13 +94,11 @@ void CloseContrastDialog()
|
||||
|
||||
float ContrastDialog::GetDB()
|
||||
{
|
||||
// not good
|
||||
// why not?
|
||||
// what if more than one track?
|
||||
// FIX-ME: what if more than one track?
|
||||
float rms = float(0.0);
|
||||
|
||||
AudacityProject *p = GetActiveProject();
|
||||
TrackListIterator iter(p->GetTracks());
|
||||
TrackListOfKindIterator iter(Track::Wave, p->GetTracks());
|
||||
Track *t = iter.First();
|
||||
if(mT0 > mT1)
|
||||
{
|
||||
@ -120,10 +118,15 @@ float ContrastDialog::GetDB()
|
||||
}
|
||||
if(mT0 == mT1)
|
||||
return 1234.0;
|
||||
while(t) { // this isn't quite right. What to do if more than one track selected?
|
||||
while(t) {
|
||||
// FIX-ME: This isn't quite right.
|
||||
// What to do if more than one track selected?
|
||||
// Also what if tracks in selection are not wavetracks?
|
||||
((WaveTrack *)t)->GetRMS(&rms, mT0, mT1);
|
||||
t = iter.Next();
|
||||
}
|
||||
if( rms < 1.0E-30 )
|
||||
return -60.0;
|
||||
return 20.0*log10(rms);
|
||||
}
|
||||
|
||||
|
@ -93,10 +93,11 @@ bool EffectSimplePairedTwoTrack<_DataType,_xxxSample>::Init()
|
||||
mnTracks = 1;
|
||||
mnBlockSize = 0;
|
||||
|
||||
TrackListIterator iter(mTracks);
|
||||
WaveTrack *left = (WaveTrack*)(iter.First());
|
||||
if ( left == 0 )
|
||||
return false; // Must have an existing track.
|
||||
// FIX-ME: Should this be SelectedTrackListOfKindIterator?
|
||||
TrackListOfKindIterator iter(Track::Wave, mTracks);
|
||||
WaveTrack *left = (WaveTrack*)iter.First();
|
||||
if( NULL == left )
|
||||
return false;
|
||||
|
||||
while(left) {
|
||||
sampleCount lstart, rstart;
|
||||
|
@ -449,28 +449,26 @@ void TranscriptionToolBar::OnStartOn(wxCommandEvent &event)
|
||||
mVk->AdjustThreshold(GetSensitivity());
|
||||
AudacityProject *p = GetActiveProject();
|
||||
|
||||
|
||||
TrackList *tl = p->GetTracks();
|
||||
TrackListIterator iter(tl);
|
||||
TrackListOfKindIterator iter(Track::Wave, tl);
|
||||
|
||||
Track *t = iter.First(); //Make a track
|
||||
if(t)
|
||||
{
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
//if(len == 0)
|
||||
//len = (WaveTrack*)t->GetSequence()->GetNumSamples()-start;
|
||||
|
||||
sampleCount newstart = mVk->OnForward(*(WaveTrack*)t,start,len);
|
||||
double newpos = newstart / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel0(newpos);
|
||||
p->RedrawProject();
|
||||
if(t ) {
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
//if(len == 0)
|
||||
//len = (WaveTrack*)t->GetSequence()->GetNumSamples()-start;
|
||||
|
||||
sampleCount newstart = mVk->OnForward(*(WaveTrack*)t,start,len);
|
||||
double newpos = newstart / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel0(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_StartOn]);
|
||||
}
|
||||
SetButton(false, mButtons[TTB_StartOn]);
|
||||
}
|
||||
}
|
||||
|
||||
void TranscriptionToolBar::OnStartOff(wxCommandEvent &event)
|
||||
@ -484,29 +482,26 @@ void TranscriptionToolBar::OnStartOff(wxCommandEvent &event)
|
||||
AudacityProject *p = GetActiveProject();
|
||||
|
||||
TrackList *tl = p->GetTracks();
|
||||
TrackListIterator iter(tl);
|
||||
TrackListOfKindIterator iter(Track::Wave, tl);
|
||||
|
||||
SetButton(false, mButtons[TTB_StartOff]);
|
||||
Track *t = iter.First(); //Make a track
|
||||
if(t)
|
||||
{
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
//if(len == 0)
|
||||
//len = (WaveTrack*)t->GetSequence()->GetNumSamples()-start;
|
||||
|
||||
sampleCount newstart = mVk->OffForward(*(WaveTrack*)t,start,len);
|
||||
double newpos = newstart / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel0(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_StartOn]);
|
||||
}
|
||||
|
||||
|
||||
if(t) {
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
//if(len == 0)
|
||||
//len = (WaveTrack*)t->GetSequence()->GetNumSamples()-start;
|
||||
|
||||
sampleCount newstart = mVk->OffForward(*(WaveTrack*)t,start,len);
|
||||
double newpos = newstart / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel0(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_StartOn]);
|
||||
}
|
||||
}
|
||||
|
||||
void TranscriptionToolBar::OnEndOn(wxCommandEvent &event)
|
||||
@ -521,31 +516,27 @@ void TranscriptionToolBar::OnEndOn(wxCommandEvent &event)
|
||||
mVk->AdjustThreshold(GetSensitivity());
|
||||
AudacityProject *p = GetActiveProject();
|
||||
TrackList *tl = p->GetTracks();
|
||||
TrackListIterator iter(tl);
|
||||
|
||||
|
||||
TrackListOfKindIterator iter(Track::Wave, tl);
|
||||
|
||||
Track *t = iter.First(); //Make a track
|
||||
if(t)
|
||||
{
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
if(len == 0)
|
||||
{
|
||||
len = start;
|
||||
start = 0;
|
||||
}
|
||||
sampleCount newEnd = mVk->OnBackward(*(WaveTrack*)t,start+ len,len);
|
||||
double newpos = newEnd / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel1(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_EndOn]);
|
||||
|
||||
}
|
||||
if(t) {
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
if(len == 0)
|
||||
{
|
||||
len = start;
|
||||
start = 0;
|
||||
}
|
||||
sampleCount newEnd = mVk->OnBackward(*(WaveTrack*)t,start+ len,len);
|
||||
double newpos = newEnd / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel1(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_EndOn]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -561,29 +552,26 @@ void TranscriptionToolBar::OnEndOff(wxCommandEvent &event)
|
||||
mVk->AdjustThreshold(GetSensitivity());
|
||||
AudacityProject *p = GetActiveProject();
|
||||
TrackList *tl = p->GetTracks();
|
||||
TrackListIterator iter(tl);
|
||||
TrackListOfKindIterator iter(Track::Wave, tl);
|
||||
|
||||
Track *t = iter.First(); //Make a track
|
||||
if(t)
|
||||
{
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
if(len == 0)
|
||||
{
|
||||
len = start;
|
||||
start = 0;
|
||||
}
|
||||
sampleCount newEnd = mVk->OffBackward(*(WaveTrack*)t,start+ len,len);
|
||||
double newpos = newEnd / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel1(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_EndOff]);
|
||||
if(t) {
|
||||
sampleCount start,len;
|
||||
GetSamples((WaveTrack*)t, &start,&len);
|
||||
|
||||
//Adjust length to end if selection is null
|
||||
if(len == 0) {
|
||||
len = start;
|
||||
start = 0;
|
||||
}
|
||||
|
||||
sampleCount newEnd = mVk->OffBackward(*(WaveTrack*)t,start+ len,len);
|
||||
double newpos = newEnd / ((WaveTrack*)t)->GetRate();
|
||||
|
||||
p->SetSel1(newpos);
|
||||
p->RedrawProject();
|
||||
|
||||
SetButton(false, mButtons[TTB_EndOff]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user