- Minor updates.
- Refactored and made improvements to
plot_fretboard()
andplot_chord()
including the addition offret_labels
andfret_offset
arguments. - Updated tests and documentation.
- Added required package alias in documentation.
- Various minor improvements, bug fixes, and updates, including for building against newer versions of LilyPond (see
tabr_lilypond_api()
). - General documentation updates.
- LilyPond API built and tested against a newer version of LilyPond (see
tabr_lilypond_api()
). - Minor fixes and documentation updates.
- Documentation updates: readme, help docs, new vignette.
- Bug fix for dyads in
freq_ratio()
. - Updated some generic method implementations required for working with
dplyr
1.0+.
- Added
freq_ratio()
generic for generating a data frame of frequency ratios from frequencies, noteworthy objects, or music objects. - Added utility functions for retrieving LilyPond version and installation directory and
tabr
LilyPond API details. - Fixed bug where multiple sharps in tuning broke tab staff string label LilyPond syntax.
- Updated documentation.
- Fixed
pitch_freq()
documentation error. - Fixed bug relating to multiple labels to
as_music()
. - Fixed bug where lyrics were not parsed correctly when rests present for music object rendering functions.
- Fixed bug where an explicitly added bar inside quotes failed due to a line break inside the string.
- Added better support for a variety of line breaks.
- The
bar
argument tophrase()
(and associated functions) is nowNULL
by default, or character, rather than simplyTRUE
orFALSE
. If a string is provided, it is interpreted as LilyPond bar notation. E.g.,bar = "|"
adds the LilyPond syntax\bar "|"
to the end of a phrase. - If only a bar check is desired,
TRUE
is still accepted and will insert a bar check only rather than a literal bar.FALSE
is treated asNULL
for completeness.
- The
- Handle extra whitespace in
pc()
andpn()
. - Fixed bug where final note in a scale was dropped by
scale_note()
. - Unit test updates.
- Documentation updates.
- Breaking change: major refactor of
track()
function. No more relative transposed keys. Now takes an explicitkey
argument that overrides the globalkey
from sheet music render functions. Other arguments simplified and rearranged. - Refactored many package functions. Most behavior unchanged, but some breaking changes were made based on intentional shifts in perspective about what some functions should do and how the user should interact with them. This included changes to function arguments as well as some redefinition of what certain functions do.
- Substantial code optimization was done, overhauling much of the package in the process.
- Vectorized functions that previously only operated note by note.
- Generalized functions that previously could accept notes but not chords, doing so on a case by case basis in ways that are meaningful and sensible for handling chords.
- Added new classes
noteinfo
to complementnoteworthy
and associated functions. - Added new class
music
which builds upon the combination ofnoteworthy
andnoteinfo
, similar in content tophrase
but maintaining the structure of the othertabr
classes for data manipulation and analysis. - Added implementations for several common R functions including primitives like
c
,length
,[
and more to be used with special classes available intabr
. - Added logical operator methods for the
noteworthy
class. - Refactored some basic metadata functions as generics to dispatch to the new classes rather than only working for
noteworthy
objects. For example,time_format
. - Added native triplet support in note info using the
t
-prefix, e.g.,4 4] t8 t8- t8^ 4
. Support extends tomusic
objects and now also tophrase()
, which alleviates reliance on thetriplet()
function and its limitations. - Added
lyrics
class that parallels the structure and behavior of the other classes; added associated functions and generic method implementations. - Added
lyrics
argument support tomusic
object construction and transformations. - Added lyrics argument to
track*
functions to support combining lyrics with an existingphrase
object. - Added
render_music*
functions for making simple sheet music snippets directly frommusic
objects. This abstracts thephrase() |> track() [|> trackbind()] |> score() |> render_*()
pipeline from the user for simpler music that is essentially a single voice, single track. - Added
plot_music*
function wrappers around correspondingrender_music*
functions to further abstract the external LilyPond process. - Added support for
render_music*
andplot_music*
functions to automatically handle lyrics contained in a music object. - Added support for auto-cropping of rendered sheet music when the output format is png.
- Added transparent background png support.
- Added a
colors
argument that takes a named list of color overrides forlilypond()
andrender_*
functions. - Added MIDI file read support (requires optional
tuneR
installation) and a set of functions for inspecting and manipulating the table of MIDI music data. - Added initial support for conversion of MIDI file input to
noteworthy
,noteinfo
,music
andphrase
classes so the MIDI data can be analyzed, transformed, edited and rendered to sheet music and a new MIDI file. - Added more functions for music data manipulation and analysis.
- Added more functions for mapping between noteworthy strings, phrase objects, and data frames.
- Added functions for summarizing times and durations in
noteinfo
andmusic
objects. - Added syntax converters
from_chorrrds()
(for chord output fromchorrrds
package) andfrom_music21()
, for converting other music notation syntax totabr
syntax. - Added
track_*
wrapper functions to provide better default track arguments for different instruments and use cases. - Added
render_tab()
alias totab()
for consistent naming, and other functionsrender_score()
andrender_midi()
as simpler wrappers aroundtab()
with appropriate fewer arguments and appropriate argument defaults. - Added new vignettes on syntax conversion and rendering chord charts.
- Updated vignettes, readme and other documentation.
- Made improvements to print method for phrase objects.
- Added
rests
argument to some note metadata functions. - Breaking change: Added support for many articulations. Some have abbreviated syntax options beginning with a hyphen:
-.
,--
,-+
, etc. Otherwise spelled out in bracketed text:-.
is the same as[staccato]
. The break is that the old form of staccato]
is no longer allowed. Switch to-.
or[staccato]
. The leading-
does not cause conflict with the single-
, which continues to represent slide notation. - No more need (or support for) the
s
-suffix string numbering. All instances of single string number inputs are assumed starting string and any additional strings are inferred consecutively. - Improvements to
plot_fretboard()
(renamed fromfretboard_plot
) and added wrapper functionplot_chord()
for more convenient chord diagrams. - Minor bug fixes.
- Significantly simplified LilyPond syntax for generated LilyPond files by adding
simplify_phrase()
and the new (default) argument tolilypond()
,simplify = TRUE
, which is also used by associatedrender_*
functions. - Thank you to
fnord-repeater
for several helpful suggestions and insights as well as example code that helped to make the transcription pipeline better. - Thank you to Han Oostdijk for additional bug fixes and improvements to the code for the transcription pipeline.
- Added alternate input specification for
sf_phrase()
. Instead of providing the first three function arguments,string
,fret
andinfo
, separately, you can now provide everything to the first inputstring
as a single character string containing all three components separated by semicolons. This makes it easier to reason about the input by time step rather than by argument. - Added chord helpers:
chord_root()
,chord_top()
,chord_slice()
,chord_is_major()
,chord_is_minor()
. - Added notation-frequency conversion helpers:
pitch_freq()
,freq_pitch()
and other related functions. - Added several more functions for inspecting and manipulating noteworthy strings.
- Code and documentation formatting and style overhaul based on stricter linting rules.
- Updated documentation and unit tests.
- Added
no_tab
argument totrack()
allowing for suppression of tab staff when music staff is included, e.g., for vocal tracks. no_tab
-associated documentation and unit test updates.- Deprecated
dup
andglue
. Now usepn
for repeating phrasesn
times andpc
for concatenating multiple phrases. - Updated documentation, examples, vignettes and unit tests.
- Minor bug fixes.
- Added
fretboard_plot
for making fretboard diagrams outside of the LilyPond tablature pipeline. This necessitates importingggplot2
. - Added functions for phrase validation, coercion and decomposition back to original character string inputs.
- Added functions for note, pitch, chord and octave equivalence checks.
- Added a collection of functions for constructing and working with common chords. The chord constructors are among the
chord_*
-named functions and also have shorterx*
-named aliases. These are "piano chords," i.e., based on the condensed, defining intervals. - Added
guitarChords
dataset containing several thousand formations of guitar chord voicings. - Added helper functions that use
guitarChords
for obtaining guitar chord information and mapping between different defining properties of a chord, most notably the addition ofgc_notes()
andgc_fretboard()
for mapping chord names to noteworthy strings and fretboard diagram syntax. - Added helper functions for working with basic note/pitch strings.
- Added helper functions for working with musical scales and modes.
- Added helper functions for working with musical intervals.
- Added
noteworthy
class, used internally, optional for users (includes custom print and summary methods). - Added
mainIntervals
dataset. - Added more internal checks of note and chord syntax validity across functions that work with string representations (pre-
phrase
object construction). - Update older functions to utilize the new, more robust and stricter validation checks and offer more consistent
noteworthy
class output. - updated
transpose()
to handle additional edge cases, including a new style option,strip
. - Updated and added new unit tests.
- Bug fix for case where
NA
-valued no-chord rests (s
orr
) were unnamed in output ofchord_set()
. - Fixed entry in
tabrSyntax
. - Fix class assignment bug and updated
as_phrase()
. - Added a new column of relative interval size to internal
.keydata
helper table. - Added new vignettes focusing on the programming aspect of
tabr
. - Updated documentation.
- Refactored
tuplet()
andtriplet()
to accept a phrase object as well as a character string of notes. Previously, only notes were accepted but this was too limiting. The argument name has changed to fromnotes
tox
andtuplet()
will now check the class ofx
and handle phrase objects accordingly. - Added handling of silent rests in note strings for
tuplet()
. sf_phrase()
andsfp()
updated to allow returning early with only the notes string as opposed to the entire phrase object. This is useful if you just want a quick, cleaner string representation of what notes are mapped by string/fret combinations.- Minor updates to
.onLoad
for non-Windows systems. - Removed
tibble
package dependency. Using onlydplyr
suffices. - Updated Readme and basic example intro vignette.
- Added and updated unit tests.
- Added
lintr
to Suggests field in DESCRIPTION per CRAN maintainer request regardingtestthat
unit tests.
- Unwrapped
lilypond()
example fromdontrun
tag. - Switched to
tempdir()
location for examples that write files. - Added LilyPond to SystemRequirements field in DESCRIPTION.
- Attempt to run file-writing examples and file-writing unit tests conditionally if LilyPond found on system.
Adjustments to meet requirements for CRAN resubmission:
- Updated DESCRIPTION.
- Adjusted file-writing locations for unit tests to use
tempdir
. - Add
dontrun
tag around one last file-writing package example that was usinglilypond()
. - Update
lilypond()
,tab()
,midily()
andmiditab()
to work with system calls that use absolute paths for output files instead of only working with relative paths.
- Added package scaffolding.
- Developed initial functions for music description and organization.
- Developed initial functions for generating LilyPond (
.ly
) files and wrapping around system calls to LilyPond for rendering sheet music to pdf or png. - Added readme with basic example.
- Added initial vignette content.
- Added unit tests.
- Added support for custom, non-standard guitar tunings and instruments with different numbers of strings, up to seven.
- Added
.mid
to.ly
and.mid
to tab output convenience functions. - Added support for multiple voices per staff.
- Added support for transposition of music staff relative to tablature staff.