Node JS module for generating guitar chord diagrams in SVG format. Interval names are shown inside the dotted positions.
A <defs>
element is written which contains the notes of the chord. This in turn can later be used by the user for audio previews etc.
<defs xmlns="http://www.w3.org/2000/svg" id="tonal">
<style id="SvgjsStyle1101"/>
<notes id="tonal-notes">C3:G3:B3:E4:G4</notes>
<semitones id="tonal-semitones">8:15:19:24:27</semitones>
<comment id="chord-comment"/>
</defs>
The GitHub page may contain more up to date code than the NPM release. Please check GitHub for the most recent updates.
It uses:
- SVG.js for SVG manipulation.
- svgdom to allow SVG.js to run server-side.
- tonal music theory library for determining the notes and intervals of defined chords.
You can see this library being used at https://chords.gock.net/
With npm
npm install chordy-svg --save
Create a node application test.js
. This will create a SVG diagram and write the contents to stdout.
const ChordySvg = require("chordy-svg");
const voicing = {
name: "Cmaj7",
shape: "x35453",
root: 2,
comment: "",
};
const svg = new ChordySvg(voicing);
const data = svg.svg();
process.stdout.write(data);
If you've cloned the library from GitHub instead of using NPM, you'll need to replace require('chordy-svg')
with the correct path, e.g require('./chordy-svg')
Create SVG and write to new file output.svg
node test.js > output.svg
chordy-svg.js
is found in dist/
and can be built with npm build
.
<div id="image"></div>
<script src="https://cdn.jsdelivr.net/npm/@tonaljs/[email protected]/browser/tonal.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/svg.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chordy-svg@latest/dist/chordy-svg.min.js"></script>
<script type="text/javascript">
// create new svg diagram
var element = document.getElementById("image");
var svg = new ChordySvg({ name: "Cmaj7", shape: "x35453", root: 2, comment: "Test comment" }, { target: element });
</script>
In the example above, we used:
const voicing = {
name: "Cmaj7",
shape: "x35453",
root: 2,
comment: "",
};
The properties for this object are:
name
is the name of the chord and will be displayed as a title in the SVGshape
is the shape of the chord, starting from the lowest / thickest string.x
: muted or skipped string.0
: open string (open strings not properly tested yet)[0-9a-f]
: hexadecimal value refers to fret position. e.gb
refers to fret position11
. Only up to fret position15
(hexf
) is permitted.
root
is the root string.0
refers to the lowest frequency / thickest string. On 6 string guitars with EADGBE tuning,5
refers to the high E string. In the generated diagram, the dot for this position will be coloured red by default.
A second parameter to the ChordySvg()
constructor may be used to set more custom parameters (documentation not complete yet).
For development and building from source, clone Git repo
git clone https://github.com/andygock/chordy-svg
cd chordy-svg
Run babel script which watches input file and writes to test/dist/chordy-svg.js
npm run start
You can view live updated output of browser with browser-sync
npm run serve:start
You can run further tests with Mocha for plain Node usage (this uses dist/chordy-svg.js
).
npm run mocha
You can view live updated directory listing of mocha test output with.
npm run serve:mocha
The serve:*
scripts are usually done concurrently with the start
or mocha
scripts.
Once all is tested well, build to dist/chordy-svg.js
, ready for publishing to npm.
npm run build
Run npm run clean
to delete all built files and generated SVG images from test/dist/
, test/output/
and dist/
Not fully tested for chords with open strings.