diff --git a/README.md b/README.md index f3ed756..e147f97 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,21 @@ here in Github, but also via [HuBoard](https://huboard.com/perkowitz/issho#/mile # Release notes +## 2019-10-06 v1.0.7 +- Add control tracks to Seq module. +- Use tap/press for selecting and toggling steps on note and control tracks. +- Combined the GATE and VELOCITY editing modes in Seq, since tap/press allows both. +- Finer control of value settings for velocity and controllers. +- Add MONO mode to Seq, for sequencing monophonic melodies. +- Moved outdated modules into a 'deprecated' package. +- Updated to java 12, updated Module reference. + +## 2018-10-14 v1.0.6 +- Fix hang on shutdown. +- Step module goes into random mode while receiving a fill signal. +- Updates from [s0len0id](https://github.com/s0len0id) for running on Windows. +- Independent input and output MIDI settings. + ## 2017-11-26 v1.0.5 - In Beatbox, combine jump and play modes into a single mode. Add momentary pitch control and measure clock. - In Shihai, a fill button that tells all Sessionizeable modules to play a fill. diff --git a/doc/getting-started.md b/doc/getting-started.md index d3850c5..3860376 100644 --- a/doc/getting-started.md +++ b/doc/getting-started.md @@ -47,19 +47,19 @@ sequence data in the directory you run it from, so always run it from here. On a Pi, run it with this command: -`> java -cp issho-1.0.6-shaded.jar net.perkowitz.issho.hachi.Hachi hachi-pi.json` +`> java -cp issho-1.0.7-shaded.jar net.perkowitz.issho.hachi.Hachi hachi-pi.json` On a Mac: -`> java -cp issho-1.0-6-shaded.jar net.perkowitz.issho.hachi.Hachi hachi-mac.json` +`> java -cp issho-1.0-7-shaded.jar net.perkowitz.issho.hachi.Hachi hachi-mac.json` On Windows: * running the app -`> java -cp issho-1.0.6-shaded.jar net.perkowitz.issho.hachi.Hachi ` +`> java -cp issho-1.0.7-shaded.jar net.perkowitz.issho.hachi.Hachi ` * listing available midi devices: -`> java -cp issho-1.0.6-shaded.jar net.perkowitz.issho.util.FindMidiDevices` +`> java -cp issho-1.0.7-shaded.jar net.perkowitz.issho.util.FindMidiDevices` # Set up the Pi diff --git a/doc/hachi/modules/seq-beat.png b/doc/hachi/modules/seq-beat.png new file mode 100644 index 0000000..53f8af7 Binary files /dev/null and b/doc/hachi/modules/seq-beat.png differ diff --git a/doc/hachi/modules/seq-control.png b/doc/hachi/modules/seq-control.png index 89877b7..6a4156d 100644 Binary files a/doc/hachi/modules/seq-control.png and b/doc/hachi/modules/seq-control.png differ diff --git a/doc/hachi/modules/seq-jump.png b/doc/hachi/modules/seq-jump.png index be447f3..f821042 100644 Binary files a/doc/hachi/modules/seq-jump.png and b/doc/hachi/modules/seq-jump.png differ diff --git a/doc/hachi/modules/seq-mono.png b/doc/hachi/modules/seq-mono.png new file mode 100644 index 0000000..ef36c4e Binary files /dev/null and b/doc/hachi/modules/seq-mono.png differ diff --git a/doc/hachi/modules/seq.md b/doc/hachi/modules/seq.md index 74804c3..3f5e929 100644 --- a/doc/hachi/modules/seq.md +++ b/doc/hachi/modules/seq.md @@ -1,68 +1,75 @@ # Overview -Seq is a multi-purpose sequencer. It can run as a drum sequencer ("beat mode") -and will eventually support mono and polyphonic sequencer modes. - -Seq can hold 16 sessions in memory at a time. -Each session contains 16 patterns. -Each pattern has 16 instrument tracks. -Each track consists of 16 steps. -Each step can play a note (with settable velocity) or rest. -Seq also supports 16 control tracks per pattern, which can send -MIDI CC values on each step. -The entire contents of memory can be saved to a file. -Within the Seq module, 16 different files can be saved and loaded, but +Seq is a multi-purpose sequencer. It can run as a drum sequencer ("beat" mode) +and a monophonic sequencer ("mono" mode) +and will eventually support a polyphonic sequencer mode. + +Features: +- Seq can hold 16 sessions in memory at a time. +- Each session contains 16 patterns. +- In Beat mode, each pattern contains 16 tracks, with a MIDI note defined for each track. +- In Mono mode, each pattern contains one track, which can play a monophonic sequence of notes. +- Each track consists of 16 steps. +- Each step can play a note (with settable velocity) or rest. +- Seq also supports 16 control tracks per pattern, which can send MIDI CC values on each step. +- The entire contents of memory can be saved to a file. +- Within the Seq module, 16 different files can be saved and loaded, but the files can be copied, backed up, and shared. Data is saved in a JSON format. -This manual describes how to use Seq for beat mode; other modes will differ. - # Layout and Controls -## Common Controls - -These controls are the same in all modes. +## Controls common to both Beat and Mono modes +### Buttons - Mute: disables the MIDI output of the sequencer. - Settings: toggles between the main view and the settings view. - Save: saves the current memory contents to the current file. - Copy: for copying patterns. - Edit: for selecting a pattern to edit other than the currently running pattern. -- Edit mode buttons: select gate, velocity, control, or pitch. -- Jump mode: selects jump mode rather than one of the edit modes. +- Edit view buttons: select gate, control, or pitch. +- Jump view: selects the jump view rather than one of the edit views. - Fill: plays fill patterns while held down. -## Modes of operation +### Pattern Select +The first two rows of the grid are for selecting the playing patterns, including selecting a range of patterns to be +chained. To select a single pattern, tap the pad; the pattern will begin at the start of the next measure. +To chain a set of patterns, hold down the first pattern in the chain and then press the last pattern in the chain. +Those patterns and all those in between will be played in order, beginning at the start of the next measure. +Whenever a pattern or chain of patterns is selected for play, the first pattern will be selected for editing, but another pattern can be edited by +holding down the pattern edit button (along the left side) and tapping the pattern to edit. Pattern selection +is available in all editing views. -- Beat mode: Seq can function as a 16-track drum sequencer. In this mode, the main controls allow the selection -and muting of tracks, along with the editing of each step for each drum sound. -- Gate and velocity modes: modes for editing individual drum tracks. Gate allows easy toggling of on/off at each -step, while velocity mode makes it easier to quickly edit the per-step velocity. -- Control mode: each pattern also includes 16 MIDI controller tracks, which can be edited in control mode. -- Pitch mode: similar to control mode, but specifically for MIDI pitch bend. -- Jump mode: a performance mode allowing direct playing of drum sounds and realtime manipulation of pattern playback. -- Fill: plays a randomly-selected, algorithmically-computed fill pattern while held down. +### Value Buttons + +These buttons can be used to select from a range of values. In the main editing view, the value buttons are used to +edit the velocity value for each step. In control edit view, they are used to set the value for the controller at +each step. The eight value buttons represent eight values in the relevant numeric range, +with the lowest value at the bottom and highest value at the top; tap a button +to set the velocity to that value. For in-between values, press and hold a button to set the value, and then tap +a button below or above the held button to decrease or increase the value. Tapping a button right next to the held button +will change the value by 1; tapping a button farther away will change the value by 5. -## Beat Mode Editing +## Beat mode -In beat mode, Seq functions as a 16-track rhythm sequencer. Each track controls a single drum sound, -corresponding to a specific MIDI note on the main Seq MIDI channel. +Beat mode provides a drum-machine style interface for programming 16 drum trigger tracks, which can +be used to trigger one-shot drum sounds or samples, as well as sustained loops or other sounds. - + -### Patterns +### Views -The first two rows of the grid in drum view are for selecting the playing patterns, -including selecting a range of patterns to be chained. To chain a set of patterns, hold down the first pattern in the -chain and then press the last pattern in the chain. Those patterns and all those in between will be played in order. -Whenever a pattern or chain of patterns is selected for play, the first pattern will be selected for editing, but another pattern can be edited by -holding down the pattern edit button (along the left side) and tapping the pattern to edit. Pattern selection -is available in all editing modes. +- Gate view: for editing individual drum tracks, used to sequence drum triggers on each track and set velocity. +- Control view: for editing the 16 controller tracks. +each pattern also includes 16 MIDI controller tracks, which can be edited in the control view. +- Pitch view: similar to the control view, but specifically for MIDI pitch bend. +- Jump view: a performance view allowing direct playing of drum sounds and realtime manipulation of pattern playback. +- Fill: plays a randomly-selected, algorithmically-computed fill pattern while held down. -### Tracks +### Gate view -Tracks occupy the 3rd, 4th, 5th, and 6th rows of the grid. The 3rd and 4th row are for muting and unmuting the available tracks. The 5th and 6th rows -select the track for editing using the step pads. Rows 3 and 4 are used for track muting in all edit modes; rows 5 and 6 have different -roles in different modes. +In the gate view, +**tracks** occupy the 3rd, 4th, 5th, and 6th rows of the grid. The 3rd and 4th row are for muting and unmuting the +16 available tracks. The 5th and 6th rows select the track for editing using the step pads. Each track corresponds to a single note value sent on a certain MIDI channel. The MIDI channel can be set in the Settings view. The note numbers are arranged as a keyboard, with the white keys in @@ -71,66 +78,87 @@ The note numbers for row 5 are: 49, 37, 39, 51, 42, 44, 46, and 50. Beat has a configuration option to offset these note numbers by a certain amount; the offset is applied to all note values. For example, including `"midiNoteOffset": 24` in the config file will move the whole drumkit up two octaves. -### Steps - -Steps occupy the 7th and 8th rows of the grid. The 16 step buttons correspond to the 16th note steps of -a full measure. For each track, each step can be turned on or off, and its velocity can be set. -In gate mode, tapping a step button toggles that step in the track between PLAY and REST, and selects it for velocity editing. +**Steps** occupy the 7th and 8th rows of the grid. The 16 step buttons correspond to the 16th note steps of +a full measure. In the gate view, each step can be turned on or off, and its velocity can be set. +Tapping a step pad toggles that step in the track between PLAY and REST, and selects it for velocity editing. If the `tiesEnabled` configuration option is set, then tapping a step cycles through PLAY, TIE, and REST. PLAY means that the note will be played and any previous notes will be stopped. REST means that any previous notes will be stopped without a new note being played. TIE means that any previous note will continue. Enabling TIE allows Seq to be used for triggering beat loops, -samples, notes, gated cymbals, etc. - -In velocity mode, tapping a step selects it for velocity editing without changing the step's gate mode. -When a step is selected in either gate or velocity mode, the value buttons will display the velocity, -and pressing a button will set a new value. Eight velocity values are available, ranging from 15 to 127 in increments of 16. +samples, notes, gated cymbals, etc. Tapping a step pad also selects it so that the velocity can be editing with the value buttons. +To select a step for editing without toggling, press and hold for half a second. -### Value Buttons - -These buttons can be used to select from a range of values. In the main editing mode, the value buttons are used to -edit the velocity value for each step. The eight value buttons represent eight values in the relevant numeric range, -with the lowest value at the bottom and highest value at the top; tap a button -to set the velocity to that value. For in-between values, press and hold a button to set the value, and then tap -a button below or above the held button to decrease or increase the value. Tapping a button right next to the held button -will change the value by 1; tapping a button farther away will change the value by 5. - -## Control Mode +### Control view -Each pattern includes 16 MIDI controller tracks. the MIDI CC numbers are set via the `controllerNumbers` -setting in the config file. The 16 track select pads can be used to select a control track for editing. -In each control track, each step can be enabled and a value can be set using the value buttons. -Tap a pad to toggle that step and select it for editing. To edit a step without toggling it, press and hold the pad for -half a second. - -## Pitch Mode - -Pitch mode is similar to control mode, except that it is used for sending MIDI pitch bend control and there is only -one track. The track select pads don't do anything, but the first pad lights up as a reminder that there is a single -pitch track. - -When a step is tapped, its pitch bend value can be set with the value buttons. The middle two buttons correspond to normal pitch. -If the receiving module has the pitch bend range set to 12 semitones, than the next button up will bend the pitch up one semitone. The -next button will be up two semitones, and then the highest button will bend an octave up. The buttons below middle send corresponding +In the control view, the **track** select and track mute pads work the same as in gate view, +but are for selecting and muting the 16 control tracks. The tracks correspond to 16 MIDI +continuous controllers, which can be set via +the `controllerNumbers` configuration option. For example, including +`"controllerNumbers": [ 21, 25, 20, 24, 74, 71, 102, 105, 29, 30, 27, 28, 103, 113, 114, 111 ]` +in the config file will assign those controllers to the 16 tracks. + +Similarly, the **step** pads work the same as in the gate view, +except that the value buttons are used to edit the transmitted controller +value rather than the note velocity. The control view also has no TIE option. + +### Pitch view + +The pitch view is similar to the control view, except that it is used for sending MIDI pitch bend control and there is only +one track. The track select and track mute pads don't do anything, but the first pad lights up as a reminder that +there is a single pitch track. + +When a step is tapped, its pitch bend value can be set with the value buttons. The middle two buttons correspond to +normal pitch. The value buttons are set to special fixed values in the pitch view, such that +if the receiving module has the pitch bend range set to 12 semitones, +then the next button up will bend the pitch up one semitone. The +next button will be up two semitones, and then the highest button will bend an octave up. +The buttons below middle send corresponding pitches down. Seq will send pitch bend signals on its set MIDI channel for each enabled step. -## Jump Mode +### Jump view -In jump mode, the track select pads can be used to play the corresponding 16 drum sounds directly. Tap a pad +In the jump view, the track select pads can be used to play the corresponding 16 drum sounds directly. Tap a pad to play the sound, at the velocity with which you play the pad. Tapping any of the step controls will play that step on the next clock tick, -advancing normally from there. The sequence will reset to the first step at the next reset. Jump mode also allows "momentary pitch" control. Holding down -the value buttons will send a midi pitch bend value just as in pitch mode, but pitch bend will be reset to zero when you release +advancing normally from there. The sequence will reset to the first step at the next reset. Jump view also allows "momentary pitch" control. Holding down +the value buttons will send a midi pitch bend value just as in pitch view, but pitch bend will be reset to zero when you release the button. -## Fill +### Fill The fill button can be used to play fills at any time. When the button is pressed, Seq will choose a random fill pattern and play it as long as the button is held down. Seq's fill patterns aren't actually preset patterns; they're generated by rearranging the current pattern in various ways to produce a fill. +## Mono mode + +Mono mode provides a monophonic melodic sequencer for programming melodies across a range of 8 octaves. + + + +### Views + +Mono mode offers the same five views as beat mode: gate, control, pitch, jump, and fill. +This section describes the ways mono mode differs from beat mode. + +### Gate view + +Mono offers only a single note track, so there is no need for the track select and mute pads. +Instead, gate view provides a one-octave note keyboard in rows 5 and 6, +octave controls in row 4, +and (future addition) a set of step modifiers in row 3. + +When a step is selected, its semitone can be selected on the keyboard, and its octave set via the octave pads. +Every step has a semitone and octave setting, even if the step is disabled. As in Beat mode, +steps can be set to PLAY, REST, or TIE by tapping the step pad, and the velocity can be set with the value pads. +To select a step without changing the play setting, press and hold for half a second. + +### Other views + +The control, pitch, jump, and fill views function the same in Mono mode as they do in Beat mode. + ## Settings View Beat uses the standard [Settings Module](settings.md) for all settings. @@ -142,7 +170,8 @@ Seq can also be set to use a blue, green, or pink color palette. Beat uses a def midi notes for its various tracks, corresponding to standard MIDI drum mappings. The ```midiNoteOffset``` setting can be used to transpose all of the tracks by a number of semitones. For example, setting this value to 24 will transpose all note numbers by two octaves. The ```tiesEnabled``` setting can be used -to allow notes longer than a single step to be played by Seq. The ```sessionPrograms``` setting +to allow notes longer than a single step to be played by Seq; ```tiesEnabled``` defaults to ```false``` for +Beat mode and ```true``` for Mono mode. The ```sessionPrograms``` setting can be used to set midi program change values for each session. When the session is loaded, a program change message will be sent with the provided value; a missing value or value of ```-1``` will result in no message being sent. @@ -163,12 +192,15 @@ message being sent. # Color Palette -Rhythm has five defined palettes: pink, blue, green, red, orange, purple, magenta, teal, yellow. Each uses white and gray, with yellow +Rhythm has nine defined palettes: pink, blue, green, red, orange, purple, magenta, teal, yellow. Each uses white and gray, with yellow as a highlight color (accept for the yellow palette, which uses purple for highlight). - The pattern selection pads are in the main color (e.g. blue), with the currently playing pattern in white, other chained patterns in gray, and the pattern currently being edited in the highlight color. - Track mute pads are in gray, with muted tracks being off. Whenever a track plays a note, it will light in the highlight color. -- Track mute pads are in the main color (e.g. blue), with the selected track being white. Whenever a track plays a note, it will light in the highlight color. +- Track select pads are in the main color (e.g. blue), with the selected track being white. Whenever a track plays a note, it will light in the highlight color. +- The keyboard in Mono mode is in light and dark gray, for the white and black keys. The current step's programmed semitone will be shown +in the highlight color, and keys will flash in the main color when played. +- Octave keys are in the main color, with the current step's programmed octave in the highlight color. The octave of the currently playing note will be indicated in white. - Step pads are white when that step is set to PLAY, gray for TIE, and off for REST. - Function buttons on the left and bottom are gray when off, white when on. - The value buttons show the value in the main color (e.g. blue). diff --git a/doc/hachi/modules/seq.png b/doc/hachi/modules/seq.png deleted file mode 100644 index 83c5a75..0000000 Binary files a/doc/hachi/modules/seq.png and /dev/null differ diff --git a/hachi b/hachi index 46b8ec7..c94a526 100755 --- a/hachi +++ b/hachi @@ -1,4 +1,4 @@ #!/bin/sh -java -cp target/issho-1.0.6-shaded.jar net.perkowitz.issho.hachi.Hachi $1 +java -cp target/issho-1.0.7-shaded.jar net.perkowitz.issho.hachi.Hachi $1 diff --git a/mem b/mem index 96b0b03..53d11e2 100755 --- a/mem +++ b/mem @@ -1,4 +1,4 @@ #!/bin/sh -java -cp target/issho-1.0.6-shaded.jar net.perkowitz.issho.hachi.MemoryApp $1 $2 +java -cp target/issho-1.0.7-shaded.jar net.perkowitz.issho.hachi.MemoryApp $1 $2 diff --git a/pom.xml b/pom.xml index 5ccc182..011abe8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.perkowitz issho - 1.0.6 + 1.0.7 Issho @@ -41,7 +41,7 @@ org.projectlombok lombok - 1.16.8 + 1.18.8 @@ -63,16 +63,15 @@ org.apache.maven.plugins maven-compiler-plugin - 2.0.2 + 3.8.0 - 1.8 - 1.8 + 12 org.apache.maven.plugins maven-shade-plugin - 1.7.1 + 3.2.0 package diff --git a/src/main/java/net/perkowitz/issho/hachi/modules/seq/SeqModule.java b/src/main/java/net/perkowitz/issho/hachi/modules/seq/SeqModule.java index eb405e8..09c28c9 100644 --- a/src/main/java/net/perkowitz/issho/hachi/modules/seq/SeqModule.java +++ b/src/main/java/net/perkowitz/issho/hachi/modules/seq/SeqModule.java @@ -85,6 +85,7 @@ public SeqModule(Transmitter inputTransmitter, Receiver outputReceiver, Map