/sequencer64

A more object-oriented successor to Sequencer24/Seq24, with many additional features, and more planned.

Primary LanguageC++

README for Sequencer64 0.9.18.3
Chris Ahlstrom
2015-09-10 to 2016-10-08 (initial work started in July of 2015)

Sequencer64 (replaces sequencer24) is a reboot of seq24 to refactor it to be
tighter and easier to transition to GTKmm 3, and much more.  It is now
beyond seq24 in functionality and bug fixes; the code is *significantly*
refactored, although the heart of seq24 definitely remains intact.

See the screenshot in the project root for some idea of what has changed
visually.  It is an old friend with some user-interface lipstick and a lot of
internal fixups.  And it still maintains backward-compatibility with seq24,
with the --legacy option.  See https://github.com/ahlstromcj/sequencer64-doc.git.

Major updates:

    -   Version 0.9.18.3:
        -   Bug in cut-and-paste in the sequence editor.  When cutting (not
            just copying), the event clipboard would be cleared and be
            unpastable.
    -   Version 0.9.18.2:
        -   Fixed incorrect loading, saving, and usage of MIDI controls
            feature.
        -   Fixed Song mode and Song Editor interactions.
        -   Updated the Debian package build process.
    -   Version 0.9.18.1:
        -   Fixed a bug in perfedit looping.
        -   Fixed a segfault when modifying an event in the event editor.
        -   Fixed a bug that disabled editing in the Song Editor if an
            inactive sequence was clicked in.
        -   KNOWN BUG:  In this release, Song mode will work only if the
            Song/Live button is activated.  This could be a feature :-)
    -   Version 0.9.18:
        -   Added new buttons in the main window for easier control of muting,
            live/song mode, and menu enabling.  (From Seq32).
        -   Added more hotkeys and a second keys page to the Options dialog
            (From Seq32).
        -   Added a Tap-BPM button and hotkey.
        -   Can now edit the text fields in the main window without triggering
            patterns.
        -   Improved the handling of wrap-around notes in a pattern.
        -   Fixed a segfault in the zoom functionality.
        -   A bad bug in the Song Editor (acting on the wrong pattern) was
            fixed.  I am an idiot.
    -   Sequencer64 loads SMF 0 files and splits the channels into separate
        tracks/sequences.
    -   JACK support has been improved.  Sequencer64 will track JACK transport
        properly, and as Master, will provide the proper Bar:Beats:Ticks (BBT)
        to other JACK clients.  We are still investigating JackBBTFrameOffset
        support.
    -   Pause functionality (still tweaking it) has been added to playback
        under ALSA.  Instead of rewinding, the Pause button leaves
        playback where it is, and resumes when playback restarts.  Stop
        still rewinds the sequences.  The Pause feature does not affect JACK
        transport, which already supports pause; we would like to add rewind
        to JACK transport eventually.  Also added is a Pause key (by default,
        the period).  Pause can be disabled at configure time (--disable-pause).
    -   Long sequences/patterns now auto-scroll horizontally during playback
        to keep up with the progress bar in the sequence/pattern editor.
    -   Highlighting of the current sequence brought up for editing.
    -   Configurable progress bar, font, redraw timeouts, and more.
    -   MIDI Clock support has been fixed.  Sequencer64 will now interact
        well with QJackCtl, Hydrogen, and Klick (command-line metronome).
        See the testing described in contrib/notes/jack-testing.txt.
    -   An event-editing window has been added, for viewing and editing a
        list of events, regardless of event type.  Still in progress; viewing
        is fine, editing basics work.
    -   Two synchronized song-editor windows can now be shown on screen, to
        better arrange songs with a large number of tracks.
    -   Added a more modern-looking, bolder font to the graphical user
        interface, selectable at run-time, in the "user" configuration file.
    -   Added an ALSA --bus option for easier testing against a specific
        hardware/software synthesizer.
    -   Added a --ppqn option to try to play files at the right speed.  Still
        in progress, as the Seq24 PPQN value of 192 affects a lot of code!
        It basically seems to work, but bugs may still lurk.
    -   Added support for using the Mod4/Super/Windows key to keep the
        performance and sequence user-interfaces in editing mode, very helpful
        for certain crappy laptop trackpads.  Extra "paint" key support also
        gets around the limitations of some trackpads.
    -   Shift-left-click on the pattern slot in the pattern editor now
        toggles the playing state of all other patterns.  This works across
        screensets.  Shift-left-click on the pattern name or M in the song
        editor now toggles the mute state of all other tracks.
    -   Added arrow key support to some of the windows and panes.
        -   The "l" and "r" keys initiate arrow movement of the performance
            markers.
        -   If notes are selected in the pattern editor, the arrow keys can
            be used to move the notes in time and in pitch.
        -   If selected notes are copied-and-pasted, the selection box
            that indicates where they will be dropped can now be moved with
            the arrow keys.  Hitting "Enter" will then drop the notes in the
            same wasy that a click does.
        -   In the performance editor, a pattern can be selected with the
            mouse and moved right/left with the arrow keys.
    -   Added support for using special keys to manipulate some of the
        user-interface elements:
        -   The "l" and "r" keys initiate arrow movement of the performance
            markers, with "x" to escape this mode.
        -   Also supplemented the mouse with "p" to start paint/draw mode, and
            "x" to escape it, in the sequence and song editors.
        -   Add "z" and "Z" keys to zoom out and zoom in the pattern and song
            piano rolls.  "0" restores the default zoom.
    -   Tweaked the colors of some user-interface elements to make it
        easier to see them when combined.  For example, the background
        sequence is now colored, and the scale bars are now light grey.
        Progress bars can be set to red, if not running in legacy mode.
        Selected events now appear as orange in the data panel.
    -   The "rc" configuration file has been upgraded to support a couple
        more options, including the enabling/disabling of LASH session
        support.
    -   The "user" configuration file is now written, as well as being read.
        It contains more extensive run-time configuration for
        the user-interface.  The following items have been added so far,
        though not all are internally implemented:
        -   [user-interface-setting]
            -   Style of the main-window grid is now modifiable.
            -   Main window rows
            -   Main window columns
            -   Main window border thickness
            -   Main window spacing
            -   Maximum sets
            -   Control height
            -   Allowing two performance editors onscreen
            -   The page settings of scrollbar to increase the amount of
                scrolling from the too-short defaults.
        -   [user-midi-settings]
            -   Global PPQN value
            -   Global beats per bar
            -   Global beats per minute
            -   Global beat width
            -   Global MIDI buss override
    -   Fixed a long-standing (back to seq24) bug that caused the main window
        buttons to grab focus, causing the space bar to press the button, as
        well as doing its start function.
    -   Internal (invisible) work:
        -   The code has been broken up into libraries, for better separation
            between GUI support and the files, MIDI, JACK, and LASH support.
        -   A wide range of MIDI files have been tested, to find bugs that
            can crash the application.  A nice increase in robustness.
        -   Centralized dirtiness-handling to the perform module, and
            improving its accuracy and comprehensiveness.
        -   Set Tempo and Time Signature events are now read from
            non-Sequencer64 MIDI files.  They are also saved in the normal
            MIDI format, so other sequencers can get them from Sequencer64
            MIDI files.
        -   The user-interface classes have refactored to derive from
            base classes providing common code.
        -   Sequencer64 now uses std::multimap instead of std::list as an
            event-container.  It works well, and loads MIDI files a lot
            faster, especially when compiled for debugging.  The reason seems
            to be that sorting is a lot faster in the multimap. See the
            SEQ64_USE_EVENT_MAP macro in the libseq64/include/event_list.hpp
            module for selection of the container, and try it for yourself!
        -   Constant variables are slowly being assigned to new members, in
            preparation for support of altering the number of sequences and
            screen sets supported.
    -   Version 0.9.17.2:
        -   A regression in the handling of muting in Live mode was fixed.
    -   Version 0.9.17.1:
        -   An important regression/bug for JACK transport support.  I am
            so embarrassed!  It seems to be fixed; basically one line of code
            accidentally commented out.
    -   Version 0.9.17:
        -   Added export of a Sequencer64 song performance as a MIDI file,
            where the MIDI file is laid out as per the song triggers in the
            performance editor.  The triggers are preserved in the exported
            file, but any sequencer can read the performance and will ignore
            the Sequencer64-specific triggers.
        -   Added an "inverse colors" options so that the user interface is a
            bit less bright in a "night" environment.  Also, the progress bar
            can be changed to a number of different colors.
        -   Added an optional Edit menu and the export of a song performance
            to a non-Sequencer64 MIDI file.  (Stazed feature).
        -   Ctrl-Left-Click in the Song Editor now works as a middle-click,
            to split the song trigger in half.
        -   The seq32 feature of splitting at the nearest snap point near
            a middle-click, in the Song Editor, has been added as an optional
            feature.
        -   Started adding support for recording incoming MIDI to the
            sequences that match the incoming channel data. (Stazed feature).
            This is a run-time option, and can be set from the Options dialog,
            the command-line, and in the "rc" configuration file.
        -   Enabled actual support for the recording-volume feature, which was
            not actually used in seq24.
        -   Added better support for undo/redo ability from the stazed project
            (seq32).
        -   Added support for a lot of other stazed (seq32) features and
            extensions, macroed out until we can get them complete and
            finalized.  Some, noted above, are now available.
        -   Added the LFO window module code and refactored it, not yet
            available through the user interface, must be enabled in the code.
        -   Playback status now folded completely into the perform and
            jack_assistant classes.
        -   Lots of bug fixed based on fixes from seq32.  Also merged a
            fix from Arnaud for issue "MIDI controller toggles the wrong
            pattern", a regression caused by my fat fingers.
        -   See earlier version fixes near the end of this README.
    -   Version 0.9.16:
        -   If there is no mute-group information, it is no longer written
            to the MIDI file (unless --legacy is in force).  Saves 4000+
            bytes.  It can be disabled with build option --disable-mutestrip.
        -   Fixed bug in detecting the --jack-session-uuid option.
        -   Hardwired Ctrl-L as an alternative to the "L" (learn) button,
            and added automatic "Caps Lock" when in Learn mode, for keyboards
            that disable Caps Lock.
        -   Fixes and testing of replace, queue, and mute-groups.
        -   Much cleanup and optimization.
    -   Version 0.9.15.1 and .2:
        -   Fixing corner-case issues with saving the configuration.
            Transpose state saved with each pattern.
        -   Moved transpose support to the perform class.
        -   Red-colored events in non-transposable patterns (e.g. drums).
        -   Addition menu entries for muting/unmuting.
        -   Fixed perfedit continual-refresh bug.
        -   Prevent pathological note alterations when growing/shrinking
            selected notes.
    -   Version 0.9.15:
        -   Added the Stazed song-transpose feature from his Seq32 project.
        -   Additional sequence menu entries.
        -   Fixed a bug in muting/unmuting all tracks.
    -   Version 0.9.14:  Apart from some bug fixes and tweaks, the following
        major features have been added:
        -   Chord generation in the pattern editor, similar to what the 
            seq32 project has, but it can be disabled via the configure step.
        -   The song editor now pages horizontally to follow the progress bar.
    -   Version 0.9.13:
        -   Includes an important bug-fix from user 0rel that caused some
            notes to be missing or messed up in a copy operation in the
            pattern editor.
        -   Adds nearly complete support for moving, paging, and going to
            start and end both horizontally and vertically in the song editor
            and the pattern editor using keystrokes. 
        -   Copied note selections can be moved around using the arrow keys
            and pasted using the Enter key.
        -   Note copy/paste/move pattern-editor operations have been fixed or
            improved, and non-note events are handled better, instead of being
            stripped.
        -   Initial support for growing/stretching selected events via
            ctrl-left-arrow and ctrl-right-arrow.  Also, the Enter key
            finishes and then cancels a number of operations: paste, grow,
            move, and selection.
    -   Version 0.9.12 fixes a bug in the drawing of MIDI note numbers in the
        seqkeys panel.

The list of minor issues we have found while exploring with Sequencer64 has
gotten fairly long, so we will concentrate on tightening up the application
behavior as much as possible.  This package is currently oriented to
developers.  It is fairly well organized, fairly well documented, and less
mysterious (to us, anyway) than before.  Please see the INSTALL file for a
brief description of installation.

See the ROADMAP file for more information and a kind of TODO list.  Also see
contrib/notes/bugs_to_investigate.  Sequencer64 is well-documented by the
following project, which provides a 100+-page PDF file and its LaTeX source
code:

   https://github.com/ahlstromcj/sequencer64-doc.git

# vim: sw=4 ts=4 wm=4 et ft=sh