maia-util
Version:
Utility math and music functions supporting various applications by Music Artificial Intelligence Algorithms, Inc.
45 lines (43 loc) • 1.4 kB
JavaScript
import row_of_max_bar_leq_bar_arg from './row_of_max_bar_leq_bar_arg'
/**
* Given a bar number and beat number, and a time-signature array (with ontimes
* appended), this function returns the ontime of that bar and beat number.
*
* @author Tom Collins
* @comment 17th October 2014
* @param {number} bar - A bar number for which we want to know the
* corresponding ontime (time counting in crotchet beats starting from 0 for bar
* 1 beat 1).
* @param {number} beat - A beat number for which we want to know the
* corresponding ontime (time counting in crotchet beats starting from 0 for bar
* 1 beat 1).
* @param {TimeSignature[]} time_sigs_array - An array of time signatures.
* @return {number} An ontime
*
* @example
* var tsArr = [
* {
* "barNo": 1,
* "topNo": 4,
* "bottomNo": 4,
* "ontime": 0
* },
* {
* "barNo": 3,
* "topNo": 3,
* "bottomNo": 4,
* "ontime": 8
* }
* ];
* ontime_of_bar_and_beat_number(4, 1, tsArr);
* →
* 11
*/
export default function ontime_of_bar_and_beat_number(bar, beat, time_sigs_array){
var n = time_sigs_array.length;
var relevant_row = row_of_max_bar_leq_bar_arg(bar, time_sigs_array);
var excess = bar - relevant_row["barNo"];
var local_beat_bar = relevant_row["topNo"]*4/relevant_row["bottomNo"];
var a = relevant_row["ontime"] + excess*local_beat_bar + beat - 1;
return a;
};