sky-studio-abc-js
v1.0.0
Published
A NodeJS package for reading .txt or .json files generated by sky studio.
Readme
sky-studio-abc.js
Read and write Sky Studio score files (.txt and .skysheet.json) from Node.js.
The API mirrors nbs.js: every section of
the score is its own class exposing a paired static deserialize and serialize.
Install
npm install sky-studio-abc.jsQuick start
const SkyStudioABC = require("sky-studio-abc.js");
// 1. Parse a .txt file (the "<DontCopyThisLine>" format)
const sheet = SkyStudioABC.deserialize("<DontCopyThisLine> 320 0 16 Unknown_a Unknown_a\n. . . B3B5C2 .\n");
// 2. Parse a .skysheet.json file (single sheet or an array of sheets)
const sheets = SkyStudioABC.deserialize(fs.readFileSync("song.skysheet.json", "utf-8"));
// 3. Serialize back to either format
sheet.serializeABC(); // -> .txt string
sheet.serializeJSON(); // -> JSON string
// 4. Play through the sixteenth-note grid
for (const tick of SkyStudioABC.createPlayer(sheet)) {
tick.tick; // grid position
tick.mask; // bitmask of notes sounding
tick.notes; // ["B3", "B5", "C2"] and so on
}deserialize sniffs the input automatically: JSON starts with { or [, the
.txt format starts with <.
API
The default export is the SkyStudioABC document class. The section classes are
also attached to it:
| Export | Description |
| --- | --- |
| SkyStudioABC | Top-level document — deserialize, serializeABC, serializeJSON, createPlayer |
| SkyStudioABC.SkyStudioHeader | Song metadata (bpm, pitchLevel, bitsPerPage, authors, rhythm) |
| SkyStudioABC.SkyStudioNote | One note with exact onset time (key, time, track) |
| SkyStudioABC.SkyStudioTick | One grid cell (tick, mask, notes) |
| SkyStudioABC.SkyStudioInstrument | A .skysheet.json instrument track |
| SkyStudioABC.SkyStudioPlayerIterator | Walks every tick, yielding empty cells as mask: 0 |
| SkyStudioABC.NOTES | The fifteen note names ("A1" … "C5") |
| SkyStudioABC.NOTE_INDEX | Reverse lookup, note name → bit index |
Main methods
SkyStudioABC.deserialize(input)— accept.txtstring, JSON string, or parsed object/array.SkyStudioABC.deserializeABC(input)/deserializeJSON(input)— the two formats directly.SkyStudioABC.createPlayer(sheet)— returns an iterator over the grid.sheet.serialize()— alias ofserializeABC().sheet.serializeABC()/sheet.serializeJSON(pretty?)— emit.txt/ JSON.sheet.notesToTicks()/sheet.ticksToNotes()— convert between exact-time notes and the quantised grid.
Data model
ticks— a dense sixteenth-note grid of bitmasks (one bit per note name).notes— exact-time notes (SkyStudioNote[]), used by the JSON format.header— metadata shared by both formats.
