← The Grind Piano

Third-party licenses

This app bundles the following open-source libraries in lib/. All are permissively licensed (MIT / BSD-3-Clause); its typefaces (below) are under the SIL Open Font License. No code was copied from Midiano or any non-open-source project.

Library Version License Use
OpenSheetMusicDisplay 2.1.3 BSD-3-Clause Music notation rendering + cursor
Tone.js 15.1.22 MIT Audio context, synth, scheduling primitives
@tonejs/midi 2.0.28 MIT MIDI file parsing
soundfont-player 0.2.1 MIT Optional sampled instruments
VexFlow (bundled inside OSMD) MIT Notation engraving engine used by OSMD
Gonville glyph outlines (VexFlow's copy, in OSMD) "The Gonville font files themselves may be used without restriction" (Simon Tatham) The clefs, sharp, flat, natural and whole note of the exercises' staff, copied into src/staff-view.js

Typefaces (2.5.1)

Since 2.5.1 the three typefaces are served with the app (fonts.css, fonts/) instead of from Google Fonts. The files are the Google Fonts builds as packaged by Fontsource — latin and latin-ext subsets, unchanged.

Typeface By Licence Files
Newsreader (with its optical-size axis) Production Type — The Newsreader Project Authors SIL Open Font License 1.1 fonts/newsreader-*.woff2; licence: fonts/OFL-Newsreader.txt
IBM Plex Sans IBM Corp. SIL Open Font License 1.1 fonts/ibm-plex-sans-*.woff2; licence: fonts/OFL-IBM-Plex-Sans.txt
IBM Plex Mono IBM Corp. SIL Open Font License 1.1 fonts/ibm-plex-mono-*.woff2; licence: fonts/OFL-IBM-Plex-Mono.txt

The licence asks that the copyright notice and the licence travel with the fonts (the fonts/OFL-*.txt files), and that the fonts are not sold on their own. None of the three declares a Reserved Font Name.

Statistics: the Firebase JavaScript SDK (2.5.1)

Not bundled. Only when a visitor chooses Accept in the statistics banner on thegrind.quest does the app load Google's Firebase JavaScript SDK 13.1.0 (Apache-2.0) from Google's own server (gstatic.com), and through it Google Analytics. What that collects is on the privacy page (privacy.html).

Piano and instrument samples

Sampled instrument audio comes from midi-js-soundfonts (gleitz's MIDI.js renderings of General-MIDI soundfonts). The app uses the MusyngKite set, "generated from Musyng Kite.sfpack", which that repository releases under the Creative Commons Attribution-ShareAlike 3.0 licence. The acoustic grand piano IS bundled, unchanged (lib/acoustic_grand_piano-mp3.js), so the app sounds like a piano offline; the other instruments (bright/electric piano, harpsichord, vibraphone, music box) are fetched at runtime from the same set. What the licence asks: this credit and the licence's name and link (here), and that the samples, if ever changed, be shared under the same licence; it allows commercial use. (2.2: this file used to call the samples "freely redistributable" without naming the licence or crediting the set — corrected.)

Spoken metronome counts (2.2)

lib/voices/en-f.js, en-m.js, ro-f.js and ro-m.js hold the words the metronome says ("one" … "eight", "and"; "unu" … "opt", "și"), in a woman's and a man's voice, one file a voice. They were synthesised once, offline, by tools/make-voices.py (which says how to make them again, with the model files' checksums), with:

Tool Licence Role
Kokoro-82M v1.0 (hexgrad), its ONNX fp16 export Apache-2.0 (the weights) The speech: a neural network that turns phonemes into sound. Its voices are style vectors; the two used are af_bella and am_michael.
kokoro-onnx 0.6.1 MIT Runs the model.
espeak-ng, through phonemizer GPL-3.0 Turns the English words into phonemes, and gave the Romanian phonemes written into the script. It makes none of the sound.

None of these programs is in the app, only the sound they made. The output of a program is not covered by the program's licence unless it copies part of the program into it (GNU's GPL FAQ), and Kokoro's sound is computed by the network, not cut from recordings; Apache-2.0 places no condition on what the model produces. Kokoro's authors state that it was trained only on permissive or non-copyrighted audio (public-domain audio, audio under Apache, MIT and similar licences, and synthetic audio from large providers' closed text-to-speech models), and list the CC BY audio in its data, credited here as they credit it: Koniwa (CC BY 3.0) and SIWIS (CC BY 4.0). That statement is theirs; it could not be checked from here.

The Romanian counts are spoken by the same two voices, given Romanian phonemes: Kokoro has no Romanian voice of its own, so a native listener may hear an accent. Each clip carries its measured perceptual onset, used to start the word early so that it lands on the beat.

Up to 2.1 the counts came from eSpeak NG with the MBROLA voices us1 and ro1. MBROLA's licence allows only "non-commercial, non-military purposes" and forbids its use in "any product which is sold without prior permission from the author": those clips were removed in 2.2.

OpenSheetMusicDisplay's built-in audio player is a sponsor-only feature and is not in the open-source build; this app drives playback and the cursor with its own transport instead.

The fingering algorithm in src/fingering.js (the ergonomic cost model of Parncutt, Sloboda, Clarke, Raekallio & Desain, 1997, with Jacobs' 2001 refinements, extended as documented in the file), the key-estimation and pitch-spelling code in src/theory.js (Krumhansl–Schmuckler profiles; PS13-style line-of-fifths spelling), and both converters (src/convert-midi-to-xml.js, src/convert-xml-to-midi.js) are original implementations of published, non-proprietary algorithms; no third-party conversion or fingering code is included.


BSD-3-Clause — OpenSheetMusicDisplay

Copyright 2019 PhonicScore

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE.


MIT — Tone.js, @tonejs/midi, soundfont-player, VexFlow

These components are released under the MIT License (full Tone.js and soundfont-player notices are in lib/Tone.js.LICENSE.txt and lib/soundfont-player.LICENSE.txt). The MIT License permits use, copying, modification, and distribution provided the copyright and permission notice are retained; the software is provided "as is", without warranty of any kind.