... Start scrub by click or double click on the scrub head; release button or
not; then move.
If you release before moving, you get scrubbing as before, controlled by
motion. Click or drag to switch in and out of seeking. Stop with ESC,
spacebar, etc. No change of selection.
But now if you drag, then scrubbing contines until you release the mouse or
otherwise stop with a key.
If by release of the mouse, then the selection changes as if by a click at
the last play position. If you hold shift, then, as if by shift-click.
If drag begins with a double-click, then the play head remains centered and
the track moves.
... Should have no effect on generated code, except perhaps some slight faster
virtual function calls. Mostly useful as documentation of design intent.
Tried to mark every one of our classes that inherits from another, or is a
base for others, or has abstract virtual functions, and a few others besides.
In particular, use an options structure for AudioIO::StartStream to simplify
calls
ControlToolBar::PlayPlayRegion also takes that structure as an argument, and a
SelectedRegion instead of two times
And other changes
Makes the tooltips display the action that is going to
be performed rather than a generic description.
Disables transport buttons when the effect dialog is
initially displayed if another project has using the
audio device.
It corrects several "multiple project" problems with the
meter toolbars and meters.
In addition, there was a "multiple project" issue where
the transport buttons didn't disable properly in the
non-active project.
Solves the problem of what the "Settings" button should say
by converting it to a bitmap button.
Adds the missing "bypass effect" button.
The Ok/Cancel buttons are now Apply/Close buttons and the
dialog stays open after the apply is done.
Record is no longer disabled when an RTP effect is open as
the RTP effect now monitors when recording starts and disables
its buttons as needed.
Added "Play", "Skip forward", and "Skip backward" buttons.
While the other stuff is required, this last one is in to
get a feel for its usefulness. We'll need to get feedback
on it pretty quickly so we can rip it out if need be.
These are mostly under an EXPERIMENTAL_ #ifdef. Also has a change for the prompt string for preferences so the displayed keybinding is adjusted when in multitool mode.
Fixes race condition on Audio thread state by using a mutex, so can play and use . (scrubbing forward) and SPACE (play/stop) safely. Previously crashed. Patch by Paul Licameli.
This gets meter type VST effects working again by extending the
The master now maintains his own internal buffers and sums (mixes) all
playing tracks into those buffers. The buffers are then fed into the
VST effect that is presented to the user. This allows the effect to
provide feedback to the user if it support it. Such effects may display
meters or clipping indicators.
Several issues with treading have also been corrected (hopefully ;-)).
These showed up mostly on Linux, but could have happened on the others
as well.
The realtime support is no longer limited to 2 channels per logical
track. Once support for more channels is added, this should be ready
for it.
The rack dialog can now be toggled via the edit toolbar button. It
doesn't stay pressed because the closing of the dialog would have to
be communicated back to the toolbar.
As the rack is updated with new or removed effects or active state
changed, all effects in the active list were shutdown and all effects
in the updated list were initialized. This now shuts down only the
effects no longer in the list and initializes only new ones.
The rack now uses wxBitmapButton instead of Audacity's AButton. The
AButton has a timing issue that prevents it from being deleted while
processing the click event. I looked into it, but gave up and switched
to the wxBitmapButton. Unfortunately, there's a problem with the
wxBitmapButton as well...at least on my setup here. Either the bitmaps
are being scaled or antialiased. Will have to get feedback on this.
I finally figured out why some VSTs didn't seem to do anything in
realtime, at least in my case anyway. I've installed a lot of demo
VSTs and while they work in "batch/offline" mode, some of them will
not work in realtime since vendors tend to remove automation as one
of the demo limitations.
More changes coming shortly...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
For Resample.* and QualityPrefs.cpp, this commit has my restructuring for distinguishing constant-rate vs variable-rate resamplers more generally. I think it's complete and ready for const-rate, but I have more review and testing to do for the var-rate cases.
Variable-rate resampling is not implemented here, so Time Tracks are still broken, but this is a milestone in getting to a more general and correct structure.
Also I think this fixes AboutDialog issues Steve noticed.
I refactored the code into AudacityApp with a new timer. This is provisional pending discussion - if it is decided that it should go somewhere else I will move it.
Fixed bug in resetting mPrevT1. That caused remaining issue noted in Bug 258 comments 2 and 3.
Moved call to UpdateMeters from TrackPanel::OnTimer() to audacityAudioCallback, where it calls gAudioIO->mOutputMeter->UpdateDisplay(), so the updates are synchronized with Meter Toolbar updates.
Removed unnecessary call to MixerBoard::UpdateMeters() in AudacityProject::UpdateMixerBoard().
Various cleanup.