1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-16 08:37:42 +02:00

62 Commits

Author SHA1 Message Date
Paul Licameli
550d514e06 Changes of names and comments relating to scrub, don't mention queue 2018-08-26 10:01:06 -04:00
Paul Licameli
eeb5f1ec20 Revert "Fix the hiccup at the start of scrub or play at speed..."
(It didn't really achieve what that commit comment said)

This reverts commit 26f72b110ceb07bc837eec5450084c6f5421ebb7.
2018-08-25 19:42:12 -04:00
Paul Licameli
06b5d2e945 Bug1932 followup: Times, not sample counts, in scrubbing options...
... because the correct rate is not known where options are constructed
2018-08-20 20:44:10 -04:00
Paul Licameli
26f72b110c Fix the hiccup at the start of scrub or play at speed...
... We need to start the polling of mouse state before starting the audio
stream, and not "nudge" AudioThread, so that AudioThread primes the ring
buffer correctly, not inserting some silence.

This requires yields to timer events in AudioIO::StartStream.
2018-08-16 21:21:44 -04:00
Paul Licameli
7cfda551dd Move scrub click handling into a UIHandle, eliminate OnMouseEvents...
... And the one-shot hack can be simplified away.
2018-08-05 17:18:25 -04:00
Paul Licameli
5f27ae905c Changed misleading terminology in scrubber...
... It was confusing that HasStartedScrubbing() could be true
while also not IsScrubbing()
2018-07-29 14:20:11 -04:00
James Crook
f13e621bc1 Bug 1906 - Issues with dynamic Play-at-Speed
This fix addresses the remaining issue, issue 4, that the selection was often cleared when Play-at-Speed stopped.
The problem was that Scrubbing 'Set Selection to here' code was not being disabled by the Play-at-Speed state.
2018-07-27 17:13:03 +01:00
James Crook
f0637eeb85 Bug 1906 - Issues with dynamic Play-at-Speed (Play doesn't pop up)
Fixed issue 1, i.e. the play button does not pop up after play at speed completes.
2018-07-21 21:14:30 +01:00
James Crook
5caa14e4f9 Bug 1906 - Issues with dynamic Play-at-Speed (Shows as Scrubbing)
Fixed issue 2, i.e. the scrub indicator no longer appears during Play at Speed, and the status bar now says 'Playing at Speed' rather than 'Scrubbing'.
2018-07-21 19:11:08 +01:00
James Crook
17ca54ad4b Bug 133 - Enh: Play-at-Speed slider: Change of playback speed is no longer automatic
This adds a new preference to Playback prefs, VariSpeedPlay, on by default, which makes it possible to vary the playback speed slider whilst audio is playing using play at speed.  The code uses the Scrubbing playback engine.

This code is not final, but is already useful.  Known issues:
  1- Playback does not stop and pop-up the Play at Speed button at the end of playing the selection.
  2- The scrub widget shows uselessly on the scrub ruler when in Play at Speed mode and the status bar proclaims 'Scrubbing'.
  3- At low speeds the playback is clicky, with VariSpeedPlay, even if no changes to speed are being made.

If we can't fix both 1 and 2 by 2.3.0 release time, VariSpeedPlay will be made false by default.
2018-07-20 21:43:07 +01:00
James Crook
1c988b4e3a Automation: AudacityCommand
This is a squash of 50 commits.

This merges the capabilities of BatchCommands and Effects using a new
AudacityCommand class.  AudacityCommand provides one function to specify the
parameters, and then we leverage that one function in automation, whether by chains,
mod-script-pipe or (future) Nyquist.

- Now have AudacityCommand which is using the same mechanism as Effect
- Has configurable parameters
- Has data-entry GUI (built using shuttle GUI)
- Registers with PluginManager.
- Menu commands now provided in chains, and to python batch.
   - Tested with Zoom Toggle.

- ShuttleParams now can set, get, set defaults, validate and specify
the parameters.
- Bugfix: Don't overwrite values with defaults first time out.
- Add DefineParams function for all built-in effects.
- Extend CommandContext to carry output channels for results.

We abuse EffectsManager.  It handles both Effects and
AudacityCommands now.  In time an Effect should become a special case of
AudacityCommand and we'll split and rename the EffectManager class.

- Don't use 'default' as a parameter name.
- Massive renaming for CommandDefinitionInterface
- EffectIdentInterface becomes EffectDefinitionInterface
- EffectAutomationParameters becomes CommandAutomationParameters
- PluginType is now a bit field.

This way we can search for related types at the same time.

- Most old batch commands made into AudacityCommands.
The ones that weren't are for a reason.  They are used by mod-script-pipe
to carry commands and responses across from a non-GUI thread to the GUI
thread.

- Major tidy up of ScreenshotCommand
- Reworking of SelectCommand
- GetPreferenceCommand and SetPreferenceCommand
- GetTrackInfo and SetTrackInfo
- GetInfoCommand
- Help, Open, Save, Import and Export commands.
- Removed obsolete commands ExecMenu, GetProjectInfo and SetProjectInfo
  which are now better handled by other commands.

- JSONify "GetInfo: Commands" output, i.e. commas in the right places.

- General work on better Doxygen.
    - Lyrics -> LyricsPanel
    - Meter -> MeterPanel
- Updated Linux makefile.
- Scripting commands added into Extra menu.
- Distinct names for previously duplicated find-clipping parameters.
- Fixed longstanding error with erroneous status field number which
  previously caused an ASSERT in debug.
- Sensible formatting of numbers in Chains, 0.1 not 0.1000000000137
2018-02-24 14:20:22 -05:00
Paul Licameli
bf5228267a Calls to Disconnect or Unbind in destructors are not needed, if...
... it's either the source of the connection that is being destroyed, or other
object (such as an ancestor window) transitively owning it and so causing it to
be destroyed too;

or, the sink is being destroyed, and that sink is a wxEvtHandler (which is
always so for Disconnect, though not for Unbind in case Bind was passed a
member function of a non-wxEvtHandler).

wxWidgets takes care of erasing the connection in such cases.

This removes most calls to Disconnect and Unbind.  Many destructors shrank to
nothing.

Notably, in case of popup menu handling, the call to Disconnect is not removable
because the object being destroyed is neither the source nor the sink.
2018-02-21 19:28:06 -05:00
James Crook
d2fe7b1757 Clean up most remaining MSVC warnings. 2018-01-06 13:03:48 +00:00
Paul Licameli
ab6de1181d No more functor objects; all command handler functions take same args 2018-01-05 09:27:29 -05:00
Paul Licameli
d263eaa97b Remove the special PopupFunctor, redo it by other means...
... it was only used, so far, by the scrubber.
2018-01-05 09:27:23 -05:00
Paul Licameli
812f3649de Bug 1685: garbage status bar messages and tooltips, scrub in Windows 2017-07-14 23:02:32 -04:00
James Crook
315679dad5 Bug 1508 - Scrubbing: Release mouse to exit Scrub Mode started by click & drag in Scrub Ruler 'no longer working'
It WAS working, just not the way QA wanted, because releasing mouse click when in the ruler and on the first seek continued the seek/scrub cycle.  Introduced a 'mInOneShotMode' variable to complete the baroque behaviour in the way that was requested.  Also updated tool tip code to reflect the one-shot and non one-shot difference in tooltip and status.
2016-09-08 19:02:55 +01:00
Paul Licameli
837a96d18a Scrub queue records positions as sampleCount not long 2016-09-04 16:28:40 -04:00
James Crook
f9d269bcee Change ScrubBar to ScrubRuler
This also makes it clearer in the code when we are dealing with a Toolbar ID (for the scrubbing toolbar) and when we are dealing with a button ID (for enabling/disabling the scrub ruler).
2016-08-22 12:25:36 +01:00
James Crook
53bb478600 Bug 1457 - Transport Menu "Scrub" and "Seek" do not correctly indicate when either Scrubbing mode is active 2016-08-11 22:30:51 +01:00
James Crook
5939fe66e8 Bug 1053 - [Scrub Phase I] Status Bar messages incomplete for scrub started with menu or shortcut. 2016-08-10 21:57:29 +01:00
Paul Licameli
4fb51cad07 Click to switch to seek works again, but only in ruler or track panel 2016-06-17 15:21:03 -04:00
Paul Licameli
8a0c34e96b Eliminate the special case of dragging scrub/seek 2016-06-17 15:14:51 -04:00
Paul Licameli
8cba525b6c No more separate start/stop button on Scrubbing toolbar...
... This finalizes (I hope) the set of buttons, but maybe not their left to
right order.

Behavior of the scrub bar is still not settled.
2016-06-15 21:20:40 -04:00
Paul Licameli
b1ca48c23e Scrub bar show/hide button on Scrubbing toolbar 2016-06-15 01:11:42 -04:00
Paul Licameli
d1fe0a89b5 Scrub play button becomes a stop button when pressed...
... also the corresponding menu command can stop as well as start the scrub
or seek
2016-06-06 02:12:31 -04:00
Paul Licameli
fd9d6a8fcf Set selection whenever scrub/seek stops by any means besides ESC key 2016-06-06 01:45:54 -04:00
Paul Licameli
bbfc730399 No more left-click to seek 2016-06-04 20:04:09 -04:00
Paul Licameli
6a3613e8e9 Implement scrub and seek buttons on ruler; redo scrub menu items 2016-06-02 15:55:16 -04:00
Paul Licameli
eafc416d55 Remove double-click and scrolling menu items for scrub/seek...
... Use the toggle button on the ruler instead
2016-06-01 13:30:01 -04:00
Paul Licameli
123499cbb1 Don't use scrubbing poller thread on Linux, it's not safe yet 2016-06-01 13:06:01 -04:00
Paul Licameli
35b0502ce1 Don't let seek make a stutter at less than unit speed 2016-05-28 12:11:26 -04:00
Paul Licameli
a9a404c7cf Further simplified argument passing 2016-05-28 12:02:16 -04:00
Paul Licameli
e4fadf4aaf Improve scrubbing speed control (2 finger swipe) on Mac 2016-05-28 11:59:22 -04:00
Paul Licameli
af7a92c2ab Improve scrub responsiveness: a secondary thread polls the mouse 2016-05-28 11:59:22 -04:00
Paul Licameli
c585bb16fb Move bounding times and minimum stutter length into ScrubOptions 2016-05-22 15:27:35 -04:00
Paul Licameli
ffe596c760 Move some fields into ScrubbingOptions 2016-05-22 15:27:35 -04:00
Paul Licameli
671f60492d Move some static functions into ScrubbingOptions 2016-05-22 15:27:35 -04:00
Paul Licameli
3dcf802bdc Have just one scrub enqueueing function: use options for distinctions 2016-05-22 15:27:35 -04:00
Paul Licameli
cdbdd6480b Define and pass around struct ScrubbingOptions, but nothing in it yet 2016-05-22 15:27:35 -04:00
Paul Licameli
5997beec9d Rename Scrubbber::mScrubHasFocues to mPaused, reverse its sense 2016-05-22 15:27:34 -04:00
Paul Licameli
9e2916a80b Better implementation of switch from scrub to quick play; ...
... also, don't ever draw the scrub handle while dragging the quick play
region.
2016-05-18 11:58:57 -04:00
Paul Licameli
16d33c6005 Give the scrubber its own timer separate from TrackPanel's, so that...
... we can experiment with changing the interval.
2016-05-14 05:47:32 -04:00
Paul Licameli
737e24e24e Allow pausing and unpausing of scrub. Just treat it differently internally. 2016-05-11 19:59:11 -04:00
Paul Licameli
19ef2f6681 Implement drag-scrub, compatibly with the existing move-scrub...
... 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.
2016-05-10 09:37:10 -04:00
Paul Licameli
5944391e24 Let's commit to EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL 2016-05-09 23:21:56 -04:00
Paul Licameli
cc0190054c Fix regression in scroll scrub 2016-05-09 21:53:32 -04:00
Paul Licameli
7c2a531486 New base classes of TrackPanel just for the bitmap backing and overlay system...
... to make it reusable by other classes.

Also, don't create a second DC when repainting TrackPanel.
2016-05-09 11:37:32 -04:00
Paul Licameli
f48694ef47 Move the code that scrolls during scrub out of Scrubbing.cpp 2016-05-03 22:43:19 -04:00
Paul Licameli
5086260a60 fix build 2016-04-27 17:45:53 -04:00