Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
3464 lines (2413 sloc)
84.4 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TODO: | |
| - pad "8" on rolls page is still not not turned on | |
| - Beat FX: (golden lady italy) "memory"+beat Arrow - changes selected effect in FX unit4 | |
| idea for CMDR: | |
| - reports: collapse on purpose: | |
| - remove device page to see just commands | |
| - replace command number (hotcue 1 type) with X to collapse on purpose | |
| - remove all conditions command | |
| for v7.5 | |
| - have nothing going out at first step of installation | |
| - 4 beats / 8 beats default loop | |
| - backspin: already found it it’s with the m2 modifier put it the sensitivity on 20 %now the backspin is much longer | |
| - implement loop midi: https://www.native-instruments.com/forum/threads/mappable-traktor-lfo-beatsynced.167529/ | |
| - check LINE selector for volume turn off safety feature (beatFX is ok) | |
| - move backwards loop to pad modes - remove lag | |
| - loops active long press | |
| - move jog adjust to its own constant state (like cdjs) | |
| ----------------- | |
| rekordbox mode: | |
| go to start of track: shift+cue | |
| navigation features just like rekordbox | |
| quick search (holding search) | |
| quick search (search+jog turn) | |
| volume zero - by some reason it still did not read the fader position at lower | |
| move needle with pitch bend message as well. | |
| documentation: | |
| quick search: expain how it is done | |
| move to front: explain how it is done | |
| how to change the clock value | |
| Steps to release a new version: | |
| ------------------------------- | |
| - pdfs: regenerate all pdfs | |
| - bome settings: re-export, remove paths and project | |
| - bome: DISABLE dev mode | |
| - traktor: check 4x default mixerFX <<<<<<<<<<<<< | |
| - traktor: enable HC-4500 | |
| - traktor: select 2-decks classic (smaller screen) | |
| - cmdr: check encoder relative | |
| ------ | |
| - mac version: copy paste TSIs by hand in cmdr | |
| - mac version: set mac bit | |
| performance improvement - graphs: | |
| --------------------------------- | |
| The sequence of actions is as follows: | |
| a) play deck A normally. | |
| - Outputs are needle turning and the mixer "VU meter" | |
| b) kill gain to remove the "VU meter". Deck is stll playing | |
| c) do some basic scratch | |
| Blink timer Performance: | |
| ------------------------ | |
| blink clock -> t_blink (coalesced = 1) -> t_blink1 | |
| t_blink -> led sync -> solid on -> if coalesced -> exit | |
| pressed button -> calc () -> cascade (coalescend = 0 ) -> t_blink1 | |
| "xx": 0 = by normal; 1 = by blinking (are we trying to blink?) | |
| "hm"/1: 0 = woke by timer; 1 = woke by button (did we trigger by button) | |
| "ww": blink scaled delay | |
| "hn"/1 - blink slowdown master (5ms | |
| configuration user feedback: | |
| ---------------------------- | |
| - tempo emarger - master tempo doesnt blink | |
| - auto layout - impossible | |
| - ttfx - play doesnt blink | |
| - superknobs - no feedback | |
| - sync aid - yes | |
| - external cue - yes | |
| ---------- | |
| Fake array variables (per channel): | |
| ABCD EFGH IJKL _M_ _N_ OPQR STUV XYZW _0_ 1234 5678 _9_ | |
| normal loops, again: | |
| -------------------- | |
| pads: | |
| - loop set+size | |
| - if no loop -> set at that point | |
| - if loop: | |
| - same size -> turn OFF (even if we changed the edges!) | |
| - new size: chnge out point | |
| direct command: | |
| - loop size selector: | |
| - if same size, does not change anything | |
| - loop set - disables loop if we are there! | |
| Dual deck mode: | |
| --------------- | |
| "ln"/1 - config: dual deck | |
| 0: disabled | |
| 1: only scratch | |
| 2: +pads | |
| 3: +mixer as well | |
| CDJ-3000 loops: | |
| -------------- | |
| https://www.native-instruments.com/forum/threads/support-odd-numbered-loops-for-polyrhythms-like-the-cdj-3000.425399/ | |
| DESIRED OUTCOME: | |
| 1: 3/4 ; 2: 1 ; 3: 1.5 ; 4: 3; | |
| 5: 5 ; 6: 6 ; 7: 7 ; 8: 9 | |
| METHOD: | |
| 1: 1-1/4 ; 2: 1 ; 3: 2-1/2 ; 4: 4-1 | |
| 5: 4+1 ; 6: 8-2 ; 7: 8-1 ; 8: 8+1 | |
| IN move size: CC "71" | |
| (0 = xfine ; 1= fine; 2 = 1/16; 3=1/8; | |
| 4=1/4; 5=1/2; 6=1; 7=2; 8=4; 9=8; 10=16;11=32; 12=loop) | |
| fixed: note 88, no shift | |
| 2 1 1/2 1/4 | |
| 4 8 16 32 | |
| variables: | |
| "g5"/4 - polyrhythms - current selection (0: none; 1= 3/4; 2=1; .... | |
| TSI side: | |
| h0 = 1..4 | |
| ------ | |
| TSI commands: | |
| 92: POLY - MOVE SIZE (IN, direct) | |
| 113: POLY - Loop size + Set DIRECT | |
| 114: POLY - Loop size selector DIRECT | |
| 115: POLY - Loop active ON/OFF | |
| 116: FREE | |
| operations: | |
| cancel: | |
| loop active: 115 | |
| Set poly: | |
| a) set 32 beats (ch1) | |
| b) set base beats (ch1) | |
| c) set move loop out (ch8 = pad page) | |
| d) set move size (ch1) | |
| e) do it (ch8) | |
| TSI settings: | |
| ------------- | |
| source: TP3 manual | |
| - Keyboard Mappings: | |
| - Export / import settings for keyboard mappings as configured in Preferences Controller Manager. | |
| - Controller Mappings: | |
| - Export / import settings for Controller Mappings as configured in Preferences > Controller Manager. | |
| - GUI Layout: | |
| - Export / import settings for GUI layouts as set in Preferences > Layout Manager. | |
| - 2 decks, advanced mode | |
| - deck header | |
| - mixer layout | |
| - File Load- And Write- paths: | |
| - Export / import settings for file directories as configured in Preferences > File Management > Directories. | |
| - Favorites: | |
| - Export / import favorite browser details as configured in Preferences > Browser Details. | |
| - preparation playlist | |
| - Broadcasting: | |
| - Export / import Proxy, Server and Metadata settings from Preferences > Broadcasting. | |
| - Audio Device Settings: | |
| - Export / import audio setup device details from Preferences > Audio Setup. | |
| - routing | |
| - external mixing mode | |
| - MIDI Clock settings: | |
| - Export / import MIDI clock setting from Preferences > MIDI Clock. | |
| - Effect Settings: | |
| - Export / import effects setting including | |
| - FX Unit routing, | |
| - FX Unit mode and | |
| - FX pre-selection as configured in Preferences > Effects. | |
| - MixerFX | |
| - Other Preferences and settings: | |
| - Export / import all other preference and settings such as Global settings for example, | |
| - Tooltips on or off, or | |
| - if TRAKTOR starts in Fullscreen mode etc. | |
| - Browser columns | |
| - sync mode: beatsync | |
| - only on-air can be tempo master | |
| - deck header fields | |
| - remix decks (all set) | |
| What files and folders on the traktor installtion: | |
| -------------------------------------------------- | |
| https://support.native-instruments.com/hc/en-us/articles/210274225-What-Files-and-Folders-does-TRAKTOR-Install-on-my-System- | |
| DEBUG: keyboard shortcuts: | |
| -------------------------- | |
| ctrl+shift+A - Re-init ALL BOME variabes | |
| ctrl+shift+Z - stop clock | |
| ctrl+shift+X - start clock - very fast | |
| ctrl+shift+C - start clock - slow | |
| ctrl+shift+V - start clock - very slow | |
| ctrl+shift+F4 - Bome debug | |
| DEBUG: DDJ buttons: | |
| ------------------- | |
| PFL monitor cue: | |
| 3: start blinking | |
| 1: start needle | |
| 2: stop clocks | |
| 4: do a reset | |
| BOME variables: | |
| --------------- | |
| Abecedario: https://i.pinimg.com/originals/d0/ff/a6/d0ffa62f47ddae6abc349b9941ba14f9.png | |
| INPUT: | |
| "QQ" / "OO" / "PP" | |
| OUTPUT: | |
| "XX" / "UU" / "PP" | |
| BOME Local: | |
| "oo" | |
| "pp" | |
| "qq" | |
| "rr" | |
| "ss" | |
| "tt" | |
| "uu" | |
| "vv" | |
| "ww" | |
| "xx" | |
| BOME Global: | |
| "g0"-"g9" | |
| "ha"-"h9" | |
| "ia"-"i9" | |
| "ja"-"j9" | |
| "ka"-"k9" | |
| "la"-"l9" | |
| "ma"-"m9" | |
| "na"-"n9" | |
| "ya"-"y9" | |
| "za"-"z9" | |
| Fake array variables (per channel): | |
| ABCD EFGH IJKL _M_ _N_ OPQR STUV XYZW _0_ 1234 5678 _9_ | |
| note: XYWZ is not on right sequence!!! Z = deck 4. | |
| 1234 | |
| 5678 | |
| ABCD | |
| EFGH | |
| IJLM | |
| OPQR | |
| STUV | |
| XYZW <<<< note! "W" is not in sequence | |
| BOME Global variables (do not follow array notation): | |
| HZ / HY / ... | |
| Information Sources: | |
| -------------------- | |
| - BOME implementation notes.txt - This text file | |
| - FAQ: both user FAQ and Technical FAQ | |
| - DJ tech tools technical discussion: http://forum.djtechtools.com/showthread.php?t=96024 | |
| Correct Initialization Sequence: | |
| -------------------------------- | |
| - Correct Initialization Sequence: | |
| - First DDJ device | |
| - then BOME | |
| - then Traktor | |
| - then CMDR (if needed) | |
| - Restarting | |
| - you can now close and reopen traktor at will. | |
| - do not close either BOME or CMDR (if it is running) | |
| - Any Problems? | |
| - check "port closed" on BOME log window (click "outgoing") | |
| - press shift+quantize (=wake up) to force a "send monitor state" | |
| Notes from VDJ DDJ-1000 mapping: | |
| -------------------------------- | |
| padFX: | |
| pale color. pressing color = bright that color | |
| beatFX: | |
| channel and master = software effects | |
| ON/OFF = per effect, changes to OFF when changing | |
| small screen is updated to VDJ effects | |
| supercombo beatmasher: https://blog.native-instruments.com/how-to-map-instant-effects-in-traktor/ | |
| STANDARD FOR TEMP VARIABLES: | |
| ---------------------------- | |
| Basics: | |
| RAW: RR OO PP | |
| NOTES: QQ OO PP | |
| CC: QQ OO PP | |
| Output: SAME | |
| Meanings: | |
| RR = first byte | |
| TT = note (9) / CC (b) | |
| QQ = channel | |
| OO = note | |
| PP = vel | |
| DEMO deck A only: | |
| ----------------- | |
| IN deck b..c: | |
| page 1: m4=7 | |
| page 2: m8=7 | |
| BOME Project structure: | |
| ----------------------- | |
| [MIDI.routes] | |
| In0=From DDJ | |
| Out0=To Traktor | |
| In1=From Traktor | |
| Out1=To DDJ | |
| [Preset.0] | |
| Name=Blend Demo | |
| Active=1 | |
| Name0=See MIDI mesages | |
| Incoming0=MID2MIDA0001000C From Traktor qq oo pp | |
| Outgoing0=None | |
| Options0=Actv01Stop00OutO01StMa00000001 oo=oo | |
| [Project] | |
| DefaultInPorts=MIDA00020008From DDJ000CFrom Traktor | |
| DefaultOutPorts=MIDA0002000ATo Traktor0006To DDJ | |
| Traktor seetings comparison: | |
| ------------------------------ | |
| differneces: | |
| - audo device | |
| - IN/OUT routing | |
| - recording | |
| - controller manager is OK (use BMT1 device) | |
| BOME Settings structure: | |
| ------------------------ | |
| Comparison to macOS: | |
| - alias are the same | |
| - devices are the same | |
| needs to be removed by hand: | |
| Section current: - CurrentProject, SettingsFilename, LastProjectDir, MRUlist | |
| Section MRUList | |
| Section "presets" (these are a lot!) | |
| Crucial settings: | |
| [Current] | |
| AutoStart=Y | |
| ShowSplashScreen=N | |
| StartMinimized=Y | |
| FirstTime=0 | |
| OneInstance=Y | |
| DoNotShowLoggerWarning=Y | |
| DontAskForClose=Y | |
| DontAskForDeletePreset=Y | |
| DontAskForDeleteTranslator=Y | |
| DontShowSaveInfo=Y | |
| DontShowSaveNoPortsWarning=Y | |
| VirtualMidiPorts=Y | |
| VirtualMidiPortsCount=2 | |
| VirtualMidiShortNames=N | |
| [LogWindow] | |
| LogMidiOut=N | |
| LogOut=N | |
| LogIn=N | |
| LogRules=N | |
| LogMidiIn=N | |
| LoggerStarted=Y | |
| [MIDI.routes] | |
| (EMPTY) ----> These are redefined by the project. But not the aliases! | |
| [MIDI.alias] | |
| Name0=From Traktor | |
| Device0=1:Bome MIDI Translator 1 Virtual In | |
| Name1=To DDJ | |
| Device1=2:DDJ-1000 | |
| [MIDI.in] | |
| Name0=Bome MIDI Translator 1 Virtual In | |
| Options0=FTTF44494D42T | |
| Name1=DDJ-1000 | |
| Options1=FTFF4944494DT | |
| ... | |
| Vinyl stop implementation: | |
| -------------------------- | |
| commands are: | |
| - tempo bend [hold] UP, M1=0 | |
| - toggle M1=0 to M1-5 | |
| sequence is: | |
| - press B4 | |
| - tempo bend up | |
| - m1=5 | |
| - release B4 | |
| - none | |
| - press B4 | |
| - m1=0 | |
| - release B4 | |
| - tempo bend release | |
| Modifiers TSI page 1: VINYL BREAK, JOG FX, CENSOR OUT, ROLL, GRID ADJUST, BROWSER, SX2 | |
| --------------------- | |
| M1: BROWSER CONTROL: (all decks) | |
| 0: nothing pressed | |
| 1-4: deck A-D SELECTED <<<<< MEMORY shift2 | |
| this is used for waveform zoom. this is because browser has no deck number! | |
| note: use M1=1 == deck A, M1=2 == deck B, etc. Assumes dedicated Memory button! | |
| 5: vinyl stop in progress (REQUIRES PROGRESSIVE TEMPO BEND = extra settings) | |
| 6: grid adjust down | slide down (ANY OF THEM) | |
| (this is specified on M2 = 5=adjust / 6=slide) | |
| 7: doing PREVIEW PLAYER | |
| M2: JOG CONTROL: (all decks): | |
| 0: SCRATCH enabled (HOT CUE mode) | |
| 1: Jog FX armed - touching the jog will still make scratch! | |
| 2: Jog FX is being touched | |
| 3: Loop adjust in progress <<<<< NEW | |
| 4: Memory/search pressed (for quick search) | |
| 5: Grid ADJUST pressed -> this cancels jogfx mode ch1..4 note F7 | |
| 6: Grid SLIDE pressed -> this cancels jogfx mode ch1..4 note E7 | |
| 7: __FREE__ | |
| XDJ-XZ case: this is used by reverse (to confirm?) | |
| M3: JOGFX SELECTION (SHARED BETWEEN ALL DECKS) | |
| 0: none | |
| 1-7: which jog FX | |
| M4: AJUST LOOP __IN PROGRESS__ (ALL DECKS) ---- TO DEPRECATE | |
| 0: nothing | |
| 1: Doing loop IN+OUT adjust | |
| 2: Doing loop OUT adjust | |
| M5: JOGFX/SLICER MODE: | |
| (what happens when we enter shift+mode8?) | |
| 0: jogFX | |
| 1: Slicer | |
| M6: SLICER MODE | |
| 0: mode1: 8 slices, 1/1 | |
| 1: mode2: 16 slices, first 1/2 <<<<< default for rekordbox | |
| 2: mode2: 16 slices, second 1/2 | |
| M7: GRID IN PROGRESS? <<<< can this be simplified. Because the jog commands have channel | |
| 0: no grid in progress | |
| 1-4: which deck A-D active + 2x grid | |
| M8: ECHO OUT FAVORITE | |
| (sequence is 3,1,2,0 ) | |
| selected by | |
| this is shared with play pause FX <<<<<<< why? | |
| 3: never ending echo | |
| 1: slow fade | |
| 2: quick fade | |
| 0: custom (this is cue 4) | |
| Modifiers TSI page 2: KEYBOARD, PAD FX, REMIX DECKS, MANUAL FX, TTFX, BeatFX, | |
| --------------------- | |
| M1: PADFX selected: which pad is being pressed (TO SHOW RED COLOR) | |
| 0 - none | |
| 1-7: which pad FX | |
| 8: not used | |
| M2: PADFX subpage: | |
| 0: one with 3x Gater | |
| 1: one with 2x delay | |
| 2: one with 1x filter pulse | |
| 3: Rolls page | |
| (note: this is overriden on decks 3&4) | |
| M3: KEYBOARD LEFT PAGE: red button (0: NONE; 1=ZERO;...7) | |
| (this is used for OUT only) | |
| M4: CURRENT PADMODE (FOR PADPAGE SHORTCUT) <<<< to deprecate? | |
| 0: HC | |
| 1: ROLL | |
| 2: SLICER | |
| 3: SAMPLER | |
| 4: other (=shift) | |
| M5: KEYBOARD RIGHT PAGE: red button (0: NONE; 1..=8 ) | |
| (this is used for OUT only) | |
| M6: KEY KEYBOARD MODE: | |
| 0: mode: CUP keyBOARD (pressing pad triggers CUP - same as rekordbox) | |
| 1: mode: CUE keyHOLD (press pad triggers CUE; release stops music) | |
| 2: mode: PLAY keySHIFT (music never stops - same as rekordbox) | |
| m7: remix decks - PATTERN RECODER TOGGLE | |
| 0: not running = OFF | |
| 1: running, not recording = SOLID | |
| 2: recording = BLINK | |
| 3: rec paused (holding a pad to change sample) = SOLID | |
| M8: SHIFT2 (=MEMORY BUTTON ) | |
| 0: off | |
| 1: memory pressed | |
| USB-A/USB-B/Line blocking: | |
| -------------------------- | |
| what the firmwre blocks: | |
| browser | |
| decks | |
| mixer VU meters | |
| not blocked: | |
| all mixer, cross fader | |
| deck select | |
| beatFX | |
| sampler volume | |
| channel 1..4: | |
| 85 = usbA | |
| 86 = line | |
| 87 = usbB | |
| variables: | |
| "ge"/4 USB/line selector | |
| "gi"/4 USB/line real USB | |
| "gs"/4 USB remember fader level | |
| Preview player dynamics: | |
| ------------------------ | |
| TSI page1: (no modifiers) | |
| - note F7 (hold) | |
| - CC 64 (seek) | |
| BOME: | |
| - fader deck 4 - "jr" -> blocks ch7 101 | |
| REMIX DECKS PATTERN RECORDER / STEMS: | |
| ------------------------------------- | |
| BOME side: | |
| page 1: | |
| first row: Punch 1, 2, 3, 4 | |
| second row: STEM modifier | |
| page 1, +SHIFT: | |
| first row: Mute slot1..4 | |
| second row: Delete slot1..4 | |
| page 2: | |
| first row: Swing | |
| second row: Pattern Lenght | |
| page 2, +SHIFT: | |
| first row: Keylock | |
| second row: OneShoot/Loop | |
| STEM MODIFIERS: ((GLOBAL) | |
| "n9"/1 - CONFIGURE STEMS: use hardware mic EQ to change stems) (0: enabled; : enabled) | |
| "n0"/1 - which DECK (0: none; 1: deck A; 2: deck B; 3: deck C; 4: deck D) | |
| "m9"/1 - which SLOT (0: slot1; 1: slot2; 2: slot3; 3: slot4) | |
| when the variable is not used, see "n0=0" | |
| samples: these are is sent directly to channel 8 or 10 | |
| "j0"/1 - deck select shortcut - remix decks | |
| SELECTED SAMPLE: (PER DECK) | |
| "m1"/4 - sequencer/stems (selected sample for LEFT, slot 1..4) | |
| "m5"/4 - sequencer/stems (selected sample for RIGHT, slot 1..4) | |
| traktor-side modifiers: | |
| m7: remix decks - PATTERN RECODER TOGGLE | |
| 0: not running = OFF | |
| 1: running, not recording = SOLID | |
| 2: recording = BLINK | |
| 3: rec paused (holding a pad to change sample) = SOLID | |
| MIDI - sampler cue button: | |
| regular: ch7 A7 (dec 105/69) | |
| +shift: ch7 D8 (dec 110/6E) | |
| STATE MACHINE OF RECORD BUTTON: | |
| A: ANY -> SHIFT -> STOP | |
| B: STOP -> PRESS -> REC | |
| C: RUN -> PRESS -> REC | |
| D: REC -> PRESS -> RUN | |
| E: REC -> PAD -> HOLD | |
| F: HOLD -> RELEASE -> REC | |
| Z: RUN -> PAD -> RUN (THIS IS A NOP) | |
| update 2020-11-02: | |
| RMX entres = deck1 and 3 shortcuts | |
| RMX2 enntries = deck2 and 4 real ones | |
| out LED: RMX punch B 1 (led 1) | |
| m7=1 | |
| m7=2 | |
| m7=3 | |
| LEDS: | |
| punch: color off = 0; color ON=31 | |
| timeline: 0/62 | |
| in BOME, pads are processed only for setting modifiers | |
| -> action = deck_change, to automatically open deck_4 | |
| update 2021-03-08: | |
| ------------------ | |
| added pattern recorder to sampler cue (on shift) | |
| shift+press = simple press (TO REC/only PLAY) | |
| shift+souble press = send shift + press (TO OFF) | |
| TODO from F1 and DDJ_SZ: | |
| ------------------------ | |
| F1: | |
| send to FX | |
| keylock | |
| DDJ-SZ: | |
| beat tap | |
| in remix decks, in hotcue mode you have toggles: | |
| - slot keylock | |
| - slot FX on/off | |
| - slot monitor on/off | |
| - slot punch mode | |
| 4': VELOCITY_SAMPLER == KEY_SHIFT | |
| page1: | |
| E8 F8 F#8 G8 | |
| G#8 A8 A#8 B8 | |
| page2: | |
| C9 C#9 D9 D#9 | |
| E9 F9 F#9 G9 | |
| shift = channel + 1 | |
| https://books.google.pt/books?id=yBymDwAAQBAJ&pg=PT1&lpg=PT1&dq=mapping+step+recorder+to+any+controller&source=bl&ots=ZSlmhNvIvX&sig=ACfU3U3ERfbPsxbTf943Z6co6YGXwdb_2A&hl=pt-PT&sa=X&ved=2ahUKEwiu3q-Ai_PpAhXYAWMBHYVTCcEQ6AEwCHoECAgQAQ#v=onepage&q=mapping%20step%20recorder%20to%20any%20controller&f=false | |
| - do not use "gated play" | |
| - do not use loop | |
| Pioneer DDJ pad colors: | |
| ----------------------- | |
| 0: off | |
| 1: blue | |
| 3: blue | |
| 7: cyan | |
| 12: cyan-blue | |
| 17: green | |
| 22: dark green | |
| 25: green | |
| 27: yellow-green | |
| 29: yellow | |
| 31: yellow | |
| 33: yellow | |
| 36: orange | |
| 38: orange | |
| 40: orange-red | |
| 41: red | |
| 45: roxa choque | |
| 52: pink | |
| 58: pink dark | |
| 59: violet | |
| 62: dark viloet | |
| 63: off | |
| 64: white | |
| >65: add 64 for the same colors, darkened | |
| 76: bottle green | |
| 79: turquesa | |
| 82: bottle green | |
| 89:: m | |
| 98: dark yellow | |
| 113: dark | |
| 115: | |
| 122: | |
| >>>> 126: gray | |
| 127: default color for that mode | |
| DDJ-SZ to DDJ-1000 translation: | |
| ------------------------------- | |
| update 2020-11-02: | |
| pads translated: 7..11 -> 7..14 | |
| channel 1..4: specific | |
| channel 7: specific | |
| channel 15 -> sent to 11 | |
| DDJ KEYBOARD EMULATION: | |
| ----------------------- | |
| KEYBOARD: | |
| shift = shift | |
| 1..4 = channel | |
| z..v = mode | |
| qwerty = pads | |
| DDJ-SZ keyboard: ---> DO NOT USE! | |
| "mo" - which channel (0..3) | |
| "mp" - which mode (0..7) | |
| "mq" - which sub-page (0..1) | |
| "mr" - shift enabled? (0..1) | |
| "ms" - which pad pressed (0..7) | |
| "mt" - up/down pressed (0..127) | |
| ---------------------------------- | |
| DDJ-SZ to DDJ-1000: | |
| "me" - TRANSLATED channel | |
| "mf" - TRANSLATED note | |
| "mg" - TRANSLATED velocity | |
| "mh" - TRANSLATED Shift | |
| "j9" - 0: DDJ-1000 mode; 1: DDJ-SX2 mode (internal); 2: DDJ-SZ mode (external) | |
| "mi" - ORIGINAL channel | |
| "mj" - ORIGINAL note | |
| "mk" - ALREADY SET BIT | |
| 0: Idle, waiting for new value | |
| 1: received but still "Undecided" (will default to "Untranslated" if nothing happens) | |
| 2: Decided: Translated | |
| 3: Decided: Swallowed | |
| 4: Decided: Overflow | |
| 5: Decided: White-list | |
| "ml" - ORIGINAL velocity | |
| Translation table: (deck 1..4) | |
| ------------------ | |
| deck 1..4 -> "memory": 114/115 -> 61/62 | |
| grid adjust -> key sync : 121/100 -> 101/28 | |
| grid slide > key reset : 10/101 -> 100/31 | |
| autoloop -> autoloop: SAME | |
| loop 1/2 -> shift_in : 18/97 -> X/76 (hex) | |
| loop 2x -> shift_out : 19/98 -> X/77 | |
| loop in -> in : SAME | |
| loop out -> out: SAME | |
| pad left arrow -> search --: 36..43/1..8 -> 112/81 | |
| pad right arrow -> search ++: 44..51/9+122..127+0 -> 113/83 | |
| pad quantize -> deck quantize: 106/NONE -> 53/57 | |
| OSC param -> sampler volume: 29 -> 3 | |
| load prepare -> view: 103/104 -> 122/104 (long=103) (back = 101/102) | |
| panel -> double click deck change: 120/121 -> | |
| Translation table: (channel 7) | |
| ------------------ | |
| noise: 4/12 -> 0/8 | |
| cymbal: 5/13 -> 1/9 | |
| siren: 6/14 -> 2/10 | |
| horn: 7/15 -> 3/11 | |
| DDJ-1000 differences between MIDI and HID mode: | |
| ----------------------------------------------- | |
| (note: this was moved to mixxx wiki) | |
| (note1: IN/OUT is from the point of view of the software) | |
| (note2: tests done in virtual DJ) | |
| - BeatFX ON/OFF button: | |
| - MIDI: | |
| - OUT: This button has its own state machine. It doesn't react to sending a MIDI message, so we can't reset it | |
| - IN: There is no visibility of the blinking status. Pressing the button always output a TOGGLE message | |
| - HID: VirtualDJ has full control | |
| - BeatFX Screen: | |
| - MIDI: No visibility or control. The screen always shows the Pioneer effects and their values. These Pioneer effects are ONLY applied on the master channel | |
| - HID: VirtualDJ has full control. Master channel is VDJ effects. If an analog source is choose, the Pioneer effects return for that channel. | |
| - SoundColorFX buttons: | |
| - MIDI: | |
| - IN: button blinks by itself, even when using shift+button | |
| - OUT: button reacts to stop blinking | |
| - HID: Unknown | |
| - JogScreens: | |
| - MIDI: | |
| - OUT: fair amount of controls. Sync led doesn't react (firmware bug acknowledged by support) | |
| - HID: | |
| - OUT: adds Waveforms, tempo range, cuescope, cover art | |
| - Deck select: | |
| - MIDI: | |
| - IN: no visibility on the active deck; the firmware always return channel 3/4 regardless of the active channel. The active channel needs to be inferred by later messages. | |
| - OUT: no reaction | |
| - HID: unknown | |
| - Pad Page: | |
| - MIDI: | |
| - IN: it has its own state machine, per pad mode | |
| - OUT: no reaction | |
| - HID: Full control; Hotcues have 2 subpages; Loops mode have >4 sub-pages | |
| Jog Needle State machine: | |
| ------------------------- | |
| inputs: | |
| - play/pause | |
| - cue | |
| - jog touch | |
| states: | |
| if yo==0 then Goto "cur_stopped" | |
| if yo==1 then Goto "cur_playing" | |
| if yo==2 then Goto "cur_cueing" | |
| if yo==3 then Goto "cur_paused" | |
| if yo==4 then Goto "cur_play_jogging" | |
| if yo==5 then Goto "cur_paused_jogging" | |
| if yo==6 then Goto "cur_stopped_jogging" | |
| state machine: | |
| stopped -> [play] -> playing | |
| playing -> [/play] -> paused | |
| paused -> [play] -> playing | |
| stopped -> [cue] -> cueing | |
| cueing -> [/cue] -> move to front -> stopped | |
| playing -> [cue] -> move to front -> stopped | |
| paused -> [cue] -> set new cue -> stopped | |
| playing -> [jog] -> jogging | |
| jogging -> [/jog] -> playing | |
| states: | |
| stopped: 0 | |
| playing: 1 | |
| cueing: 2 | |
| SWALLOW - which rules do apply to all inputs: | |
| --------------------------------------------- | |
| - double click | |
| - long press | |
| - auto layout | |
| - CFX pads (pad channels only) | |
| - Remix decks pads | |
| BOME - Possible action outcomes: | |
| -------------------------------- | |
| skip outgoing action | |
| execute outgoing action | |
| pass message, no further action | |
| pass message, AND do further action | |
| do swallow, no further action | |
| do swallow, AND do further action | |
| IMPORTANT: always do swallows at the END. | |
| If you can't, the other rules need to "skip" or "exit with swallow" as well | |
| MIDI routing: | |
| ------------- | |
| - All messages are routed by default (main project / settings / midi router) | |
| - processed messages use "swallow" to not be broadcasted | |
| - all processed messages are on the BMT1->DDJ direction | |
| - exception: jog turn is on the DDJ->BMT1 direction | |
| - all outputs on the traktor side need "blend" | |
| - "mod 360" calculations: after mod, negative values need to be made positive by adding 360 | |
| - oo = oo % 360 | |
| - if oo < 0 then oo = oo + 360 | |
| - Main path: Traktor -> (BMT1) -> bome -> (DDJ-1000) | |
| - Reverse path: Traktor <- (BMT1) <- bome <- (DDJ-1000) | |
| I believe the unexpected problem here is that the “swallow” flag is only activated | |
| if both incoming trigger AND the Rules section pass. If “exit rules, skip Outgoing Action” | |
| is hit, then even if “swallow” is checked, it won’t swallow from this translator. | |
| You can, as you’ve done in your test preset, activate “swallow” from a different | |
| translator without rules and without outgoing action. | |
| In other words, the swallow flag is only evaluated when the Outgoing Action is executed | |
| (even if it\'s the \"None\" action). | |
| SYNC modes Elastic Beatgrid: | |
| ---------------------------- | |
| sync: E6 88 (toggle) | |
| master: G#6 92 (trigger) | |
| cue - note C0 12 | |
| jog turn - CC 33 | |
| sync: note g5 (79) (NEW message - HOLD style) | |
| "l0" elastic beatgrid sync (global setting) | |
| 0: normal | |
| 1: cue and jogturn change sync | |
| "la"/4 "sync_state" (state) | |
| "li"/4 "is_master" (state) | |
| Memory+Tempo = tempo override | |
| show actual tempo + bpm | |
| RESET SCREENS PROCEDURE: | |
| ------------------------ | |
| Pressing shift+quantize: ch1..4 A3 (57) | |
| @BOME: | |
| sends Ch16.A-1 to DDJ-1000 | |
| sends ch1 A3 to traktor (ie, no swallow) | |
| @TRAKTOR: | |
| send monitor state | |
| reset at initialization: | |
| "hx" = 0 | |
| at first press of any DDJ button: | |
| "hx" = 1 | |
| call reset | |
| at first receive of anything from traktor: (TODO) | |
| "hx" = 1 | |
| call reset | |
| Debug log follows. Sometimes blends gets stuck. | |
| 13185688 - MIDI IN [Bome MIDI Translator 1 Virtual In]: 9F 00 7F | |
| 13185689 - MIDI IN [Bome MIDI Translator 1 Virtual In]: 9F 01 00 | |
| 13185690 - MIDI IN [Bome MIDI Translator 1 Virtual In]: 9F 02 7F | |
| 13185688 - MIDI IN [Bome MIDI Translator 1 Virtual In]: 9F 03 00 | |
| 96 46 | |
| 96 47 | |
| 96 48 | |
| 96 49 | |
| DDJ-1000 undocumented notes: | |
| ---------------------------- | |
| PC APP Connect: ch 16 note A-1 (=9) | |
| MIDI OUT [DDJ-1000]: 9F 09 00 | |
| (mapping: page 1, linked to master volume) | |
| UDPATE: Sending ANY value to this note makes the device answer in 2.5 seconds later. | |
| This includes sending "zero". | |
| Multiple DDJ resets are latched in the 2.5s window to avoid choking. | |
| shift+quantize: ch 1..4 note A3 (=57) IN/OUT (modifier #4) | |
| (mapping:) | |
| reset timeline: | |
| 0ms: send Traktor reset | |
| 0ms: send DDJ reset | |
| 30ms: Traktor start answering | |
| 100ms: second DDJ reset | |
| 140ms: Traktor stop | |
| 2500ms: ddj start answering | |
| 2510ms: ddj stop | |
| bome demo: | |
| CTRL+Q: reset TK | |
| CTRL+W: reset DDJ | |
| CTRL+E: reset both | |
| CTRL+A: toggle sync led | |
| DDJ-SZ undocumented notes: | |
| -------------------------- | |
| PC App connect: | |
| ch12.CC 24 - needle marker ch1 | |
| ch12.CC 25 - needle marker ch2 | |
| ch12.CC 26 - needle marker ch3 | |
| ch12.CC 27 - needle marker ch4 | |
| ch12.cc.004 = phase deck A | |
| ch12.cc.005 = phase deck B | |
| ch12.cc.006 = phase deck C | |
| ch12.cc.007 = phase deck D | |
| selector knobs sent at reset: | |
| ----------------------------- | |
| Crossfader: | |
| ch1..4: | |
| A#0 22/16 = in Usb-A | |
| F1 29/1D = in thru | |
| C1 24/18 = in USB-B | |
| beatFX channel: | |
| ch5 note | |
| 16 E0 ch1 | |
| 17 f0 ch2 | |
| 18 f#0 ch3 | |
| 19 g0 ch4 | |
| 20 g#0 mst | |
| 21 a0 mic | |
| 22 a#0 sample | |
| beatFX selector: | |
| ch5 note 32..45 | |
| USB select: | |
| ch1..4: | |
| c#6 85/55 USB A | |
| d6 86/56 LINE | |
| d#6 87/57 USB B | |
| mic/talkover: | |
| ch7 106..108 | |
| on a reset, DDJ only sends the CURRENT value with 127. No zeros are sent. | |
| midi device reset: | |
| ------------------ | |
| https://www.bome.com/support/kb/explicitelly-reset-a-device-or-the-whole-midimanager | |
| Is there a rule to explicitly reset (close+open) a midi devices in Windows, in bome 1.8.4 ? | |
| Alternatively, is there a way to schedule a restart of the whole midimanager? | |
| my issue: | |
| Unplugging the USB cable of my DDJ-1000 results in the leds becoming dead. This is completely repetable. | |
| The MIDI_IN initially comes up as well, but then somebody (the driver or the FW) gives it a reset, which makes it work without any manual interaction. | |
| In this situation, the only workaround is to manually restart the midi_manager on the big red button. | |
| ------ | |
| When I swap the USB cable of my DDJ-1000, both the Audio and the Midi_IN device recover automatically. This is very good. | |
| However the MIDI_OUT device remains dead, and no LEDs change any more. | |
| To fix this I need to manually restart my software, reopening all the MIDI devices. | |
| I've inspected what happens in BOME, and the difference is that either the driver or the firmware reset the MIDI_IN device a second time. | |
| Can I ask the same to happen for the MIDI_OUT device as well? | |
| below the BOME log. | |
| thank you! | |
| new bome version: | |
| ----------------- | |
| restrat traktor | |
| restart bome (all) | |
| restart bome red button | |
| remove usb: | |
| 1487885 - 0.18:3 closed_ddj_out | |
| 1487886 - 0.17:4 closed_ddj_in | |
| 1487886 - 0.12:3 unplugged_ddj_out | |
| 1487886 - 0.11:4 unplugged_ddj_in | |
| plug usb: | |
| 1631813 - 0.15:3 opened_ddj_out | |
| 1631815 - 0.14:4 opened_ddj_in | |
| 1634840 - 0.17:4 closed_ddj_in | |
| 1634840 - 0.20:4 open_error_ddj_in | |
| 1634841 - 0.14:4 opened_ddj_in | |
| power off ddj | |
| swap cable (same port) | |
| swap cable (other port) | |
| conclusion: | |
| windows: | |
| ddj_in error -> restart ddj_out | |
| mac: | |
| new leds ok | |
| old leds are lost because optimization | |
| ddj_in open -> reset @ 10seconds | |
| lost reset messages: | |
| issue: | |
| - fader or crossfader messages did get lost | |
| solution: | |
| - reset DDJ | |
| - reset TK @ 50ms | |
| - reset BOME @ 150ms | |
| NEW TIMERS: | |
| ----------- | |
| master clock -> (calc_needle) -> CC 20 | |
| INIT -> reset_blink_clock -> (125ms) blink_clock | |
| press "MEMORY" -> | |
| Blink_clock -> (Calc_CLK) -> t_blink1 | |
| -> t_blink2 -> Show_cue | |
| -> Show_jog | |
| (jog_touch) -> t_calc_state1 -> (Calc) -> show_state1 | |
| (sync) -> t_blink1 (immediate) | |
| NEW SHIFTS METHODS: | |
| ------------------- | |
| deck select: f#8 | |
| SHIFT1: IN: "D#4" -> "ga" (button shift) //TODO: to deprecate, no need for this | |
| SHIFT2: IN: "C#4" -> "gb" (button memory) | |
| SHIFT3: IN: "D4" -> "gc" (button shift+memory) | |
| COMBINED: -> "gd" 0 = none; 1 = shift1; 2 = shift2; 3 = shift3 | |
| NEW CLOCKS and BLINK METHODS: | |
| ---------------------------- | |
| what blinks: | |
| cue button: flashes when a new cue can be set | |
| play/pause: lighted when playing track, and flashes when paused | |
| end warning: 30s; | |
| fast end warning: 15s | |
| variables: | |
| "g0" - master t_blink counts to 16, 125ms, period 2 seconds | |
| "zx" - very slow - 0.5 full blinper second - nothing | |
| "zy" - slow - 1 full blink second - cue, play | |
| "zw" - fast - 2 full blink second - everyting else | |
| "zz" - very fast - 4 full blinks per second - jogring (now DEAD) | |
| about leds and blinks: | |
| All blinking leds are fully managed inside BOME. This includes in some cases the shifted version. | |
| to blink, we iterate the values in a timer. | |
| On these leds its easy to show the configuration status (on the shifted value) | |
| best example: sync / shift master, for sync aid and tempo enlarger features. | |
| Some leds are not managed by BOME, but they could in the future. | |
| While the configuration is done in BOME, that one is not shown. | |
| best example: shift+play, for TTFX. | |
| debug dump of clock: | |
| -------------------- | |
| 1513 - RULE 0.39:35 assignment: (oo=g0) = 0 | |
| 2601513 - RULE 0.39:36 assignment: (oo=zx) = 0 | |
| 2601513 - RULE 0.39:37 assignment: (oo=zy) = 0 | |
| 2601513 - RULE 0.39:38 assignment: (oo=zw) = 0 | |
| 2601513 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2601763 - RULE 0.39:35 assignment: (oo=g0) = 1 | |
| 2601763 - RULE 0.39:36 assignment: (oo=zx) = 0 | |
| 2601763 - RULE 0.39:37 assignment: (oo=zy) = 0 | |
| 2601763 - RULE 0.39:38 assignment: (oo=zw) = 1 | |
| 2601763 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2602013 - RULE 0.39:35 assignment: (oo=g0) = 2 | |
| 2602013 - RULE 0.39:36 assignment: (oo=zx) = 0 | |
| 2602013 - RULE 0.39:37 assignment: (oo=zy) = 1 | |
| 2602013 - RULE 0.39:38 assignment: (oo=zw) = 0 | |
| 2602013 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2602263 - RULE 0.39:35 assignment: (oo=g0) = 3 | |
| 2602263 - RULE 0.39:36 assignment: (oo=zx) = 0 | |
| 2602263 - RULE 0.39:37 assignment: (oo=zy) = 1 | |
| 2602263 - RULE 0.39:38 assignment: (oo=zw) = 1 | |
| 2602263 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2602513 - RULE 0.39:35 assignment: (oo=g0) = 4 | |
| 2602513 - RULE 0.39:36 assignment: (oo=zx) = 1 | |
| 2602513 - RULE 0.39:37 assignment: (oo=zy) = 0 | |
| 2602513 - RULE 0.39:38 assignment: (oo=zw) = 0 | |
| 2602513 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2602763 - RULE 0.39:35 assignment: (oo=g0) = 5 | |
| 2602763 - RULE 0.39:36 assignment: (oo=zx) = 1 | |
| 2602763 - RULE 0.39:37 assignment: (oo=zy) = 0 | |
| 2602763 - RULE 0.39:38 assignment: (oo=zw) = 1 | |
| 2602763 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2603013 - RULE 0.39:35 assignment: (oo=g0) = 6 | |
| 2603013 - RULE 0.39:36 assignment: (oo=zx) = 1 | |
| 2603013 - RULE 0.39:37 assignment: (oo=zy) = 1 | |
| 2603013 - RULE 0.39:38 assignment: (oo=zw) = 0 | |
| 2603013 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| 2603263 - RULE 0.39:35 assignment: (oo=g0) = 7 | |
| 2603263 - RULE 0.39:36 assignment: (oo=zx) = 1 | |
| 2603263 - RULE 0.39:37 assignment: (oo=zy) = 1 | |
| 2603263 - RULE 0.39:38 assignment: (oo=zw) = 1 | |
| 2603263 - RULE 0.39:39 assignment: (oo=zz) = 0 | |
| SEEK - redone with HC4500: | |
| -------------------------- | |
| High resolution: CC 90..99 | |
| major bugs history: | |
| ------------------- | |
| bugs: | |
| - tempo adjust bug = tempo adjust is 7 bits and 14 bits at the same time | |
| - modifier blend: screen modifiers lacked blend | |
| - "deck is loaded" blend: eventough it is boolean, it needs BLEND | |
| history: | |
| v1.00 pioneer SX2: | |
| tempo adjust: ? | |
| modifier blend: (only single pads) | |
| deck is loaded: yes | |
| v6.3.3 | |
| tempo adjust: no | |
| modifier blend: no | |
| deck is loaded: no | |
| v6.5 | |
| tempo adjust: yes <<<<< | |
| modifier blend: no | |
| deck is loaded: no | |
| v6.8 released 25 april 2020 / 21 oct 2019 | |
| tempo adjust yes <<<< | |
| modifier blend: no | |
| deck is loaded: no | |
| v7.0.2 fran | |
| tempo adjust no | |
| modifier blend: no | |
| deck is loaded: YES <<<<< | |
| 7.1 latest | |
| tempo adjust: no | |
| modifier blend: no | |
| deck is loaded: no | |
| TIME MODE CYCLE: | |
| ---------------- | |
| TIME MODE: variable "za" | |
| 0: elapsed | |
| 1: remain | |
| PHASE FEATURE: | |
| -------------- | |
| 0 = -0.1 | |
| 100 = +0.1 | |
| x - 50 (center zero) | |
| x / 5 | |
| 0 --> -10 | |
| 50 --> 0 | |
| 100 -> +10 | |
| TK IN phase CC "85" -> "je" | |
| -0.1 - 0 | |
| -0.09 - 1 | |
| -0.08 - 2 | |
| -0.01 - 9 | |
| 0 - 10 | |
| 0.01 - 11 | |
| -0.02 - 12 | |
| -0.10 - 20 | |
| DECK IS LOADED TRIGGER: | |
| -------------------- | |
| TK IN LOADED: channel 7 | |
| deck A: A#4 70 / 46 / C5 -> "ks"/4 (0: unloaded; 127: loaded) | |
| deck B: B4 71 / 47 / C#5 | |
| deck C: c5 72 / 48 / a#6 | |
| deck D: c#5 73 / 49 / d#8 | |
| TK IN loaded: channel 16 | |
| note 0,1,2,3 (note: this is a copy) | |
| This message is sent twice because of overflow issues! | |
| note2: variables have alredy been condensed in "ks"/4. | |
| This is being latched for the time being. | |
| CCs messages sent FROM traktor TO BOME: | |
| --------------------------------------- | |
| JOG NEEDLE: | |
| CDJ/VINYL MODE "ko"/4 (<<< catched and filtered on DDJ!!!) | |
| SLIP: "ke"/4 flux (AKA slip) | |
| IN LOADED: note A#4 / C5 B4 / C#5 (these are the load codes) | |
| -> "ks" | |
| IN CUE: CC "68" -> "z1" (cue being pressed) | |
| IN beat phase CC "67" -> (NOT USED) | |
| IN | |
| IN PLAY CC "77" -> "zo" (deck playing) | |
| IN JOG touch CC "78" -> "zs" (deck jog) | |
| IN HOTCUE ANY CC "79" -> "immediate" (when we press hotcue) | |
| IN JOG turn -> "y1" (accumulated every 10ms) | |
| OUT white needle -> "y5" (360 deg JOG) | |
| OUT marker needle -> "z5" (360 deg CUE) | |
| STATE of the deck -> "yo" | |
| (0: stopped; 1: playing; 2: cueing; 3: paused; | |
| 6: stop+jog; 4: play+jog; 5: pause+jog) | |
| SEEK: | |
| IN seek position: CC "90".."99" -> "na"/"no"/"ja" RANGE | |
| BPM implementation: | |
| IN tempo adjust: CC "101".."108" -> "g1" | |
| IN BPM value: CC "110".."120" -> "h1" | |
| IN tempo range: CC "66" -> "i1" (real?) "i5" (60/100/160/etc) | |
| (NOTE: THIS IS NOT "i1" - TO DEPRECATE) | |
| CALC tempo perc: -> "k1" (for external) | |
| CALC current BPM: -> "k5" (for external) | |
| Tempo range enlarger: | |
| --------------------- | |
| Tempo Range enlarger STATE: "io" | |
| 0 = nothing | |
| 1 = to ENLARGE in next iteration | |
| 3 = to RESET 6% in the next iteration | |
| 2 = waiting to move back | |
| Tempo Range enlarger CONFIG: "gm" | |
| ch1..4: | |
| 119 "B8" - enlarger: tempo range Reset to 6% | |
| 96: "C7" - enlarge: next tempo range (stantard shift+master tempo) | |
| 15 | |
| Soft Takeover: | |
| -------------- | |
| "k1"/4 ACTUAL value | |
| "i5"/4 CURRENT tempo range | |
| "ji"/4 WANTED tempo value (soft takeover) | |
| "js"/4 tempo is different (soft takeover) | |
| 0 - same tempo | |
| 1 - different tempos | |
| "ls"/4 soft takeover timer running (0: none; 1: timer running) | |
| (DOESNT mean it is blinking - see "js" for that) | |
| "kx"/4 Previewing after auto enlarge (0: none; 1: loop/move changed; 2: auto-enlarge triggered) | |
| parei aqui (??). todo: deprecate kx, | |
| Loops: | |
| ------ | |
| IN is active loop: CC "76" -> "le" | |
| pressed IN button -> "lo" | |
| IN loop size: CC "70" -> "l1" | |
| IN move size: CC "71" (0 = xfine ; 1= fine; 2 = 1/16; 3=1/8; 4=1/4; 5=1/2; 6=1; 7=2; 8=4; 9=8; 10=16;11=32; 12=loop) | |
| -> "n1" (0..12 => 0,1,2,3,4,8,16,32) | |
| -> "n5" (flag that signifies "move size" equals "loop size") (TO deprecate) | |
| (TODO: simplify this structure) | |
| IN Key adjust CC "81" -> (direct) | |
| Jog Ring (End warning): | |
| TK IN END warning CC "82" -> (GENERATED ON BOME ITSELF) | |
| TK IN volume fader CC "83" -> "jo" | |
| DDJ IN volume fader: ch1..4 CC 19+51 -> "jo" (0..16553 = position) | |
| TK IN jogFX state ch5 CC "126" -> "z9" (this could be a single variable) (THIS IS IN PAGE #1!) | |
| ______ todo: why /4 bpm ???? <<<<<<<<<<<<<<<<<< | |
| BOME CLOCK: | |
| ----------- | |
| "JM"/1 - preview bome clock duration ( | |
| state: reconfiguring clock: "k9" | |
| SEEK IMPLEMENTARION: | |
| -------------------- | |
| AUTO-RESET: | |
| auto reset - DDJ side "hx" (0=init; 1= done DDJ reset) | |
| auto reset - TK side "yn" (0=init; 1= done TK reset) | |
| CLOCK: | |
| clock period (milliseconds): "hy" (global) | |
| frames per second: "jn" | |
| master debug "hw" (global) | |
| current clock value: "hz" (global) | |
| SEEK POSITION: CC 90..99 (HR); CC 100 (LR) | |
| HR LOCK: "no" (values: 0 = none; 1 = LR ; 2 = HR) | |
| NEW POS: "na" (range: 0..10000) | |
| 30ms timer (for BPM): "hs" (lock) | |
| 30ms timer (seek): "he" (lock) (to merge?) | |
| HC45000: | |
| HC4500 minutes "ne" | |
| HC4500 seconds "ni" | |
| HC4500 frames "ns" | |
| CALCULATIONS: | |
| PREVIOUS POS: "ja" (range: 0..1000) | |
| REFERENCE location: "ya" | |
| reference clock value: "ka" | |
| clock units per SEEK: "ha" ("ho" == "lock) | |
| which step we are: "ia" | |
| OUT CC: | |
| elapsed timestamp: "ma" (unit: seconds) | |
| remain timestamp: (inferred) | |
| FINAL total time: "lx" (unit: seconds) | |
| FINAL total (lock): "nx" (0: init ; 1: wait 1 seconds; 2: wait 1 minute; 3: wait middle) | |
| (this is reset at deck load message) | |
| total track length calculation: | |
| ------------------------------- | |
| proportion: | |
| ma_cents/var = na/10000 | |
| ma_cents/na = var/10000 | |
| var = ma_cents * 10000 /na | |
| var = ma_cents * 100 /na (adjust) | |
| NEW CCs - High resolution (TK OUT): | |
| ----------------------------------- | |
| SEEK POSITION: | |
| CC 89 (HHR 0.0 -> 0.01) | |
| CC 90..99 (HR); CC 100 (LR) | |
| (see above for variables) | |
| TEMPO ADJUST: CC 101..108 -> "g1" | |
| - NEW TEMPO: "g1" | |
| - LOCK: "go" (0 = none; 1 = LR ; 2 = HR) | |
| CC 101 -1 -0.75 | |
| CC 102 -0.75 -0.5 | |
| CC 103 -0.5 -0.25 | |
| CC 104 -0.25 0 | |
| CC 105 0 0.25 | |
| CC 106 0.25 +0.50 | |
| CC 107 0.50 +0.75 | |
| CC 108 0.75 +1.0 | |
| CC 109 -1..+1 (fallback for corner cases) | |
| BPM VALUE: CC 110..120 -> h1 | |
| - NEW VALUE: "h1" | |
| - LOCK: "ho" (0 = none; 1 = LR ; 2 = HR) | |
| (algorithm: accept any LR if not HR; accept any HR if not 0 or 100) | |
| CC 110 - 0..75 (75) | |
| CC 111 - 75..100 (25) | |
| CC 112 - 100..110 (10) | |
| CC 113 - 110..120 (10) | |
| CC 114 - 120..125 (5) | |
| CC 115 - 125..130 (5) | |
| CC 116 - 130..135 (5) | |
| CC 117 - 135..140 (5) | |
| CC 118 - 140..145 (5) | |
| CC 119 - 145..155 (10) | |
| CC 120 - 155..200 (45) | |
| CC 121 - 0..200 (200) FALLBACK FOR BPM CORNER CASES | |
| JOG DYNAMICS: | |
| ------------- | |
| TURNS: | |
| SIDE turn: | |
| vinyl on: CC 33 LARGE | |
| vinyl off: CC 33 LARGE | |
| TURN: | |
| touch, vinyl ON: CC 34 SMALL <<<<< | |
| touch, vinyl OFF: CC 35 LARGE | |
| +SHIFT: | |
| touching top: | |
| vinyl on: CC 31 SMALL | |
| vinyl off: CC 31 SMALL | |
| SIDE: | |
| vinyl on: CC 38 SMALL | |
| vinyl off: CC 38 SMALL | |
| +SEARCH: | |
| side: CC33 LARGE | |
| touch: | |
| vinyl on: CC41 SMALL | |
| vinyl off: CC41 SMALL | |
| TOUCH: | |
| normal: note 54 F#3 | |
| +shift: note 103 G7 | |
| ------------ | |
| BOME SIDE: | |
| "ys" accumulated jog value, with full ticks resolution. | |
| "tt" how many degrees to send | |
| "rr" remainder degrees for next iteration | |
| "y5" TO SEND needle position (360 deg) | |
| utilities mode: | |
| - NO USB cable | |
| - press left play+shift + turn on device | |
| - left slip reverse OFF = automatic | |
| - left slip reverse ON = always MIDI | |
| DDJ-1000 OUTPUTS: | |
| ----------------- | |
| shift: | |
| modifier 1 -> 0..1 (tk) -> 0..1 (midi) -> global varible (bome) | |
| tempo range: (COM SHIFT) | |
| 0..13 (TK) -> 0..13 (midi) -> 2..100 (bome, integer) -> speed (ff_2.2) | |
| tempo position: | |
| -1..+1 (TK) -> 0..100 (midi) -> -1..+1 (bome, fractional) -> speed (ff_2.2) | |
| stable bpm: (COM SHIFT) | |
| 100..200 (TK) -> 0..100 (midi) -> 100..200 (bome, fractional) -> bpm (ff_3.1) | |
| actual bpm: | |
| -> tempo_position * bpm (bome, fractional) -> speed (ff_3.1) | |
| beat phase: | |
| -0.5..0.5 -> 0..90 (midi, relative) -> 0..360 (bome, incremenatl) -> ff_2.2 | |
| cue: | |
| 0 (off)..127 (on) -> set cue to current position | |
| OLD TIMERS: | |
| ----------- | |
| SHIFTS: | |
| DDJ: button | |
| -> calc0 | |
| -> calc1 | |
| -> calc2 | |
| .... | |
| MAIN_PAGE: | |
| DDJ: tempo fader changed: | |
| -> tempo1: | |
| -> calc1 | |
| TK: HR tempo received / BPM HR received | |
| -> calc1 | |
| -> calc1_d | |
| -> send BPM / send % to DDJ | |
| -> calc_clock_1 | |
| SEEK_PAGE: | |
| TK: HR SEEK received | |
| -> calc_clock1 | |
| -> send_timestamp1 | |
| -> send sign/MM/SS) | |
| STATE_page: | |
| DDJ: jog touch | |
| -> jog_touch1/refresh_jog1 | |
| -> refresh_jog -> sends_needle | |
| -> master_clock | |
| -> refresh_jog | |
| TK: Received hotcue/cue/ buttons | |
| -> calc_state_1 | |
| -> calc_state1 | |
| -> jog_ring1 (every 125ms) <<<<< | |
| TK: received sync/flux buttons | |
| -> t_blink1 | |
| -> calc_state1 | |
| -> refresh_cue1 | |
| -> refresh_cue1 | |
| -> refresh_jog1 | |
| --- | |
| BLINK PAGES: | |
| jog_ring1: -> send jog ring | |
| jog_ring1: -> send jog ring | |
| jog_ring1: -> calc1 | |
| calc_state1: t_blink1 500ms | |
| CCs DDJ-1000 SCREENS: STANDARD (https://www.youtube.com/watch?v=RnHqnGWEXfE&t=637s) | |
| --------------------- | |
| needle position: CC 20: 0..2 / 0..0x67 | |
| cue position: CC 23: (same) (to hide: send 0x7f 0x7f) | |
| bpm value: CC 21: 0..0x4E / 0..0x0F | |
| playing speed: CC 22: (same) | |
| current minute: note 66 (F#4) | |
| current second: note 67 (G4) | |
| time mode: note 68 (G#4) (elapsed = 0 ; remain = -1) | |
| key value: note 73 (C#5) (0..0x18) | |
| key change: note 74 (D5) (1..0x19) | |
| (fake high resolution CC outs to add here) | |
| CCs DDJ-1000 TO KEEP: | |
| --------------------- | |
| led_normal = [0, 2, 4, 5, 7, 11, 15, 19, 31, 33, 34, 35, 38, 41] | |
| led_screens = [20,21,22,23] | |
| led_bome = [51,52,53,54,55,56] | |
| MORE NOTES: | |
| ----------- | |
| CC3 - tempo range | |
| 0..13 -> same | |
| --> 2%..25% (%, integer) --> G3 | |
| CC1 - G1 - tempo adjust | |
| -1..+1 -> 0..100 (%, fake floating point) | |
| z1 = sign (1 == "+"; 2 == "-") | |
| z2 = value 0..100 (on the half side) | |
| --> calculated tempo percentage (%) | |
| y1 = sign | |
| y2 = value | |
| y3 = 0..20000 | |
| CC2 - G2 - current bpm | |
| 100..200 -> 0..100 | |
| -> 100..200 (bpm, integer) | |
| --> Y2 = calculated BPM | |
| HOW TO CONVERT RANGES: | |
| ---------------------- | |
| Input = 0..127 | |
| Output = 20..90 | |
| O = int(( I * out_range) / in_range) + offset) | |
| = I * 70 / 127 + 20 | |
| (to add more precision: use 1E3 before and after) | |
| bome bugs / limitations: | |
| ------------------------ | |
| PIONEER: | |
| -------- | |
| needle position: | |
| 0..360deg = 14 bit value integer | |
| MSB - 0x2 | |
| LSB - 0x67 | |
| bpm value: | |
| 0.0 .. 999.9 bpm | |
| MSB - 0x4E = 19_998 | |
| LSB - 0x0F | |
| play speed: | |
| -100.0% .. 100.0% | |
| MSB: SAME | |
| LSB: SAME | |
| EXISTING CCs already sent by the DDJ mapping: | |
| --------------------------------------------- | |
| CC 1 -> ??? | |
| CC 2 -> channel level meter | |
| y5 = needle | |
| z5 = cue positon | |
| future work: | |
| - needle show slip mode | |
| bugs: | |
| - memory - blocks master tempo! | |
| - keys mal: 1, 4, 7, 10, | |
| ADVANCED BOME INTEGRATION - 14-bit out messages: | |
| ------------------------------------------------ | |
| Q2: The BPM and Percentage values are very close, but not exactly the same, of what it displayed on the laptop screen | |
| A2: Reason: Traktor lacks high-resolution MIDI out messages. Even so, a trick was already implemented to improve accuracy 10x times (compared to a naive mapping). | |
| T2: Traktor receives 14-bit messages just fine (combo messages), but cannot send it. | |
| This was confirmed by hacking CMDR to generate a valid TSI of a combo message - nothing got sent by Traktor. | |
| As a workaround, accuracy was improved 10x by creating 10x separate 7-bit ranges, each on a separate CC, and reacting to only a part of the whole range, eg: 0.0->0.1; 0.1->0.2; 0.2->0.3; ... | |
| This lead to the next problem: when the value crosses multiple ranges, potentially all, then all of them independently react with their extreme values. Note that these output values also follow a non-deterministic order. | |
| This was addressed as follows: collect all outputs until a 10ms timer expires, and ignore the extreme values, keeping only the final intermediate value (which can come in any order). | |
| If really going to an extreme value, in particular 0.0 or 1.0, collect that with 11th low resolution CC that encompasses the whole range. | |
| After the timer expires, process the single value as normal | |
| Q3: The time elapsed/remain is approximate to what is displayed on the laptop screen. Ans/Or, the seconds advances either too fast or too slow. | |
| A3: Reason: Traktor doesn't send the absolute minutes:seconds position, only the relative percentage position instead. | |
| The mapping guesses the total track length using an internal clock. | |
| press shift+quantize (="Wake up") while the track is playing to reset the measurement process. | |
| ADVANCED BOME INTEGRATION - Absolute track position emulation: | |
| ------------------------------------------------------------- | |
| T3: even with the high-resolution trick explained above, it is still a relative position. | |
| To transform this into an absolute value, we implement a master clock in BOME with a timer every 100ms. On the seek position code we measure how many ticks elapsed when 0.5% of the track has elapsed without any jumps or interruptions. | |
| When we have this value, a simple multiplication by 200 gives the estimated track length, to which is then trivial to calculate elapsed/remain values in MM:SS format. | |
| As mentioned, pressing shift+quantize triggers a "send monitor state" command that resends all values, restarting the measurement process. | |
| ADVANCED BOME INTEGRATION - Needle progress emulation: | |
| ------------------------------------------------------ | |
| Q4: Needle position sometimes jumps around after scratching. | |
| A4: Traktor lacks a "jog turn out message", so this is emulated in BOME. Please join the DJTT discussion to improve this in the next version. | |
| T4: The best message to implement the needle position is "beat phase". Significant amount of time was spend using this message. | |
| It only sends the -45deg..45deg information. This is accumulated internally to a 0deg..360deg value that is displayed for the user. | |
| When the user seeks away, we just get a new 45deg position, unlinked to the actual 360 position. (this could be improved by merging with the 1000 points seek | |
| relative position descried above). | |
| Instead, we implemented the full state machine of the deck (stopped, playing, cueing), interpreted the jog touch and jog turn messages directly | |
| from the device (instead of traktor), and advanced the needle using the internal fake clock. | |
| EXPERIMENTS ON MIDI LINKED MODIFIERS (MLM): | |
| ------------------------------------------ | |
| please read the MLM discussion on page 86 and following of | |
| "RUDI-Js ELEPHANT TSI for VCI-400SE + Maschine (MK1) + BCR 2000 v2.0" | |
| experiment: | |
| CC 1..4 - sync on | |
| modifier 1..4 = sync on, per deck | |
| CC 11..14 - master on | |
| modifier 8 = master deck | |
| cc 21 - send value of modifier 8 out | |
| page 2: modifier 8 = global modifier | |
| to send a value directly to a MODIFIER: | |
| bome: set variable to 0..7; send it as a value | |
| traktor: modifier IN / Fader / Relative / 100% sensitivity / 0% Acceleration | |
| to send a value directly to a deck layout: | |
| bome: set variable to 0..4; (send it + 0) * 127 / 4 | |
| traktor: modifier IN / Fader / Direct | |
| (doing this to a modifier will print garbage, and use the last digits only) | |
| to send simple boolean ON/OFF: | |
| traktor: modifier IN / button / hold / 1 | |
| DENON HC4500 INFO: | |
| ------------------ | |
| traktor key harmonic: https://github.com/bertfrees/traktor-harmonik | |
| midi out idea: https://forum.djtechtools.com/showthread.php?t=28523 | |
| midi codes: https://raw.githubusercontent.com/Sonnenstrahl/traktor-now-playing/master/readme-img/denon_midi_commands.jpg | |
| run out of global variables: https://www.bome.com/forums/viewtopic.php?t=5193 | |
| - multiple MT instances | |
| - bitwise manipulaton: "XOR" to clear, "XOR" to write, "AND" + "DIV" to read | |
| find all used variables: https://www.bome.com/support/kb/cross-reference-list-of-all-variables-in-a-mt-pro-project | |
| clear HC45000 video: https://www.youtube.com/watch?v=jJI-fCfn-6M | |
| mapping overview: https://www.bax-shop.nl/downloads/downloads/NI-TRAKTOR_DN-HC4500%20ConfigurationManualpdf.pdf | |
| S11 smooth echo: | |
| ---------------- | |
| crossfader, hotcue, silent cue | |
| channel dader, gate cue, load | |
| number of beats to trigger: 1/2 | |
| number of beats to trigger (crossfader): | |
| demo: https://youtu.be/_Sp47QU6pyw?t=1073 | |
| //////////////// | |
| sampler cue: | |
| - press: ON/OFF toggle ("mn" swap) | |
| - double click: SET ENTER/EXIT ("mm" swap) | |
| - shift+cue = disabe everything | |
| "gx"/1 - smooth echo: TYPE (echo or vinyl break) | |
| "zm" - smooth echo: CONFIG: FADER | |
| 0: do nothing | |
| 1: do echo | |
| "zn" - smooth echo: CONFIG: CROSSFADER | |
| 0: do nothing | |
| 1: do echo | |
| "mm" - SMOOTH ECHO: CONFIG: JOG/HOTCUE | |
| 0 - DO NOTHING | |
| 1 - ENTER: dry_wet; EXIT: cancel | |
| 2 - ENTER: cancel; EXIT: feedback | |
| "mn" - SMOOTH ECHO: ACTIVE | |
| 0: disabled (but can still do cancels) | |
| 1: enabled | |
| "m0" free - SETUP: duration of EXIT out (TBD - To be done) | |
| "i0"/1 - SUBROUTINE: echo_out command | |
| << note: there is no "disabled". because this is a function call >> | |
| 0 = cancel | |
| 1 = dry wet | |
| 2 = feedback | |
| 99 = error | |
| "jo"/4 - real fader volume | |
| on "press reset" -> Safe cancel | |
| on "press off" -> Real volume send | |
| crossfader positions: | |
| 0 10 50 90 100 | |
| 0 echo_B | |
| 10 cancel_B | |
| 50 cancel_A | |
| 90 echo_A | |
| releaseFX - echo out (on censor): | |
| --------------------------------- | |
| NEW IN: | |
| step 0: ch5 F#5 (78) | |
| select echo effect | |
| routing off | |
| WAIT 50 MS | |
| step 1: ch1..4 F#5 (78) | |
| set routing | |
| step 2: ch5 G5 (79) | |
| set M8 parameters | |
| step 3: ch5 G#5 (80) | |
| set backfill (HOLD) | |
| step 4: ch5 A5 (81) | |
| unit 3 ON (HOLD) | |
| store preset | |
| OUT: CC 69 (unit3 state) | |
| BACKWARDS LOOPS: | |
| ---------------- | |
| 1/2x: (DDJ-SZ ONLY) | |
| regular F#0 (18) | |
| shift1 c#7 (97) | |
| 2x: (DDJ-SZ ONLY) | |
| regular G0 (19) | |
| shift1 d7 (98) | |
| unknown: | |
| 10 A#-1 - loop 1/2x (DDJ-SZ adaptor) | |
| 13 C#0 - loop 2x | |
| ---------------- | |
| AUTO: | |
| regular: G#0 (20) 4-beat FWD | |
| long press: C#1 (25) loop activate | |
| shift1: G#5 (80) 4-beat REV | |
| shift2: A1 (33) loop that size | |
| IN: DDJ_1000 | |
| regular: E0 (16) Loop in / 1/2x FWD | |
| long press:D0 (14) jog adjust / reloop (no loop) | |
| shift1: e5 (76) size 1/2x REV | |
| shift2: G0 (19) size 1/2x FWD | |
| OUT: DDJ_1000 | |
| regular: F0 (17) | |
| long press: F#0 (18) | |
| shift1: F5 (77) | |
| shift2: D#0 (15) | |
| CC: | |
| normals: CC 34/35/ | |
| new modifier: | |
| m4: nothing | |
| continuous seeking: | |
| ------------------- | |
| actions: | |
| shift0 - beatjump of that size | |
| shift1 - 1 beat | |
| shift2 - select size | |
| shift3 - next track | |
| SUMMARY: when pressed, it sends "LONG". | |
| When released quickly it ADDITIONALLY sends "QUICK". | |
| arrow LEFT: | |
| long: E8 112/70 | |
| quick: A#6 94/5E (== REIG BORG) | |
| shift: A5 81/51 | |
| arrow RIGHT: | |
| long: F8 113/71 | |
| quick: B6 95/5F (== REIG BORG) | |
| shift: B5 83/53 | |
| DDJ-1000 tap: | |
| 1180974 - MIDI IN [DDJ-1000]: 91 71 7F (press) | |
| 1181060 - MIDI IN [DDJ-1000]: 91 71 00 (release) | |
| 1181060 - MIDI IN [DDJ-1000]: 91 5F 7F (<<< in addition) | |
| 1181060 - MIDI IN [DDJ-1000]: 91 5F 00 | |
| DDJ-1000 long: | |
| 1271459 - MIDI IN [DDJ-1000]: 91 71 7F (long press) | |
| 1272983 - MIDI IN [DDJ-1000]: 91 71 00 (release) | |
| first implementation: | |
| ddj long press -> beatjump, move by +1, etc | |
| second implementation: | |
| ddj long press -> first beatjump / loop move same | |
| bome long press -> send same message repeatedly (if configured) | |
| release = done | |
| ------ | |
| e8 = beatjump/loop move combo | |
| a#6 = always beatjump (reigborg mode) | |
| a5 = shift1 | |
| "nm"/1 - ARROW CONTINUOUS SEARCH (0: no continuos search; 1: continuous search) | |
| "nn"/1 - ARROW IGNORE LOOP (0: loop move if active; 1: always beatjump (for reigborg: ) | |
| "ym"/1 - DEFAULT 4-beat/8-beat | |
| UNUSED VARIABLES (both "/1" and "/4"): | |
| -------------------------------------- | |
| "g9"/1 - manual debug (toggle) | |
| "g0"/1 - MASTER blink clock | |
| "gm"/1 - config: tempo enlarger enabled | |
| "gn"/1 - config: advanced config enabled | |
| "g5"/4 - polyrithms - current selection 0: none; 1= 3/4; 2=1; .... | |
| "ga"/4 SPECIAL SHIFTS -> TODO: simplify this | |
| "ga" shift1 (shared to all decks) | |
| "gb" shift2 | |
| "gc" shift3 | |
| "gd" COMBINED Shift | |
| "ge"/4 USB/line selector | |
| "gi"/4 USB/line real USB | |
| "gs"/4 USB remember fader level | |
| "gx"/4 SPECIAL | |
| "gx"/1 smooth echo: TYPE (0: echo; 1: vinyl break) | |
| "gy"/1 beatFX - real ON/OFF button state | |
| "gw"/1 free | |
| "gz"/1 free | |
| ***** | |
| "h0"/1 free | |
| "h9"/1 beatFX - which deck selected | |
| "hm"/1 - blink coalesce | |
| "hn"/1 - blink slowdown master | |
| "h5"/4 Advanced panel | |
| "hi"/_4 SPECIAL GESTURES support | |
| "hx"/_4 SPECIAL GROUP: Timers / INIT | |
| "hx" auto reset - DDJ side | |
| "hy" clock period (milliseconds) | |
| "hw" master debug | |
| "hz" current clock value | |
| "jn" frames per second: "jn" | |
| ***** | |
| "i0"/1 - SMOOTH ECHO: subroutine action type | |
| "i9"/1 - external monitor cue | |
| "im"/1 - used by layout | |
| "in"/1 - CFX buttons are blinking (was fran martin lock jog - BAD!) <<<<<<<<<<<<< | |
| "ie"/4 (double click per deck -> these are 4 separate variables all related to double_clik) | |
| "ii"/4 SPECIAL: active deck firmware bugfixes -> 4 separate variables | |
| "io"/4 tempo range automatic enlarger (0: nothing; 1: next iteration; 2:waiting) | |
| "is"/4 macroFX Knob value (14 bit) | |
| "ix"/4 pad MLM - previous pad pressed - NOT USED ??? | |
| ***** | |
| "J0"/1 - deck select - remix decks | |
| "J9"/1 - DDJ-1000 mode; 1: DDJ-SX2 mode (internal); 2: DDJ-SZ mode (external) | |
| "JM"/1 - preview bome clock duration | |
| "JN"/1 - BOME FPS - Frames Per Second | |
| "J1"/4 - CFX related | |
| "J5"/4 - CFX related | |
| "je"/4 deck Phase | |
| "ji"/4 WANTED tempo value (soft takeover) | |
| "js"/4 tempo is different (soft takeover) | |
| 0 - same tempo | |
| 1 - different tempos | |
| (see also "ls") | |
| "jx"/4 pre-shifted polarity. This is to deprecate! | |
| ***** | |
| "k0"/1 - TTFX enabled 0: disabled; 50 = 500ms; 100 = 1 second (1 second) | |
| "k9"/1 - Clock Timer config | |
| "km"/1 - mouse injection X | |
| "kn"/1 - mouse injection Y | |
| "ko"/4 vinyl mode | |
| "ke"/4 flux (AKA slip) | |
| "ki"/4 Reverse | |
| "kx"/4 Previewing after changing loop values (0: none; 1: loop/move; 2: tempo range) | |
| ***** | |
| "l0"/1 Global: mode elastic beatgrid | |
| "l9"/1 16x filters configuration OFF/ON | |
| "lm"/1 - TEST GLOBAL - DO NOT USE - ONLY FOR TEMPRARY TESTS | |
| "ln"/1 - config: dual deck | |
| "l5"/4 filter polarity | |
| "la"/4 "sync" off/ON | |
| "le"/4 LOOP: is in active loop | |
| "li"/4 "master" off/on | |
| "lo"/4 LOOP: just presed loop in | |
| "ls"/4 we just changed tempo (DOESNT mean it is blinking - see "js" for that) (0: none; 1: timer running) | |
| "lx"/4 total track length | |
| ***** | |
| "m0"/1 - SMOOTH ECHO | |
| "m9"/1 - sequencer/stems | |
| "mm"/1 - SMOOTH ECHO | |
| "mn"/1 - SMOOTH ECHO | |
| "m1"/4 - sequencer/stems (selected sample for LEFT, slot 1..4) | |
| "m5"/4 - sequencer/stems (selected sample for RIGHT, slot 1..4) | |
| "ma"/4 timestamp elapsed (number of seconds since zero) | |
| "me"/4 DDJ-SZ translator (x4) | |
| "mi"/4 DDJ-SZ translator (x4) | |
| "mo"/4 FREE (DDJ-SZ keyboard) | |
| "ms"/4 FREE (DDJ-SZ keyboard) | |
| "mx"/4 FREE (DDJ-SZ keyboard) | |
| ***** HC-4500 | |
| "n0"/1 - USED BY STEMS | |
| "n9"/1 - USED BY STEMS | |
| "nm"/1 - ARROW CONTINUOUS SEARCH (0: no continus search; 1: continuous search) | |
| "nn"/1 - ARROW IGNORE LOOP (0: loop move if active; 1: always beatjump (for reigborg: ) | |
| "na"/4 NEW POSITION (range: 0..1000) | |
| "ne"/4 HC4500 minutes | |
| "ni"/4 HC4500 seconds | |
| "no"/4 SEEK lock | |
| "ns"/4 HC4500 frames | |
| "nx"/4 HC4500 total length lock <<<<< (0: init ; 1: loaded; 2: ...) | |
| ***** | |
| "y0"/1 - MIXER_FX reconfigure lock | |
| "y9"/1 - MIXER_FX buttons lock | |
| "ym"/1 - DEFAULT 4-beat/8-beat | |
| "yn"/1 - AUTO RESET (tk side) | |
| "y1"/4 MIXERFX mouse selection | |
| "y5"/4 JOG NEEDLE | |
| "ye"/4 DECK FLAVOR (STEM) (1: track deck / 2: remix / 3: stem / 4: live input) | |
| "yi"/4 FREE | |
| "yx"/4 FREE (note: this includes yy, which is not local!) | |
| ***** | |
| "z0"/1 - OPERATING SYSTEM CONFIG: 0: Windows; 1: MacOS | |
| "z9"/1 - JogFX state (this is global for all decks) | |
| "zm"/1 - smooth echo | |
| "zn"/1 - smooth echo | |
| "za"/4 time mode elapsed/remain | |
| "ze"/4 FREE | |
| "zi"/4 FREE | |
| "zx"/4 blink sub-clocks divider | |
| HC4500 CCs: | |
| ----------- | |
| if oo<64 then exit rules, skip Outgoing Action | |
| if oo>73 then exit rules, skip Outgoing Action | |
| if oo==64 then Goto "track_number_msb" | |
| if oo==65 then Goto "track_number_lsb" | |
| if oo==66 then Goto "time_minutes" | |
| if oo==67 then Goto "time_seconds" | |
| if oo==68 then Goto "time_frame" | |
| if oo==69 then Goto "pitch_polarity" | |
| if oo==70 then Goto "pitch_msb" | |
| if oo==71 then Goto "pitch_lsb" | |
| if oo==72 then Goto "track_position_normal" | |
| if oo==73 then Goto "track_position_rev" | |
| layout deck shift: | |
| ------------------ | |
| TK OUT: ch05 CC 124 [1..5] | |
| TK IN: ch05 CC 30 [0..127] | |
| "ii"/1 - ACTUAL active left deck (0: init; 1: deck A; 3: deck C) | |
| "ij"/1 - ACTUAL active right deck (0: init; 2: deck B; 4: deck D) | |
| "ik"/1 - PC APP CONNECT TIMER (disables forced side because of auto-detect) | |
| "il"/1: AUTO-LAYOUT ENABLED? | |
| 0: DISABLED | |
| (=Constant layout) | |
| Double click active; shift+deck ctive | |
| 1: ENABLED | |
| (=Automatic layout) | |
| All gestures enabled + automatically change on simple press | |
| "im"/1 - CURRENT LAYOUT. This is read on the init phase. | |
| 0: init | |
| 1: auto, 2D Parallel | |
| 2: auto, 4D Paralell | |
| 3: auto, 2D Classic | |
| 4: auto, 4D Classic | |
| 5: preparation | |
| "j0"/1 - deck select shortcut - remix decks | |
| 0: normal | |
| 1: we pressed a remix deck shortcut on deck A&B. | |
| this is then Latched until we press deck select explicitly | |
| on traktor init: previous layout is kept | |
| on bome init: initial config is set | |
| on changing on the gui to another value: automatic is disabled. | |
| shift_deck = turn on again auto | |
| update march 2021: | |
| ------------------ | |
| firmware 1.12 sends: | |
| 93 72 (= 114 dec / F#8) (this is deck select) | |
| 93 3C (= 60 dec / C4) (this is new in 1.12. It tells the new selected deck on the correct channel) | |
| Generic Double click support: | |
| --------------------- | |
| "ie" - DlbClick: in progress (0: None; 1: Inside timer; 2: DblClick was Triggered) <<<<<< | |
| "if" - DlbClick: which channel | |
| "ig" - DlbClick: which NOTE | |
| "ih" - previous track (with 2 seconds) --- emulation of previous track / next track. UNFINISHED | |
| Generic long press support: | |
| ------------------- | |
| "hi" - long press: current state (0- nothing; 1 - waiting for first trigger; 2 - waiting for second trigger) | |
| "hj" - long press: which CHANNEL | |
| "hk" - long press: FREE | |
| "hl" - long press: which NOTE | |
| Turntable FX - TTFX: | |
| -------------------- | |
| IN PLAY CC "77" -> "zo" (deck playing) | |
| IN JOG touch CC "78" -> "zs" (deck jog) | |
| a) deck is paused: | |
| pass B-1 normally | |
| b) deck is playing, but flux ON: | |
| does C#7 action | |
| does C#7 INV action when the user releases the button | |
| c) deck is playing, but flux OFF: | |
| received from DDJ: | |
| B-1: filter out if its playing | |
| B-1 invert: filter out always | |
| ---------------- | |
| step_1: sends C#7 (97) (normal) | |
| activates FX | |
| set TTFX | |
| dry wet 100% | |
| wait 400ms | |
| step_2: sends B-1 (11) (normal) (these actions can be swapped) | |
| pauses track | |
| dry wet 0% | |
| wait 150ms | |
| step_3: sends C#7 (97) INVERT | |
| beatjump | |
| turns off FX | |
| wait 150ms | |
| step_4: sends B-1 (11) INVERT | |
| dry wet 100% | |
| update 2020-11-02: | |
| ------------------ | |
| TTFX delay is now controlled as follows by the sampler volume. | |
| Step1: | |
| Sampler value: | |
| - INPUT: | |
| - value is first scaled to a percentage 0..100 -> "k0" | |
| - for user feedback, original value is sent unchanged | |
| - OUTPUT: | |
| - for TIME: 9xP + P*P/10 (semi exponential) | |
| - for TTFX, percentage is scaled to 16K..5,4K (note: 16k = "none") | |
| -> ch07 CC 22+54 - Sampler volume + shift3 (NEW BOME) <<< | |
| step2: | |
| - delay 150ms | |
| step3: | |
| - delay 150ms | |
| Turntable FX - Stewe version: https://maps.djtechtools.com/mappings/9325 | |
| ----------------------------- | |
| sequence is m4= 0..7 -> 0 | |
| step 1: C#7 | |
| wet 100% | |
| knob 0.62 | |
| button ON | |
| step 2: B-1 | |
| play/pause = PAUSE | |
| beatjump -1 | |
| step: | |
| beatjump -1/2 | |
| step: C-7 INV | |
| dry = 0% | |
| knob=1 | |
| button=off | |
| store preset | |
| step: | |
| same | |
| Gestures on CFX ColorFX selectors: | |
| ------------------------------ | |
| NORMAL: | |
| C-1 0 C#-1 1 (all on ch7) | |
| D-1 2 D#-1 3 | |
| SHIFTED: | |
| G#-1 8 A-1 9 | |
| A#-1 10 B-1 11 | |
| Pad MLM and macroFX knob: | |
| ------------------------- | |
| "is" macroFX Knob value (14 bit) | |
| "ix" pad MLM - previous pad pressed | |
| sequence is: | |
| change knob -> "is" | |
| press pad: remember pad ("ix") -> timer 30ms -> send knob -> send pad again | |
| ColorFX state machine: | |
| ---------------------- | |
| 4 buttons = 0..3 | |
| +shift = 8..11 | |
| when "0" is active, pressing "0" sends "0 off" | |
| when "0" is active, pressing "1" sends "0 off"/"1 on" | |
| when "0" is active, pressing "shift+0" sends "8 off" | |
| when "0" is active, pressing "shift+1" sends "8 off" then "9 on" | |
| Filter Dual Polarity (16x filter): | |
| ---------------------------------- | |
| Input (from DDJ): | |
| button: ch7 notes 0/1/2/3 | |
| filter: ch7 CC 23+55/24+56/25+57/26+58 (14-bit) | |
| pads: ch8/10 note 60/61/62/63 | |
| Output (to Traktor): | |
| ch1..4 CC (ALL NEW CCs) | |
| shift: | |
| no shift: all special operations | |
| shift1: FULLRANGE of that effect | |
| shift2: BYPASSES deck 3/4 mixerFX | |
| Variables: | |
| "z0"/1 - CONFIGURATION: 0: Windows; 1: MacOS | |
| "l9"/0 - CONFIGURATION: are 16x filters enabled? (0: disabled; 1: ENABLED) | |
| "j1"/4 CFX which SET we selected (per channel) (0: set #1; 1: set #2; ...) | |
| "j5"/4 CFX enabled/disabled (per channel) (0: disabled; 1: enabled on CFX buttons; 2:enabled per channel) | |
| "y0"/1 - MIXER_FX reconfigure lock | |
| "y9"/1 - MIXER_FX buttons lock (wait 30ms to receive all inputs, then cascade final answer to all 4x decks) | |
| "in"/1 - CFX buttons are blinking | |
| ////////// | |
| "is"/4 CFX knob REAL value (14 bit, centered in zero) | |
| is - CFX1 | |
| it - CFX2 | |
| iu - CFX3 | |
| iv - CFX4 | |
| "l5"/4 CURRENT Polarity | |
| 1: positive; 2: positive (we need refresh) | |
| -1: negative; -2: negative (we need refresh) | |
| l5 - CFX1 | |
| l6 - CFX2 | |
| l7 - CFX3 | |
| l8 - CFX4 | |
| "jx"/4 PRESHIFTED Polarity | |
| 0: no shift pressed; 1: positive (right); -1: negative (left) | |
| jx - CFX1 | |
| jy - CFX2 | |
| jw - CFX3 | |
| jx - CFX4 | |
| Use cases: macOS version: | |
| ------------------------- | |
| macOS version - 16x filters OFF: | |
| no translation done | |
| pressing color button = changes single mixerFX for all chanels | |
| turning knob - no translation | |
| 16 filters ON: | |
| color buttons select both mixerFX and macroFX | |
| filter#1 is kept to mixerFX | |
| filter#3 translated to macroFX (new code) | |
| pad buttons do the same, BUT FOR THAT DECK ONLY | |
| FINAL SETS: | |
| 0: DubEcho: wormhole (echo) 81 / polarwind (flanger) 86 dot delay 7 / barberpole 6 | |
| 1: Pitch: flighttest (echo) 89 / Eventhoriz (filter) 88 dualdelay 2 / flanger 5 | |
| 2: Noise: laserslicer (BM) 83 / zzzurp (BM+flanger) 82 reverb 1 / noise 3 | |
| 3: Filter: resonant filter 78 crush 8 / gater 4 | |
| 4: darkmatter 87/ bass-matic 85 | |
| 5: granuphase 84 / streetch fast 91 | |
| 6: streetch S 90 / streetch fast 91 | |
| macroFX: | |
| Wormhole = ECHO heavy filter + heavy flanger + delay (Buildup//breakdown) | |
| PolarWind = FLANGER heavy flanger (coloring) + light filter + reverb (Mixing/punch in) | |
| FlightTest = ECHO heavy echo + resonant filter (Punch In) | |
| EventHorizon = FILTER HEAVY filter + echo (Breakdown/punch in) | |
| LaserSlicer = BEATMASHER heavy beatmasher + flanger (Punch in/buildup/breakdown) | |
| Zzzurp = BEATMASHER related to Ringmodulator (masher + flanger + crush + reverb) (Punch in/breakdown) | |
| DarkMatter = CRUSH heavy crush + delay + compression (for Mixing) | |
| Bass-o-Matic = BEATMASHER heavy triplets slicer (Punch in/breakdown) | |
| GranuPhase = BEATMASHER delay to 2nd and 4th beat (Punch in/buildup/breakdown) | |
| Strrretch (Slow) = loop sampler (Buildup/breakdown) | |
| Strrretch (Fast) = loop sampler (Buildup/breakdown) | |
| mixerFX: | |
| Reverb 1: ECHO resonant reverb + heavy filter | |
| Dual Delay 2: ECHO 1/2 delay + filter | |
| Noise 3: NOISE white noise + filter | |
| Time Gater 4: GATER ON/OFF BPM-sync + filter | |
| Flanger 5: FLANGER 4-beat flanger + filter | |
| Barber Pole 6: FLANGER soft Shepard Tone | |
| Dotted Delay 7: ECHO heavy delay (staccato) | |
| Crush 8: CRUSH bit crush (no pitch increase) + filter | |
| monitor cue config: | |
| ------------------- | |
| note: ch1.c6 - normal monitor cue | |
| note: ch1.g#7 - external configuration ON/OFF | |
| "i9"/1 - external monitor cue | |
| CC: ch7 44+12 cue mix | |
| CC: ch7 45+13 cue volume | |
| NEW CC: ch7.Note 60 C4 (NEW TAKEN BY HAND) | |
| M6: MONITOR CUE SETTING | |
| 0: EXTERNAL monitor mode (default for all 4-deck controllers) | |
| 1: INTERNAL monitor mode (DDJ-SR, DDJ-SB, etc) | |
| BeatFX state machine: | |
| --------------------- | |
| ON/OFF = ch05 B4 (=71) | |
| traktor: hold (=remote control) | |
| tested that this button always sends 127 when pressed, 0 when release. THUS NO VISIBILITY ON TRUE VALUE. | |
| PC app connect - no reaction | |
| channel select: ch05 E0..G0 (16..19); other = 20..22 | |
| "h0" = real ON/OFF button state | |
| "h9" = which deck selected: 0 = master/mic/sampler; 1..4 = decks | |
| input: 24 00 -> 25 FF (turn off previous one, turn on new one) | |
| conclusion: | |
| - do store preset on parameter up/down; dry/wet; master on/off | |
| selector: | |
| old FX 00 -> dry=0 (invert) | |
| old FX 7F - select new effect | |
| old FX 7f (delayed) - turn on button | |
| (CH5 C-1 SPECIAL NOTE) <<<<<< | |
| ddj_1000 knob beatfx: (dedicated kontrols for unit4) | |
| no shift: CC10+42 beatFX dry/wet (ddj_1000 case, no shift) | |
| shift1: CC11+43 beatFX parameter (dry/wet+shift1) | |
| shift2: CC12+44 beatFX parameter2 (dry/wet+shift2) | |
| shift3: CC13+45 (no action) | |
| How beatFX works: | |
| ----------------- | |
| DDJ SX2 uses channel 5 and 6: | |
| CCs 0,2,4,6, | |
| +shift: 16,18,20,22 | |
| this makes it access all 4x FX units | |
| DDK-1000 uses channel 5 and CC 2. | |
| There is no hardware shift. There is no other CCs. No channel 6. | |
| -> in BOME we swallow that specifc message and replace with entirely new messages | |
| ON/OFF: note ch5.b4 is also shared | |
| -> we send ch5.C-1 instead (this was free) | |
| To merge the mapping, I've added these messages back | |
| traktor remote control by BOME: | |
| ------------------------------- | |
| direct = 0/1 (change state) | |
| hold = remote control : 127 -> 1 / 0 -> 0 | |
| toggle: (no visibility except if an OUT command as well) | |
| pressing shift: | |
| 1: MIDI IN [DDJ-1000]: 91 3F 7F | |
| 2: MIDI IN [DDJ-1000]: 96 7B 7F <<<<< unknown | |
| shift+jog platter turn (Vinyl mode=ON): | |
| 1: MIDI IN [DDJ-1000]: 91 3F 7F | |
| 2: MIDI IN [DDJ-1000]: 96 7B 7F | |
| 3: MIDI IN [DDJ-1000]: 91 67 7F | |
| 4: MIDI IN [DDJ-1000]: 96 7B 00 | |
| 5: MIDI IN [DDJ-1000]: 91 79 7F <<<< unknown | |
| 6: MIDI IN [DDJ-1000]: B1 1F 41 | |
| 7: MIDI IN [DDJ-1000]: B1 1F 41 | |
| ... | |
| 68: MIDI IN [DDJ-1000]: B1 1F 41 | |
| 71: MIDI IN [DDJ-1000]: B1 1F 3F | |
| 72: MIDI IN [DDJ-1000]: 91 67 00 | |
| 73: MIDI IN [DDJ-1000]: 91 79 00 | |
| 74: MIDI IN [DDJ-1000]: 91 0A 7F <<<<<<< unknown | |
| Channel 1..4 FREE NOTES (TK IN): | |
| -------------------------------- | |
| ch1..ch4 NOTES: | |
| to generate this file: | |
| cat ddj-1000\ notes\ low\ channels.txt | egrep "^NOTE" | awk '{print $2}' | sed 's|/|\n|g' | sort -un | awk 'BEGIN{a=0} { while(a<$1){print a; a = a +1;}; a = $1 + 1}' | |
| 10 "A#-1" - loop 1/2x (DDJ-SZ adaptor) | |
| 13 "C#0" - loop 2x | |
| 14 "d0" LOOP IN long press (NEW) | |
| 15 "D#0" LOOP IN shift2 (NEW) | |
| 18 "F#0" LOOP OUT long press (NEW) | |
| 19 "G0" LOOP OUT shift2 (NEW) | |
| 25 "C#1" LOOP AUTO longpress (NEW) | |
| 33 "A1" LOOP AUTO shift2 (NEW) | |
| 35 "B1" LOAD SELECTED INTO DECK (NEW) (127: load) | |
| 52 | |
| 55 | |
| 58 | |
| 59 | |
| 60 "C4" -> deck select firmwave 1.12 NEW! | |
| 65 | |
| 69 | |
| 75 | |
| 78 "f#5" - PREPARE echo out (step 1: channel 1..4; step 2: channel 5 only | |
| 79 "G5" - NEW sync HOLD style | |
| 96 - master tempo | |
| 97 "C#7" - TTFX normal play/pause | |
| 11 "B-1" - STANDARD play/pause | |
| 117 "A8" - TTFX flux mode fake play/pause | |
| 114 "F#8" - STANDARD deck change message | |
| 115 "G8" - seek to front | |
| 116 "G#8" - FREE | |
| 117 "A8" - TTFX flux mode | |
| 118 "A#8" = tempo range down (NEW PEDRO) | |
| ("C7" = tempo range cycle up - as originally made by Pioneer) | |
| 119 "B8" - enlarger: tempo Reset to 6% | |
| 120 "C9" - previous track (standard = E8) | |
| 121 "C#9" - next track (standard = F8) (update fw 1.2: this is sent as well on shift+jog) | |
| 122 - STANDARD - page ">" | |
| 123 - STANDARD | |
| 124 - STANDARD | |
| 125 - STANDARD | |
| 126 - STANDARD | |
| Channel 1..4 FREE CCs (TK IN): | |
| ----------------------------- | |
| /// 14-bit CCs | |
| 0+32 - tempo | |
| 1 | |
| 2 - PFL (out only) | |
| 3 | |
| 4+36 gain | |
| 5+37 - tempo shift | |
| 7+39 EQ hi | |
| 11+43 EQ | |
| 15+47 EQ | |
| 19+51 - fader | |
| 20 - jog screen - position (out) | |
| 21 - jog screen - bpm value (out) | |
| 22 - jog screen - speed (out) | |
| 23 - jog screen - cue marker (out) | |
| 24+56 - free | |
| 25+57 - free | |
| 26+58 - free | |
| 27+59 - free | |
| 28+60 - free | |
| 29+61 - free | |
| 30+62 - free | |
| 31+63 - free | |
| 31 - jog | |
| 32+0 - tempo | |
| 33 - jog | |
| 34 - jog | |
| 35 - jog | |
| 36 | |
| 37 | |
| 38 - jog | |
| 41 - jog | |
| 51+19 - volume | |
| .... | |
| 56+24 - free | |
| 57+25 - free | |
| 58+26 - free | |
| 59+27 - free | |
| 60+28 - free | |
| 61+29 - free | |
| 62+30 - free | |
| 63+31 - free | |
| ------ NEW CCs start here (7 bit) | |
| 64: force delay T3 (slot2) (<<<<< NOT DONE) | |
| 65: force reverb (slot2) | |
| 66: force flanger (slot2) | |
| 67: free | |
| 68: free | |
| 69: free | |
| 70: free | |
| 71: Force mixerFX1 | |
| 72: Force mixerFX2 | |
| 73: Force mixerFX3 | |
| 74: Force mixerFX4 | |
| 75: Force mixerFX5 | |
| (windows version will do this at the BOME level ONLY) | |
| 76: FX Unit1 - CHANGE TO GROUP MODE | |
| Press: | |
| - set group mode | |
| - Route FX units | |
| - FX1: TTFX; FX2: = None; FX3: (CC 81..88) | |
| - dry = 0% | |
| Release: | |
| - dry = 100% | |
| - TTFX button1 = OFF | |
| 78: FX Unit1 - CHANGE TO SINGLE MODE | |
| Press: | |
| (as above, but in single mode and sets the buttons and resonance as required) | |
| Release: | |
| (see above) | |
| 77: FX UNIT 1/2 ON/OFF / GROUP SLOT 3 (HOLD style) | |
| 80: MIXER_FX ON/OFF (HOLD style) | |
| (note CC 77: this is sent twice. One immediately, another after the delay) | |
| (WHY? if dry wet is zero on purpose?) | |
| sequence is: | |
| 71 (force mixerFX), 77 (mixerFX turn on) | |
| 76 (set group, dry=0), 76 INV (dry=100%), 81 (set macroFX) | |
| 79: Advanced panel set (HOLD style) | |
| 81: goto macroFX1 (all these are on slot3) | |
| 82: goto macroFX2 | |
| 83: goto macroFX3 | |
| 84: goto macroFX4 | |
| 85: goto macroFX5 | |
| 86: goto macroFX6 | |
| 87: goto macroFX7 | |
| 88: goto macroFX8 | |
| 89: goto macroFX9 | |
| 90: streetch slow | |
| 91: streetch fast | |
| 93: STEM FX - relative slot1 (NOT USED) | |
| 94: STEM FX - relative slot2 | |
| 95: STEM FX - relative slot3 | |
| 96: STEM FX - relative slot4 | |
| 97: STEM FX - DIRECT slot1 (USED) | |
| 98: STEM FX - direct slot2 | |
| 99: STEM FX - direct slot3 | |
| 100: STEM FX - direct slot4 | |
| 101: STEM VOLUME - relative slot1 (NOT USED) | |
| 102: STEM VOLUME - relative slot2 | |
| 103: STEM VOLUME - relative slot3 | |
| 104: STEM VOLUME - relative slot4 | |
| 105: STEM VOLUME - direct slot1 (USED) | |
| 106: STEM VOLUME - direct slot2 | |
| 107: STEM VOLUME - direct slot3 | |
| 108: STEM VOLUME - direct slot4 | |
| 109: INST DOUBLES - FROM "A" to this deck | |
| 110: INST DOUBLES - FROM "B" to this deck | |
| 111: INST DOUBLES - FROM "C" to this deck | |
| 112: INST DOUBLES - FROM "D" to this deck | |
| 92: POLY MOVE SIZE (IN, direct) | |
| 113: POLY Loop size + Set DIRECT | |
| 114: POLY Loop size selector DIRECT | |
| 115: POLY Loop active ON/OFF | |
| 116: FREE | |
| 117: STEM FILTER - relative slot1 | |
| 118: STEM FILTER - relative slot2 | |
| 119: STEM FILTER - relative slot3 | |
| 110: STEM FILTER - relative slot4 | |
| 121: STEM FILTER - direct slot1 | |
| 122: STEM FILTER - direct slot2 | |
| 123: STEM FILTER - direct slot3 | |
| 124: STEM FILTER - direct slot4 | |
| Channel 1..4 CCs (TK OUT): | |
| -------------------------- | |
| CC "02" - deck PFL volume (REGULAR) | |
| CC "66" - tempo adjust | |
| CC "67" - advanced panel status OUT -> "h5"/4 -> "CC 79" | |
| CC "68" - cue (state) | |
| CC "69" - deck flavor STEM | |
| CC "70" - loop size | |
| CC "71" - move size | |
| CC "72" - FREE | |
| CC "73" - FREE | |
| CC "74" - FREE | |
| CC "75" - any loop active -> (none) | |
| CC "76" - is in active loop -> "le" | |
| CC "77" - play/pause | |
| CC "78" - jog touch | |
| CC "79" - pressed any hotcue | |
| CC "80" - free | |
| CC "81" - key adjust | |
| CC "82" - track end warning | |
| CC "83" - deck volume | |
| CC "84" - free | |
| CC "85" - deck phase | |
| CC "86" - free | |
| CC "87" - free | |
| CC "88" - free | |
| ---------- | |
| CC "89" - deck position LR | |
| CC "90" --->> HR values, assume all is taken | |
| CC "100" | |
| CC "110" | |
| encoder relative modes: | |
| ----------------------- | |
| 3Fh/41h | |
| jog wheels | |
| 7Fh/01h | |
| browser: | |
| ch7 cc 64 | |
| ch7 cc 100 | |
| beats: | |
| ch05 cc 0 | |
| ch05 cc 1 | |
| ch06 cc 0 | |
| ch06 cc 1 | |
| Channel 5 Free notes (TK IN): | |
| ----------------------------- | |
| # cat ddj-1000\ ch5\ notes.txt | egrep "^NOTE" | awk '{print $2}' | sed 's|/|\n|g' | sort -un | awk 'BEGIN{a=0} { while(a<$1){print a; a = a +1;}; a = $1 + 1}' | |
| 0 C-1 - DDJ-1000 BeatFX HOLD mode (NEW) (0/127) | |
| 1 C#-1 - Select up/down (encoder 1/7f mode) | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 23 | |
| 24 | |
| 25 | |
| 26 | |
| 27 | |
| 28 | |
| 29 | |
| 30 | |
| 31 | |
| 46 | |
| 47 | |
| 48 | |
| 49 | |
| 50 | |
| 51 | |
| 52 | |
| 53 | |
| 54 | |
| 55 | |
| 56 | |
| 57 | |
| 58 | |
| 59 | |
| 60 | |
| 61 | |
| 62 | |
| 63 | |
| 65 | |
| 66 | |
| 68 | |
| 69 | |
| 70 | |
| 76 | |
| 77 | |
| 78 f#5 channel 5 - ECHO OUT STEP 0 | |
| 79 g5 channel 5 - ECHO OUT STEP 2 | |
| 80 g#5 channel 5 - ECHO OUT STEP 3 | |
| 81 a5 channel 5 - ECHO OUT STEP 4 | |
| 82 | |
| 83 | |
| 84 | |
| 85 | |
| 86 | |
| 87 | |
| 88 | |
| 89 | |
| 90 | |
| 91 | |
| 92 | |
| 93 | |
| 94 | |
| 95 | |
| 96 | |
| 97 | |
| 98 | |
| 106 | |
| (and above) | |
| Channel 5/6 Free CC (In): | |
| ------------------------- | |
| TODO MUCH LATER: | |
| - support SX2 features "as-is" | |
| - move all DDJ-1000 beatFX buttons to dedicated buttons | |
| - | |
| # cat ddj-1000\ ch5\ notes.txt | grep CC | awk '{print $2}' | sed 's|/|\n|g' | sort -un | awk 'BEGIN{a=0} { while(a<$1){print a; a = a +1;}; a = $1 + 1} END{print "And above"}' | |
| 0 DDJ-SX2 beats unit 1/2 (ch5_0 = unit1 / ch6_0 = unit 2 / ch5_1 = unit 3 / ch6_1 = unit 4) | |
| 1 DDJ-SX2 beats unit 3/4 | |
| 2 DDJ-SX2 Knob1 unit 1/2 / (same as DDJ-SZ FX1 drywet) | |
| 3 DDJ-SX2 Knob1 unit 3/4 | |
| 4 knob2 | |
| 5 knob2 | |
| 6 knob3 | |
| 7 knob3 | |
| 8 | |
| 9 | |
| 10 BOME_NEW beatFX dry/wet (ddj_1000 case, no shift) | |
| 11 BOME_NEW beatFX parameter1 (dry/wet+shift1) | |
| 12 BOME_NEW beatFX parameter2 (dry/wet+shift2) | |
| 13 BOME_NEW beatFX parameter3 (dry/wet+shift3) | |
| 14 BOME_NEW MFX FX1 knob3 <<<<< superknob macroFX | |
| 15 BOME_NEW MFX FX2 knob3 <<<<< superknob macroFX | |
| 16 sx2? | |
| 17 | |
| 18 sx2? | |
| 19 | |
| 20 sx2? | |
| 21 | |
| 23 | |
| 24 | |
| 25 | |
| 26 | |
| 27 | |
| 28 | |
| 29 | |
| 30 SET new layout | |
| 31 | |
| 32 | |
| 33 | |
| 35 | |
| 37 | |
| 39 | |
| 40 | |
| 41 | |
| 42 BOME_NEW beatFX dry/wet | |
| 43 BOME_NEW beatFX parameter1 | |
| 44 BOME_NEW beatFX parameter2 | |
| 45 BOME_NEW beatFX parameter3 | |
| 46 BOME_NEW MFX FX1 knob3 (macroFX) | |
| 47 BOME_NEW MFX FX2 knob3 (macroFX) | |
| 48 | |
| 49 | |
| 51 | |
| 53 | |
| (Everything above 53 is free) | |
| channel 5 free CC (TK OUT): (MIXER) | |
| ------------------------- | |
| (none were previously used) | |
| CC 124 - current layout TK OUT | |
| CC 125 - echoFX in progress -> "i0" | |
| CC 126 - jogFX global status -> "z9" | |
| 23, 39, 55 | |
| Channel 7 free Notes/CC TK IN: (BROWSER, GLOBAL) | |
| ------------------------------ | |
| CC 1+33 - crossfader CURVE | |
| CC 3+35 - sampler volume (REGULAR) | |
| CC 7+30 - MIC high | |
| CC 8+40 - master volume | |
| CC 9+41 - booth volume | |
| CC 10+42 - sampler volume + shift1 (NEW BOME) <<< | |
| CC 11+43 - sampler volume + shift2 (NEW BOME) <<<< | |
| CC 12+45 - cue mix | |
| CC 13+45 - cue volume | |
| CC 13+45 - UNK | |
| CC 15+47 - MIC low | |
| CC 22+54 - Sampler volume + shift3 (NEW BOME) <<< | |
| TTFX TODO: move this to ch5.cc.2 | |
| cc 23+55 - Filter knob A | |
| cc 24+56 - Filter knob b | |
| cc 25+57 - Filter knob c | |
| cc 26+58 - Filter knob d | |
| cc 27+59 - Filter sampler | |
| cc 28+60 - Filter osc | |
| cc 29+61 - OSC param | |
| cc 30+62 - osc volume | |
| cc 31+63 - crossfader | |
| cc 64 - browser | |
| cc 64 - only browser on | |
| cc 100 - browser tree | |
| cc 105 - sampler+shift | |
| (free values were not checked) | |
| channel 8,10,12,14 free CCs (IN): punch | |
| --------------------------------- | |
| 0 triger slot 1 cell 1 | |
| 15 triger slot 1 cell 16 | |
| 16 triger slot 2 cell 1 | |
| 31 triger slot 2 cell 16 | |
| 32 triger slot 3 cell 1 | |
| 47 triger slot 3 cell 16 | |
| 48 triger slot 4 cell 1 | |
| 63 triger slot 4 cell 16 | |
| 64: goto page | |
| 65: FREE | |
| 66: FREE | |
| 67: FREE | |
| 68: select sample - slot 1 (USED) | |
| 69: select sample - slot 2 | |
| 70: select sample - slot 3 | |
| 71: select sample - slot 4 | |
| Applescript inject mouse clicks: | |
| -------------------------------- | |
| The current change mixerFX feature is only supported by BOME on Windows. | |
| However this is possible in macOS using applescript. | |
| See page 61 and ff of the bome manual. | |
| In particular how to pass variables to applescript. | |
| mouse clicking at certain coordinates: | |
| https://apple.stackexchange.com/questions/266784/how-do-i-make-the-mouse-click-at-current-location-using-applescript | |
| mouse tools: | |
| http://www.hamsoftengineering.com/codeSharing/MouseTools/MouseTools.html | |
| if you are a macOS developer and want to help, please contact me. | |
| "z0"/1 - OPERATING SYSTEM CONFIG: 0: Windows; 1: MacOS | |
| "km"/1 - mouse injection X - location of preferences window | |
| "kn"/1 - mouse injection Y - location of preferences window | |
| Cross-Channel Compilation: | |
| -------------------------- | |
| BOME problems: | |
| echo out - deck 1 | |
| play pause - doesnt work | |
| ver beatgriding | |
| Timers: | |
| "IN" TIMERS: ok | |
| "OUT" TIMERS: | |
| NEED TO END in "1". PUT "step_a" in the middle | |
| knob3 -> still gets compiled into 2x times | |
| superknobs CH2: | |
| these are done by hand | |
| Errors: | |
| search "error" on whole BOME log | |
| Time elapsed: | |
| manually activate old method for deck C&D | |
| CHANNEL >5 messages: | |
| $ bome_analyse_project.sh -hc | |
| Timer coalescing template: | |
| -------------------------- | |
| //////////////////////// | |
| // coalescing support: | |
| // xx: 0 = no blinking; 1 = blinking | |
| xx=0 | |
| ///////////////// | |
| // BLINK TEMPLATE FOLLOWS | |
| ///////////////// | |
| Label "do_blink_very_slow" | |
| xx=1 | |
| if zx==0 then Goto "show_solid_on" | |
| Goto "show_solid_off" | |
| Label "do_blink_slow" | |
| xx=1 | |
| if zy==0 then Goto "show_solid_on" | |
| Goto "show_solid_off" | |
| Label "do_blink_fast" | |
| xx=1 | |
| if zw==0 then Goto "show_solid_on" | |
| Goto "show_solid_off" | |
| Label "do_blink_veryfast" | |
| xx=1 | |
| if zz==0 then Goto "show_solid_on" | |
| Goto "show_solid_off" | |
| //////// | |
| Label "show_solid_off" | |
| pp=0 | |
| Goto "end" | |
| Label "show_solid_on" | |
| pp=127 | |
| Goto "end" | |
| /////////////////////////// | |
| Label "end" | |
| //////////////////// | |
| // blink coalescing support | |
| // are we blinking? | |
| if xx==1 then exit rules, execute Outgoing Action | |
| // did we wake up by a button? | |
| if hm==1 then exit rules, execute Outgoing Action | |
| // else | |
| exit rules, skip Outgoing Action | |