Package org.deepsymmetry.beatlink.data
Class WaveformDetail
- java.lang.Object
-
- org.deepsymmetry.beatlink.data.WaveformDetail
-
public class WaveformDetail extends Object
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.- Author:
- James Elliott
-
-
Field Summary
Fields Modifier and Type Field Description static Color[]COLOR_MAPThe different colors the monochrome (blue) waveform can be based on its intensity.DataReferencedataReferenceThe unique identifier that was used to request this waveform detail.booleanisColorIndicates whether this is an NXS2-style color waveform, or a monochrome (blue) waveform.static intLEADING_DBSERVER_COLOR_JUNK_BYTESThe number of bytes at the start of the color waveform data to be skipped when that was loaded using the nxs2 ANLZ tag request.static intLEADING_DBSERVER_JUNK_BYTESThe number of bytes at the start of the waveform data which do not seem to be valid or used when it is served by the dbserver protocol.MessagerawMessageThe message holding the detail as it was read over the network.
-
Constructor Summary
Constructors Constructor Description WaveformDetail(DataReference reference, ByteBuffer data, boolean isColor)Constructor for use with external caching mechanisms.WaveformDetail(DataReference reference, Message message)Constructor when reading from the network or a file.WaveformDetail(DataReference reference, org.deepsymmetry.cratedigger.pdb.RekordboxAnlz anlzFile)Constructor when received from Crate Digger.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description JComponentcreateViewComponent(TrackMetadata metadata, BeatGrid beatGrid)Create a standard Swing component which can be added to a user interface that will draw this waveform detail, optionally including annotations like the current playback position and minute markers (if you supplyTrackMetadataso the total length can be determined), and cue markers (if you also supply aCueList).ByteBuffergetData()Get the raw bytes of the waveform detail dataintgetFrameCount()Count the half-frames of waveform available.longgetTotalTime()Determine how long the track plays, in milliseconds.ColorsegmentColor(int segment, int scale)Determine the color of the waveform given an index into it.intsegmentHeight(int segment, int scale)Determine the height of the waveform given an index into it.StringtoString()
-
-
-
Field Detail
-
LEADING_DBSERVER_JUNK_BYTES
public static final int LEADING_DBSERVER_JUNK_BYTES
The number of bytes at the start of the waveform data which do not seem to be valid or used when it is served by the dbserver protocol. They are not present when the ANLZ.EXT file is loaded directly by Crate Digger.- See Also:
- Constant Field Values
-
LEADING_DBSERVER_COLOR_JUNK_BYTES
public static final int LEADING_DBSERVER_COLOR_JUNK_BYTES
The number of bytes at the start of the color waveform data to be skipped when that was loaded using the nxs2 ANLZ tag request. We actually know what these mean, now that we know how to parse EXT files, but we can simply skip them anyway.- See Also:
- Constant Field Values
-
dataReference
public final DataReference dataReference
The unique identifier that was used to request this waveform detail.
-
rawMessage
public final Message rawMessage
The message holding the detail as it was read over the network. This can be used to analyze fields that have not yet been reliably understood, and is also used for storing the cue list in a file. This will benullif the data was obtained from Crate Digger.
-
isColor
public final boolean isColor
Indicates whether this is an NXS2-style color waveform, or a monochrome (blue) waveform.
-
COLOR_MAP
public static final Color[] COLOR_MAP
The different colors the monochrome (blue) waveform can be based on its intensity.
-
-
Constructor Detail
-
WaveformDetail
public WaveformDetail(DataReference reference, Message message)
Constructor when reading from the network or a file.- Parameters:
reference- the unique database reference that was used to request this waveform detailmessage- the response that contains the preview
-
WaveformDetail
public WaveformDetail(DataReference reference, org.deepsymmetry.cratedigger.pdb.RekordboxAnlz anlzFile)
Constructor when received from Crate Digger.- Parameters:
reference- the unique database reference that was used to request this waveform previewanlzFile- the parsed rekordbox track analysis file containing the waveform preview
-
WaveformDetail
public WaveformDetail(DataReference reference, ByteBuffer data, boolean isColor)
Constructor for use with external caching mechanisms.- Parameters:
reference- the unique database reference that was used to request this waveform previewdata- the waveform data as will be returned bygetData()isColor- indicates whether the data represents a color waveform
-
-
Method Detail
-
getData
public ByteBuffer getData()
Get the raw bytes of the waveform detail data- Returns:
- the bytes from which the detail can be drawn, as described in the Packet Analysis document.
-
getFrameCount
public int getFrameCount()
Count the half-frames of waveform available.- Returns:
- the number of half-frames (pixel columns) that make up the track
-
getTotalTime
public long getTotalTime()
Determine how long the track plays, in milliseconds. This provides a more accurate value than the track metadata, which is accurate only to the second, because we know how many half-frames (1/150 of a second) the track is composed of.- Returns:
- the number of milliseconds it will take to play all half-frames that make up the track
-
createViewComponent
public JComponent createViewComponent(TrackMetadata metadata, BeatGrid beatGrid)
Create a standard Swing component which can be added to a user interface that will draw this waveform detail, optionally including annotations like the current playback position and minute markers (if you supplyTrackMetadataso the total length can be determined), and cue markers (if you also supply aCueList). The playback position can be- Parameters:
metadata- Information about the track whose waveform we are drawing, so we can translate times into positionsbeatGrid- The locations of all the beats in the track, so they can be drawn- Returns:
- the component which will draw the annotated waveform preview
-
segmentHeight
public int segmentHeight(int segment, int scale)Determine the height of the waveform given an index into it. Ifscaleis larger than 1 we are zoomed out, so we determine an average height ofscalesegments starting with the specified one.- Parameters:
segment- the index of the first waveform byte to examinescale- the number of wave segments being drawn as a single pixel column- Returns:
- a value from 0 to 31 representing the height of the waveform at that segment, which may be an average of a number of values starting there, determined by the scale
-
segmentColor
public Color segmentColor(int segment, int scale)
Determine the color of the waveform given an index into it. Ifscaleis larger than 1 we are zoomed out, so we determine an average color ofscalesegments starting with the specified one.- Parameters:
segment- the index of the first waveform byte to examinescale- the number of wave segments being drawn as a single pixel column- Returns:
- the color of the waveform at that segment, which may be based on an average of a number of values starting there, determined by the scale
-
-