1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-27 14:09:33 +02:00

41 Commits

Author SHA1 Message Date
Paul Licameli
cb05476c45 Remove naked new[] in: effects plug-ins 2017-03-17 17:52:48 -04:00
James Crook
e4260e9581 Bug 1587 - Mac: Ghost duplicate Nyquist effects after upgrade
Fix removes ghost Nyquist effects from the effects menu and generators from generate menu.
2017-02-05 20:27:56 +00:00
Paul Licameli
5d5edecca5 Remove unnecessary semicolons 2016-09-18 10:36:53 -04:00
Paul Licameli
ad04187a41 Change sampleCount arguments, variables, return values to size_t...
... whenever they really describe the size of a buffer that fits in memory, or
of a block file (which is never now more than a megabyte and so could be fit in
memory all at once), or a part thereof.
2016-09-15 21:03:17 -04:00
Paul Licameli
67cec5ad83 Make many counts of tracks and channels unsigned...
... And in some places where a library uses signed types, assert that
the reported number is not negative.

What led me to this, is that there are many places where a size_t value for
an allocation is the product of a number of channels and some other number.
2016-09-07 10:11:41 -04:00
Paul Licameli
56586770e0 EffectClientInterface::SetSampleRate takes double...
... All the overrides (except Ladspa) were casting it to floating poing anyway
2016-08-21 09:51:32 -04:00
Paul Licameli
49e699b1df Remove overloads for sampleCount from ConfigInterface...
... The value was always cast to int anyway when writing, and it was used
only for one value in VST effect, which did not need 64 bits
2016-08-21 09:11:44 -04:00
Paul Licameli
eb6ba1ed7a Remove some naked new amd delete in: Plug-in effects 2016-08-08 07:51:26 -04:00
Paul Licameli
990080ae7d Replace virtual with override wherever possible; eliminate needless virtual...
... for functions in final classes.

override is like const -- it's not necessary, but it helps the compiler to
catch mistakes.

There may be some overriding functions not explicitly declared virtual and I did
not identify such cases, in which I might also add override.
2016-02-26 12:35:38 -05:00
Paul Licameli
7824e94030 Harmlessly qualify classes as final (or explicitly comment not)...
... 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.
2016-02-24 20:58:30 -05:00
Paul Licameli
99f161c36c Sweep unnecessary wxString copies: effects 2016-02-22 22:31:47 -05:00
Leland Lucius
6a95aae8b3 Better fix for bug #1083
I realized after the last commit that it was probably just a VST
version issue.  The effCanBeAutomated opcode was only added for
VST version 2 and, at least the steroizer effect attached to the
but, was built for a VST version before that.
2015-08-01 01:40:15 -05:00
Leland Lucius
ed419f1917 Round 10 of wx3 changes
configure script now auto detects whether wxWidgets was built using
gtk2 or gtk3, so there's no longer a need to specify which one when
running configure.

VST support updated for wx3 under GTK.
2015-07-18 01:22:05 -05:00
Leland Lucius
47f8d10de3 Round 9 of wx3 changes
VST GUI handling greatly simplied on OSX
2015-07-17 23:18:55 -05:00
Leland Lucius
ac4c4faadc Round 8 of wx3 changes
VST control working on Windows...further changes will be required
2015-07-16 14:30:04 -05:00
Leland Lucius
b8872a4a02 Round 2 of wx3 changes on OSX
Main change is that VST GUI support is now integrate with new Cocoa
views.  Direct support for VST Cocoa views (via Cockos extensions:
http://www.reaper.fm/sdk/vst/vst_ext.php) has been added.
2015-07-11 19:33:04 -05:00
Leland Lucius
8fbfa460c4 Migrating the remaining effects
This brings the builtin, LV2, and VAMP effects inline with the
Audio Units, LADSPA, and VST effects.  All effects now share
a common UI.

This gives all effects (though not implemented for all):

User and factory preset capability
Preset import/export capability
Shared or private configuration options

Builtin effects can now be migrated to RTP, depending on algorithm.
LV2 effects now support graphical interfaces if the plugin supplies one.
Nyquist prompt enhanced to provide some features of the Nyquist Workbench.

It may not look like it, but this was a LOT of work, so trust me, there
WILL be problems and everything effect related should be suspect.  Keep
a sharp eye (or two) open.
2015-04-16 23:36:28 -05:00
lllucius
10f62cdae5 Fix for bug #833
This allows duplicate items in the effects menus and provides a
means to uniquely identify each item.
2015-01-19 16:28:48 +00:00
lllucius@gmail.com
38f27a76a1 Fix building on Linux with wx3 and gtk3 2015-01-03 17:10:53 +00:00
lllucius@gmail.com
3fcaddf69f Fix Linux build 2015-01-02 07:15:16 +00:00
lllucius@gmail.com
aa49817563 Fixes 2 VST issues, an RTP issue, and relaxes an AU restriction
1)  Shell VSTs were completely unrecognized...that is no longer the case
2)  All VSTs will now ALWAYS be initialized and cleaned up from the main
    GUI thread.  I found that some Waves VSTs would freeze Audacity when
    initialized in the audio thread and closed in the GUI thread.
3)  While realtime previewing, it was possible that the wrong slave 
    could be used to process new blocks of audio.
4)  I found that the Waves AUs don't crash on a real Mac (instead of a
    virtual machine), so I removed the "black list" I'd put in just for
    them.  (Something to do with needing full 3D support I think.)

Anyway, #2 and #3 were quite intrusive, so as much RTP testing as possible
would be a good thing.
2015-01-02 05:24:43 +00:00
lllucius
7b6cbeec22 Distinct button bars for graphical and textual modes
This bit the textual mode plain old text based buttons
and retains the bitmap buttons for graphical mode.

It also allowed me to remove the manual accelerator table 
building (no access keys in GUI mode) which was a good 
thing as I really didn't know if the was gonna work for
non-English keyboards anyway.
2014-12-16 21:41:58 +00:00
lllucius
16ca4f17eb Re-adding localized menu labels for effects
If you can believe it, this whole big mess is
just to get localized effect labels back into
the menus.

I sure wish I'd had a little bit more time to
finish up all of the effects.  It sure would 
be a lot cleaner (code wise).
2014-12-15 21:54:23 +00:00
lllucius@gmail.com
a98a0ef654 More pointer madness fixes
This round fixes Mac pointers when mouse transitions from
the main project window to an open effect window in GUI
mode and back.

Not all of the cases are fixed with VST overlay windows
being the final holdout.  Couldn't figure out the cause
so will just deal with it when we convert to wx3.

(I GET TO REDO ALL OF THIS FOR WX3...WOOHOO!!!)
2014-12-15 07:59:53 +00:00
lllucius
d01a28be03 Cleanup chunk setting and preset saving/loading
When looking into the +morphfilter issue, I noticed that
I wasn't consistently handling preset chunks.  While I
didn't have any effects complaining about it, some of it
was (near as I can deduce...this stuff isn't well documented)
probably wrong.

So, I cleaned it all up and in the process added more validity
checking when loading presets for all 3 preset formats.

Incidentially, the +morphfilter still crashes Audacity...but
it also crashes Cubase, so we're in good company.  :-)  I've
sent an email to the author to see if I'm setting the chunks
correctly or he has a known issue.
2014-12-10 05:44:59 +00:00
lllucius@gmail.com
e023a1120b Correct some non-wxWidgets literals 2014-12-07 05:29:31 +00:00
lllucius@gmail.com
cddff18025 Resolves reported bugs and (most) recommendations
All:

Export/Import now disabled if the Effect (family) doesn't support it
Options disabled if the Effect (family) doesn't support it
Standarized on "Latency compensation" instead of "Buffer delay compensation"
Correct loading/saving of factory default settings
Fixed "Mannage" to be "Manage"
Removed conditional code since we're keeping the transport buttons
Play bases state on actual playback status
Play no longer monkeys with selection
Play will now start from where it left off IF:
   The user stops the playback via the Effect Stop button
   If the user wants to restart from the beginning of the selection
   then the user can click Rewind while stopped.
Rewind will not go past start of selection (sorry Steve ;-))
   If Rewind is clicked while not playing, playback will next
   start at beginning of selection.
Fast Forward will stop at end of selection
   However, if FFwd is clicked while not playing, it will
   put playback at the end of selection and the next time
   the user clicks the Effect play button, playback will
   continue from the end of selection to the end of track.
Deleting a preset now prompts user to confirm
Button faces should now look a little better
Bypass (should we rename that???) button now grays when disabled

Audio Units:

Corrected all user visible "AudioUnit" strings to be "Audio Unit"
Removed unneeded "Buffer Size" in settings dialog
Only uses latency if user said it was okay

Ladspa:

Added settings dialog to allow control of latency usage
Removed unused "user selectable" buffer size
Only use latency if user wants it
Refresh controls when presets are loaded

VST:

Removed unused "Rescan at startup" setting
Propogate parameter loads to slave effects
2014-12-04 06:10:27 +00:00
lllucius
41083f74cc Another round of effects bashing.
I've added some of the new plugin stuff to LV2, Nyquist, and
Vamp so that they play better in the new system.  They no
longer get bunched in with the Audacity effects when sorting
or grouping the menus.  They have not been fully converted
but they should be good for 2.1.0.

Nyquist plugins now include ";author" and ";copyright"
statements.

Added the 4 new Nyquist plugins to the Windows build.

Audiounits are still coming...had to push them to the back
burner to get this other stuff out of the way.

Scanning for new plugins has been improved so that newly
discovered ones will be shown to the user when Audacity starts.

Effects menu sorting has been fixed and improved.

Disabling effect types in Preferences works again and you
no longer have to restart Audacity for them the change to work.

Effect usage in chains works again.

Plugin registration dialog code simplified a bit.

Group names in the pluginregistry are now base64 encoded.  I
never really thought about it, but wxFileConfig group names
are case insensitive and since I was using the group name as
the plugin ID, I ran into a conflict on Linux where there
were two plugins with the same name, just different case.  (And
they were different plugins.)  Hoping all of this will change
when/if the config file gets converted to XML.  (wx3 if finally
including XML support)

A fair amount of cleanup of this new code has been done and
will continue as more stuff is converted.
2014-11-19 06:58:44 +00:00
lllucius
31081470cf Fixes disappearing focus as reported by David and cleans things up a bit. 2014-11-16 06:52:36 +00:00
lllucius
ad92e8c4bf One more round of effects changes.
The big thing is the common efffects UI.  Right now Ladspa and VST
have been converted to use it and Audiounits will be next.  It makes
everything nice and consistent while reducing the clutter in the
dialog.

Other goodies are:

Ladspa effects now show output controls when supplied by the effect
Ladspa effects now work fine as Analyze type effects
Ladspa now has user presets
VST effects dialog is now less cluttered...leaving more room for the effect
Ladspa and VST effects now share a common UI
Ladspa and VST effects are now usable in chains
Ladspa and VST effects now handle user presets the same way
Currently active effects settings automatically saved and reloaded
Can now do numeric range checking on input fields.

And, as always, plenty of critter squashing.
2014-11-14 03:03:17 +00:00
lllucius
cae6669275 Round 3 of realtime changes.
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...
2014-11-03 06:48:54 +00:00
lllucius
d50e9fee52 Realtime preview round 2
This changes the realtime preview from using 1 effect for all tracks
to an effect per track (logical track).  This should clear up the 
bad audio when more than one track (or a stereo track) is present.

An unfortunate side effect is that meter effects no longer work since
the one presented to the user is not the one doing the actual work.
Suggestions on how to remedy this are welcome.
2014-10-30 14:04:48 +00:00
lllucius
1eeb4d979a The fabled realtime effects...
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.  ;-))
2014-10-26 03:24:10 +00:00
benjamin.drung@gmail.com
277932dccb Remove trailing spaces. 2014-06-03 20:30:19 +00:00
lllucius
c79bf9b1fa Bug fixes and additions to VST plugins
Bugs fixed:

1)  When scanning for VSTs on Mac, bogus lines could show up in the list if the .vst
    file had more than one Info.plist in the bungle.  GRM and TAL plugins exhibited
    this issue.
2)  When scanning for VSTs on Mac, reuse of a variable caused the plugin to be
    accepted even though it was a synth.  So it would show up in the Generate menu.
3)  I recently disabled the the plugin list dialog once the OK button was clicked
    to prevent clicking it again.  This was overkill and prevented clicking Cancel
    while the scan was running.  So, changed it to only disable the OK button.
4)  The new Settings dialog would save the settings even if you clicked Cancel.
5)  Detecing the overlay window on Mac didn't work in all cases.  Did more research
    and I believe the revised method is correct. (Window list is z-order sorted)
6)  When changing the preset from the top combo, the return value from the
    plugin was not check when getting the current preset (program).  It assumed
    that there was always an active program.  This is not at all correct.

Most of the new additions are an attempt to be more compatible with more plugins.
I have not found any plugins that crash Audacity anymore, so I'm not sure how to
really give these changes a good workout.  However, Guitar Rig 5 and Reaktor 5
are now quite usable since one of the additions was window resizing.

1)  Refreshed the aeffectx.h header from the LMSS project and merged in some
    additional changes from Ardour.
2)  Changed the method prototypes to reflect the new aeffectx.h header.
3)  Plugin scan dialog now has a "Select All" and "Clear All" buttons.  (On a
    personal note, this was a major boon while testing...way easier to include
    a single VST.)
4)  Uses a timer now instead of the wxIdleEvent to send effIdle messages to the
    plugin.  Idle could be all many times more than was necessary.
5)  Process level is now reported when requested by the plugin.  Don't know how
    useful it is, but many plugins request it.
6)  Two new events are sent to the dialog from the audioMaster callback to support
    window updating and resizing.  Figured it was safer this way since the callback
    "might" be called from a different thread (as far as I could figure out anyway).
7)  Current sample rate is now returned to the plugin when requested.
8)  The dialog now resizes when the plugin informs us of a size change to its window.
    This was one of the major drawbacks to using Guitar Rig and Reaktor as their
    window would resize and pretty much be useless since the dialog didn't adjust to
    the new size.  Kontakt was another that even includes a draggable resizer in the
    bottom right corner which the dialog supports just fine now.  (Not that Kontakt
    is actually supported though.)
9)  The preset bar is now updated when the plugin informs us of "major" changes with
    the UpdateDisplay opcode.  I noticed that when changing presets within Guitar
    Rig, the preset bar didn't change.

Discovered limitation:

Guitar Rig and, it seems, other plugins will only report a maximum of 128 presets (or
rather programs) even if they support more.  I'd figure out a way to populate the
combo with all of the presets via some major hackage, but it didn't do any good since
Guitar Rig simply refused to set any program number above 128.

Not much can be done about this...just a heads up.
2014-05-26 01:36:14 +00:00
lllucius
001c8a80f7 Add buffer delay compensation and settings dialog
The buffer delay compensation resolves the issue where an effect
may add a delay to the output.  This would cause the output to shift
and the final samples to get chopped off.

The settings (click Settings on any VST dialog) dialog allows the user
to enable/disable the BDC and to set their desired buffer size (within
reason) to help improve performance.

In addition it fixes a bug in the plugin scan list were you could click
OK twice and have two scans going, eventually asserting.
2014-05-20 05:30:41 +00:00
martynshaw99
4ce2643d5f Remove the
// Indentation settings for Vim and Emacs
etc. lines from all files, as Campbell's patch (except for other changes to Languages.cpp)
2013-09-24 00:14:37 +00:00
james.k.crook@gmail.com
ba187bbafc Bug 368: No longer look at plugins.cfg to decide whether to rescan. Just use the rescan preference. 2013-08-31 14:24:55 +00:00
james.k.crook@gmail.com
4c2544874d Bug 368: VST plugins now have a dialog that gives a list of plugine to choose from. 2013-08-24 15:38:26 +00:00
mchinen
10bec68701 Fix for bug 216 VST processing 4 to 12 times slower than in 1.3.8 2010-11-29 17:34:37 +00:00
ra
e74978ba77 Locate and position the current Audacity source code, and clear a variety of old junk out of the way into junk-branches 2010-01-23 19:44:49 +00:00