void AudacityProject::OnImportRaw(wxCommandEvent & event) { wxString path = gPrefs->Read("/DefaultOpenPath",::wxGetCwd()); wxString fileName = wxFileSelector(_("Select any uncompressed audio file..."), path, // Path "", // Name "", // Extension _("All files (*.*)|*.*"), 0, // Flags this); // Parent if (fileName != "") { path =::wxPathOnly(fileName); gPrefs->Write("/DefaultOpenPath", path); WaveTrack *left = 0; WaveTrack *right = 0; if (::ImportRaw(this, fileName, &left, &right, &mDirManager)) { SelectNone(); if (left) { mTracks->Add(left); left->SetSelected(true); } if (right) { mTracks->Add(right); right->SetSelected(true); } PushState(wxString::Format(_("Imported raw audio from '%s'"), fileName.c_str())); FixScrollbars(); mTrackPanel->Refresh(false); } } }
void AudacityProject::OnNewWaveTrack(wxCommandEvent & event) { WaveTrack *t = new WaveTrack(&mDirManager); SelectNone(); mTracks->Add(t); t->SetSelected(true); PushState(_("Created new audio track")); FixScrollbars(); mTrackPanel->Refresh(false); }
void EffectSineSweepGenerator::BeforeGenerate() { #ifdef __AUDEBUG__ printf("elsg: BEFOREGENERATE\n"); fflush(stdout); printf("elsg: detected %d tracks\n", int(GetNumWaveTracks())); fflush(stdout); #endif // These lines add new tracks if needed int existingTracks = GetNumWaveTracks(); int neededTracks = m_pSsg->GetNeededTracks(); //If there are selected tracks it's a mess, better deselect all first... int i = 1; if(existingTracks > 1) { DeselectAllTracks(); i = 0; } while(i < neededTracks) { WaveTrack *t = mFactory->NewWaveTrack(floatSample, mProjectRate); mTracks->Add(t); t->SetSelected(true); i++; } // Select all tracks i = 1; wxString name; TrackListIterator iter(mTracks); for (Track *t = iter.First(); t; t = iter.Next()) { name.Printf(_("Sweep Channel %d"), i); if(m_pSsg->IsControlPulsesSet()) { if(i == (neededTracks-1)) name = _("Inverse Filter"); if(i == neededTracks) name = _("Pulses Channel"); } else { if(i == neededTracks) name = _("Inverse Filter"); } t->SetName(name); i++; } }
void Effect::Preview() { wxWindow* FocusDialog = wxWindow::FindFocus(); if (gAudioIO->IsBusy()) return; // Mix a few seconds of audio from all of the tracks double previewLen = 6.0; gPrefs->Read(wxT("/AudioIO/EffectsPreviewLen"), &previewLen); WaveTrack *mixLeft = NULL; WaveTrack *mixRight = NULL; double rate = mProjectRate; double t0 = mT0; double t1 = t0 + previewLen; if (t1 > mT1) t1 = mT1; if (t1 <= t0) return; bool success = ::MixAndRender(mTracks, mFactory, rate, floatSample, t0, t1, &mixLeft, &mixRight); if (!success) { return; } // Save the original track list TrackList *saveTracks = mTracks; // Build new tracklist from rendering tracks mTracks = new TrackList(); mixLeft->SetSelected(true); mTracks->Add(mixLeft); if (mixRight) { mixRight->SetSelected(true); mTracks->Add(mixRight); } // Update track/group counts CountWaveTracks(); // Reset times t0 = mixLeft->GetStartTime(); t1 = mixLeft->GetEndTime(); double t0save = mT0; double t1save = mT1; mT0 = t0; mT1 = t1; // Apply effect // Effect is already inited; we call Process, End, and then Init // again, so the state is exactly the way it was before Preview // was called. mProgress = new ProgressDialog(StripAmpersand(GetEffectName()), _("Preparing preview"), pdlgHideCancelButton); // Have only "Stop" button. bool bSuccess = Process(); delete mProgress; End(); Init(); if (bSuccess) { mT0 = t0save; mT1 = t1save; WaveTrackArray playbackTracks; WaveTrackArray recordingTracks; // Probably not the same tracks post-processing, so can't rely on previous values of mixLeft & mixRight. TrackListOfKindIterator iter(Track::Wave, mTracks); mixLeft = (WaveTrack*)(iter.First()); mixRight = (WaveTrack*)(iter.Next()); playbackTracks.Add(mixLeft); if (mixRight) playbackTracks.Add(mixRight); #ifdef EXPERIMENTAL_MIDI_OUT NoteTrackArray empty; #endif // Start audio playing int token = gAudioIO->StartStream(playbackTracks, recordingTracks, #ifdef EXPERIMENTAL_MIDI_OUT empty, #endif NULL, rate, t0, t1, NULL); if (token) { int previewing = eProgressSuccess; mProgress = new ProgressDialog(StripAmpersand(GetEffectName()), _("Previewing"), pdlgHideCancelButton); while (gAudioIO->IsStreamActive(token) && previewing == eProgressSuccess) { ::wxMilliSleep(100); previewing = mProgress->Update(gAudioIO->GetStreamTime() - t0, t1 - t0); } gAudioIO->StopStream(); while (gAudioIO->IsBusy()) { ::wxMilliSleep(100); } delete mProgress; } else { wxMessageBox(_("Error while opening sound device. Please check the output device settings and the project sample rate."), _("Error"), wxOK | wxICON_EXCLAMATION, FocusDialog); } } if (FocusDialog) { FocusDialog->SetFocus(); } delete mOutputTracks; mOutputTracks = NULL; mTracks->Clear(true); // true => delete the tracks delete mTracks; mTracks = saveTracks; }