Extending the Effects Engine
Nicu Badescu
Email: [email protected]
IRC: badescunicu
Timezone: GMT +2
Nicu Badescu
Email: [email protected]
IRC: badescunicu
Timezone: GMT +2
If you've not run a rack before, you might have some questions about how exactly it all works, so here, we’ve outlined how to take your first steps in building one. Signal chain. In terms of position in your signal chain, most people run rack units either in the effects loop of their amp, or after it. Oct 28, 2018 50+ videos Play all Mix - How To Connect Any External Effect Pedal Or Multi Effects Rack To Any Mixer YouTube Aux and Groups Explained in less than 11 Minutes.
I. Overview
Mixxx is widely used nowadays among both amateur and professional DJs. Growing in popularity raises the bar when it comes down to quality and users' expectations. We must keep up with our competitors in terms of features and performance. Currently, Mixxx lacks a couple of effects such as Brake, Phaser, Gater or Vocal Cut whereas other major DJ Mixing products already provide similar effects. Consequently, I find this project very important for improving Mixxx’s visibility and keeping it in line with the competition.
II. High Level Design and Implementation Details
This project consists of two parts:
1) EQ Effect:
- replace the current static EQ signal path with an additional EffectChain containing the EQ effect;
- it is the perfect way to learn the effect framework and its interaction with CO;
- the target of this part is removing this line[1] by moving the logic inside EngineEffectsManager::process method;
- the goal of this EQ Effect is allowing the user to disable the EQ as well as giving the possibility to replace the EQ with other similar effects or other advanced implementations.
Steps to follow:
- create a new EffectChain which contains the current EQ (EQ which is going to be moved into the effect domain like Ryan is suggesting in the Bug Description [2]) and a filter effect;
- turn the Bitcrusher into a Butterworth EQ by copying the Butterworth signal processing to the frame created by the Bitcrusher;
- create a new EffectChain containing EQ EffectUnits;
- connect the current EQ controls to the new effect units;
2) Ability to load LV2 plugins into Mixxx
III) Tentative Timeline:
W1 May 19th - May 25th:
W2 May 26th - June 1st:
- Final Plan how to move EQ into the effect domain
- Fix https://bugs.launchpad.net/mixxx/+bug/1209294
W3 June 2nd - June 8th:
- Implement switch type parameters for EQ “kill” buttons
W4 June 9th - June 15th
- Continue to work on switch type parameters for EQ “kill” buttons
- test and debug
W5 June 16th - June 22nd:
- Final Plan how to move Brake into the effect domain [postponed]
- start working on the EQ Effect Rack (not configurable from preferences)
- June 19: modify a skin (Deere or Daniel’s Shade) to display that Rack
- June 20: add 4 EQ Effects to the newly created Rack
W6 June 23rd - June 29th (Mid Term evaluation):
- Turn the Bitcrusher into a Brake effect [postponed]
- Finish the EQ Effect Rack (configure it from preferences)
- June 22-23: modify the Rack to use legacy controls (better: allow aliases for controls)
- June 24: Allow the Rack EQs to be changed from preferences (LigthweightEQ or EQDefault)
- In dlgpref.cpp: Connect the button responsible for changing the EQ to a slot which calls a method on m_pEffectsManager (we have to store a pointer to the EffectsManager). This method is changing the effect which is loaded onto the EffectUnit.
- Store a pointer to the EQ Rack and connect signals for changing the effect to a slot of that rack [done]
- Dynamically create a drop down list of available effects to put on the EQRack [done]
- Use a QSignalMapper to avoid duplicate code for slots [done in a simpler way]
- Dynamic creation of drop down lists based on [Master],num_decks [done by adding a drop down list whenever a new deck is added]
- Add labels next to the drop down lists (make them look pretty) [done]
- Connect “[Master],num_decks” control to a slot inside dlgprefeq.cpp [done]
- Store the user's configuration of the EQ Rack[done]
W7 June 30th - July 6th:
W8 July 7th - July 13th:
- Final Plan how to move LV2 effect into the effect domain
W9 July 14th - July 20th:
Effects Rack Case
- We will be able to obtain an EffectManifest from a LilvPlugin*
w10 July 21st - July 27th:
Guitar Effects Rack
- We will be able to see the available LV2 plug ins and cycle through them inside an EffectRack (using a dummy LV2 Effect wrapper class which is playing silence)
W11 July 28th - August 3rd:
W12 August 4th - August 10th:
- Run Calf Flanger inside Mixxx using the newly added LV2Backend
- We will be able to actually use an LV2 plug in such as Calf Flanger or the knockout effect
W13 August 11th - August 17th (Final evaluation):
Information sources for LV2 support:
http://wiki.audacityteam.org/wiki/LV2_Support
http://libregraphicsworld.org/blog/entry/lv2-1-0-released-what-is-next
http://libregraphicsworld.org/blog/entry/lv2-from-developers-standpoint
http://gdam.ffem.org/ladspa-doc/ladspa-4.html
http://www.nongnu.org/ll-plugins/lv2pftci/
https://code.google.com/p/audacity/source/browse/audacity-src/trunk/src/effects/lv2/
http://lac.linuxaudio.org/2014/download/lac2014_lv2_atoms_presentation.pdf
http://dev.drobilla.net/browser/trunk/jalv/src/jalv.c
http://wiki.audacityteam.org/wiki/LV2_Support
http://libregraphicsworld.org/blog/entry/lv2-1-0-released-what-is-next
http://libregraphicsworld.org/blog/entry/lv2-from-developers-standpoint
http://gdam.ffem.org/ladspa-doc/ladspa-4.html
http://www.nongnu.org/ll-plugins/lv2pftci/
https://code.google.com/p/audacity/source/browse/audacity-src/trunk/src/effects/lv2/
http://lac.linuxaudio.org/2014/download/lac2014_lv2_atoms_presentation.pdf
http://dev.drobilla.net/browser/trunk/jalv/src/jalv.c
Related wiki pages:
EQ Effect Rack
LV2 Support
EQ Effect Rack
LV2 Support
IV. About me
My name is Nicu Bădescu (badescunicu on IRC) and I am a sophomore at Politehnica University of Bucharest, progressing towards a B. Sc. in Computer Science. I am an ardent supporter of open source and volunteering. I have been a member of ROSEdu[3] (Romanian Open Source Education) since May 2013.
I have experience in C, C++, Java and Python. I have a basic understanding of Qt and I am confident that learning how to be efficient in this framework would not be a problem. Last semester I developed a simple virtual catalog using Swing, so I know the main ideas behind of a GUI.
I am very passionate about contributing to open source projects because I love the idea that my code is going to be used by a lot of people.
Last summer I worked as a Django developer for World of USO, which is an open source browser-based game for our faculty’s freshmen. You can see my commits here[4]. I have also made a small contribution to Mozilla[5]. I learned how important communication is within a community based project and also how to use vital tools for contributing to a project, such as git. I am comfortable using the irc, mailing lists or hangouts for communicating with my mentor.
Regarding Mixxx, I’ve been a contributor since October 2013 and I have successfully closed the following issues / features with the help from the community (which is, by the way, awesome :D ):
- Ignore preview cloumn when exporting CSV file[6]
- Replace underscores with spaces when parsing track file name[7]
- Drag and Drop M3U/PLS into sidebar or main track table[8]
- Remember last playlist directory[10]
- Visualize distance to a key when pitch shifting[11]
Taking part in GSoC 2014 for Mixxx is a great opportunity and a dream come true for me. Working feels like playing because Mixxx lies between two of my passions: computer programming and electronic music.
Weekly reports:
Links:
[1] - https://github.com/mixxxdj/mixxx/blob/master/src/engine/enginedeck.cpp#L103
[2] - https://bugs.launchpad.net/mixxx/+bug/1299031
[3] - http://www.rosedu.org/
[4] - https://github.com/rosedu/wouso/commits?author=badescunicu
[5] - https://bugzilla.mozilla.org/show_bug.cgi?id=965347
[6] - https://bugs.launchpad.net/mixxx/+bug/1181172
[7] - https://bugs.launchpad.net/mixxx/+bug/1254534
[8] - https://bugs.launchpad.net/mixxx/+bug/743850
[9] - https://bugs.launchpad.net/mixxx/+bug/1017034
[10] - https://bugs.launchpad.net/mixxx/+bug/1178782
[11] - https://github.com/mixxxdj/mixxx/pull/215
[1] - https://github.com/mixxxdj/mixxx/blob/master/src/engine/enginedeck.cpp#L103
[2] - https://bugs.launchpad.net/mixxx/+bug/1299031
[3] - http://www.rosedu.org/
[4] - https://github.com/rosedu/wouso/commits?author=badescunicu
[5] - https://bugzilla.mozilla.org/show_bug.cgi?id=965347
[6] - https://bugs.launchpad.net/mixxx/+bug/1181172
[7] - https://bugs.launchpad.net/mixxx/+bug/1254534
[8] - https://bugs.launchpad.net/mixxx/+bug/743850
[9] - https://bugs.launchpad.net/mixxx/+bug/1017034
[10] - https://bugs.launchpad.net/mixxx/+bug/1178782
[11] - https://github.com/mixxxdj/mixxx/pull/215
Translations of this page:
My proposal for GSOC 2017 is Microphone effects chain for Mixxx.Mixxx is the defacto standard in open source world for real time mixing music tracks. What it currentlylacks is a way to seamlessly integrate microphone input processing, allowing for the dj/presenter to tune thevoice track over mixed music. This would be an ideal solution for internet radio live broadcasting.In professional setups, a chain of effects is used in order to tune the speech signal with the rest of the mix,with a typical chain of a noise gate, noise suppressor, echo cancellation, ducker. What this project aims tofulfill is the development and integration of this effects chain into Mixxx.Mixxx has already an effects chain for the music mix, with selectable input source. In the same manner, themic input effect signal path would be developed and placed underneath the music effects, as a UI elementthat will be toggled from a toggle button on bottom left of the screen, in the same way that the music effectsviews are toggled. This means that as an add on this feature will be unobtrusive and can easily integratewith the rest of the existing UI elements.A mockup of the proposed speech processing chain is illustrated in the following figure.
The whole development will be done in C++ as Qt framework is used for Mixxx development and thereare also many existing audio processing libraries in C++. Existing open source projects that can be used for reference are the speexdsp library which implements speech processing components for speex codec, and WebRTC AEC library.