return value of renderAbc

visualObjs

When you call renderAbc the return value is an array of objects. Those objects contain a lot of information about the tune that was rendered.

Each item in the array that was passed back is one tune. Even though it is not as common, you can render multiple tunes with one ABC string. For instance, the following ABC string will produce two tunes:

X:1
K:C
CDEF|

X:2
K:G
GABc|

Here is an example of the renderAbc call:

var visualObjs = abcjs.renderAbc(
    ["id-for-tune-1", "id-for-tune-2"],
    abcString,
    { add_classes: true }
)

This section will discuss the structure of visualObjs. You can, of course, name this anything you like, but this documentation will refer to it by this name.

Array of Tunes

Since the return value is an array but in many cases you know you have only passed one tune in, the first thing you'll do is:

var visualObj = visualObjs[0]

Data

Volatile Format

The format of this object is NOT guaranteed to be backwards compatible, so if you do delve into this and write code that depends on it, you need to retest whenever you upgrade abcjs.

formatting

This contains a list of the fonts used for the various types of elements and other formatting commands that have been either passed in on the renderAbc call or appear in %% lines.

lines

This is an array of all the music. Each item in the array is a "staff system". That is, it could be one staff for single instrument music, it could be two staves for piano music, or it could be more for ensemble music.

If you look at this object in the debugger, you can drill down and see all the notes and other symbols that you've defined.

media

Either "screen" or "print". When printing, the margins and the header and footer are used.

metaText

This is all of the items that aren't associated with the music. That includes the text that appears before the music starts and the text that appears after the music ends.

version

The version of this format.

visualTranspose

If the parameter visualTranspose was passed in on the renderAbc call, that value is reflected here.

Methods

Volatile Format

The format of this object is NOT guaranteed to be backwards compatible, so if you do delve into this and write code that depends on it, you need to retest whenever you upgrade abcjs.

getBarLength()

Durations have units where a whole note is 1. This returns how long a measure is. For example, 4/4 time returns 1, 3/4 time returns 0.75, 6/8 time returns 0.75.

getBeatLength()

Durations have units where a whole note is 1. This returns how long a beat is. For example, 4/4 time returns 0.25, 6/8 time returns 0.375 since a beat is three eighth notes.

getBeatsPerMeasure()

This returns how many beats are in a measure. For example, 4/4 time returns 4, 6/8 time returns 2 since a beat is three eighth notes.

getBpm()

This is the starting beats per minute. Tempo changes could appear later in the tune, but this is the value that was set with the Q: statement, or if that statement doesn't exist, it is the default tempo of 180.

getMeter()

This returns the internal representation of the meter as an object. More often you'll find getMeterFraction more useful if you are doing calculations.

getMeterFraction()

This returns an object with the properties num and den. For instance, 3/4 time returns {num: 3, den: 4}. Common and Cut time are resolved to {num: 4, den: 4} and {num: 2, den: 2} respectively.

getPickupLength()

Durations have units where a whole note is 1. If the first measure is not full, then this is the length of that first measure. It is then considered pickup notes.

getKeySignature()

This returns the internal representation of the key signature with all of its pieces broken apart.

getElementFromChar(charIndex)

charIndex is a character position in the original ABC. This searches through the tune for the element that matches that character. If you pass in the index of a non-note element it returns null.

getTotalBeats

Returns undefined until setUpAudio is called, then it returns the total number of beats that the tune has.

getTotalTime

Returns undefined until setUpAudio is called, then it returns the total number of seconds that the tune will take at the tempo that was specified in setUpAudio.

millisecondsPerMeasure()

This does the calculation using beats per minute and beats per measure.

setUpAudio()

If you aren't using the built in synth, but you still want the information that the synth provides, call this. If you aren't overriding the BPM or anything else that can be set in the synth call, you can call this with no parameters. Otherwise specify the items you want to override.

This returns an array of all the sequence data. Normally you won't need this information, but there may be cases where it is useful for post-processing.

findSelectableElement(target)

target is an HTML element. This will find the most appropriate selectable item for that element. This is useful if you want to know what a user is hovering over, for instance. Here's an example of how it might be used:

var renderAbc

var options = {
	add_classes: true,
	selectTypes: true // Add selection for all possible elements
};

renderAbc = ABCJS.renderAbc("paper", abcString, options);
var svg = document.getElementById("paper");
svg.addEventListener('mouseover', hoverListener) // one hover listener for the entire tune

function hoverListener(event) {
	// use the most specific element that was hovered on - it will bubble up until a selectable element is found
    var ret = renderAbc[0].findSelectableElement(event.relatedTarget)
	// if there isn't a selectable element (that is, the hover is over a blank space), null is returned
    if (ret)
        console.log(ret) // info about what the mouse is over
}

getSelectableArray()

This returns an array of all of the selectable items in the tune. The return type is Array<Selectable>.

This can be used to build more complicated interactive functionality.

Last Updated:
Contributors: Paul Rosen, paulrosen