Modix ===== Code: Juan Antonio Arguelles Rius Web : http://www.arguru.com http://ntk.tsx.org Vers: Release 11 Additional documentation taken from: "The USENET MIDI" Primer by Bob McQueer License ======= Gearware, if u would like to see this program continued, send MIDI gear to my address [contact me via email to get my home-address]. Any synths, modules, fx, etc are welcomed. Contributors will gain the right of suggest new features. Money is also accepted. Overview ======== Modix is a win32 application. Is a realtime programmable MIDI sequencer that supports multiple midiout and modular pattern system. It's very handy to use in addition with virtual synths/samplers software, but of course, it works with your external midi gear (if any). Basically, we can divide the sequencer in two parts. The pattern banks and the sequencer matrix. We use the pattern editor to put notes, controller operations, etc, and the sequencer to set the play order. The sequencer shows you 16 tracks, each. one is assigned to a midi channel. Any pattern can be played by any track. Patterns are 256 lines maximun and 4 tracks. Each channel have a single program and device assigned, however, program changes are allowed inside sequencer sending control msgs. For the timing, the program uses internal multimedia timer with +/-2ms precission error. Notice, not all devices and systems will response accurately to the timer. U can also save and load your songs as .mdx files. Is an internal compressed fileformat. Pattern row =========== This is the pattern row syntax: C-3 35 B0 40 nnn vv cc xx where: [All values in HEXADECIMAL] nnn = note, from C-0 to B-9. Is supposed that 60 [dec] is the centered scale C note. vv = note velocity. Leave empty for default channel velocity. The velocity bytes for velocity sensing keyboards are supposed to represent a logarithmic scale. "advisable" in the words of the spec. Non-velocity sensing devices are supposed to send velocity 64. cc = command where: 80 = Note gate. Releases note at half tick. No parameters. 90 = Set bpm. 'xx' = new bpm. D0 = Note delay. Triggers note at half instead at beginning of the tick. No parameters. E0 = Note retrigger. No parameter. Controller change ----------------- Use range of commands from 00 to 7F to change any channel controllers. Instruments are so fundamentally different in the various controls they have that no attempt was made to define a standard set, like say 9 for "Filter Resonance". Instead, it was simply assumed that these messages allow you to set "controller" dials, whose purposes are left to the given device, except as noted below. The first data bytes correspond to these "controllers" as follows: controller: 0 (0x00) - 31 (0x1f) continuous controllers 0 - 31, most significant byte 32 (0x20) - 63 (0x3f) continuous controllers 0 - 31, least significant byte (for precission) 64 (0x40) - 95 (0x6f) on / off switches 96 (0x70) - 121(0x79) unspecified, reserved for future. 122 (0x7A) - 127(0x7F) the "channel mode" messages. See below: MODE MESSAGES The meaning of the values 122 through 127 is as follows: data byte second data byte (NOT SUPPORTED!, 0 by default!) 122 (0x7A) - local control 0 = local control off, 127 = on 123 (0x7B) - all notes off 0 124 (0x7C) - omni mode off 0 125 (0x7D) - omni mode on 0 126 (0x7E) - monophonic mode number of monophonic channels, or 0 for a number equal to receivers voices 127 (0x7F) - polyphonic mode 0 124 - 127 also turn all notes off. Remarks: - Controller number 1 IS standarized to be the modulation wheel. - Local control refers to whether or not notes played on an instruments keyboard play on the instrument or not. Program change -------------- B0 = Program change, 'xx' = containing program. (In hex!) Pitchbend --------- A0 = Set pitch wheel, (14 bit number) 'xx' -> most significant byte. The pitch wheel value is an absolute setting, 0 - 0x3F. The 1.0 spec. says that the increment is determined by the receiver. 0x20 is to correspond to a centered pitch wheel (unmodified notes) System and realtime messages ---------------------------- Fn = System messages: (cmds F0,F1,F2,F3...F7) Fn = Realtime messages: (cmds F8,F9,FA,FB...FF) The status bytes 0xf0 - 0xff do not have channel numbers in the lower nibble. These bytes are used as follows: SYSTEM MSGS byte(cmd) purpose data bytes (xx) 0xf0 system exclusive variable length 0xf1 undefined 0xf2 song position 2 - 14 bit value, most significant byte 0xf3 song select 1 - song number 0xf4 undefined 0xf5 undefined 0xf6 tune request 0 0xf7 EOX (terminator) 0 REALTIME 0xf8 timing clock 0xf9 undefined 0xfa start 0xfb continue 0xfc stop 0xfd undefined 0xfe active sensing 0xff system reset <- NOT USED Remarks: - The timing clock message is to be sent at the rate of 24 clocks per quarter note, and is used to sync. devices, especially drum machines. - Start / continue / stop are for control of sequencers and drum machines. The continue message causes a device to pick up at the next clock mark. Keyboard shortcuts ================== To enter notes, use keyboard, like most trackers-applications. F1 Show this help file F4 Play pattern F5 Play song F8 Stop SPACE Toggle edit(record) on/off CTRL+B IN PATTERN: Mark pattern block begin. IN SEQUENCER: Set song loop start CTRL+E IN PATTERN: Mark pattern block end. IN SEQUENCER: Set song loop end CTRL+X Cut pattern block CTRL+C Copy pattern block CTRL+V Paste pattern block CTRL+I Interpolate selection, parameter control row CTRL+U Interpolate selection, velocity row CTRL+F3 Cut pattern CTRL+F4 Copy pattern CTRL+F5 Paste pattern / (keypad) Decrease current octave * (keypad) Increase current octave + (keypad) PATTERN: Select next pattern - (keypad) PATTERN: Select previous pattern CTRL + (keypad) SEQUENC: Transpose up CTRL - (keypad) SEQUENC: Transpose down 1 Insert note off History ======= Release 11 * Fixed bug on opening modix songfiles from Windows. * 16 Tracks per pattern instead 4. Release 10 * Fixed another fatal bug when saving song. [Compression stuff is f@|ing me]. But all should be ok now. * Fixed transposing-bug when playing single pattern. * Fixed patchlist bug. Release 9 * Reimplemented sequencer transposing stuff, much nicer now. * Fixed pattern size-changing bug. * Fixed file loading/saving bug. * Fixed GDI bug drawing pattern editor Release 8 * Added delay calculator helper * Added sequencer row-tranposing (Like Sonic foundry's ACID). [Use ctrl and keypad + and -] * Fixed some application register profile stuff. * Changed modix songs icons. * Implemented abilitity to edit / open / save custom patchlists (.mpl files). * Added selection block interpolators. [velocity and parameter control rows]. * Other improvements. Release 7 * Sequencer shows channel-program name in tracks header * Implemented patchname labeller. * Added sequencer channel/prog labeling. * Fixed register stuff. Release 6 * CAUTION: Fileformat changed * Added online pattern programmer helper * 'C0' Control change removed, you can now program directly controls using cmd's from 0x00 to 0x80 * Manual channel selection. Sequencer x-pointer is not attached to select midi channel anymore * Fixed BPM editbox stuff * Added change bpm command [90] * Deleted 2nd data row, (not used anymore) * Sequencer view is bigger. Release 5 * Added pitchbend pattern command. [A0] * Bastly improved documentation with midi reference quotes * Added MIDI system and realtime messages support. (F0-FF) * Note gate changed command changed to 0x80 * Fixed bug on "change program" message * Fixed some bugs in keyboard handling * Fixed some bugs on sequencer navigation * Added song loop points * Added play line and play watch * Fixed change program bug * Fixed bug when overwriting song. Release 4 * Code misc. * Pattern lines now up to 256. * Not public Release 3 * Added play pattern [F4] * Fixed some internal code glitches Release 2 * Improved fonts in sequencer editor * GUI fixes * Cut/Copy/Paste pattern operations * New keyshortcuts * Fixed midi timing bug * Added pop-up menus * Added driver info button * Added program change cmd Release 1 * First public release.