1
0
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:
james.k.crook@gmail.com 2011-04-23 18:53:48 +00:00
parent 14bc36ee39
commit f2bf104922
4 changed files with 94 additions and 90 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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]);
}
}