UNPKG

abcjs

Version:

Renderer for abc music notation

2,034 lines (1,077 loc) 65.5 kB
# Version 6.2.0 ## Features * implement %%MIDI bassprog, bassvol, chordprog, chordvol * Add support for `[r: ... ]` remark * add support for %%voicecolor * add germanAlphabet option: display chords using German music alphabet * add lineThickness option: allow tweaking of the size of the lines * add a public access to the audio buffer through CreateSynth.getAudioBuffer() so that it can be processed outside of abcjs ## Bugs * fix placement of ties when they extend to a new line * fix crash with tablature and showDebug are used at the same time. * fix bug in getting the location of the beat from TimingCallbacks when there are prep beats. * Change D.C. and D.S. decorations to be right aligned * fix metronome with changing meter * don't indent unaligned words * fix handling of accidentals in tablature ## Documentation * Improved the typescript types somewhat. ## Refactoring * Changed the names and moved a number of files in the engraver in anticipation of further refactoring. * Did some simplification in tablatures. # Version 6.1.9 ## Features * Add decorations for !D.C.alcoda!, !D.C.alfine!, !D.S.alcoda! and !D.S.alfine! ## Bugs * keep transposing from crashing when K:none. * mark the touch events as passive to prevent jank. * fix crash when the M: line is missing and drum intro is used. * fix midi output when using percussion voice. ## Documentation * Improved the typescript types somewhat. * Upgrade VuePress. * Fix link for new synth in the docs. # Version 6.1.8 ## Features * Implement 'octave' modifier for K: and V: fields. ## Bugs * Handle accidentals in a measure in tablature. * Fix accidental handling in tablature when there is a key signature. * Add a little padding when tablature doesn't have a label. * Fix the css styles applied to tablature. * Allow percmap to use higher octave pitches. * Fix cursor movement when playing synth and tablature is visible. ## Documentation * Add example of getting lyrics out of a tune. # Version 6.1.7 ## Bugs * don't draw measure numbers before the beginning of the line. * guard against crash on touch selection ## Testing * open the browser and run the test-server in parallel * add a minimal server for serving test pages ## Documentation * Add example of getting lyrics out of a tune # Version 6.1.6 ## Bugs * Fix error when selecting notes # Version 6.1.5 ## Bugs * Fix error when selecting notes # Version 6.1.4 ## Bugs * Fix error when selecting notes # Version 6.1.3 ## Bugs * fix placement of tablature staff when there is extra space used above the staff. * Fix regression crash when using 'y' spacer # Version 6.1.2 ## Bugs * fix combining oneSvgPerLine with responsive: "resize" * fix drawing audio controls when the outer stylesheet changes the button's lineHeight # Version 6.1.1 ## Bugs * rewrite oneSvgPerLine; fixes selection and keeping multiline items (like slurs) correctly. ## Features * added mobile browser TouchEvent support for dragging ## Documentation * fixed some typescript definitions # Version 6.1.0 ## Bugs * Fix some bugs in startChar; endChar ## Features * Add transposing feature ## Documentation * Document transposing feature * Clarify the way testing works * Add tablature tests to "all" # Version 6.0.4 ## Bugs * Fix position of staccato when a note is beamed and its stem is backwards. * Write annotations above bar lines. * fix placement of rhythm indicator (the R: field) on treble clef when there is nothing else above the staff. * fix some broken tests; add test for staccato bug and rhythm word placement. * fixed some Typescript warnings and errors ## Features * Recognize backslash to escape lyrics. * Add glissando * pass back the start and end char positions with the audio callbacks. ## Documentation * Add example of adding note names to a tune automatically. * Add a mention for the VSCode extension. * Add tune book example. # Version 6.0.3 ## Bugs * Fix unhandled rejection if there is a problem with an input note when creating notes. * put the height of ties/slurs in the line height calculation * Measurements that used "px" were reporting a warning. * Fix bass note in jazz chord when it contains a sharp or flat ## Features * Quotation mark in a chord can be escaped. ## Documentation * Add example of reusing created synth buffers. * Fix example in docs on creating a drum rhythm # Version 6.0.2 ## Bugs * Fix paper size so that the bottom of a narrow staff is not cut off. * Fix example generator for synth * Fix tablature parameter name and tuning examples * Fix tablature default tuning for guitar (move A down octave) # Version 6.0.1 ## Bugs * Make the printable example long enough to be on two pages. * Fix paper size so that the bottom of a narrow staff is not cut off. * Add a little padding to stems so they aren't cut off. # Version 6.0.0 ## Bugs * Fix the bar number display when wrapping. * Don't add extra padding when creating minimal music (like one note) * Fix selection data for unaligned words * Pass back actual selectable element when one of its children is clicked. * Don't put extra classes and data- attributes on compound symbols (like "12/8") * Fix spacing for triplet number * Don't add extra space at the bottom if there is no bottom text. * Allow aria-label to not be set. * Fix adding class names to dynamics and some other elements. * Fix regression where the left line of multi-staff music was misplaced if the bottom line is for percussion. * gracenotes now are processed through %%percmap # Version 6.0.0-beta.39 ## Bugs * Add some info to the return of the prime() method * Fix iOS not playing because audioContext doesn't stay running # Version 6.0.0-beta.38 ## Bugs * Regression: Fix return of CreateSynth.init * Don't do audio on tablature lines. * Wait until all notes are loaded before continuing to build audio buffer. (Caused the beginning of the buffer to possibly be arpeggiated if there is a race condition.) * Don't crash when there is a blank staff on the second line. * The pan option now works if the actual number of tracks doesn't match the panned tracks. * Don't add chord track if it is empty. ## Documentation * Get more detailed with the typescript declarations # Version 6.0.0-beta.37 * Keep the correct line count when generating one svg per line. (Fixes analysis of the tune for playback and timing) ## Features * Change the default soundfont to the improved Fluid one; add the anticipations on the abcjs soundfont. # Version 6.0.0-beta.36 ## Bugs * Fix some typescript definitions. * When stopping synth, return the position that it stopped at. * Implement a fix for race conditions during note loading * Don't call debugger when setting an annotation on an invisible note. * Put try/catch in editor when creating music so there isn't an unhandled exception if there is an abcjs bug. * Don't crash when creating audio and there is a suppressed blank line * When suppressing blank lines, consider a line with only chords as not blank. * Don't add too much spacing on chord symbols when placing them. * Don't lose element's scrolling position when rendering music. * Fix crash when creating timing array and there is a suppressed line because it is empty. * Allow soundFontVolumeMultiplier to be set to zero. ## Features * Add string tablature * Implement %%jazzchord directive ## Documentation * Add example page using multiple synths with program switcher * Add jazzchords to example generator # Version 6.0.0-beta.35 ## Bugs * Fix regression on creating oneSvgPerLine * Fix notes that are one step apart from colliding. * Fix crash on bad notelength * Fix note durations in triplets where p != r * Don't crash if a browser doesn't contain AudioContext * Don't swallow warning after wrapping. * Fix some regressions with placing and styling text. * Fix font on relatively positioned annotations. * Protect the editor from crashing when synth is attempted and the browser doesn't support AudioContext. ## Features * Create parameter `jazzchords` * Add many types to the typescript definitions. * Add `units` to TimingCallback.start * Add staccato to midi creation. * Add classes to dynamics elements. * Add more info to the click handler * Limit the size of the warning message if there is a long string. * Add initialClef option * Keep and pass back current time from the timer callbacks. ## Documentation * Fix path for favicon in docs * Tweak to printing example * Move examples to github pages. * Add MIDI download example. * Fixes to doc building from the vuepress upgrade. * Add mention of a CDN to load library from. * Add a couple of errors to analysis demo to show the warning data. * Option to only render the clef on the first line. # Version 6.0.0-beta.33 ## Bugs * Fix crash when there is a missing close bracket on an inline command. * Fix the startChar position of chords * Fix overriding the tempo. * Fix passing qpm in. * Fix stem direction bug on wrap. * Fix bug in calculating the endpoint of the audio when there are multiple voices. ## Features * Add getBarLength() and getTotalTime() to the tune object; * Add second parameter to seek() for the units percent, seconds, and beats. * Add `detuneOctave` parameter ## Documentation * Example of controlling the tempo. ## Build * Remove bin folder # Version 6.0.0-beta.32 ## Bugs * Some fixes to startChar and endChar when there are line continuations * Error messages now report the absolute line in the file that the error occurs, not the offset from the first music line. * Fix bug where multiple text lines would duplicate text. * `a b !+!c` removing the end `!` from the `!+!` will cause the decoration to bleed to the first element in the line. * Fix audio control buttons on Safari * Make creating audio more efficient. (was creating buffer twice as long as needed.) * Fix click-a-note-to-play-it to handle microtones. * Get rid of audio warning when key changes. * Fix Safari not making sound when first using playEvent. * Fix crash when wrapping when using oneSvgPerLine. ## Features * Change the pitch change variable from "warp" to "cents". * support microtones in midi output. ## Refactoring * Improvements to the handling of line continuations * Remove some midi.js remnants * Refactoring of the parser ## Build * update dependencies and fix webpack for v5 ## Documentation * Add microtone demo. * update docs to vuepress2 # Version 6.0.0-beta.31 ## Bugs * Fix crash when no key signature is passed in. * Octave clefs were double transposing. * Made the audio control more robust in dark mode and when the page's css defines basic buttons. ## Features * Support audio for quarter sharp and quarter flat. * Allow getMidiFile to accept a tune object as well as a string. ## Build * Remove more of the midi.js code * Deliver the /dist folder for npm. * Add entry points for testing. * Start of parser refactoring # Version 6.0.0-beta.30 ## Bugs * Fix npm deployment. # Version 6.0.0-beta.29 ## Bugs * Fix stem direction on overlay voices. ## Features * Add support for invisible multi-measure rest "X" * enhance typescript types ## Build * Remove build of midi version * Simplify the webpack config * Remove references to "master" # Version 6.0.0-beta.28 ## Bugs * Fix some problems with the visual synth control getting out of sync with the music. * Fix stem direction on overlay voices. * Don't print accidentals on percussion staves. * Keep dragging notes from jumping around when the svg is scaled (on Chrome & Safari) * Fix placement of multi-measure rest. * Fix crash when using the parser twice instead of creating a new one. * Fix bug in drawing slurs over the end of a line when there is more than one staff. * Fix bug in counting measures in the element classes. ## Features * Support dark mode. * Add support for `%%percmap`, allowing specifying a shape for each sound. * Implement the audio for `%%percmap`. * Add "triangle" as a note head shape. ## Documentation * Add a "Start here" section to the demo TOC. * Add demo of tune analysis; fix docs on tune analysis * Add "zoom to fit" demo. ## Build * Move SVG to separate files. # Version 6.0.0-beta.27 ## Bugs * Fix regression bug with setting the tempo when there is no Q: in the ABC string. * Fix measure class numbering when the line starts with a bar line. * Fix slur placement over a line break when there is more than one voice. * Recreate audio when changing the tune in the editor. * Fix wrapping crash when the first line in the tune is a subtitle. * Fix synchronization of timing callbacks after changing the tempo. * Fix regression bug when creating audio buffer in Safari. * If an audio context is passed in, always use it. ## Documentation * Add warning if audio CSS is missing. * Improve the animation demo. * Add warning if a nonsensical rhythm is encountered. * Add warning if audio CSS is missing. * Change default branch to main * Add links and info for old versions. * Redo the animation demo. * Add responsive demo. * Change alt text for example's logo * Some tweaks to transposition demo. # Version 6.0.0-beta.26 ## Build * Added types for TypeScript for `renderAbc` function * Change midi.js to a peerDependency. ## Accessibility * Add foregroundColor parameter and set the default to currentColor (for high contrast) * Add option to set the aria-label; by default aria-label is set to the title. ## Bugs * Fixed some regressions in changing the audio tempo. * Fix some timing and crashing issues on synth. * Fix the currentTrackMilliseconds for meters with eighth note denominators that are not compound. ## Features * Add support for triple broken rhythm symbols `>>>` and `<<<` * Add `minPadding` parameter to keep the notes from getting too close together on crowded lines. * Change the fadeLength default to 200ms # Version 6.0.0-beta.25 ## Bugs * Fix the way pause/resume is handled in the timing callbacks. * Fix problems with changing the tempo with "warp" * Keep key sig changes when wrapping. * Make wrapping use one less line in some cases. * Fix crash when wrapping music that has unusual voice mismatches. * Fix meter display when wrapping. * Prevent out of memory when wrapping long tune. * Fix some cases where P: and Q: were not handled correctly. * Fix changing tempo when there is a repeat. * Fix audio seek: Seek percent should take the fade length into account. * Fix crash when a tie is right before a repeat sign. * Improve error handling when creating audio. ## Features * Add entry point in synth controller to programmatically seek * %%stretchlast takes a number parameter * Deliver the elapsed time in whole notes as well as milliseconds in the timing callbacks. * Return the position of the notehead in the click listener. * Add SynthControl.disable() so that the user can't click on the control before the tune is ready. ## Tasks * Remove many old versions of the minified releases. * Change the destination folder for the build. * Refactor wrapping ## Documentation * Some clarification of the build process in the docs. * Create the example generator. * Add FAQ * Some tweaking to the demos; create demo table of contents. * Add a little css for the examples * Improvements to examples/basic-transpose.html * Disabled spellcheck for ABC input textareas * Document afterParsing function * Document synthParamChanged # Version 6.0.0-beta.24 ## Bugs * If there are pickup notes and a drum track, don't start drum until the first full measure. * If a dotted slur crosses a line, the slur on the next line should also be dotted. * Make the audio buffer a little longer so the last note can fade out more naturally. * Fix abcjs-mmXX class when there are non-music lines present. * Fix height of bottom text: it was calculating a line too many. * Fix a couple of crashes when calculating the timing of a tune. * Fix documentation about how to directly play sound. ## Features * Add resets to MIDI file; carry forward "pan" option to MIDI file. * %%titleleft should also affect subtitle. * Add class for the measure count from the start of the tune. # Version 6.0.0-beta.23 ## Bugs * Fix calculation of bottom text height when there are blank lines. * Center chord symbols better. * Fix crash in the timer when lineEndCallback is not specified. ## Features * Add the staff Y coordinates to the clickListener. * Implemented %%titleleft # Version 6.0.0-beta.22 ## Bugs * Fix crash in audio when there is an odd measure that contains chords. * Fix definition of some jazz chords, particularly the 13th * Fix timing on multiple voices when the tempo changes. * Fix downloading WAV files in stereo. * Fix the last line in the line end callbacks. * Simplified and fixed some edge cases when seeking; added return value for eventCallback. * Fix tempo change in multiple voices * Fix the reporting of measure numbers in the timing callbacks when there are multiple voices. * Add more info to the lineEndingCallback so the client can see all of the lines. * Fix the alignment of %%center text. * Don't crash if the current beat is later than the last event (can happen when the animation timer is delayed) * Fix line end callback anticipation handling. * Fix lower volume of default soundfont to prevent clipping. * Fix crash when doing audio for tune with subtitle ## Features * Add programOffsets parameter for audio. * Handle `%%MIDI channel 10` when it is in the middle of a tune. * Add the note style (grace or decoration) to the sequenceCallback. * Add classes for pinpointing where slurs start and end (abcjs-start-m0-n0, abcjs-end-m0-n0) * Round many paths to 2 dec. places; add "abcjs-dotted" to dotted slurs. * Add abcjs-dynamics class to the !f!, etc. symbols. * Differentiate between slurs and ties in the classes. * Add more info to the lineEndingCallback so the client can see all of the lines. * Add some details about the beat callback to straighten out doing a smooth cursor. # Version 6.0.0-beta.21 ## Bugs * Don't require soundFontUrl to end in a slash. * Force stretchlast on all lines except the last when printing one svg per line. * Fix placement of brackets and braces when there are two voices on a staff. * Fix typo in lead_8_bass_lead instrument name. ## Features * Added soundFontVolumeMultiplier parameter; * made the abcjs soundfont the default. # Version 6.0.0-beta.20 ## Bugs * Fixed bug in smooth cursor when repeat is on one line. * Fix timing callbacks calling stop() when playing in a loop. ## Documentation * Add example for adding swing. * Add example for playing on repeat. # Version 6.0.0-beta.19 ## Bugs * Fix crash when processing a string that contains no note events. * Don't let odd crescendo or diminuendo cause a nonsensical volume. * Initialize the gap in audio files. * Fix bug in timing callbacks when the position changes inside an event handler. * Fix bug in turning off individual voices. * Fixed chord placement when there are more than one chord in a measure in compound meter. ## Features * Implement a smooth cursor in the timing callbacks. * Expose setWarp so that the tempo can be changed programmatically. # Version 6.0.0-beta.18 ## Bugs * Slight speedup when laying out scores with names in the voices. * Increase the size of the annotation's lane to account for descenders. * Fix calculation of beat length for 3/8 time. ## Features * Return the cursor position for each beat in the timing callbacks. * Add the x position of the end of each note to the note timings. ## Documentation * Document the renderer debug option. * Document the new parameter on the TimingCallback's beatCallback. # Version 6.0.0-beta.17 ## Bugs * Fix positioning of "3" on triplets. * Add a tiny bit on margin for the annotation lanes. * Fix positioning of lower annotations (that is: "_annotation"). * Fix generating audio using the SynthSequence object. # Version 6.0.0-beta.16 ## Features * If there is a repeat, then include both of the currentTrackMilliseconds in the callback. (Note: if you consume this, be sure you can handle either a number or an array.) * Allow as many lanes as needed for annotations below the staff. * Add Tune.getElementFromChar method for convenience. * Allow setTiming to be called without parameters. ## Bugs * Fix the audio interpretation of dynamics. * Fix vertical positioning of annotations when they appear on the same line as other annotations. * Fix bug when there is a spacer in a triplet. * Fix drawing of slur at beginning of line. * Fix bug where editor swallows the clickListener callback. * Fix timing when there are tempo changes. * Move tempo note up slightly so it aligns with the number, not the font's baseline. ## Documentation * Document the return value of renderAbc * A little improvement to the Editor documentation. * Document classes a little more comprehensively. * Document lineBreaks parameter. * Remove the circular requirement for abcjs in the docs. * Start to document the rest of the options for renderAbc * Create example of how to annotate music. * Improve documentation of audio. * Changed the object that onEnded is passed in with to match documentation. # Version 6.0.0-beta.15 ## Bugs * Slightly increase the spacing for the dynamics lane. * Fix crash when inline tempo is the first thing in the file. * If `selectTypes` is not passed in, then the click behavior matches the last version of abcjs. * Various positioning tweaks for clefs and key signatures. * Get the fingerings to not interfere with chords. * Fix dynamic volume calculation when dynamic is defined on bar line. * Fix regression when wrapping short lines. * Don't crash when creating a drum track (the inserted rests don't have elements attached.) * Create AudioContext if one isn't passed in. * fix some minor positioning problems with text boxes. ## Features * Use two lines for annotations and chords if they would run into each other. * Recognize `!^!` as a synonym for `!marcato!`. * Add a little more vertical space so nearby elements don't touch. * Add support for dotted slurs and dotted ties. * Pass back original mouse event when an element is clicked. * Implement `vocalspace`. * Add `showDebug` parameter to display element placement. * Support `beambr1` and `beambr2`. * Add the option `fontboxpadding`. * Allow `annotationfont`, `composerfont`, `historyfont`, `infofont`, `subtitlefont`, `textfont`, `titlefont`, and `voicefont` to have a text box. ## Refactoring * Some refactoring of layout functionality. ## Documentation * Change all the examples to use the `/dist` folder so the path doesn't change every release. * Create test for web audio. * Set a custom font for the chords in the docs. # Version 6.0.0-beta.14 ## Bugs * Don't crash if `setTiming` is called too early. * Fix length of accompaniment notes in compound meters. * Fix inaccuracies with JS floating point on the length of notes. * Fix crash when unmatched quote is in V: line. * Get the multi-measure rest to have the correct duration for both display and audio. * Fix crash "undefined size". * Fix computing the pickup length when there are triplets. * Don't transpose the perc clef. * The audio should ignore the visualTranspose. * Fix tempo calculation. ## Features * Improve the drawing of the double flat symbol. * Detect chords that aren't on the beat and move them. * Play chords on incomplete measures. * Fix selection of tempo element. * Handle no key sig in transpose. * Allow synth parameters to be changed on the fly when using the editor. * Don't require generate_warnings in editor params if warnings_id is present. * Accept an element as well as an ID in warnings_id. ## Refactoring * Refactor the way notes are placed to create audio. * Move layout functionality to a separate directory. ## Documentation * Make a better example of how to transpose. ## Testing * Add Mocha * Add mocha tests covering most of the audio note placement. * Add mocha tests for the selectable items. * Add mocha tests for the line wrapping code. * Add mocha tests that will run cross browser. # Version 6.0.0-beta.13 ## Bugs * Fix staff spacing bug when nothing is below the staff (like with bass clef only containing high notes) * If a triplet is beamed with anything else, add a bracket. * Fix supportsAudio() so it always return a bool * allow more than one brace on a system * Don't start dragging a note unless only the main mouse button is clicked. * Don't crash audio if the time signature is malformed. * Fix tempo on 9/4 and 12/4 meters * Restore staccato note length * fix bug in audio transposing middle C * fix placement and sizing of text and the text box * fix bug with sizing gchordfont * Fix some crashes and bugs in the visible audio control. ## Features * Calculate tempo using passed in bpm if the millisecondsPerMeasure is not supplied. * Refactor the editor to use renderAbc so that all the renderAbc functionality is available. * allow multiple lines on a voice name * center the voice name when there is one name in a brace. * Implement vskip for regular music lines. * allow changing gchordfont in the middle of the tune * Create chords from whichever voice chords are encountered first. * Get the octave clefs to sound in the correct octave. ## Documentation * update example to show onSvgPerLine and use new audio. * Fix example links in docs. * Add example for playing synth with no visual music. * Fix midi download link on full synth example. ## Refactoring * split tunebook from tunebook parsing. * More refactoring of the drawing code. * separate bottom text into creation/drawing stages; cut down on dependencies in the draw functions. * separate editarea from editor to allow function redefinitions # Version 6.0.0-beta.12 ## Bugs * Fix selection of items in a cross-browser way, in different markups and css that the SVG can appear. * Fixes #440 second staff rendering too early. * Fix regression bug when rendering. # Version 6.0.0-beta.11 ## Features * Allow "K:C none" to be the same as "K:C clef=none" * Allow a finer grained selection mechanism. * Allow braces to be selected. * Allow o 0 and ^ as input for º ø and ∆ in chords. * Don't play notes that are drawn with the rhythm notehead: replace with chord. * Implement graceslurs * Make the annotation not take horizontal space. ## Bugs * Crash in Firefox <= 50 when selecting. * Don't crash if a rest is put inside a chord i.e. `[z]` * Improve downward stem and beam rendering * Remove the gaps between notes in audio. * When removing latex commands, don't mess up the character positioning. * fix to scale the click coords when paper is set to responsive * support viewBox differences between chrome and firefox ## Refactoring * Extract the chord/annotation function to a separate file. * Much refactoring to start putting all of the drawing commands together. ## Documentation * Add example for using wrap. * Improve documentation for the call to initialize the synth. * use https link over ssh for building documentation # Version 6.0.0-beta.10 ## Features * Add option to turn off individual voices when producing the audio. * Add track names to midi file output. ## Documentation * Example of how to play only chords or only melody. ## Bugs * Fix placement of multiline overlay voices. * Fix crash when setting the name of the midi file to download. * Many timing tweaks and other improvements to the audio creation. * Playback treble+8, etc. clefs in the correct octave. * Don't transpose chord accompaniment more than an octave. * Extra resume of audio context for Safari 13 * Fix setting the sound font url. * Support pppp and ffff in audio. * Fill midiPitches when doing any timing operation. * Fix seeking when paused moved the cursor but not the audio. * Fix audio timing when there are grace notes present. * Fix end tie that happens over an ending. * Fix audio for ties when there are accidentals. * Fix the alternating bass note for chords with #5 and b5. * Fix arithmetic inaccuracies in triplets. * Fix interpreting a "maj" chord as minor. * Fix tempo of 3/4 tunes. # Version 6.0.0-beta.9 ## Bugs * Add a fail-safe timer for the timingCallbacks (for some mobile devices that don't properly do requestAnimationFrame) ## Tasks * Add Docker files for running npm. # Version 6.0.0-beta.8 ## Bugs * Give the percussion clef a little more room to the right. * Fix line ending callbacks after random access seeking. # Version 6.0.0-beta.7 ## Bugs * Some tweaks to improve audio output. * Element.prepend is not available on older browsers. # Version 6.0.0-beta.6 ## Bugs * When doing line wrap, don't drop the meter when there are multiple staves. * Keep the line callbacks in TimingCallbacks accurate after seeking. # Version 6.0.0-beta.5 ## Features * Add offset parameter for TimingCallbacks start() * Somewhat improved documentation. ## Bugs * Make the timing of beats more accurate in TimingCallbacks. * Only select element if the click is within 12 pixels. * Fix crash when using the built in audio control. # Version 6.0.0-beta.4 ## Features * Add a callback for the client to select items programmatically. * Add midi download to the synth example. * Add "link" as the default style of midi file return value. ## Bugs * Call resume on the AudioContext just before playing, just in case. (Fixed Safari bug) * Fixed regression with the line number on the staves. * Fixed regression: the class "abcjs-top-line" lost the "abcjs-" part. ## Tasks * Update copyright years. * Update dragging example. # Version 6.0.0-beta.3 ## Bugs * Remove warning in audio creation when the track name is specified. * Don't crash in creating audio when the length of the music is zero. * Fix some timing problems with loading note mp3 that are already pending. * Fix selection of free text. * Set the correct defaults for a bare "%%sep" command. * Set the right font face when a font is specified with only "box" * Fix crash in audio when trying to play unisons. * Fix setting the position of braces and brackets when the start staff isn't present. * Fix computation of pickup length because of JavaScript math problems * Fix setting the position of braces and brackets when the end staff isn't present. * Fix some inaccuracies in getting height of text. ## Improvements * Improve efficiency of creating the audio buffer; improve sound quality and volume of the buffer. * Round many of the calculations to make the SVG draw the same on different systems. * Improve the selection data. # Version 6.0.0-beta.2 ## Bugs * Fix crash when creating music when the SVG is not shown. # Version 6.0.0-beta.1 ## Selection * Completely revamp the selection of elements code. * Implement dragging notes vertically. * Give more information when clicking on the staff label. * Get the box around text to be selected with the text. * Fix selection of the text at the top. * Click listener parameters now have analysis. * Add more element types that can be selected by the user. * Add option "selectAll" for only being able to select notes/rests/bars. * Add option "selectionColor". * Add option "dragColor". * Add option "dragging". ## Audio * Add "pan" parameter for the audio. * Pass changes to audio parameters into the editor. * Improve error handling of midi. * Guard against crash when a negative duration is given to the midi. * If an unknown chord pattern starts with an "m", default to minor chord (was always defaulting to major.) * Redo audio buffer creation to use built in audio nodes. * Add key and time sig to midi output; use the "note off" command instead of volume 0 in midi file. * Add track name to midi file. * Don't override channel for the percussion clef if the program or channel was explicitly set. * Fix small, accumulating rounding error in midi file timing. * Fix crash when there isn't a title or other things about the first music line. * Fix detection of whether a meter is compound. * Add audio support for trills, mordent, turn, and roll. * Fix grace note pitch; implement staccato, tenuto, and accent in audio. * Add option for retrieving the binary midi data. * Expose the code for creating a MIDI file to the basic library. ## Rendering * Draw bracket; fix positioning of the brace and bracket. * Fix grouping and classes of triplets and beams. * Some tweaks to the grouping of svg elements. * Optimize calls to getBBox * Give measure numbers that appear on the left edge more room when they would interfere with the treble clef. * Make the invisible marker zero pixels so it can't accidentally get shown with css. * Add classes to ledger lines * Add more identifying classes. * Adjust the bass octave indicator a little. * Group some svg elements together that belong together. * Remove the selector box for each element - entire SVG is selectable. ## Tasks * Add testing for the output of the selection. * Set gitmodules for the vuepress docs (so that commits can be in npm.) * Remove some dependencies on the window object. * Put all drawing actions in an array ## Documentation * Create demo of dragging and selection. * Documentation should import on the latest abcjs. * Fix link to audio examples in docs. * Fix logo path in readme * Add reference to the standard. # Version 5.12.0 ## Features * Add entry point for changing glyphs. * Improved documentation. * Add example for changing glyphs. ## Bugs * Fixed midi plugin example to demonstrate defaultQpm. * Fix rendering quarter tones in the key signature. # Version 5.11.0 ## Features * Changed documentation to vuepress. * Implement the defaultQpm parameter. * In TimingCallbacks, accept a tune that hasn't created noteTimings yet. * Audio: Implement beataccents, nobeataccents, vol, volinc, and set the correct default accent values. * Add onEnded callback for the CreateSynth object. * Add headless rendering with the "*" parameter. * Add callback context to audio calls. * Allow using audio without a visible control. * Add a callback when the selection changes in the editor. ## Bugs * Fix bug in double reporting a note's millisecond; fix bug in playing gracenote. * Fix grace notes in percussion track. * Fix crash in creating audio when there is a mismatch of ties. * Fix bug with lining up ties with the correct voice on multipart music. * Change the TimingCallbacks input parameters into integers. * When querying a tunebook for an id, accept either string or number. * Fixed the value of currentTrackMilliseconds that is returned when the user clicks on a note. * Fix wrapLines with several titles * Don't add duplicate program commands in audio * Don't ignore chord basses with accidentals when generating midi ## Tasks * Update dependencies # Version 5.10.3 ## Bugs * Don't crash when calculating the wrap lines if the staff width is too short. ## Features * Allow boolean directives to use "true" and "false", in addition to 0 and 1. * Added freegchord option. * Show example of getting timing info on note callback function. # Version 5.10.2 ## Bugs * Fix line wrapping problem when the total number of measures is less than the target number of measures. # Version 5.10.1 ## Bugs * Fix crash when attempting to manipulate tunes that are created with oneSvgPerLine. # Version 5.10.0 ## Bugs * Fix crash on init of synth if tempo is not passed in. * Fix the tempo for synth pieces that are not in 4/4. ## Features * Rests that take up a measure should always be a whole rest, no matter what the time sig. * Allow beat subdivisions to be set for the synth control object. * Update the test for whether audio is possible to include access to ac.resume * Add sequenceCallback option for the synth. * Add api function to expose the tune's key signature. * Add sequenceCallback option for the synth. * Add the rest of the possible TimingCallback parameters when calling through the new synth. # Version 5.9.1 ## Bugs * Fix crash when using different combinations of options for the audio control. * Fix some browser compatibility issues. # Version 5.9.0 ## Features * Add parameter afterParsing to provide a hook before displaying the music. * Added entry point for seeing if audio is possible. * Play gracenotes (when present) when playing a single event. * Keep a running total of the time that a note should be played for convenience in callbacks. * Add gracenote midi pitches to the return object on timing callbacks. * Support `%%MIDI program channel program` syntax. * Much improved interface for using the new audio. * Incorporate playing a single note. ## Bugs * Fix crash in editor/synth demo. * Fix placement of triplets * Let the timingCallbacks be used with one SVG per line. ## Tasks * Improve demos relating to audio. * Update all node dependencies. * Document the "mark" class. * Update webpack * Make uncompressed version of abcjs. # Version 5.8.1 ## Bugs * Fix vertical spacing of %%text * Fix output of getTune() when more than one tune is parsed with the same parser. # Version 5.8.0 ## Bugs * Fix alignment issue when a tempo is over a barline. * Fix alignment issue when a part is over a barline. * Change startChar and endChar to be aware of the position in the entire tunebook. * Some tweaks to the slur and tie positioning. * Protect against crash when an element is added before the staff is ready. ## Features * Add a new method of creating synthesized sound. (see [Synth Documentation](docs/audio/synthesized-sound.md) ) * Implement "setbarnb" measure number ## Tasks * Add demos for transposing. * Add demo of clicking on a note to play it. * Add examples of how to use the new synth. * Update build dependencies * Simplify the build process by not requiring a version number change for each entry point. * Add info about x and width to renderer regression tests. # Version 5.7.0 ## Bugs: * Improve slur and tie direction and placement by following "Standard Practice Engraving". * Use override when calculating beats per measure in the timing functions. * Fix crash when using the old animation routine without a cursor. * Handle blank lines in the verses at the bottom. * Allow calling pauseAnimation and stopAnimation even if the animation hasn't started. * Fix alignment of overlay voices when the line starts with a bar line. * Don't start TimingCallbacks timer if there is a seek before the timer starts. * Expose TimingCallbacks in the midi and test versions. ## Features: * Allow creation of SVG when it isn't visible in the DOM (by creating a dummy one if necessary). * Add classes to lyric lines. * Separate the tempo element into its own svg path so that it can be treated separately. * Support 6/4 time. * Invert beatCallback and timingCallback events. * Add more information in the callback for both the timingCallbacks and the note click callback about the sound of the note clicked. * In midi, support switching instruments in the same track. * In midi, return the pitch that is being played in the event; add the total duration as a parameter of the midi; expose getBeatsPerMeasure() in the tune structure. * In TimingCallbacks, allow subdividing beat callbacks. ## Tasks: * Update webpack/babel to the latest versions. * Clean up the text size estimation to just be done in one place, and create a dummy svg if there isn't one available. * Remove the examples and the font_generator from the npm version. # Version 5.6.11 ## Bugs * Fix bug in TimingCallbacks where some beats won't be reported if the javascript processing is interrupted (for instance, if the user changes tabs while it is running.) # Version 5.6.10 ## Bugs * Fix bug in TimingCallbacks where last beat can sometimes be skipped if the animation timer wakes up right at the end. # Version 5.6.9 ## Bugs * Make overlay work with first & second endings * Fix bug in measure counting in TimingCallbacks when line starts with a measure of rests. * Keep stem direction when doing line wrapping. * Improve the algorithm for wrapping lines. # Version 5.6.8 ## Bugs * Improve the line wrapping algorithm. * When seeking in the TimingCallbacks, call the new position's callbacks right away. # Version 5.6.7 ## Bugs * When note is far from the centerline, the stem is extended, so put the flag in the right place. # Version 5.6.6 ## Bugs * Calculate the correct number of beats in TimingCallbacks: fixes rounding error. # Version 5.6.5 ## Features: * Add random access seeking to TimingCallbacks. * Pass back more progress info in the beat callback of TimingCallbacks. ## Bugs * Add render_options to the midi version of the plugin. * Add missing release files; remove the "latest" versions, since they were not kept up to date. * Updated build packages. # Version 5.6.4 ## Features: * Add %%vskip * Add %%sep ## Bugs * Don't include the minified versions of the libraries in the npm package. # Version 5.6.3 ## Features: * Add arpeggio decoration. * Add "voicescale" and "cue=on". * Add "%%flatbeams". * Add entry point for "extractMeasures()" to analyze the tune. (Just single voice music for now.) ## Bug fixes: * Add startChar and endChar for many non-note elements (parts, clefs, tempos, etc.) * Fix triplet bracket placement when there are rests or really high notes. * Handle triplets correctly when figuring out the length of the pickup measure. * Don't count spacers when seeing if there are pickup notes in a tune. * Fix bug not recognizing an inline header after a "&". # Version 5.6.2 ## Features: * Add more chord definitions. * Support changing fonts in W: statements using $1 syntax. ## Bug fixes: * Don't attach midi control listeners to the global object. * Fix some midi control visual issues. * Fix mousemove listener in the midi control, we want to consume only our events. * Sort the events for midi creation more deterministically. * Fix handling ties over a bar line when there is an overlay. * Adjust text a little when there is a box around it to be centered better. # Version 5.6.1 ## Bug fixes: * Fix bug where wrapping code was ignoring one SVG per line. # Version 5.6.0 ## Features: * Enable progress indicator dragging * Clicks on progress bar now move the indicator correctly ## Bug fixes: * Fix the title (with unicode chars) in the downloadable MIDI file. * In midi, sort program changes before other events that happen at the same time. * Fix crash when calculating the title for a piece with a missing voice. * Fix bug where wrapping code was ignoring one SVG per line. * Fix off-by-one error when calculating line widths during wrapping. # Version 5.5.0 ## Features: * Add "chordsOff" parameter to just play midi of the melody. ## Bug fixes: * Don't duplicate slurs on chords when using wrap. * Figure out correct accidental when transposing to a key with accidentals in the key signature. * Fix problem with calculating the height of beamed notes when the top or bottom one is middle C. # Version 5.4.2 ## Bug fixes: * TimingCallbacks was reporting the end of the animation at the beginning of the last event - it now waits until the end of that event. # Version 5.4.1 ## Bug fixes: * Improve the decision on how to break lines in line wrapping. * Don't duplicate meter when wrapping lines. * Return the correct version of the tune when doing line wrapping. # Version 5.4.0 ## Features: * Add `preferredMeasuresPerLine` as a parameter to the line wrap. ## Bug fixes: * Improvements to the speed and stability of the line wrapping code. * Fix lyric placement on wrapped lines. * Fix the timing of whole rests in the TimingCallback. # Version 5.3.5 ## Features: * Always send start of measure event on TimingCallbacks, even if the measure starts with a tie. * Support ^8 and _8 for clefs. # Version 5.3.4 ## Bug fixes: * Fix crash when doing multi-stave music in wrap mode. # Version 5.3.3 ## Bug fixes: * Fix test for shrinking the only line when wrapping. # Version 5.3.2 ## Bug fixes: * Test all options in the `wrap` parameter for legal values. * Ignore the explicit line breaks when using `wrap`. * Get the amount of spacing more even on each line when using `wrap`. # Version 5.3.1 ## Bug fixes: * Don't require passing `scale` as a parameter to get the `wrap` parameter to work. # Version 5.3.0 ## Features * Add parameter `wrap: { minSpacing, onlyLineLimit, lastLineLimit }` and automatically calc num measures for each line. * When animating, return an array of start and end chars if there is more than one voice. * Add line and measure info into the TimingCallbacks for the convenience of the clients. * Don't require qpm to be passed to TimingCallbacks: look for a qpm in the music. * In TimingCallbacks, add a callback when it is near the end of a line. * Add `replaceTarget()` to the timing callback so that re-engraving can happen when the cursor is running. * Include the original abcString in the callback when rendering. * Allow multiple overlays in the same measure. * Add `%%tripletfont` directive. * Add unicode versions of flats and sharps in midi chords. * Support `%%MIDI beat` command. * Support `%%MIDI gchordoff` and `%%MIDI gchordon`. ## Bug fixes: * The tune positions were off by one because a newline is removed for each tune and was not counted. * Fix crash in `renderAbc` if the output container isn't an html element. * Fix default tempo in animation for compound meters to match the MIDI interpretation. * Refactored the animation to use the TimingCallbacks instead of duplicating code. * Fix a couple of bugs when sequencing elements for the TimingCallbacks and animation. * Center the time signature better (particularly 12/8). * Add extra space to the left of bar lines. * Add extra space to the width of a note when there is an accidental. * Lots of refactoring of the engraving code. * Fix crash when using `barsperstaff`. * Fix usage of `staffnonote` * In TimingCallbacks, make `extraMeasuresAtBeginning` default to 0. # Version 5.2.0 ## Features * Add a version of the plugin that supports midi. * Add getMeterFraction() convenience function. * Add a generic timer that provides callbacks in time with the music. * Small change to classes: add `abcjs-n...` to rests; add duration to triplet marks. ## Bug fixes: * Correct the speed of animation in 3/8 meter. * Fix accidentally creating a global variable. # Version 5.1.2 ## Bug fixes: * Fix horizontal spacing calculation for multiline text. # Version 5.1.1 ## Bug fixes: * Fix regression for having the SVG responsive. # Version 5.1.0 ## Bug fixes: * Fix bug with spacing triplets when the stem direction is not explicitly set. * Fix problem with sizing the music div when zooming. * Fix crash when clicking on the time signature. * Fix bug in beat detection in midi listener. ## Features * Add entry point for parseOnly(). * Expose midi.setRandomProgress(). * Expose midi.setLoop(). * Expose midi.restartPlay(). # Version 5.0.1 ## Bug fixes: * Comply with the Chrome change to not play audio unless the AudioContext is resumed inside a user interaction. # Version 5.0.0 ## Bug fixes: * Don't crash animation when there are invisible rests. * Don't crash when illegal value for scale is passed in. * Change guitar chord flat and sharp to the right symbols in a few more cases. * Begin to support mensural time signatures. ## Features * Remove dependency on Raphael. # Version 4.1.1 ## Bug fixes: * Fix double transposition of the key signature when transposition is specified in the parameters. # Version 4.1.0 ## Bug fixes: * When the perc clef is defined in the voice, add the midimap translation to the pitches (this was already being done when perc is in the key sig.) * Get lines with lots of notes to align properly. * Do more edge cases with triplets; fix some triplet bugs. * Double bar lines were messing up the place for the repeat to return to. * MIDI animation now follows tempo changes. * Don't get off on the midi animation when encountering a spacer type rest. * Be sure the div to be written to is empty before engraving. * When midi is redrawn, stop playing the old midi. * After calling midi's stopPlaying, reset the inline midi control. * Fix midi animation when there are no explicit 1st & 2nd ending marks. * Add fix for getting the Font Awesome 5 icons to show up in audio control; some cosmetic tweaks to large version on audio control. * Fix click listener in Editor mode. ## Features: * Allow "style=" parameter on V: line. * Add a spinner to the audio play button when the soundfonts are loading. * Allow rhythm slashes to be placed on rests. * Add feature to transpose a single voice, using "V: ... score=_B" * Add public function: midi.deviceSupportsMidi() * Add all the fonts to the directives that can be specified in the renderAbc call. # Version 4.0.1 ## Bug fixes: * Respect repeats in animation. * Fix crash when using metronome intro in minified version. # Version 4.0.0 ## Breaking Changes: * Don't generate classes unless requested. (This is a bug fix, but client code might mistakenly been relying on that behavior.) * Add "abcjs-" as a prefix to all class names that are generated. * Change the metronome track to use the Channel 10 sounds. ## Features: * Simplify the options used to call `renderAbc` and `renderMidi`. * Add clearer names for `clickListener`, `midiListener`, `midiTranspose`, and `visualTranspose`. * Implement "partsBox" * Add a few missing text encodings. * Handle "%%MIDI transpose" syntax. * Add a larger version of the audio control. ## Bug fixes: * Remove a few deprecated o