void AudacityProject::OnPlotSpectrum(wxCommandEvent & event) { int selcount = 0; WaveTrack *selt = NULL; TrackListIterator iter(mTracks); VTrack *t = iter.First(); while (t) { if (t->GetSelected()) selcount++; if (t->GetKind() == VTrack::Wave) selt = (WaveTrack *) t; t = iter.Next(); } if (selcount != 1) { wxMessageBox(_("Please select a single track first.\n")); return; } /* This shouldn't be possible, since the menu is grayed out. * But we'll check just in case it does happen, to prevent * the crash that would result. */ if (!selt) { wxMessageBox(_("Please select a track first.\n")); return; } sampleCount s0 = (sampleCount) ((mViewInfo.sel0 - selt->GetOffset()) * selt->GetRate()); sampleCount s1 = (sampleCount) ((mViewInfo.sel1 - selt->GetOffset()) * selt->GetRate()); sampleCount slen = s1 - s0; if (slen > 1048576) slen = 1048576; float *data = new float[slen]; sampleType *data_sample = new sampleType[slen]; if (s0 >= selt->GetNumSamples() || s0 + slen > selt->GetNumSamples()) { wxMessageBox(_("Not enough samples selected.\n")); delete[]data; delete[]data_sample; return; } selt->Get(data_sample, s0, slen); for (sampleCount i = 0; i < slen; i++) data[i] = data_sample[i] / 32767.; gFreqWindow->Plot(slen, data, selt->GetRate()); gFreqWindow->Show(true); gFreqWindow->Raise(); delete[]data; delete[]data_sample; }
void UndoManager::Debug() { for (unsigned int i = 0; i < stack.Count(); i++) { TrackListIterator iter(stack[i]->tracks); WaveTrack *t = (WaveTrack *) (iter.First()); printf("*%d* %s %d\n", i, (i == (unsigned int)current) ? "-->" : " ", t ? t->GetNumSamples() : 0); } }