All notable changes to this project will be documented in this file.
This change log follows the conventions of
keepachangelog.com.
Nothing so far.
0.3.5 - 2017-10-08
-
The embedded CoreMidi4J library which is used to communicate with
MIDI devices on the Mac has been upgraded to improve stablity and to
better handle working with multiple devices of the same type.
:warning: Unfortunately, this causes most devices to show up with
different names than they used to, so when you upgrade to this
version you are going to need to go through all of your triggers
that are configured to talk to MIDI devices, and reconnect them to
the new device name if it has changed. See the CoreMidi4J
project for
details.
If your device name has changed (and, again, this only affects the
Macintosh platform), instead of seeing the Enabled section at the
bottom right end of the trigger, you will see “Not
found.” in red, just as you would see if the device was
unplugged:
-
The embedded Beat Link library which communicates with the Pioneer
network has been updated to handle creating metadata caches from
playlists that contain more than one copy of the same track. (This
would previously fail with an exception when trying to create a
duplicate entry in the ZIP file that holds the metadata cache; now
extra copies of a track are simply skipped.)
- Taking advantage of the new
TimeFinder
class (which supports the
Time and Remain fields in the Player Status window),
expressions that run in response to player status updates can use a
new convenience variable, track-time-reached
, which will contain
how far into the playing track has been reached, in milliseconds.
(This value will only be available if the TimeFinder
is running,
otherwise track-time-reached
will have the value nil
. The
easiest way to make sure the TimeFinder
is running is to open the
Player Status window.)
0.3.4 - 2017-09-05
- If you created too many triggers, or your triggers got too large
because of complex expressions, they would fail to save because of
exceeding the size limit for an entry in the Java Preferences. Even
worse, this would happen silently (unless you happened to look in
the log file). Now they will be split across multiple entries if
needed, and if anything does fail, an error dialog will be
displayed.
- A menu item which lets you view the contents of a metadata cache
file, so you can work on triggers when you don't have a player or
the actual media handy.
0.3.3 - 2017-08-08
- Log more details of the process of going online, to better support
people who are reporting issues with metadata.
- Provide more specific guidance when turning on metadata requests,
based on the actual number of physical players detected on the
network, and stop offering the unreliable metadata option if there
is only one real player, since it cannot be used in that situation.
- Stop logging stack traces on each beat if we are offline but
configured to align the master player with Ableton Link.
- Found one more (albeit extremely unlikely) path where trying to
create a metadata cache could fail silently, and added an error
message there.
0.3.2 - 2017-08-08
This is a small release to fix some issues found by the much wider
audience that has been introduced to Beat Link Trigger through
the
DJ TechTools article.
- If there was a problem retrieving metadata when the user asked to
create a cache file (for example, if they did not have Request Track
Metadata turned on, and there was only one player on the network),
it would silently fail with a somewhat cryptic entry in the log
file. It now gives a nice error dialog explaining how to fix the
situation. It also gives a general error dialog if something else
unexpected blows up the process.
- The explanation of the timestamp value inside trigger expressions
incorrectly stated they were millisecond values. In order to be
compatible with Ableton Link, Beat Link switched to using
seconds in its packet timestamps.
- Added information about the
status
value available in the
documentation for all triggers where it is present (some were
previously missing this important detail). - Improved wording and variable name in grandMA2 example, thanks to
suggestions from Alex Hughes.
This is a small release primarily to make it easier for people who
discover Beat Link Trigger through
the
DJ TechTools article to
find the correct version, with on-air indicators and SMPTE integration
support.
-
On-Air indicators for players in the Player Status window. If you
have the players configured to track and report this, it will be
reflected right above the beat phase display.
-
A new version of Beat Link which adds hooks needed to allow triggers
to generate SMPTE timecode synced to the track position (with the
help of an external daemon).
-
Beat Expressions can now check whether the player sending the beat
was on the air by simply looking at the value of on-air?
as was
already possible in Enabled and Tracked Update expressions. (Even
though the information is not part of the beat packet itself, Beat
Link Trigger will look it up from the last status packet received
from the same player.)
-
It is now possible to reconfigure the maximum log file size and the
number of backlog files by calling, for example:
(beat-link-trigger.logs/install-appenders 1000000 4)
This would allow the log files to grow to a million bytes each, with
five backlog files kept. The default maximum size has been doubled
to 200,000 bytes, and the default backlog file count remains 5.
0.3.0 - 2017-06-25
- Some major new features taking advantage of the incredible advances
in the Beat Link library over the past month. The most visible are
found in the new Player Status window, available in the Network
menu, providing a detailed view of what the player on the network
are currently doing.
- This also provides the foundation for upcoming work to generate
timecode, now that we can keep track of detailed playback location
when a player is playing normally.
- There is a whole new infrastructure for creating, attaching, and
using metadata cache files for performance settings with four
players all linked to a single media library, which makes requesting
metadata difficult.
- Now that metadata has become so fundamental to so many features in
Beat Link Trigger, the user guide assumes that you will be working
with it turned on. You can also make use of the extensive new
metadata cache file mechanism to cope with performance environments
in which requesting the metadata from a player is difficult.
- File management is much improved, adding standard file extensions
for configuration and trigger export files, filtering on those
extensions to make it easier to see the right files, asking for
confirmation before overwriting an existing file, and still letting
you load a file with the wrong extension (such as one you saved
before this release) by choosing "All files" in the Open dialog.
0.2.1 - 2017-03-18
- You can now request track metadata from the CDJs, display it in the
trigger windows, and use it in your trigger logic.
- You can take Beat Link Trigger online after starting it in offline
mode, or go offline when operating in online mode, at will using a
new Network menu.
- A sample integration with
The Lighting Controller, also
known as ShowXpress, QuickDMX, and SweetLight, a widely-used DMX
lighting control package.
- An example of how to automatically create a playlist logging all
tracks played.
- The
BeatListener
was not being started, so Beat Expressions would
never be run. - Previously an extra closing parenthesis in an Expression would cause
anything after it to be silently ignored. Now it will properly
cause a parse failure due to an unmatched delimiter.
- Parse errors are also now identified with the trigger number and
expression type, as well as proper line and column numbers.
- Runtime exceptions within triggers are now also logged with the
trigger number and type description, with better formatting, to help
track them down.
- The Carabiner connection is now configured through the new Network
menu.
0.1.4 - 2016-11-20
- You can now tie an Ableton Link
session's timeline to the beat grid being received on a trigger
(setting its BPM and aligning either at the level of individual
beats full bars), with the help of
carabiner.
0.1.3 - 2016-10-02
- Thanks to new beat-link features, expressions can now determine the
rekordbox ID number and source (player number and slot) of a track
being played.
- In describing tracks, triggers show the rekordbox ID when available
in preference to the simple playlist position, as well as the source
player and slot.
- User expressions can override how a track is described by storing a
custom description string under the key
:track-description
in the
trigger locals map. - A Media Locations window to help keep track of media library
locations so that triggers can identify tracks by their rekordbox ID
regardless of where the DJ ends up needing to insert media during
show setup.
- A new, separate Tracked Update expression to use for relaying status
updates about the tracked player to other systems, simplifying the
purpose and use of the Enabled Filter expression
- An example of how to control Pangolin BEYOND laser shows.
- Takes advantage of beat-link's new slf4j integration to redirect any
log output that beat-link produces into the beat-link-trigger log
file.
- An exception which occurred trying, and failing, to clean out any
previous local bindings when editing a trigger's Setup Expression.
- Triggers were not being properly cleaned up (including leaving open
now-orphaned expression editor windows) when replacing the entire
trigger window, for example by opening a different trigger file.
- Creating a trigger expression using the expression editor window
that was automatically opened when you chose Custom as a Message or
Enabled option for the trigger was not updating the state of the
gear button.
- Spurious exceptions could appear in the log file when triggers had
Tracked Update expressions because they were being called during
window creation without an actual status update. These expressions
are now only called when a status update has been received.
0.1.2 - 2016-06-05
- A comment field for keeping notes about each trigger.
- In addition to the former yes/no values (now renamed Always and
Never), the Enabled setting of a trigger can be set to On-Air
(enabled when its player reports being on the air), and Custom,
which allows you to evaluate a Clojure expression on the player's
status report and decide however you want.
- A graphical indicator to summarize the trigger's enabled and tripped
state.
- A general framework for editing Clojure expressions to customize the
application, including a large variety of convenience variables to
simplify the task, and built-in help about the expressions and
variables.
- Support for sending MIDI Beat Clock.
- A visible button to let people know about the trigger contextual
menu even if they don't think of trying to control or right-click on
it.
- Errors and other important events are now logged to a log file,
which is available for inspection via the File menu.
- A user guide.
- The About box and the Searching for Devices box would appear in the
top left corner of the screen momentarily before jumping to where
they belonged.
- Newly created trigger rows had a blank choice at the bottom of the
MIDI Output menu.
0.1.1 - 2016-05-20
- A status summary of the selected player is shown after the menu.
- The trigger can be enabled or disabled with a checkbox.
- You can specify the channel on which the MIDI message should be sent.
- You can now open multiple trigger windows using the new Window menu,
and have each watching a different player and sending a different
MIDI message. Closing the last window quits.
- Support for offline operation when no DJ Link device can be found.
- The list of triggers is saved when the application exits and
restored when it starts.
- You can save or load the configuration to a text file of your choice.
- Triggers can be deleted by right-clicking on them as long as there
is more than one in the list.
- A first-stage loading process which checks the Java version and
presents an error dialog if it is too old to successfully load the
rest of the application, offering to open the download page.
- The beginnings of an informative and attractive About box.
- The MIDI Output menu now reformats names so you don't need to see
the CoreMIDI4J prefix even when it is in use.
- The Player menu stores its choices in a format that is more
efficient for comparing with the incoming player packets.
- The Player menu always lists Players 1 through 4 as choices, and
reports when you have chosen one that is not currently visible.
- Switched to a dark UI theme to fit in better with the kind of
software this will be used with, and the dark environments in which
it will be used.
- Identified a source of potential and unpredictable latency in the
upstream beat-link library, and fixed it.
- Moved all interaction with UI objects to the AWT Event Dispatch
thread; we were trying to get the current output menu selection on
the MIDI event thread, which was causing a
ConcurrentModificationException within AWT.
- Keep track of MIDI outputs as we open them, so we can reuse the same
instance rather than creating new outputs every time. Clean them up
when they disappear from the MIDI environment, like Afterglow does.
- Set up initial project structure.
- Selector to choose MIDI output as trigger destination.