Package org.deepsymmetry.beatlink.data
Offers rich information about the tracks loaded in players on the network.
The classes in this package can augment the low-level information offered by the packet listeners with
rich details about track metadata, including album art, cue point locations, beat grid, and waveforms, both
the whole-track preview, and full detailed waveform for scrolling through. The
MetadataFinder
is the main coordinator for obtaining and caching this
information, and it keeps track of the track metadata for all tracks loaded on decks, either for current playback,
or as hot cues.
The metadata queries are performed with the help of the org.deepsymmetry.beatlink.dbserver
package,
which knows how to locate and communicate with the database servers running on the players.
For shows in which four players are in use, the dbserver interface cannot be relied on, since we are not able
to use a real player number ourselves. The CrateDigger
class allows us to
still obtain metadata in those situations, by downloading entire rekordbox database export files from the players
using their NFSv2 servers, which do not care about player numbers. By parsing the database it can also find and
download the files containing track analysis information like waveforms, beat grids, artwork, etc.
Background
This project is based on research performed with dysentery, and the protocol analysis resulting from that project.
Raw database access is provided by the Crate Digger project.
An good example of an application built using this library is Beat Link Trigger.
- Author:
- James Elliott
-
Interface Summary Interface Description AlbumArtListener The listener interface for receiving updates when the album art available for a track loaded in any player changes.AnalysisTagListener The listener interface for receiving updates when requested analysis information available for a track loaded in any player changes.BeatGridListener The listener interface for receiving updates when the beat grid available for a track loaded in any player changes.DatabaseListener The listener interface for receiving updates whenCrateDigger
has obtained the rekordbox database that was just mounted in a player slot, or when that slot has unmounted so the database is no longer relevant.MetadataProvider A class that is able to provide metadata for a loaded track without the need to query the source player can implement this interface and register itself with theMetadataFinder.addMetadataProvider(MetadataProvider)
.MountListener The listener interface for receiving updates when the set of mounted media slots on the network changes.OverlayPainter In order to make it easy for applications like Beat Link Trigger to overlay selections or cues on the GUI components offered by Beat Link, they allow an overlay painter to be registered with them, and it will then be invoked after the component has done its own painting.RepaintDelegate Supports delegation of Swing repaint calls to a host component.SignatureListener The listener interface for receiving updates when the signatures available for a track loaded in any player change.TrackMetadataListener The listener interface for receiving updates when the metadata available about a track loaded in any player changes.TrackPositionBeatListener The listener interface for receiving updates when a new beat has occurred during track playback, when you want to know the actual new beat number (the beat packet itself does not carry this information, but theTimeFinder
integrates it for you).TrackPositionListener The listener interface for receiving updates when there are significant changes to the movement through a track on a player (for example, to send time code that represents the progress of playing the track).WaveformListener The listener interface for receiving updates when the waveforms available for a track loaded in any player change. -
Class Summary Class Description AlbumArt Represents album artwork associated with tracks loaded into players on a DJ Link network, and provides a convenience method for getting a buffered image for drawing the art.AlbumArtUpdate Provides notification when the album art associated with a player changes.AnalysisTagFinder Watches for new metadata to become available for tracks loaded on players, and queries the appropriate player for any desired track analysis sections (identified by the analysis file extension and four-character tag type code) when that happens.AnalysisTagFinder.CacheEntry Wraps values we store in our hot cache, so we can keep track of the player, slot, track, file extension, and type tag the analysis section was associated with.AnalysisTagUpdate Provides notification when requested track analysis information associated with a player changes.ArtFinder Watches for new metadata to become available for tracks loaded on players, and queries the appropriate player for the album art when that happens.BeatGrid Provides information about each beat in a track: the number of milliseconds after the start of the track that the beat occurs, and where the beat falls within a measure.BeatGridFinder Watches for new metadata to become available for tracks loaded on players, and queries the appropriate player for the track beat grid when that happens.BeatGridUpdate Provides notification when the beat grid associated with a player changes.ColorItem Represents a track color label.CrateDigger Uses the Crate Digger library to provide an even more reliable source of track metadata, even when there are four players in use on the network and theVirtualCdj
is forced to use a non-standard player number.CueList Provides information about each memory point, hot cue, and loop stored for a track.CueList.Entry Breaks out information about each entry in the cue list.DataReference Uniquely identifies a track, album art, beat grid, or waveform currently available on the network, by the player and media slot in which it is mounted, and its rekordbox ID.DeckReference Uniquely identifies a place where a track can be currently loaded on the network, either the visible deck of one of the players, or one of the hot cues on a player.MenuLoader Provides support for navigating the menu hierarchy offered by the dbserver on a player for a particular media slot.MetadataFinder Watches for new tracks to be loaded on players, and queries the appropriate player for the metadata information when that happens.PlaybackState Captures the playback state of a single player that has the track loaded, as an immutable value class.SearchableItem Represents an item with an ID and label that can be used as a way to select tracks in a dynamic playlist request, and on which playlists can be sorted.SignatureFinder Watches for new metadata to become available for tracks loaded on players, and when enough elements have been loaded, calculates a signature string that uniquely identifies the track, based on its title, artist, duration, waveform, and beat grid.SignatureUpdate Provides notification when the track signature associated with a player changes.SlotReference Uniquely identifies a media slot on the network from which tracks can be loaded, by the player and slot type.TimeFinder Watches the beat packets and transport information contained in player status update to infer the current track playback position based on the most recent information available, the time at which that was received, and the playback pitch and direction that was in effect at that time.TrackMetadata Represents rekordbox metadata (title, artist, etc.) about tracks loaded into players on a DJ Link network.TrackMetadataUpdate Provides notification when the track metadata associated with a player changes.TrackPositionUpdate Keeps track of the most recent information we have received from a player from which we have been able to compute a track position.WaveformDetail Gives a detail view of the audio content of a track, and offers a Swing component for rendering that view as part of a user interface, along with annotations showing the current playback position, beats, and cue points, if the appropriate metadata is available.WaveformDetailComponent Provides a convenient way to draw waveform detail in a user interface, including annotations like the location at the current time, and cue point markers and loops (if you supplyTrackMetadata
so their location can be determined), and beat markers (if you also supply aBeatGrid
).WaveformDetailUpdate Provides notification when the waveform detail associated with a player changes.WaveformFinder Watches for new metadata to become available for tracks loaded on players, and queries the appropriate player for track waveforms when that happens.WaveformPreview Gives a birds-eye view of the audio content of a track, and offers a Swing component for rendering that view as part of a user interface, along with annotations showing the current playback position and cue points, if the appropriate metadata is available.WaveformPreviewComponent Provides a convenient way to draw a waveform preview in a user interface, including annotations like the current time and minute markers (if you supplyTrackMetadata
so the total length can be determined), and cue markers (if you also supply aCueList
).WaveformPreviewUpdate Provides notification when the waveform preview associated with a player changes.