Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an effects framework. #180

Merged
merged 337 commits into from
Mar 22, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
337 commits
Select commit Hold shift + click to select a range
3ca1986
Convert the group names for EffectSlotParameter's to EffectChainI_Eff…
rryan Mar 6, 2011
33bc350
Merging from lp:mixxx
rryan Mar 6, 2011
f91a601
Refactor EffectChain to split it into EffectChain and EffectChainSlot…
rryan Mar 7, 2011
066bec4
Move all effects code from a SCons Feature to the MixxxCore Dependenc…
rryan Mar 7, 2011
66811ae
Backpedal a little bit on my earlier design. EffectChain's should not…
rryan Mar 7, 2011
e9e0759
Rewrote the way that EffectsBackends provide and represent effects. T…
rryan Mar 7, 2011
220c59e
Merging from lp:mixxx
rryan Mar 7, 2011
c7aef22
Change name of prev/next preset controls to prev_chain next_chain.
rryan Mar 7, 2011
af9bde1
Adding EffectChainManager for loading/saving EffectChains from DB and…
rryan Mar 7, 2011
4ea3252
Add EffectChainManager methods to give out the next/prev effectchain.…
rryan Mar 7, 2011
1582929
OS X compile fix in LADSPALoader
asantoni Mar 7, 2011
41a2cbb
Update EffectsManager to have more built in support for enumerating e…
rryan Mar 8, 2011
9ee5c23
Fix parameter syncing between EffectChainSlot/EffectChain and EffectS…
rryan Mar 8, 2011
a54b92f
Adding custom WidgetGroup layout hacks. I'll have to clean these up w…
rryan Mar 8, 2011
52b60c0
Adding 2 EffectChains to Deere1280x1024. Again, I'll have to back out…
rryan Mar 8, 2011
2da1ada
Fix prev_chain behavior. Also, update 2nd effect chain name widget.
rryan Mar 8, 2011
b5f91c8
Switch a bunch of 0.0-1.0 knob controls to be ControlPotmeter's. Remo…
rryan Mar 8, 2011
bd6e5f9
Rename EffectSlotParameter to EffectParameterSlot to match the parall…
rryan Mar 8, 2011
ec88242
Merging from lp:mixxx
rryan Nov 8, 2011
0035034
Remove merge conflict skin.
rryan Nov 8, 2011
d14d3a6
Merging from lp:mixxx
rryan Nov 8, 2011
42afd43
Add effects demo skin based on Deere 1280x1024
rryan Nov 13, 2011
44f769f
Update flanger parameter knobs to control the current effect chain pa…
rryan Nov 13, 2011
03e2b3c
Minor fixes.
rryan Nov 12, 2012
5a4fb03
Remove Deere1280x1024-SXGA.moved.
rryan Jun 17, 2013
4bff8b1
Merge branch 'master' into features_effects
rryan Jun 17, 2013
c59f6e2
Remove src/util.h.moved.
rryan Jun 17, 2013
284de45
Remove all effectsunit code from Bruno's GSoC project.
rryan Jun 17, 2013
325ee4f
Fix the build.
rryan Jun 17, 2013
665a83e
Change EffectManifest and EffectManifestParameter to be plain-old-data.
rryan Jun 18, 2013
b83d785
No need to clamp values coming from a ControlPotmeter.
rryan Jun 18, 2013
5a9fa53
Fix debug text.
rryan Jun 18, 2013
0cdf471
Change EffectManifest / EffectManifestParameter to use const referenc…
rryan Jun 18, 2013
42e9103
Add EngineEffect and EngineEffectParameter.
rryan Jun 18, 2013
1a49690
Add EffectProcessor, an interface for bundling the core logic of an e…
rryan Jun 19, 2013
4991ff7
Use a ControlValueAtomic<QVariant> for EngineEffectParameter.
rryan Jun 19, 2013
bd9aeb9
Add parameter lookup methods to EngineEffect.
rryan Jun 19, 2013
4c52659
Change the effects system drastically.
rryan Jun 19, 2013
5f6b7e8
Const references.
rryan Jun 19, 2013
67e4931
Remove QMutex from EffectParameter since it no longer has to deal wit…
rryan Jun 19, 2013
089bfd0
Get rid of mutexes in Effect now that the engine is not calling its m…
rryan Jun 19, 2013
d172db9
More const references.
rryan Jun 19, 2013
f62fd9e
More const references. Delete EffectChainSlot::process.
rryan Jun 19, 2013
52d6c28
Merge branch 'master' into features_effects
rryan Jun 19, 2013
414a7e8
Delete res/effectsunits.
rryan Jun 19, 2013
f96b986
Merge branch 'master' into features_effects
rryan Jun 30, 2013
ff62388
Merge branch 'master' into features_effects
rryan Jul 1, 2013
c000def
Merge branch 'master' into features_effects
rryan Jul 1, 2013
b32d5cc
Merge branch 'master' into features_effects
rryan Jul 14, 2013
138eb9c
Merge branch 'master' into features_effects
rryan Sep 19, 2013
fc96a26
Merge branch 'master' into features_effects
rryan Nov 19, 2013
a5a6f14
Comment run. Remove locking from places that won't need it anymore.
rryan Nov 24, 2013
b5f65ac
Change terminology of TwoWayMessagePipe to use 'receiver' instead of …
rryan Nov 25, 2013
5c8e3c7
Refactor TwoWayMessagePipe to separate the sender and receiver so the…
rryan Nov 26, 2013
b5fa9fe
Get rid of EngineMaster::getEffectsManager().
rryan Nov 27, 2013
bae67e3
Add BaseReferenceHolder/ReferenceHolder for holding a reference witho…
rryan Nov 27, 2013
4634b8b
Add EngineEffectsManager, an engine-side representation of the effect…
rryan Nov 27, 2013
9771729
Shorten message class names.
rryan Nov 27, 2013
5fd62fc
Add simple EngineEffectChain implementation.
rryan Nov 27, 2013
b1f0cd0
Re-structure messages to use unions (again). Non-POD can be stored ou…
rryan Nov 28, 2013
62476b8
Handle add/remove effect chain messages in EngineEffectsManager.
rryan Nov 28, 2013
efa3a0a
Add a set-parameters request for EngineEffectChain and handle it.
rryan Nov 28, 2013
0b69122
Add EffectRequest processing/dispatch loop.
rryan Nov 28, 2013
dde9200
Add tracking of active EngineEffects to EngineEffectsManager.
rryan Nov 30, 2013
fdb35e9
Add CLEAR_STRUCT macro for clearing the structs.
rryan Nov 30, 2013
5616676
Remove CHAIN_SLOT message types.
rryan Nov 30, 2013
d4c9d28
Add SET_EFFECT_PARAMETER message for setting an effect parameter's va…
rryan Nov 30, 2013
31fe9aa
Use a pointer for the EffectsRequest in the TwoWayMessagePipe because…
rryan Nov 30, 2013
d4ae9ed
Add EffectsResponse handling to EffectsManager.
rryan Nov 30, 2013
a729e45
Make id required for creating an EffectChain. Add an EngineEffectChai…
rryan Nov 30, 2013
e8a9581
Send an ADD_EFFECT_CHAIN message when one is added.
rryan Nov 30, 2013
46a486e
Write EffectChain updates to the EngineEffectsManager.
rryan Nov 30, 2013
9108932
Remove unused MessageType from EffectsResponse.
rryan Nov 30, 2013
89af205
Add enabled/enabledForGroup tracking to EffectChain.
rryan Nov 30, 2013
90ffcee
Handle ENABLE_EFFECT_CHAIN_FOR_GROUP/DISABLE_EFFECT_CHAIN_FOR_GROUP m…
rryan Nov 30, 2013
a92363d
Add mix accessor/setter in EffectChain.
rryan Nov 30, 2013
9f30751
Get rid of some old assumptions in EffectChainSlot.
rryan Nov 30, 2013
37f1386
Create new EffectParameterSlots as needed.
rryan Nov 30, 2013
bffd265
Escape mutex hell. Remove mutexes from the Effect*Slot.
rryan Nov 30, 2013
7a663df
Send updates when EffectChain parameters change.
rryan Nov 30, 2013
9e65659
Listen for updates to EffectChain properties in EffectChainSlot. valu…
rryan Nov 30, 2013
2afe8e6
Don't leak channel enable controls on shutdown.
rryan Nov 30, 2013
d372650
Unify terminology to use group instead of channelId.
rryan Nov 30, 2013
d208bef
Add very simple process implementation. So much better without the lo…
rryan Nov 30, 2013
e2900db
Fix more uses of channelId instead of group.
rryan Nov 30, 2013
29c199e
Merge branch 'master' into features_effects
rryan Dec 1, 2013
30307a8
Merge branch 'master' into features_effects
rryan Dec 1, 2013
40f0503
Fix EngineMasterTest.
rryan Dec 1, 2013
9f321c1
Oops, forgot engineeffect.cpp.
rryan Dec 1, 2013
c46b09c
Remove mutex in EffectsManager.
rryan Dec 1, 2013
0e99496
Get rid of some of the boilerplate involved when registering an effec…
rryan Dec 1, 2013
ad802a0
Send SET_EFFECT_PARAMETER messages whenever an effect's parameter cha…
rryan Dec 1, 2013
10be1ab
Refactor message handling to prevent having to iterate all EngineEffe…
rryan Dec 1, 2013
caf18c3
Fix segfault on chain switch.
rryan Dec 1, 2013
835495d
Some FlangerEffectProcessor fixes.
rryan Dec 1, 2013
828c2f6
EngineEffectChain enabled accessor.
rryan Dec 1, 2013
e0a5b67
Warn on failed EffectsRequest.
rryan Dec 1, 2013
1f40e8f
Fix default chain setup order.
rryan Dec 1, 2013
370ba81
Add EffectsRequest processing debug statements.
rryan Dec 1, 2013
650a9c0
Initialize the EngineEffect's EffectProcessor.
rryan Dec 1, 2013
0931fec
Don't process a chain if it is not enabled.
rryan Dec 1, 2013
e8064c0
Add InsertionType property to EffectChain for insert vs. send effects…
rryan Dec 1, 2013
ae20265
Handle insert and send mode in EngineEffectChain::process().
rryan Dec 1, 2013
225c418
Use ramping gain when processing EffectChains.
rryan Dec 1, 2013
25fa5ac
Load sane default values for EngineEffectParameter from the manifest.
rryan Dec 1, 2013
2f0afa4
Fix goofy initialization order requirements for EffectChains by makin…
rryan Dec 1, 2013
48ee114
Change SEND mode processing to not double the signal when fully dry.
rryan Dec 1, 2013
693cb05
Add virtual destructor to EffectInstantiator.
rryan Dec 1, 2013
c1c0162
Add DISALLOW_COPY_AND_ASSIGN to EngineEffectChain.
rryan Dec 1, 2013
aa64f58
Add clear control to EffectChainSlot to clear the chain slot.
rryan Dec 1, 2013
470ed71
Prefix all slot groups with EffectRack1 to make room for future effec…
rryan Dec 2, 2013
359b21e
Add EffectRack to wrap EffectChainSlots and contain logic related to …
rryan Dec 2, 2013
9e5df4a
Doh. Re-add the EffectsManager creation.
rryan Dec 2, 2013
be4e9f3
Rename EffectRack clear control to be less redundant.
rryan Dec 2, 2013
0dddd01
Fix spelling.
rryan Dec 3, 2013
674562d
Rename FlangerEffectProcessor to FlangerProcessor.
rryan Dec 3, 2013
8c8dbfb
Make enabled just reflect whether the chain is loaded.
rryan Dec 3, 2013
d88c8cb
Add BitCrusher effect and effect chain.
rryan Dec 3, 2013
1ef6c89
Simplify effect registration.
rryan Dec 3, 2013
b5a738a
Improve my dumb first-pass at a bit crusher.
rryan Dec 3, 2013
5c9366b
Rename BitCrusherProcessor and FlangerProcessor to BitCrusherEffect a…
rryan Dec 3, 2013
2a7735d
Merge branch 'master' into features_effects
rryan Dec 3, 2013
af4acd7
Merge branch 'master' into features_effects
rryan Dec 4, 2013
60e4102
Merge branch 'master' into features_effects
rryan Dec 4, 2013
f718de9
Don't load the same chain to a chain slot twice.
rryan Dec 4, 2013
8a2204e
Add FilterEffect, based on EngineFilterEffect. Filter sweeps!
rryan Dec 4, 2013
a0b983a
Remove EngineFilterEffect tooltips.
rryan Dec 4, 2013
2c0cef8
Delete EngineFlanger and its tooltips.
rryan Dec 4, 2013
030526f
Add temporary effects hacks to Deere1280x800-WXGA. Delete Deere1280x1…
rryan Dec 4, 2013
c9f937c
Get rid of some of the boilerplate required in making an effect proce…
rryan Dec 5, 2013
c185a7c
Fix segfault caused by instantiating effect processors before the Eng…
rryan Dec 5, 2013
977db8f
Merge branch 'master' into features_effects
rryan Dec 6, 2013
616197c
Merge branch 'master' into features_effects
rryan Dec 13, 2013
972558b
Fix tests to use EffectsManager.
rryan Dec 13, 2013
1c18b2a
Merge branch 'master' into features_effects
rryan Dec 17, 2013
1043726
Oops.
rryan Dec 17, 2013
4f40522
Add quick and dirty EffectChain / Effect / EffectParameter XML serial…
rryan Dec 17, 2013
3ae65df
Add WEffect and WEffectParameter widgets.
rryan Dec 18, 2013
03a6228
Add option for a validation check to XmlParse::selectNodeInt/Float.
rryan Dec 18, 2013
8508744
Create WEffect and WEffectParameter widgets for <EffectName> and <Eff…
rryan Dec 18, 2013
ca97573
Merge branch 'master' into features_effects
rryan Dec 18, 2013
9d044fd
Add updated() signal to EffectSlot.
rryan Dec 18, 2013
e627997
Add usage of EffectName / EffectParameterName as example.
rryan Dec 18, 2013
a8eada9
Support updating other parts of Mixxx when effects are registered.
rryan Dec 18, 2013
edb2e43
Merge branch 'master' into features_effects
rryan Dec 19, 2013
3a1579a
First pass at porting SWH plate reverb to Mixxx effect system.
ywwg Jan 5, 2014
3d40c46
Fix inline issue and typo
ywwg Jan 5, 2014
a142872
Use GroupState properly. Other notes.
ywwg Jan 5, 2014
8ec6a42
Merge pull request #3 from ywwg/features_effects-reverb
rryan Jan 5, 2014
5190b6a
Merge branch 'master' into features_effects
rryan Jan 12, 2014
b9fd7b2
Update BitCrusher to account for [-1, 1] sample range.
rryan Jan 13, 2014
eb21626
Make EffectChain emit its update signals when it is changed.
rryan Jan 13, 2014
cd612fd
Protect against invalid indexes in EffectRack.
rryan Jan 13, 2014
e638fc1
Emit updated signals on clear and other misc fixes.
rryan Jan 13, 2014
37a6930
Properly parse effect widgets with SkinContext.
rryan Jan 13, 2014
21e860a
Fix FlangerEffect to keep state for left and right channel.
rryan Jan 13, 2014
74d32f7
Add support for "OK" pointer to SkinContext::selectInt.
rryan Jan 13, 2014
f6203a4
Merge branch 'master' into features_effects
rryan Jan 13, 2014
b237857
Register effect chains with the EffectChainManager when loading them …
rryan Jan 13, 2014
9246ea7
Fix mysterious FlangerEffect segfault.
rryan Jan 13, 2014
0d8ff35
Move effect widget setup out of LegacySkinParser and into the setup()…
rryan Jan 13, 2014
e420261
Merge branch 'master' into features_effects
rryan Jan 16, 2014
9723fb0
Write an echo effect from scratch.
ywwg Jan 5, 2014
0f1d383
Fix order of math.
ywwg Jan 18, 2014
a622d12
Address notes, and write pingponging
ywwg Jan 18, 2014
c8912a4
Merge pull request #4 from ywwg/features_effects-echo-squash
rryan Jan 18, 2014
1493f8a
Merge branch 'features_effects' of github.com:rryan/mixxx into featur…
rryan Jan 18, 2014
3f87fc3
Merge branch 'master' into features_effects
rryan Jan 18, 2014
434cf44
Reduce effect name widget duplication with setupLabelWidget.
rryan Jan 18, 2014
69831e4
Set parameter slot control default values so that reset works properly.
rryan Jan 18, 2014
91ad331
remove unnecessary assignments.
ywwg Jan 18, 2014
e82b793
Merge pull request #5 from ywwg/rryan-features_effects
rryan Jan 18, 2014
5fdfff7
Add description to EffectChain.
rryan Jan 18, 2014
a130464
Show description in tooltip for WEffectChain, WEffect, and WEffectPar…
rryan Jan 18, 2014
8e90a61
Add GroupEffectProcessor, a helper class for defining effects with au…
rryan Jan 19, 2014
ed9b27d
Convert all native effects to use GroupEffectProcessor.
rryan Jan 19, 2014
280ba59
Apply master volume after effects are processed.
rryan Jan 19, 2014
76b294d
Begin port of CAPS Reverb plugin -- doesn't quite build.
ywwg Jan 19, 2014
b073af8
Fixed missing semicolon, reverb plugin builds
ywwg Jan 19, 2014
3cb90ab
Reimplement reverb effect with newly-ported CAPS Reverb effect.
ywwg Jan 19, 2014
caf6314
Revert accidental edits
ywwg Jan 19, 2014
a0ac79f
clean up basics.h
ywwg Jan 19, 2014
ae889e0
In the echo effect, pingpong should be off by default.
ywwg Jan 19, 2014
b18f46b
Use a crossfade buffer to reduce static on parameter changes more.
ywwg Jan 19, 2014
d34c033
Remove unnecessary file.
ywwg Jan 19, 2014
ee9a29f
Merge pull request #7 from ywwg/rryan-features_effects
rryan Jan 19, 2014
5613c98
Merge pull request #6 from ywwg/rryan-features_effects-reverbV2
rryan Jan 19, 2014
2c2d5c0
Merge branch 'master' into features_effects
rryan Feb 14, 2014
485a87e
Merge branch 'master' into features_effects
rryan Feb 18, 2014
14e2d96
Make group enable buttons toggle buttons.
rryan Feb 18, 2014
b080193
Merge branch 'features_effects' of github.com:rryan/mixxx into featur…
rryan Feb 18, 2014
fb6015c
Revert changes to res/skins/Deere1280x800-WXGA/skin.xml.
rryan Feb 18, 2014
909ad44
Merge branch 'master' into features_effects
rryan Feb 18, 2014
b7cb250
Fix accidentally applying master volume twice (missed this during mer…
rryan Feb 18, 2014
1450795
Revert unneeded changes.
rryan Feb 18, 2014
486d3ec
Set clear control type.
rryan Feb 19, 2014
a6cfbcd
Improve control definitions in EffectChainSlot.
rryan Feb 19, 2014
28b8724
Add some accessors.
rryan Feb 19, 2014
210744b
Allow controlling of EffectChain insertion type via chain slot contro…
rryan Feb 19, 2014
5d4e4fb
Basic EffectChainSlot tests that exercise the control interface.
rryan Feb 19, 2014
436efbd
Add accessor.
rryan Feb 20, 2014
e4d1fb6
Misc. renames and notes.
rryan Feb 20, 2014
156aa7a
Use more specific control types and make read-only controls use value…
rryan Feb 20, 2014
ee1ef78
Add a simple test for EffectsManager that we can instantiate an effec…
rryan Feb 20, 2014
2908b97
Make enabled and num_parameters read-only.
rryan Feb 20, 2014
ed4a8e1
Add BaseEffectTest.
rryan Feb 20, 2014
fc1b8dd
Add EffectSlotTest.
rryan Feb 20, 2014
3961255
Merge branch 'master' into features_effects
rryan Mar 11, 2014
44256d9
Merge branch 'master' into features_effects
rryan Mar 12, 2014
c8981c5
Merge branch 'master' into features_effects
rryan Mar 12, 2014
3fd5217
Rename channel_%1 to group_%1_enable.
rryan Mar 14, 2014
6f35964
Merge branch 'master' into features_effects
rryan Mar 16, 2014
6422aa5
Introduce the concept of EffectChain prototypes.
rryan Mar 16, 2014
ea443d3
Add in-order processing of effect chains in their racks.
rryan Mar 16, 2014
0131e6e
Try to prevent memory allocation by reserving space in engine effect …
rryan Mar 16, 2014
ddcb4f8
Make Effect responsible for adding itself to a chain in the engine.
rryan Mar 16, 2014
43463e1
Pre-allocate group state before adding effects to the engine.
rryan Mar 16, 2014
008054d
Add LinkType definition to EffectManifestParameter for describing lin…
rryan Mar 17, 2014
0433bd0
Add LinkType to EffectParameter.
rryan Mar 17, 2014
da6ff6f
Send a signal when an EffectParameter's value changes.
rryan Mar 17, 2014
4b3b6a3
Broadcast chain parameter changes to its effects.
rryan Mar 17, 2014
e97edf2
Handle parameter value changes and link type changes in EffectParamet…
rryan Mar 17, 2014
79b8656
Add some parameter linking to the native effects for testing.
rryan Mar 17, 2014
a27dc8c
Make mix, parameter, and group enable settings properties of the chai…
rryan Mar 17, 2014
5cd5027
Make group enable buttons behave in power-window mode.
rryan Mar 17, 2014
38e6875
Merge branch 'master' into features_effects
rryan Mar 19, 2014
60ab19f
Add [EffectRack%1],num_effectchain_slots control.
rryan Mar 19, 2014
f5fe608
Change effect CO API to refer to EffectChainSlots as EffectUnits.
rryan Mar 19, 2014
44e8068
Rename <EffectChain> option to WEffect, WEffectChain, and WEffectPara…
rryan Mar 19, 2014
7c18675
Merge branch 'master' into features_effects
rryan Mar 21, 2014
881c747
Allow chains to have null effects.
rryan Mar 22, 2014
53f03e5
Add EffectChain::replaceEffect for swapping one effect for another.
rryan Mar 22, 2014
885e13c
Add support for iterating the global ordering of effect IDs in Effect…
rryan Mar 22, 2014
79bcc22
Add next/previous effect buttons to EffectSlot and wire them up to a …
rryan Mar 22, 2014
693c92d
Load an empty chain to EffectChainSlot so that users can load effects…
rryan Mar 22, 2014
825f5a5
Add EffectSlot effect selector knob for infinite +1/-1 knobs.
rryan Mar 22, 2014
cbe0bb7
Add effect chain selector control for +1/-1 infinite spinner knobs.
rryan Mar 22, 2014
3553767
Add a clear control to EffectSlot.
rryan Mar 22, 2014
d21bf51
Rename 'enabled' control of the EffectChainSlot, EffectSlot, and Effe…
rryan Mar 22, 2014
4bd5c25
Fix EngineEffectRack to support NULL chains.
rryan Mar 22, 2014
48a3669
Fix build, oops.
rryan Mar 22, 2014
e4a2c48
Guard all engine effect debug output with a flag.
rryan Mar 22, 2014
e92f048
Wrap more debug statements in conditional checks.
rryan Mar 22, 2014
105c53f
Remove chains and effects by index instead of pointer.
rryan Mar 22, 2014
5e6f8f2
Don't communicate EffectChain parameter to the engine since it's not …
rryan Mar 22, 2014
365cef9
Add 'enabled' state to Effects and an 'enabled' control to EffectSlot…
rryan Mar 22, 2014
03098ea
Make EffectChainSlot responsible for adding/removing its chains from …
rryan Mar 22, 2014
0717ce5
Add num_effectslots and num_parameterslots controls.
rryan Mar 22, 2014
c751aec
Delete leaking controls.
rryan Mar 22, 2014
2b68514
Restore chain-level enable control.
rryan Mar 22, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 32 additions & 2 deletions build/depends.py
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,35 @@ def sources(self, build):
"dlghidden.cpp",
"dlgmissing.cpp",

"effects/effectmanifest.cpp",
"effects/effectmanifestparameter.cpp",

"effects/effectchain.cpp",
"effects/effect.cpp",
"effects/effectparameter.cpp",

"effects/effectrack.cpp",
"effects/effectchainslot.cpp",
"effects/effectslot.cpp",
"effects/effectparameterslot.cpp",

"effects/effectsmanager.cpp",
"effects/effectchainmanager.cpp",
"effects/effectsbackend.cpp",

"effects/native/nativebackend.cpp",
"effects/native/bitcrushereffect.cpp",
"effects/native/flangereffect.cpp",
"effects/native/filtereffect.cpp",
"effects/native/reverbeffect.cpp",
"effects/native/echoeffect.cpp",
"effects/native/reverb/Reverb.cc",

"engine/effects/engineeffectsmanager.cpp",
"engine/effects/engineeffectrack.cpp",
"engine/effects/engineeffectchain.cpp",
"engine/effects/engineeffect.cpp",

"engine/sync/basesyncablelistener.cpp",
"engine/sync/enginesync.cpp",
"engine/sync/synccontrol.cpp",
Expand All @@ -580,8 +609,6 @@ def sources(self, build):
"engine/enginechannel.cpp",
"engine/enginemaster.cpp",
"engine/enginedelay.cpp",
"engine/engineflanger.cpp",
"engine/enginefiltereffect.cpp",
"engine/enginevumeter.cpp",
"engine/enginevinylsoundemu.cpp",
"engine/enginesidechaincompressor.cpp",
Expand Down Expand Up @@ -664,6 +691,9 @@ def sources(self, build):
"widget/wimagestore.cpp",
"widget/hexspinbox.cpp",
"widget/wtrackproperty.cpp",
"widget/weffectchain.cpp",
"widget/weffect.cpp",
"widget/weffectparameter.cpp",
"widget/wtime.cpp",
"widget/wkey.cpp",
"widget/wcombobox.cpp",
Expand Down
7 changes: 4 additions & 3 deletions src/basetrackplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,26 @@
#include "waveform/renderers/waveformwidgetrenderer.h"
#include "analyserqueue.h"
#include "util/sandbox.h"
#include "effects/effectsmanager.h"

BaseTrackPlayer::BaseTrackPlayer(QObject* pParent,
ConfigObject<ConfigValue>* pConfig,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
QString group,
bool defaultMaster,
bool defaultHeadphones)
: BasePlayer(pParent, group),
m_pConfig(pConfig),
m_pLoadedTrack() {

// Need to strdup the string because EngineChannel will save the pointer,
// but we might get deleted before the EngineChannel. TODO(XXX)
// pSafeGroupName is leaked. It's like 5 bytes so whatever.
const char* pSafeGroupName = strdup(getGroup().toAscii().constData());

m_pChannel = new EngineDeck(pSafeGroupName,
pConfig, pMixingEngine, defaultOrientation);
m_pChannel = new EngineDeck(pSafeGroupName, pConfig, pMixingEngine,
pEffectsManager, defaultOrientation);

EngineBuffer* pEngineBuffer = m_pChannel->getEngineBuffer();
pMixingEngine->addChannel(m_pChannel);
Expand Down
2 changes: 2 additions & 0 deletions src/basetrackplayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ class ControlObject;
class ControlPotmeter;
class ControlObjectThread;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unused

class AnalyserQueue;
class EffectsManager;

class BaseTrackPlayer : public BasePlayer {
Q_OBJECT
public:
BaseTrackPlayer(QObject* pParent,
ConfigObject<ConfigValue>* pConfig,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
QString group,
bool defaultMaster,
Expand Down
1 change: 1 addition & 0 deletions src/controlvaluedelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class ControlValueDelegate : public QItemDelegate
static QStringList getPlaylistControlValues() { return m_playlistControlValues; };
static QStringList getFlangerControlValues() { return m_flangerControlValues; };
static QStringList getMicrophoneControlValues() { return m_microphoneControlValues; };

private:
static QStringList m_channelControlValues;
static QStringList m_masterControlValues;
Expand Down
6 changes: 3 additions & 3 deletions src/deck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
Deck::Deck(QObject* pParent,
ConfigObject<ConfigValue>* pConfig,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
QString group) :
BaseTrackPlayer(pParent, pConfig, pMixingEngine, defaultOrientation,
group, true, false) {
BaseTrackPlayer(pParent, pConfig, pMixingEngine, pEffectsManager,
defaultOrientation, group, true, false) {
}

Deck::~Deck() {
}

1 change: 1 addition & 0 deletions src/deck.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Deck : public BaseTrackPlayer {
Deck(QObject* pParent,
ConfigObject<ConfigValue>* pConfig,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
QString group);
virtual ~Deck();
Expand Down
3 changes: 3 additions & 0 deletions src/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,8 @@ enum {
#define math_min(a,b) (((a) < (b)) ? (a) : (b))
#endif

#ifndef math_clamp
#define math_clamp(v, min, max) (((min) < (max)) ? (math_min((max), math_max((v), (min)))) : (math_min((min), math_max((v), (max)))))
#endif

#endif
165 changes: 165 additions & 0 deletions src/effects/effect.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
#include <QtDebug>

#include "effects/effect.h"
#include "effects/effectprocessor.h"
#include "effects/effectsmanager.h"
#include "engine/effects/engineeffectchain.h"
#include "engine/effects/engineeffect.h"
#include "xmlparse.h"

Effect::Effect(QObject* pParent, EffectsManager* pEffectsManager,
const EffectManifest& manifest,
EffectInstantiatorPointer pInstantiator)
: QObject(pParent),
m_pEffectsManager(pEffectsManager),
m_manifest(manifest),
m_pEngineEffect(new EngineEffect(manifest,
pEffectsManager->registeredGroups(),
pInstantiator)),
m_bAddedToEngine(false),
m_bEnabled(true) {
foreach (const EffectManifestParameter& parameter, m_manifest.parameters()) {
EffectParameter* pParameter = new EffectParameter(
this, pEffectsManager, m_parameters.size(), parameter);
m_parameters.append(pParameter);
if (m_parametersById.contains(parameter.id())) {
qDebug() << debugString() << "WARNING: Loaded EffectManifest that had parameters with duplicate IDs. Dropping one of them.";
}
m_parametersById[parameter.id()] = pParameter;
}
}

Effect::~Effect() {
qDebug() << debugString() << "destroyed";
m_parametersById.clear();
for (int i = 0; i < m_parameters.size(); ++i) {
EffectParameter* pParameter = m_parameters.at(i);
m_parameters[i] = NULL;
delete pParameter;
}
}

void Effect::addToEngine(EngineEffectChain* pChain, int iIndex) {
EffectsRequest* request = new EffectsRequest();
request->type = EffectsRequest::ADD_EFFECT_TO_CHAIN;
request->pTargetChain = pChain;
request->AddEffectToChain.pEffect = m_pEngineEffect;
request->AddEffectToChain.iIndex = iIndex;
m_pEffectsManager->writeRequest(request);
m_bAddedToEngine = true;
foreach (EffectParameter* pParameter, m_parameters) {
pParameter->addToEngine();
}
}

void Effect::removeFromEngine(EngineEffectChain* pChain, int iIndex) {
EffectsRequest* request = new EffectsRequest();
request->type = EffectsRequest::REMOVE_EFFECT_FROM_CHAIN;
request->pTargetChain = pChain;
request->RemoveEffectFromChain.pEffect = m_pEngineEffect;
request->RemoveEffectFromChain.iIndex = iIndex;
m_pEffectsManager->writeRequest(request);
m_bAddedToEngine = false;
foreach (EffectParameter* pParameter, m_parameters) {
pParameter->removeFromEngine();
}
}

void Effect::updateEngineState() {
if (!m_bAddedToEngine) {
return;
}
sendParameterUpdate();
foreach (EffectParameter* pParameter, m_parameters) {
pParameter->updateEngineState();
}
}

EngineEffect* Effect::getEngineEffect() {
return m_pEngineEffect;
}

const EffectManifest& Effect::getManifest() const {
return m_manifest;
}

void Effect::setEnabled(bool enabled) {
if (enabled != m_bEnabled) {
m_bEnabled = enabled;
updateEngineState();
emit(enabledChanged(m_bEnabled));
}
}

bool Effect::enabled() const {
return m_bEnabled;
}

void Effect::sendParameterUpdate() {
if (!m_bAddedToEngine) {
return;
}
EffectsRequest* pRequest = new EffectsRequest();
pRequest->type = EffectsRequest::SET_EFFECT_PARAMETERS;
pRequest->pTargetEffect = m_pEngineEffect;
pRequest->SetEffectParameters.enabled = m_bEnabled;
m_pEffectsManager->writeRequest(pRequest);
}

unsigned int Effect::numParameters() const {
return m_parameters.size();
}

void Effect::onChainParameterChanged(double chainParameter) {
foreach (EffectParameter* pParameter, m_parameters) {
pParameter->onChainParameterChanged(chainParameter);
}
}

EffectParameter* Effect::getParameterById(const QString& id) const {
EffectParameter* pParameter = m_parametersById.value(id, NULL);
if (pParameter == NULL) {
qDebug() << debugString() << "getParameterById"
<< "WARNING: parameter for id does not exist:" << id;
}
return pParameter;
}

EffectParameter* Effect::getParameter(unsigned int parameterNumber) {
EffectParameter* pParameter = m_parameters.value(parameterNumber, NULL);
if (pParameter == NULL) {
qDebug() << debugString() << "WARNING: Invalid parameter index.";
}
return pParameter;
}

QDomElement Effect::toXML(QDomDocument* doc) const {
QDomElement element = doc->createElement("Effect");
XmlParse::addElement(*doc, element, "Id", m_manifest.id());
XmlParse::addElement(*doc, element, "Version", m_manifest.version());

QDomElement parameters = doc->createElement("Parameters");
foreach (EffectParameter* pParameter, m_parameters) {
const EffectManifestParameter& parameterManifest =
pParameter->manifest();
QDomElement parameter = doc->createElement("Parameter");
XmlParse::addElement(*doc, parameter, "Id", parameterManifest.id());
// TODO(rryan): Do smarter QVariant formatting?
XmlParse::addElement(*doc, parameter, "Value",
pParameter->getValue().toString());
// TODO(rryan): Output link state, etc.
parameters.appendChild(parameter);
}
element.appendChild(parameters);

return element;
}

// static
EffectPointer Effect::fromXML(EffectsManager* pEffectsManager,
const QDomElement& element) {
QString effectId = XmlParse::selectNodeQString(element, "Id");
EffectPointer pEffect = pEffectsManager->instantiateEffect(effectId);
// TODO(rryan): Load parameter values / etc. from element.
return pEffect;
}
75 changes: 75 additions & 0 deletions src/effects/effect.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#ifndef EFFECT_H
#define EFFECT_H

#include <QSharedPointer>
#include <QDomDocument>

#include "defs.h"
#include "util.h"
#include "effects/effectmanifest.h"
#include "effects/effectparameter.h"
#include "effects/effectinstantiator.h"

class EffectProcessor;
class EngineEffectChain;
class EngineEffect;
class EffectsManager;

class Effect;
typedef QSharedPointer<Effect> EffectPointer;

// The Effect class is the main-thread representation of an instantiation of an
// effect. This class is NOT thread safe and must only be used by the main
// thread. The getEngineEffect() method can be used to get a pointer to the
// Engine-thread representation of the effect.
class Effect : public QObject {
Q_OBJECT
public:
Effect(QObject* pParent, EffectsManager* pEffectsManager,
const EffectManifest& manifest,
EffectInstantiatorPointer pInstantiator);
virtual ~Effect();

const EffectManifest& getManifest() const;

unsigned int numParameters() const;
EffectParameter* getParameter(unsigned int parameterNumber);
EffectParameter* getParameterById(const QString& id) const;

void setEnabled(bool enabled);
bool enabled() const;

EngineEffect* getEngineEffect();

void onChainParameterChanged(double chainParameter);

void addToEngine(EngineEffectChain* pChain, int iIndex);
void removeFromEngine(EngineEffectChain* pChain, int iIndex);
void updateEngineState();

QDomElement toXML(QDomDocument* doc) const;
static EffectPointer fromXML(EffectsManager* pEffectsManager,
const QDomElement& element);

signals:
void enabledChanged(bool enabled);

private:
QString debugString() const {
return QString("Effect(%1)").arg(m_manifest.name());
}

void sendParameterUpdate();

EffectsManager* m_pEffectsManager;
EffectManifest m_manifest;
EngineEffect* m_pEngineEffect;
bool m_bAddedToEngine;
bool m_bEnabled;
QList<EffectParameter*> m_parameters;
QMap<QString, EffectParameter*> m_parametersById;

DISALLOW_COPY_AND_ASSIGN(Effect);
};

#endif /* EFFECT_H */
Loading