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/tonal@3.7.2/browser/tonal.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/svg.js@2.7.1/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:
nameis the name of the chord and will be displayed as a title in the SVGshapeis 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.gbrefers to fret position11. Only up to fret position15(hexf) is permitted.
rootis the root string.0refers to the lowest frequency / thickest string. On 6 string guitars with EADGBE tuning,5refers 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.