Package at.ofai.music.beatroot
Class Agent
- java.lang.Object
-
- at.ofai.music.beatroot.Agent
-
public class Agent extends java.lang.Object
Agent is the central class for beat tracking. Each Agent object has a tempo hypothesis, a history of tracked beats, and a score evaluating the continuity, regularity and salience of its beat track.
-
-
Field Summary
Fields Modifier and Type Field and Description int
beatCount
The number of beats found by this Agent, including interpolated beats.double
beatInterval
The current tempo hypothesis of the Agent, expressed as the beat period in seconds.double
beatTime
The time of the most recent beat accepted by this Agent.static double
CONF_FACTOR
The slope of the penalty function for onsets which do not coincide precisely with predicted beat times.protected static double
correctionFactor
Controls the reactiveness/inertia balance, i.e.static boolean
debug
Print debugging informationprotected static double
decayFactor
For scoring Agents in a (non-existent) real-time version (otherwise not used).static double
DEFAULT_CORRECTION_FACTOR
The reactiveness/inertia balance, i.e.static double
DEFAULT_EXPIRY_TIME
The default value of expiryTime, which is the time (in seconds) after which an Agent that has no Event matching its beat predictions will be destroyed.EventList
events
The list of Events (onsets) accepted by this Agent as beats, plus interpolated beats.protected static double
expiryTime
The time (in seconds) after which an Agent that has no Event matching its beat predictions will be destroyed.protected static int
idCounter
The identity number of the next created Agentprotected int
idNumber
The Agent's unique identity number.double
initialBeatInterval
The initial tempo hypothesis of the Agent, expressed as the beat period in seconds.static double
INNER_MARGIN
The default value of innerMargin, which is the maximum time (in seconds) that a beat can deviate from the predicted beat time without a fork occurring.protected static double
innerMargin
The maximum time (in seconds) that a beat can deviate from the predicted beat time without a fork occurring (i.e.static double
MAX_CHANGE
The maximum allowed deviation from the initial tempo, expressed as a fraction of the initial beat period.double
phaseScore
Sum of salience values of the Events which have been interpreted as beats by this Agent, weighted by their nearness to the predicted beat times.static double
POST_MARGIN_FACTOR
The maximum amount by which a beat can be later than the predicted beat time, expressed as a fraction of the beat period.double
postMargin
The size of the outer half-window after the predicted beat time.static double
PRE_MARGIN_FACTOR
The maximum amount by which a beat can be earlier than the predicted beat time, expressed as a fraction of the beat period.double
preMargin
The size of the outer half-window before the predicted beat time.double
tempoScore
To be used in real-time version??double
topScoreTime
How long has this agent been the best? For real-time version; otherwise not used.
-
Constructor Summary
Constructors Constructor and Description Agent(double ibi)
Constructor: the work is performed by init()Agent(Agent clone)
Copy constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description protected void
accept(Event e, double err, int beats)
Accept a new Event as a beat time, and update the state of the Agent accordingly.boolean
considerAsBeat(Event e, AgentList a)
The given Event is tested for a possible beat time.protected void
fillBeats()
Interpolates missing beats in the Agent's beat track, starting from the beginning of the piece.protected void
fillBeats(double start)
Interpolates missing beats in the Agent's beat track.protected void
init(double ibi)
Initialise all the fields of this Agent.void
print()
Output debugging information about this Agent, at the default (highest) level of detail.void
print(int level)
Output debugging information about this Agent.void
showTracking(EventList allEvents)
Show detailed debugging output describing the beat tracking behaviour of this agent.void
showTracking(EventList allEvents, double level)
Show detailed debugging output describing the beat tracking behaviour of this agent.
-
-
-
Field Detail
-
beatCount
public int beatCount
The number of beats found by this Agent, including interpolated beats.
-
beatInterval
public double beatInterval
The current tempo hypothesis of the Agent, expressed as the beat period in seconds.
-
beatTime
public double beatTime
The time of the most recent beat accepted by this Agent.
-
CONF_FACTOR
public static double CONF_FACTOR
The slope of the penalty function for onsets which do not coincide precisely with predicted beat times.
-
correctionFactor
protected static double correctionFactor
Controls the reactiveness/inertia balance, i.e. degree of change in the tempo. The beat period is updated by the reciprocal of the correctionFactor multiplied by the difference between the predicted beat time and matching onset.
-
debug
public static boolean debug
Print debugging information
-
decayFactor
protected static double decayFactor
For scoring Agents in a (non-existent) real-time version (otherwise not used).
-
DEFAULT_CORRECTION_FACTOR
public static final double DEFAULT_CORRECTION_FACTOR
The reactiveness/inertia balance, i.e. degree of change in the tempo, is controlled by the correctionFactor variable. This constant defines its default value, which currently is not subsequently changed. The beat period is updated by the reciprocal of the correctionFactor multiplied by the difference between the predicted beat time and matching onset.- See Also:
- Constant Field Values
-
DEFAULT_EXPIRY_TIME
public static final double DEFAULT_EXPIRY_TIME
The default value of expiryTime, which is the time (in seconds) after which an Agent that has no Event matching its beat predictions will be destroyed.- See Also:
- Constant Field Values
-
events
public EventList events
The list of Events (onsets) accepted by this Agent as beats, plus interpolated beats.
-
expiryTime
protected static double expiryTime
The time (in seconds) after which an Agent that has no Event matching its beat predictions will be destroyed.
-
idCounter
protected static int idCounter
The identity number of the next created Agent
-
idNumber
protected int idNumber
The Agent's unique identity number.
-
initialBeatInterval
public double initialBeatInterval
The initial tempo hypothesis of the Agent, expressed as the beat period in seconds.
-
INNER_MARGIN
public static final double INNER_MARGIN
The default value of innerMargin, which is the maximum time (in seconds) that a beat can deviate from the predicted beat time without a fork occurring.- See Also:
- Constant Field Values
-
innerMargin
protected static double innerMargin
The maximum time (in seconds) that a beat can deviate from the predicted beat time without a fork occurring (i.e. a 2nd Agent being created).
-
MAX_CHANGE
public static double MAX_CHANGE
The maximum allowed deviation from the initial tempo, expressed as a fraction of the initial beat period.
-
phaseScore
public double phaseScore
Sum of salience values of the Events which have been interpreted as beats by this Agent, weighted by their nearness to the predicted beat times.
-
POST_MARGIN_FACTOR
public static double POST_MARGIN_FACTOR
The maximum amount by which a beat can be later than the predicted beat time, expressed as a fraction of the beat period.
-
postMargin
public double postMargin
The size of the outer half-window after the predicted beat time.
-
PRE_MARGIN_FACTOR
public static double PRE_MARGIN_FACTOR
The maximum amount by which a beat can be earlier than the predicted beat time, expressed as a fraction of the beat period.
-
preMargin
public double preMargin
The size of the outer half-window before the predicted beat time.
-
tempoScore
public double tempoScore
To be used in real-time version??
-
topScoreTime
public double topScoreTime
How long has this agent been the best? For real-time version; otherwise not used.
-
-
Constructor Detail
-
Agent
public Agent(double ibi)
Constructor: the work is performed by init()- Parameters:
ibi
- The beat period (inter-beat interval) of the Agent's tempo hypothesis.
-
Agent
public Agent(Agent clone)
Copy constructor.- Parameters:
clone
- The Agent to duplicate.
-
-
Method Detail
-
init
protected void init(double ibi)
Initialise all the fields of this Agent.- Parameters:
ibi
- The initial tempo hypothesis of the Agent.
-
print
public void print()
Output debugging information about this Agent, at the default (highest) level of detail.
-
print
public void print(int level)
Output debugging information about this Agent.- Parameters:
level
- The level of detail in debugging
-
accept
protected void accept(Event e, double err, int beats)
Accept a new Event as a beat time, and update the state of the Agent accordingly.- Parameters:
e
- The Event which is accepted as being on the beat.err
- The difference between the predicted and actual beat times.beats
- The number of beats since the last beat that matched an Event.
-
considerAsBeat
public boolean considerAsBeat(Event e, AgentList a)
The given Event is tested for a possible beat time. The following situations can occur: 1) The Agent has no beats yet; the Event is accepted as the first beat. 2) The Event is beyond expiryTime seconds after the Agent's last 'confirming' beat; the Agent is terminated. 3) The Event is within the innerMargin of the beat prediction; it is accepted as a beat. 4) The Event is within the outerMargin's of the beat prediction; it is accepted as a beat by this Agent, and a new Agent is created which doesn't accept it as a beat. 5) The Event is ignored because it is outside the windows around the Agent's predicted beat time.- Parameters:
e
- The Event to be testeda
- The list of all agents, which is updated if a new agent is created.- Returns:
- Indicate whether the given Event was accepted as a beat by this Agent.
-
fillBeats
protected void fillBeats()
Interpolates missing beats in the Agent's beat track, starting from the beginning of the piece.
-
fillBeats
protected void fillBeats(double start)
Interpolates missing beats in the Agent's beat track.- Parameters:
start
- Ignore beats earlier than this start time
-
showTracking
public void showTracking(EventList allEvents)
Show detailed debugging output describing the beat tracking behaviour of this agent. Calls showTracking()/1 with a default metrical level of 1.- Parameters:
allEvents
- An EventList of all onsets
-
showTracking
public void showTracking(EventList allEvents, double level)
Show detailed debugging output describing the beat tracking behaviour of this agent.- Parameters:
allEvents
- An EventList of all onsetslevel
- The metrical level of beat tracking relative to the notated beat (used to count beats)
-
-