-
Notifications
You must be signed in to change notification settings - Fork 0
Mixxx Macros
By Janek Fischer (xerus/xerus2000)
There are moves through which a DJ expresses himself - and there are
many other, sometimes tedious tasks that need to be done as groundwork.
Instead of having to juggle beatmatching, effects, cues and sliders all
at once, a DJ should be able to rely on his tools so he can focus on
what really matters. For some, beatmatching and keeping all tracks in
sync is an art in itself - for others, including me, it is something
happily delegated to the software - that is why there is a sync
function.
But sometimes, more sophisticated automation can be helpful - maybe you
want to skip a breakdown, shuffle around verses, loop an intro a
specific way or deliberately repeat certain parts. Handling that while
messing with effects and getting the next track ready can be tricky;
that is where Mixxx Macros come in. With this feature implemented, it
will be possible to record specific moves while playing a track and
store them in a rack, to be used when it gets hot.
See Mixxx Macros Requirements and Macros for formal specifications. Below are only notes.
- database table to store Macros
- recording buttons (deck-independent)
- send info on cue jumps (but not on scrubbing)
- macro list for each deck with name, loop option, enable option
Adapted from https://m.facebook.com/story.php?story_fbid=10152750292038764&id=11864088763
- Making edits
- basic rearranging of tracks to create things like intros and outros, extend breaks, shorten or lengthen tracks, swap phrases
- create "clean"/censored version of a track
- create transition to another track e.g. double time version
- create new beats from cue point drumming
- Live-looping of cue point drumming or tone play - being able to drum out a pattern using the cue points in a track and then seamlessly loop it at the touch of a button.
-> You never need the Macro recording controls and the audio recording controls at the same time, so maybe they can be remapped.
A Macro needs to have a name and id, needs to be coupled to a track and consists of an array of actions.
Each actions has some data and a type, the essential ones (as present in Serato Flip) being censor and jump. Loop is also a consideration, but bears some more questions: Should it use the same loop system the user uses? If not, aren't jumps sufficient?
A big question is whether each action has its own start-point, or whether there is a "wait" action that waits for a cue or timestamp to occur. The latter may make sense in scripting, since it allows to easily chain actions, but when recording there can hardly be a case where two actions wouldn't be separated by a wait action. And if that is the case, each action might as well have its own start-point - which might be a hotcue or a timestamp, as outlined below.
- timestamps: used by Serato Flip, persistent, but hardly editable; can break when track offset changes (when music file is swapped out)
- cues: can be moved, but that could also accidentally mess up a flip and cues can't currently be shifted; add confirmation dialog similar to when deleting a track in a playlist to avoid breaking things -> but then cue needs to be aware of the Macros it's used in
- how relevant is editing afterwards, how can we facilitate it?
- Serato Flip "just
works"
- Flip is locked after recording, not blocking any hotcues or any chance of breakage
"Macros" sounds like something to be triggered manually at any time - the point of flips is that they usually happen automatically.
Suggestions: Spin, Routines, Twist, MicroFlow, Mow
"Routines" sounds nice, is descriptive and well-received
-
we don't need to sell it
either.
It sounds a little bland though, and doesn't capture the whole idea of using it to create non-destructive edits of a track. It also doesn't blend well with other terms, such as "Routine Mode" (for recording a routine).
- Recording could be implemented using data emitted from the engine on cue jumps (not a signal, realtime!)
- Use developer window/shortcuts for debugging controls, implement them first and then look at skins.
- Macros are bound to one track - beware of scope creep
- Should be usable from a controller - keep number of controls at minimum
- Might activate actual loops - user can then disable it
- Reuse recording controls
CW 21: Establish Timeline, work on open PRs, initial survey &
discussion
CW 22: Survey existing Serato Flip uses & collect input
June
CW 23: Work out details of the format
CW 24: Start implementation of data structures, controls
CW 25: Create recording infrastructure
CW 26 (blocked)
Deliverable: Format specification with examples
July
CW 27: Design controls & integrate into a skin
CW 28: Tie it all together
CW 29: Buffer
CW 30: Buffer
Deliverable: Implemented controls with mapping to a skin and controller, working recording system
August
CW 31: Refine UX & Integrate into other Skins
CW 32: Enable Import from Serato & explore possibilities for sharing
CW 33: Buffer
CW 34: Buffer
Deliverable: Integration with other tools (Serato Flip, Export/Import, Edit Dialog, Auto DJ?)
I tend to branch out to other open source contributions when I want to
work on something - I am almost unable to idle ;)
Evidence of that are regular reports on GitHub:
https://github.com/search?q=xerus2000&s=created&type=Issues
However, this can also lead to delays in what I was supposed to work on.
I currently use https://notion.so to take notes and may link some pages here as proof of work - but these are personal working areas and not optimized for general understanding. I will always incorporate results into this wiki page when appropriate.
- Work on general PRs: https://github.com/search?q=author%3Axerus2000+user%3Amixxxdj+updated%3A2020-05
- Code Style discussions (Zulip & PRs)
- Planning & initial Research: https://www.notion.so/xerus/Mixxx-Macros-GSoC-Research-5ab430eb8f0a41efafc075c220029560
- revisited & summarized Zulip discussion in wiki page (timeline, details)
- sifted through reddit (https://www.reddit.com/search?q=serato%20flip) - summary for now in Notion
- organized community call
- document data format ideas
- create & send out survey
- finish remaining open PRs
Mo:
- Wiki Improvements
- Get more acquainted with code
- Revisit reddit post
- Start writing project-related code
Tu: Specify required controls & format in Macros page
We: Architecture discussion & add user stories
Th: Investigation of Mixxx code
Fr:
- Playing around with MacroManager
- More architecture considerations
- Trying to understand Controls, Signals & Slots
Sa:
- Connect a control
Mo:
Thu:
Fr:
Mo:
Tu:
We:
Thu:
Fr:
Mixxx is a free and open-source DJ software.
Manual
Hardware Compatibility
Reporting Bugs
Getting Involved
Contribution Guidelines
Coding Guidelines
Using Git
Developer Guide
Contributing Mappings
Mixxx Controls
MIDI Scripting
Components JS